diff --git a/.changeset/fluffy-poems-switch.md b/.changeset/fluffy-poems-switch.md new file mode 100644 index 0000000..1e25994 --- /dev/null +++ b/.changeset/fluffy-poems-switch.md @@ -0,0 +1,5 @@ +--- +"rankify-js": minor +--- + +added script to locally bring up development enviroment diff --git a/.changeset/serious-suns-do.md b/.changeset/serious-suns-do.md new file mode 100644 index 0000000..7226f3f --- /dev/null +++ b/.changeset/serious-suns-do.md @@ -0,0 +1,5 @@ +--- +"rankify-js": major +--- + +adapted client library for rankify v0.10.0 release diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..972f978 --- /dev/null +++ b/.env.example @@ -0,0 +1,10 @@ +# Environment +NODE_ENV="TEST" + +# RPC URLs +FORK_RPC_URL="https://arb1.arbitrum.io/rpc" + +# Repository paths - update these to your local paths +RANKIFY_CONTRACTS_PATH="/path/to/rankify/contracts" +EDS_PATH="/path/to/eds" +MULTIPASS_PATH="/path/to/multipass" diff --git a/.github/setup/action.yml b/.github/setup/action.yml index 1ab300a..88d5fc4 100644 --- a/.github/setup/action.yml +++ b/.github/setup/action.yml @@ -1,8 +1,9 @@ name: setup +description: 'Setup the environment for the CI' runs: using: 'composite' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Install pnpm @@ -11,15 +12,15 @@ runs: version: 9 run_install: false - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 18.17.1 + node-version: lts/* cache: 'pnpm' - name: Get pnpm store directory shell: bash run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - uses: actions/cache@v3 + - uses: actions/cache@v4 name: Setup pnpm cache with: path: ${{ env.STORE_PATH }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..4a94646 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,26 @@ +name: CI +on: + pull_request: + branches: [main,staging] + types: [opened, reopened, labeled, synchronize] +env: + NODE_ENV: 'TEST' +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: './.github/setup' + - name: Building + run: pnpm build + - name: Linting + run: pnpm lint:ci + + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: './.github/setup' + + - name: Running tests + run: pnpm test:ci diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2712cdd..32009bf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,11 +17,11 @@ jobs: timeout-minutes: 20 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 - uses: "./.github/setup" with: - node-version: 18.x + node-version: lts/* - name: install dependencies run: pnpm install - name: build package diff --git a/.gitignore b/.gitignore index 0f7af7f..deebf2f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ node_modules .secrets /.idea/* .DS_Store +src/abis +.env +docs/ diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..9adddb1 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +node_modules +dist +coverage +.changeset +pnpm-lock.yaml diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..a9688b4 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,10 @@ +{ + "printWidth": 120, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": false, + "trailingComma": "es5", + "bracketSpacing": true, + "arrowParens": "always" +} diff --git a/README.md b/README.md index 9182718..6db6c61 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,92 @@ # SDK -This is SDK for use with Rankify game. You can use this to ease interaction with smart contracts \ No newline at end of file +This is SDK for use with Rankify game. You can ease interaction with smart contracts. + +## Prerequisites + +Before setting up the local development environment, ensure you have the following installed: + +1. **Node.js and pnpm** + ```bash + # Using homebrew + brew install node + npm install -g pnpm + ``` + +2. **Foundry (for Anvil)** + ```bash + curl -L https://foundry.paradigm.xyz | bash + foundryup + ``` + +3. **tmux** + ```bash + # Using homebrew + brew install tmux + ``` + +## Local Development Setup + +To set up your local development environment: + +1. Create your environment file: + ```bash + cp .env.example .env + ``` + Then edit `.env` to set your local repository paths. + +2. Set the required environment variables: + ```bash + export RANKIFY_CONTRACTS_PATH="/path/to/rankify/contracts" + export EDS_PATH="/path/to/eds" + export MULTIPASS_PATH="/path/to/multipass" + ``` + +3. Make the setup script executable: + ```bash + chmod +x scripts/setup-local-dev.sh + ``` + +4. Run the setup script: + ```bash + ./scripts/setup-local-dev.sh + ``` + +This will: +- Start a local Anvil development network in a tmux session (or use existing one if running) +- Install dependencies for all repositories +- Run local deployment scripts (`playbook/utils/deploy-to-local-anvil.sh`) in each repository +- Set up local pnpm links between packages + +The script uses a fixed mnemonic for consistent addresses across runs. + +### Managing Anvil + +- View Anvil logs: `tmux attach -t anvil` +- Detach from logs: Press `Ctrl+B` then `D` +- Stop Anvil: `tmux kill-session -t anvil` + +## Documentation + +The SDK comes with comprehensive API documentation generated using TypeDoc. The documentation is automatically generated during the package build process and is included in the npm package. + +### Generating Documentation + +To generate the documentation locally: + +```bash +pnpm run docs +``` + +This will create a `docs` directory with the generated documentation. + +For development, you can use the watch mode: + +```bash +pnpm run docs:watch +``` + +### Accessing Documentation + +- **Local Development**: Open `docs/index.html` in your browser after generating the documentation +- **Published Package**: Documentation is available through the npm package page diff --git a/eslint.config.mjs b/eslint.config.mjs index 8453519..d6f398b 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,46 +1,46 @@ -import promise from "eslint-plugin-promise"; -import globals from "globals"; -import tsParser from "@typescript-eslint/parser"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; import js from "@eslint/js"; -import { FlatCompat } from "@eslint/eslintrc"; -import prettier from "eslint-plugin-prettier"; +import tseslint from "typescript-eslint"; +import prettierConfig from "eslint-config-prettier"; -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all, -}); - -export default [ +export default tseslint.config( + js.configs.recommended, + ...tseslint.configs.recommended, + prettierConfig, { - ignores: ["deployments/", "coverage/**", "docs/templates/", "**/node_modules/"], + // Base configuration for all files + ignores: ["**/node_modules/**", "**/dist/**", "src/abis/*.ts", "scripts", "copyPackageFile.js"], }, - ...compat.extends("eslint:recommended", "plugin:promise/recommended", "prettier"), { plugins: { - promise, - prettier, // Add Prettier plugin + "@typescript-eslint": tseslint.plugin, }, + // TypeScript files configuration + files: ["**/*.ts"], languageOptions: { - globals: { - ...globals.browser, - ...globals.node, - ...globals.mocha, - artifacts: "readonly", - contract: "readonly", - assert: "readonly", - web3: "readonly", + parserOptions: { + project: ["./tsconfig.json", "./tsconfig.test.json"], + tsconfigRootDir: ".", }, - parser: tsParser, }, rules: { - "no-unused-vars": "warn", - "prettier/prettier": "error", // Add Prettier as an ESLint rule + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/no-unsafe-member-access": "warn", + "@typescript-eslint/no-unsafe-call": "warn", + "@typescript-eslint/await-thenable": "warn", + "@typescript-eslint/no-unsafe-assignment": "warn", + "@typescript-eslint/no-require-imports": "off", }, - files: ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"], }, -]; + { + // JavaScript files configuration + files: ["**/*.js", "**/*.mjs", "**/*.cjs"], + ignores: ["src/**/*.ts", "**/node_modules/**", "**/dist/**"], + extends: [tseslint.configs.disableTypeChecked], + languageOptions: { + sourceType: "module", + }, + rules: { + // Add JavaScript-specific rules here if needed + }, + } +); diff --git a/jest.config.mjs b/jest.config.mjs new file mode 100644 index 0000000..5755624 --- /dev/null +++ b/jest.config.mjs @@ -0,0 +1,18 @@ +/** @type {import('jest').Config} */ +export default { + preset: "ts-jest/presets/default-esm", + testEnvironment: "node", + extensionsToTreatAsEsm: [".ts"], + moduleNameMapper: { + "^(\\.{1,2}/.*)\\.js$": "$1", + }, + transform: { + "^.+\\.tsx?$": [ + "ts-jest", + { + useESM: true, + }, + ], + }, + moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], +}; diff --git a/package.json b/package.json index 28d5698..37a25d4 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@peeramid-labs/sdk", + "name": "rankify-js", "description": "Peeramid Labs js client library", "version": "1.1.0", "private": "true", @@ -22,45 +22,56 @@ } }, "scripts": { - "lint:fix": "prettier --write '**/*.ts' && eslint --fix --no-ignore", - "lint": "eslint", - "prebuild": "jq '.type = \"commonjs\"' package.json > temp.json && mv temp.json package.json", + "lint:fix": "prettier --write 'src/**/*.{ts,js}' && eslint --fix .", + "lint": "eslint .", + "generate-chain-mapping": "node ./scripts/generateChainMapping.mjs", + "prebuild": "pnpm generate-chain-mapping && node scripts/copyAbi.cjs && jq '.type = \"commonjs\"' package.json > temp.json && mv temp.json package.json", "build-esm": "tsc --project tsconfig.esm.json", "build-all": "pnpm run build-commonjs && pnpm run build-esm", "build-commonjs": "tsc --project tsconfig.commonjs.json", - "build": "pnpm build-all && node ./copyPackageFile.js prod", + "build": "pnpm build-all && node ./scripts/copyPackageFile.cjs prod", "postbuild": "jq '.type = \"module\"' package.json > temp.json && mv temp.json package.json && cp README.md dist && cp -r .changeset ./dist/.changeset && prettier --write \"dist/**/*.{ts,js,json}\" && cd ./dist && pnpm install", "dist": "changeset && changeset version && pnpm build && cp -r .changeset ./dist && cd dist && pnpm changeset publish", "version": "changeset version", - "release": "pnpm build && cd ./dist && changeset publish" + "release": "pnpm build && cd ./dist && changeset publish", + "test": "jest", + "test:ci": "pnpm generate-chain-mapping && node scripts/copyAbi.cjs && pnpm jest", + "test:watch": "jest --watch", + "lint:ci": "pnpm generate-chain-mapping && node scripts/copyAbi.cjs && pnpm lint", + "docs": "typedoc", + "docs:watch": "typedoc --watch", + "prepublishOnly": "pnpm run build && pnpm run docs" }, "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@nomiclabs/hardhat-ethers": "^2.2.3", - "@peeramid-labs/multipass": "^0.3.1", - "@peersky/eth-auth": "^2.0.0", + "@peeramid-labs/eds": "^2.2.0", + "@peeramid-labs/multipass": "^0.3.2", "crypto-js": "^4.1.1", - "ethers": "^5.0.0", "lodash": "^4.17.21", - "rankify-contracts": "^0.9.3", - "typescript": "^5.0.4" + "rankify-contracts": "^0.10.1", + "viem": "^2.21.54" }, "devDependencies": { "@changesets/changelog-github": "^0.4.8", "@changesets/cli": "^2.26.2", - "@peersky/eth-auth": "^2.0.0", + "@eslint/js": "^8.56.0", + "@jest/globals": "^29.7.0", "@types/crypto-js": "^4.1.3", - "globals": "^15.9.0", - "@typescript-eslint/eslint-plugin": "^6.6.0", - "@typescript-eslint/parser": "^8.4.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^9.9.1", - "eslint": "^9.9.1", - "eslint-plugin-prettier": "^5.2.1", + "@types/jest": "^29.5.11", + "@types/node": "^20.10.5", + "@typescript-eslint/eslint-plugin": "^8.18.0", + "@typescript-eslint/parser": "^8.18.0", + "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-promise": "^7.1.0", - "eslint-plugin-unused-imports": "^3.0.0", + "eslint-plugin-jest": "^28.9.0", + "globals": "^15.9.0", + "jest": "^29.7.0", "prettier": "^3.3.3", - "typescript": "^5.0.4" + "ts-jest": "^29.1.1", + "ts-node": "^10.9.2", + "typescript": "^5.7.2", + "typescript-eslint": "^8.18.0", + "typedoc": "^0.25.7", + "typedoc-plugin-markdown": "^3.17.1", + "typedoc-theme-hierarchy": "^4.1.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf541a7..5a0769d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,162 +8,317 @@ importers: .: dependencies: - '@ethersproject/abi': - specifier: ^5.7.0 - version: 5.7.0 - '@nomiclabs/hardhat-ethers': - specifier: ^2.2.3 - version: 2.2.3(ethers@5.7.2)(hardhat@2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2)) + '@peeramid-labs/eds': + specifier: ^2.2.0 + version: 2.2.2(hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2)) '@peeramid-labs/multipass': - specifier: ^0.3.1 - version: 0.3.1(hardhat@2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2)) - '@peersky/eth-auth': - specifier: ^2.0.0 - version: 2.1.1 + specifier: ^0.3.2 + version: 0.3.2(hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2)) crypto-js: specifier: ^4.1.1 version: 4.2.0 - ethers: - specifier: ^5.0.0 - version: 5.7.2 lodash: specifier: ^4.17.21 version: 4.17.21 rankify-contracts: - specifier: ^0.9.3 - version: 0.9.4(hardhat@2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2)) - typescript: - specifier: ^5.0.4 - version: 5.3.2 + specifier: ^0.10.1 + version: 0.10.1(ethers@5.7.2)(hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2)) + viem: + specifier: ^2.21.54 + version: 2.21.54(typescript@5.7.2) devDependencies: '@changesets/changelog-github': specifier: ^0.4.8 version: 0.4.8 '@changesets/cli': specifier: ^2.26.2 - version: 2.26.2 - '@eslint/eslintrc': - specifier: ^3.1.0 - version: 3.1.0 + version: 2.27.10 '@eslint/js': - specifier: ^9.9.1 - version: 9.14.0 + specifier: ^8.56.0 + version: 8.57.1 + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/crypto-js': specifier: ^4.1.3 - version: 4.2.1 + version: 4.2.2 + '@types/jest': + specifier: ^29.5.11 + version: 29.5.14 + '@types/node': + specifier: ^20.10.5 + version: 20.17.10 '@typescript-eslint/eslint-plugin': - specifier: ^6.6.0 - version: 6.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.3.2))(eslint@9.14.0)(typescript@5.3.2) + specifier: ^8.18.0 + version: 8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) '@typescript-eslint/parser': - specifier: ^8.4.0 - version: 8.13.0(eslint@9.14.0)(typescript@5.3.2) + specifier: ^8.18.0 + version: 8.18.0(eslint@8.57.1)(typescript@5.7.2) eslint: - specifier: ^9.9.1 - version: 9.14.0 + specifier: ^8.56.0 + version: 8.57.1 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.14.0) - eslint-plugin-prettier: - specifier: ^5.2.1 - version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.14.0))(eslint@9.14.0)(prettier@3.3.3) - eslint-plugin-promise: - specifier: ^7.1.0 - version: 7.1.0(eslint@9.14.0) - eslint-plugin-unused-imports: - specifier: ^3.0.0 - version: 3.0.0(@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.3.2))(eslint@9.14.0)(typescript@5.3.2))(eslint@9.14.0) + version: 9.1.0(eslint@8.57.1) + eslint-plugin-jest: + specifier: ^28.9.0 + version: 28.9.0(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2) globals: specifier: ^15.9.0 - version: 15.12.0 + version: 15.13.0 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) prettier: specifier: ^3.3.3 - version: 3.3.3 + version: 3.4.2 + ts-jest: + specifier: ^29.1.1 + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.17.10)(typescript@5.7.2) + typedoc: + specifier: ^0.25.7 + version: 0.25.13(typescript@5.7.2) + typedoc-plugin-markdown: + specifier: ^3.17.1 + version: 3.17.1(typedoc@0.25.13(typescript@5.7.2)) + typedoc-theme-hierarchy: + specifier: ^4.1.2 + version: 4.1.3(typedoc@0.25.13(typescript@5.7.2)) + typescript: + specifier: ^5.7.2 + version: 5.7.2 + typescript-eslint: + specifier: ^8.18.0 + version: 8.18.0(eslint@8.57.1)(typescript@5.7.2) packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} + '@adraffy/ens-normalize@1.11.0': + resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.3': + resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.3': + resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/code-frame@7.23.4': - resolution: {integrity: sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==} + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/highlight@7.23.4': - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/runtime@7.23.4': - resolution: {integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==} + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@chainsafe/as-sha256@0.3.1': - resolution: {integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} - '@chainsafe/persistent-merkle-tree@0.4.2': - resolution: {integrity: sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} - '@chainsafe/persistent-merkle-tree@0.5.0': - resolution: {integrity: sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==} + '@babel/traverse@7.26.4': + resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} + engines: {node: '>=6.9.0'} - '@chainsafe/ssz@0.10.2': - resolution: {integrity: sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==} + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + engines: {node: '>=6.9.0'} - '@chainsafe/ssz@0.9.4': - resolution: {integrity: sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@changesets/apply-release-plan@6.1.4': - resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} + '@changesets/apply-release-plan@7.0.6': + resolution: {integrity: sha512-TKhVLtiwtQOgMAC0fCJfmv93faiViKSDqr8oMEqrnNs99gtSC1sZh/aEMS9a+dseU1ESZRCK+ofLgGY7o0fw/Q==} - '@changesets/assemble-release-plan@5.2.4': - resolution: {integrity: sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==} + '@changesets/assemble-release-plan@6.0.5': + resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==} - '@changesets/changelog-git@0.1.14': - resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} + '@changesets/changelog-git@0.2.0': + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} '@changesets/changelog-github@0.4.8': resolution: {integrity: sha512-jR1DHibkMAb5v/8ym77E4AMNWZKB5NPzw5a5Wtqm1JepAuIF+hrKp2u04NKM14oBZhHglkCfrla9uq8ORnK/dw==} - '@changesets/cli@2.26.2': - resolution: {integrity: sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==} + '@changesets/cli@2.27.10': + resolution: {integrity: sha512-PfeXjvs9OfQJV8QSFFHjwHX3QnUL9elPEQ47SgkiwzLgtKGyuikWjrdM+lO9MXzOE22FO9jEGkcs4b+B6D6X0Q==} hasBin: true - '@changesets/config@2.3.1': - resolution: {integrity: sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==} + '@changesets/config@3.0.4': + resolution: {integrity: sha512-+DiIwtEBpvvv1z30f8bbOsUQGuccnZl9KRKMM/LxUHuDu5oEjmN+bJQ1RIBKNJjfYMQn8RZzoPiX0UgPaLQyXw==} - '@changesets/errors@0.1.4': - resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - '@changesets/get-dependents-graph@1.3.6': - resolution: {integrity: sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==} + '@changesets/get-dependents-graph@2.1.2': + resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} '@changesets/get-github-info@0.5.2': resolution: {integrity: sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==} - '@changesets/get-release-plan@3.0.17': - resolution: {integrity: sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==} + '@changesets/get-release-plan@4.0.5': + resolution: {integrity: sha512-E6wW7JoSMcctdVakut0UB76FrrN3KIeJSXvB+DHMFo99CnC3ZVnNYDCVNClMlqAhYGmLmAj77QfApaI3ca4Fkw==} - '@changesets/get-version-range-type@0.3.2': - resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - '@changesets/git@2.0.0': - resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} + '@changesets/git@3.0.2': + resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} - '@changesets/logger@0.0.5': - resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} - '@changesets/parse@0.3.16': - resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} + '@changesets/parse@0.4.0': + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} - '@changesets/pre@1.0.14': - resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} + '@changesets/pre@2.0.1': + resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} - '@changesets/read@0.5.9': - resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} + '@changesets/read@0.6.2': + resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==} + + '@changesets/should-skip-package@0.1.1': + resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} '@changesets/types@4.1.0': resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} @@ -171,50 +326,33 @@ packages: '@changesets/types@5.2.1': resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} - '@changesets/write@0.2.3': - resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} + '@changesets/types@6.0.0': + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + + '@changesets/write@0.3.2': + resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.18.0': - resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.7.0': - resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.1.0': - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.14.0': - resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/plugin-kit@0.2.2': - resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@ethersproject/abi@5.7.0': resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} @@ -310,32 +448,110 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@humanwhocodes/retry@0.4.1': - resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} - engines: {node: '>=18.18'} + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -350,9 +566,21 @@ packages: resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} engines: {node: '>=12.0.0'} + '@noble/curves@1.7.0': + resolution: {integrity: sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==} + engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.2.0': resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + '@noble/hashes@1.6.0': + resolution: {integrity: sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.6.1': + resolution: {integrity: sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==} + engines: {node: ^14.21.3 || >=16} + '@noble/secp256k1@1.7.1': resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} @@ -368,48 +596,63 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nomicfoundation/ethereumjs-block@5.0.2': - resolution: {integrity: sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==} - engines: {node: '>=14'} + '@nomicfoundation/edr-darwin-arm64@0.6.5': + resolution: {integrity: sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-blockchain@7.0.2': - resolution: {integrity: sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==} - engines: {node: '>=14'} + '@nomicfoundation/edr-darwin-x64@0.6.5': + resolution: {integrity: sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-common@4.0.2': - resolution: {integrity: sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==} + '@nomicfoundation/edr-linux-arm64-gnu@0.6.5': + resolution: {integrity: sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-ethash@3.0.2': - resolution: {integrity: sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==} - engines: {node: '>=14'} + '@nomicfoundation/edr-linux-arm64-musl@0.6.5': + resolution: {integrity: sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-evm@2.0.2': - resolution: {integrity: sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==} - engines: {node: '>=14'} + '@nomicfoundation/edr-linux-x64-gnu@0.6.5': + resolution: {integrity: sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-rlp@5.0.2': - resolution: {integrity: sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==} - engines: {node: '>=14'} - hasBin: true + '@nomicfoundation/edr-linux-x64-musl@0.6.5': + resolution: {integrity: sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-statemanager@2.0.2': - resolution: {integrity: sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==} + '@nomicfoundation/edr-win32-x64-msvc@0.6.5': + resolution: {integrity: sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-trie@6.0.2': - resolution: {integrity: sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==} - engines: {node: '>=14'} + '@nomicfoundation/edr@0.6.5': + resolution: {integrity: sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng==} + engines: {node: '>= 18'} - '@nomicfoundation/ethereumjs-tx@5.0.2': - resolution: {integrity: sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==} - engines: {node: '>=14'} + '@nomicfoundation/ethereumjs-common@4.0.4': + resolution: {integrity: sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==} - '@nomicfoundation/ethereumjs-util@9.0.2': - resolution: {integrity: sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==} - engines: {node: '>=14'} + '@nomicfoundation/ethereumjs-rlp@5.0.4': + resolution: {integrity: sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==} + engines: {node: '>=18'} + hasBin: true - '@nomicfoundation/ethereumjs-vm@7.0.2': - resolution: {integrity: sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==} - engines: {node: '>=14'} + '@nomicfoundation/ethereumjs-tx@5.0.4': + resolution: {integrity: sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==} + engines: {node: '>=18'} + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + + '@nomicfoundation/ethereumjs-util@9.0.4': + resolution: {integrity: sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==} + engines: {node: '>=18'} + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==} @@ -443,45 +686,43 @@ packages: resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==} engines: {node: '>= 12'} - '@nomiclabs/hardhat-ethers@2.2.3': - resolution: {integrity: sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==} - peerDependencies: - ethers: ^5.0.0 - hardhat: ^2.0.0 - - '@openzeppelin/contracts-upgradeable@4.9.6': - resolution: {integrity: sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA==} - '@openzeppelin/contracts-upgradeable@5.1.0': resolution: {integrity: sha512-AIElwP5Ck+cslNE+Hkemf5SxjJoF4wBvvjxc27Rp+9jaPs/CLIaUBMYe1FNzhdiN0cYuwGRmYaRHmmntuiju4Q==} peerDependencies: '@openzeppelin/contracts': 5.1.0 - '@openzeppelin/contracts@4.9.6': - resolution: {integrity: sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==} - '@openzeppelin/contracts@5.1.0': resolution: {integrity: sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==} - '@peeramid-labs/multipass@0.3.1': - resolution: {integrity: sha512-3QZqOlnxXdF7b8b+8HCY/bwK8EO8DgD6dRHNi5Cv5UHoEFW/ZwVRqVqCK2/TWofPwkB+gUulNNmKJ5U99Ek2CQ==} + '@peeramid-labs/eds@2.2.2': + resolution: {integrity: sha512-1vE5L/lmHZW0PQLOXDtaJHsuQAgdM6FEHOUCHfjwAqc5ONjVkQVK2zfwsk4mhCtViX/ix3Ld0TlGgAc1N3MbSg==} + + '@peeramid-labs/multipass@0.3.2': + resolution: {integrity: sha512-pux+6crTfTxxyTTtIXbw9m+5aK7+yHWKhFVCBB2ETh9W+yhJW53VKqlxxiav1nANn+WXV6rWGjCKl+R23OiSkA==} - '@peersky/eth-auth@2.1.1': - resolution: {integrity: sha512-vhz2IoSsYyiEL/wBtP250LGj1gwB4zsKelq4pAGG4woqb7EREM6V1lHG5kWIwtepGygAo/SwHK8DC5tEMXcWVQ==} + '@safe-global/safe-contracts@1.4.1-build.0': + resolution: {integrity: sha512-TIpoKJtMqLcLFoid0cvpxo8YTcnRUj95MHvxzwgPbJPRONOckNS6ebgGyBBRDmnpxFh34IBpPUZ7JD+z2Cfbbg==} + peerDependencies: + ethers: 5.4.0 - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} - '@scure/base@1.1.3': - resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} + '@scure/base@1.2.1': + resolution: {integrity: sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==} '@scure/bip32@1.1.5': resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} + '@scure/bip32@1.6.0': + resolution: {integrity: sha512-82q1QfklrUUdXJzjuRU7iG7D7XiFx5PHYVS0+oeNKhyDLT7WPqs6pBcM2W5ZdwOwKCwoE1Vy1se+DHjcXwCYnA==} + '@scure/bip39@1.1.1': resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} + '@scure/bip39@1.5.0': + resolution: {integrity: sha512-Dop+ASYhnrwm9+HA/HwXg7j2ZqM6yk2fyLWb5znexjctFY3+E+eU8cIWI0Pql0Qx4hPZCijlGq4OL71g+Uz30A==} + '@sentry/core@5.30.0': resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} engines: {node: '>=6'} @@ -510,11 +751,20 @@ packages: resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} engines: {node: '>=6'} + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@solidity-parser/parser@0.14.5': resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} - '@tsconfig/node10@1.0.9': - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} '@tsconfig/node12@1.0.11': resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} @@ -525,6 +775,18 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/bn.js@4.11.6': resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} @@ -537,27 +799,30 @@ packages: '@types/concat-stream@1.6.1': resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} - '@types/crypto-js@4.2.1': - resolution: {integrity: sha512-FSPGd9+OcSok3RsM0UZ/9fcvMOXJ1ENE/ZbLfOPlBWj7BgXtEAM8VYfTtT760GiLbQIMoVozwVuisjvsVwqYWw==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/crypto-js@4.2.2': + resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} '@types/form-data@0.0.33': resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} - '@types/is-ci@3.0.4': - resolution: {integrity: sha512-AkCYCmwlXeuH89DagDCzvCAyltI2v9lh3U3DqSg/GrBYoReAaWwxfXCqMx9UV5MajLZ4ZFwZzV4cABGIxk2XRw==} + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} '@types/lru-cache@5.1.1': resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/mocha@9.1.1': resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} @@ -570,120 +835,98 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.9.0': - resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + '@types/node@20.17.10': + resolution: {integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==} '@types/node@8.10.66': resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/pbkdf2@3.1.2': resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} '@types/qs@6.9.17': resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} - '@types/readable-stream@2.3.15': - resolution: {integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==} - '@types/secp256k1@4.0.6': resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} - '@types/semver@7.5.6': - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@typescript-eslint/eslint-plugin@6.12.0': - resolution: {integrity: sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@typescript-eslint/parser@8.13.0': - resolution: {integrity: sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==} + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@typescript-eslint/eslint-plugin@8.18.0': + resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@6.12.0': - resolution: {integrity: sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/parser@8.18.0': + resolution: {integrity: sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.13.0': - resolution: {integrity: sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==} + '@typescript-eslint/scope-manager@8.18.0': + resolution: {integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@6.12.0': - resolution: {integrity: sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/type-utils@8.18.0': + resolution: {integrity: sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@6.12.0': - resolution: {integrity: sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@8.18.0': + resolution: {integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.13.0': - resolution: {integrity: sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==} + '@typescript-eslint/typescript-estree@8.18.0': + resolution: {integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/typescript-estree@6.12.0': - resolution: {integrity: sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/utils@8.18.0': + resolution: {integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/typescript-estree@8.13.0': - resolution: {integrity: sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==} + '@typescript-eslint/visitor-keys@8.18.0': + resolution: {integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.2.1': + resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} + + abitype@1.0.7: + resolution: {integrity: sha512-ZfYYSktDQUwc2eduYu8C4wOs+RDPmnRYMh7zNfzeMtGGgb0U+6tLGjixUic6mXf5xKKCcgT5Qp6cv39tOARVFw==} peerDependencies: - typescript: '*' + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 peerDependenciesMeta: typescript: optional: true - - '@typescript-eslint/utils@6.12.0': - resolution: {integrity: sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@6.12.0': - resolution: {integrity: sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/visitor-keys@8.13.0': - resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - abstract-level@1.0.4: - resolution: {integrity: sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==} - engines: {node: '>=12'} + zod: + optional: true acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.0: - resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} acorn@8.14.0: @@ -709,6 +952,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -725,14 +971,17 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-sequence-parser@1.1.1: + resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + antlr4ts@0.5.0-alpha.4: resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} @@ -749,9 +998,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -760,30 +1006,42 @@ packages: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} engines: {node: '>=0.10.0'} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} - - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 - axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -791,9 +1049,6 @@ packages: base-x@3.0.10: resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - bech32@1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} @@ -801,23 +1056,23 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - bigint-crypto-utils@3.3.0: - resolution: {integrity: sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==} - engines: {node: '>=14.0.0'} - - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} blakejs@1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} - bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -828,55 +1083,55 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - breakword@1.0.6: - resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} - brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - browser-level@1.0.1: - resolution: {integrity: sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==} - browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} bs58check@2.1.2: resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -885,25 +1140,20 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - case@1.6.3: - resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} - engines: {node: '>= 0.8.0'} + caniuse-lite@1.0.30001687: + resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - catering@2.1.1: - resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} - engines: {node: '>=6'} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -914,6 +1164,10 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} @@ -921,17 +1175,21 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + cipher-base@1.0.6: + resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} + engines: {node: '>= 0.10'} - classic-level@1.4.1: - resolution: {integrity: sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==} - engines: {node: '>=12'} + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} + cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + cli-table3@0.5.1: resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} engines: {node: '>=6'} @@ -940,9 +1198,6 @@ packages: resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} engines: {node: '>= 0.2.0'} - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -950,20 +1205,17 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -982,8 +1234,9 @@ packages: command-exists@1.2.9: resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} - commander@3.0.2: - resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -992,6 +1245,9 @@ packages: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} @@ -999,25 +1255,22 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} crypt@0.0.2: @@ -1026,24 +1279,11 @@ packages: crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - csv-generate@3.4.3: - resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - - csv-parse@4.16.3: - resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - - csv-stringify@5.6.5: - resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - - csv@5.5.3: - resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} - engines: {node: '>= 0.1.90'} - dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1051,36 +1291,29 @@ packages: supports-color: optional: true - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1093,6 +1326,14 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -1105,15 +1346,35 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} + dunder-proto@1.0.0: + resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} + engines: {node: '>= 0.4'} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.73: + resolution: {integrity: sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==} + elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} - elliptic@6.6.0: - resolution: {integrity: sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==} + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1129,36 +1390,21 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} @@ -1170,43 +1416,22 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-prettier@5.2.1: - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-plugin-promise@7.1.0: - resolution: {integrity: sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-plugin-jest@28.9.0: + resolution: {integrity: sha512-rLu1s1Wf96TgUUxSw6loVIkNtUjq1Re7A9QdCCHSohnvXEBAjuL420h0T/fMmkQlNsQP2GhQzEUpYHPfxBkvYQ==} + engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} peerDependencies: + '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - - eslint-plugin-unused-imports@3.0.0: - resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^6.0.0 - eslint: ^8.0.0 + jest: '*' peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true + jest: + optional: true - eslint-rule-composer@0.3.0: - resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} - engines: {node: '>=4.0.0'} - - eslint-scope@8.2.0: - resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} @@ -1216,27 +1441,23 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.14.0: - resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -1279,9 +1500,24 @@ packages: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} engines: {node: '>=6.5.0', npm: '>=3'} + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -1292,9 +1528,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -1305,21 +1538,31 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -1328,19 +1571,16 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} @@ -1351,9 +1591,6 @@ packages: debug: optional: true - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - form-data@2.5.2: resolution: {integrity: sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==} engines: {node: '>= 0.12'} @@ -1365,8 +1602,9 @@ packages: fp-ts@1.19.3: resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} - fs-extra@0.30.0: - resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} + fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} @@ -1390,34 +1628,29 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functional-red-black-tree@1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + get-intrinsic@1.2.5: + resolution: {integrity: sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==} engines: {node: '>= 0.4'} + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + get-port@3.2.0: resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} engines: {node: '>=4'} - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -1427,10 +1660,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - deprecated: Glob versions prior to v9 are no longer supported - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -1440,45 +1669,44 @@ packages: engines: {node: '>=12'} deprecated: Glob versions prior to v9 are no longer supported - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} - globals@15.12.0: - resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==} - engines: {node: '>=18'} + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globals@15.13.0: + resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + engines: {node: '>=18'} globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true hardhat-gas-reporter@1.0.10: resolution: {integrity: sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==} peerDependencies: hardhat: ^2.0.2 - hardhat@2.19.1: - resolution: {integrity: sha512-bsWa63g1GB78ZyMN08WLhFElLPA+J+pShuKD1BFO2+88g3l+BL3R07vj9deIi9dMbssxgE714Gof1dBEDGqnCw==} + hardhat@2.22.17: + resolution: {integrity: sha512-tDlI475ccz4d/dajnADUTRc1OJ3H8fpP9sWhXhBPpYsQOg8JHq5xrDimo53UhWPl7KJmAeDCm1bFG74xvpGRpg==} hasBin: true peerDependencies: ts-node: '*' @@ -1489,33 +1717,15 @@ packages: typescript: optional: true - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} hash-base@3.1.0: @@ -1525,8 +1735,8 @@ packages: hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} he@1.2.0: @@ -1536,8 +1746,8 @@ packages: hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} http-basic@8.1.3: resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} @@ -1557,15 +1767,16 @@ packages: human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} immutable@4.3.7: @@ -1575,6 +1786,11 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -1590,47 +1806,18 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} - io-ts@1.10.4: resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} - is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} is-extglob@2.1.1: @@ -1645,6 +1832,10 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1653,56 +1844,30 @@ packages: resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} engines: {node: '>=6.5.0', npm: '>=3'} - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -1710,14 +1875,171 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - js-sdsl@4.4.2: - resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} + isows@1.0.6: + resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==} + peerDependencies: + ws: '*' + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} @@ -1733,6 +2055,11 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -1745,12 +2072,24 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - jsonfile@2.4.0: - resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} + json-stream-stringify@3.1.6: + resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==} + engines: {node: '>=7.10.1'} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + keccak@3.0.4: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} @@ -1758,28 +2097,13 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - - klaw@1.3.1: - resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - level-supports@4.0.1: - resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} - engines: {node: '>=12'} - - level-transcoder@1.0.1: - resolution: {integrity: sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==} - engines: {node: '>=12'} - - level@8.0.1: - resolution: {integrity: sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ==} - engines: {node: '>=12'} + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -1788,14 +2112,6 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} - - locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -1804,6 +2120,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -1817,51 +2136,42 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - lru_map@0.3.3: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - - map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} markdown-table@1.1.3: resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} - mcl-wasm@0.7.9: - resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==} - engines: {node: '>=8.9.0'} + marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} - memory-level@1.0.0: - resolution: {integrity: sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==} - engines: {node: '>=12'} - memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} - meow@6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} - engines: {node: '>=8'} + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -1879,9 +2189,9 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -1900,13 +2210,8 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - - mixme@0.5.10: - resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} - engines: {node: '>= 8.0.0'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} mnemonist@0.38.5: resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} @@ -1916,19 +2221,19 @@ packages: engines: {node: '>= 14.0.0'} hasBin: true - module-error@1.0.2: - resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} - engines: {node: '>=10'} + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - napi-macros@2.2.2: - resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} @@ -1944,30 +2249,30 @@ packages: encoding: optional: true - node-gyp-build@4.8.2: - resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} obliterator@2.0.4: @@ -1976,9 +2281,13 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} @@ -1987,14 +2296,18 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + ox@0.1.2: + resolution: {integrity: sha512-ak/8K0Rtphg9vnRJlbOdaX9R7cmxD2MiSthjWGaQdMk3D7hrAlDoM+6Lxn7hN52Za3vrXfZ7enfke/5WjolDww==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} - p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -2003,10 +2316,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} - p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -2023,14 +2332,13 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} - p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-manager-detector@0.2.7: + resolution: {integrity: sha512-g4+387DXDKlZzHkP+9FLt8yKj8+/3tOkPv7DVTJGGRm00RkEWgqbFstX1mXJ4M0VDYhUqsTOiISqNOJnhAu3PQ==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2042,10 +2350,6 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2069,56 +2373,67 @@ packages: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - preferred-pm@3.1.2: - resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} - engines: {node: '>=10'} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} engines: {node: '>=14'} hasBin: true + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + qs@6.13.1: resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} engines: {node: '>=0.6'} @@ -2126,27 +2441,18 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - rankify-contracts@0.9.4: - resolution: {integrity: sha512-kdbEwtShHh84CWw8lUYYJY4eOiCZU4rNdZ5qAR+zuFqXjYB0yiLCx/tPsxjSAwB7ysM97WKLmEBQbikfnJBOfw==} + rankify-contracts@0.10.1: + resolution: {integrity: sha512-FsHRlb7X2DZmCcSOHTKs319R6GWLzNv5K4utd2isBje9poJ0wjnoD8INZD9Akk8JW3lW/PKTAApCJUHTGG+fCA==} raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} @@ -2163,16 +2469,12 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - - regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} - regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} req-cwd@2.0.0: resolution: {integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==} @@ -2186,12 +2488,9 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} @@ -2205,6 +2504,10 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + resolve@1.17.0: resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} @@ -2216,8 +2519,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true @@ -2228,28 +2531,15 @@ packages: resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} hasBin: true - run-parallel-limit@1.1.0: - resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rustbn.js@0.2.0: - resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==} - - safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -2268,11 +2558,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} @@ -2281,21 +2566,10 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - - set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} - set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} - setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -2309,24 +2583,16 @@ packages: sha1@1.1.1: resolution: {integrity: sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==} - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + shiki@0.14.7: + resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} @@ -2335,19 +2601,24 @@ packages: signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - smartwrap@2.0.2: - resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} - engines: {node: '>=6'} + solc@0.8.26: + resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} + engines: {node: '>=10.0.0'} hasBin: true - solc@0.7.3: - resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} - engines: {node: '>=8.0.0'} - hasBin: true + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -2356,24 +2627,16 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + stacktrace-parser@0.1.10: resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} engines: {node: '>=6'} @@ -2382,8 +2645,9 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - stream-transform@2.1.3: - resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} string-width@2.1.1: resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} @@ -2393,16 +2657,6 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - - string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -2421,22 +2675,22 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + strip-hex-prefix@1.0.0: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} engines: {node: '>=6.5.0', npm: '>=3'} - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2456,14 +2710,14 @@ packages: sync-rpc@1.3.6: resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==} - synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} - engines: {node: ^14.18.0 || >=16.0.0} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -2471,10 +2725,17 @@ packages: resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} engines: {node: '>=6.0.0'} + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2486,24 +2747,38 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - - ts-api-utils@1.0.3: - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' - ts-api-utils@1.4.0: - resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} - engines: {node: '>=16'} + ts-jest@29.2.5: + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true peerDependencies: - typescript: '>=4.2.0' + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true - ts-node@10.9.1: - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -2519,17 +2794,9 @@ packages: tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} - tty-table@4.2.3: - resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} - engines: {node: '>=8.0.0'} - hasBin: true - tweetnacl-util@0.15.1: resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} @@ -2540,51 +2807,58 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - type-fest@0.7.1: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - - typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + typedoc-plugin-markdown@3.17.1: + resolution: {integrity: sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==} + peerDependencies: + typedoc: '>=0.24.0' - typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + typedoc-theme-hierarchy@4.1.3: + resolution: {integrity: sha512-g24+eKSkKXf0WsSFAnweffNgLZ2k50wcOE8bUvVmXtCg5fMPxQl5Nrd+rro2MNM6uw/kZ4IrV9kZLdM3RjWXQQ==} + peerDependencies: + typedoc: ^0.24.0 || ^0.25.0 || ^0.26.0 - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typedoc@0.25.13: + resolution: {integrity: sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==} + engines: {node: '>= 16'} + hasBin: true + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x - typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + typescript-eslint@8.18.0: + resolution: {integrity: sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - typescript@5.3.2: - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -2597,10 +2871,20 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2614,48 +2898,55 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + viem@2.21.54: + resolution: {integrity: sha512-G9mmtbua3UtnVY9BqAtWdNp+3AO+oWhD0B9KaEsZb6gcrOWgmA4rz02yqEMg+qW9m6KgKGie7q3zcHqJIw6AqA==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} + webauthn-p256@0.0.10: + resolution: {integrity: sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA==} - which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + workerpool@6.5.1: resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -2663,6 +2954,10 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + ws@7.4.6: resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} engines: {node: '>=8.3.0'} @@ -2687,26 +2982,25 @@ packages: utf-8-validate: optional: true - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -2719,10 +3013,6 @@ packages: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -2741,53 +3031,211 @@ packages: snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} + '@adraffy/ens-normalize@1.11.0': {} - '@babel/code-frame@7.23.4': + '@ampproject/remapping@2.3.0': dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - - '@babel/helper-validator-identifier@7.22.20': {} + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 - '@babel/highlight@7.23.4': + '@babel/code-frame@7.26.2': dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 + '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.3': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.3': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color - '@babel/runtime@7.23.4': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': dependencies: - regenerator-runtime: 0.14.0 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.25.9': {} - '@chainsafe/as-sha256@0.3.1': {} + '@babel/helper-string-parser@7.25.9': {} - '@chainsafe/persistent-merkle-tree@0.4.2': + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': dependencies: - '@chainsafe/as-sha256': 0.3.1 + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 - '@chainsafe/persistent-merkle-tree@0.5.0': + '@babel/parser@7.26.3': dependencies: - '@chainsafe/as-sha256': 0.3.1 + '@babel/types': 7.26.3 - '@chainsafe/ssz@0.10.2': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': dependencies: - '@chainsafe/as-sha256': 0.3.1 - '@chainsafe/persistent-merkle-tree': 0.5.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@chainsafe/ssz@0.9.4': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': dependencies: - '@chainsafe/as-sha256': 0.3.1 - '@chainsafe/persistent-merkle-tree': 0.4.2 - case: 1.6.3 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@changesets/apply-release-plan@6.1.4': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': dependencies: - '@babel/runtime': 7.23.4 - '@changesets/config': 2.3.1 - '@changesets/get-version-range-type': 0.3.2 - '@changesets/git': 2.0.0 - '@changesets/types': 5.2.1 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + + '@babel/traverse@7.26.4': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + debug: 4.4.0(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.3': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@changesets/apply-release-plan@7.0.6': + dependencies: + '@changesets/config': 3.0.4 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.2 + '@changesets/should-skip-package': 0.1.1 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 fs-extra: 7.0.1 @@ -2795,20 +3243,20 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.5.4 + semver: 7.6.3 - '@changesets/assemble-release-plan@5.2.4': + '@changesets/assemble-release-plan@6.0.5': dependencies: - '@babel/runtime': 7.23.4 - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.6 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/should-skip-package': 0.1.1 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - semver: 7.5.4 + semver: 7.6.3 - '@changesets/changelog-git@0.1.14': + '@changesets/changelog-git@0.2.0': dependencies: - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 '@changesets/changelog-github@0.4.8': dependencies: @@ -2818,63 +3266,57 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/cli@2.26.2': - dependencies: - '@babel/runtime': 7.23.4 - '@changesets/apply-release-plan': 6.1.4 - '@changesets/assemble-release-plan': 5.2.4 - '@changesets/changelog-git': 0.1.14 - '@changesets/config': 2.3.1 - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.6 - '@changesets/get-release-plan': 3.0.17 - '@changesets/git': 2.0.0 - '@changesets/logger': 0.0.5 - '@changesets/pre': 1.0.14 - '@changesets/read': 0.5.9 - '@changesets/types': 5.2.1 - '@changesets/write': 0.2.3 + '@changesets/cli@2.27.10': + dependencies: + '@changesets/apply-release-plan': 7.0.6 + '@changesets/assemble-release-plan': 6.0.5 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.4 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/get-release-plan': 4.0.5 + '@changesets/git': 3.0.2 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.2 + '@changesets/should-skip-package': 0.1.1 + '@changesets/types': 6.0.0 + '@changesets/write': 0.3.2 '@manypkg/get-packages': 1.1.3 - '@types/is-ci': 3.0.4 - '@types/semver': 7.5.6 ansi-colors: 4.1.3 - chalk: 2.4.2 + ci-info: 3.9.0 enquirer: 2.4.1 external-editor: 3.1.0 fs-extra: 7.0.1 - human-id: 1.0.2 - is-ci: 3.0.1 - meow: 6.1.1 - outdent: 0.5.0 + mri: 1.2.0 p-limit: 2.3.0 - preferred-pm: 3.1.2 + package-manager-detector: 0.2.7 + picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.5.4 - spawndamnit: 2.0.0 + semver: 7.6.3 + spawndamnit: 3.0.1 term-size: 2.2.1 - tty-table: 4.2.3 - '@changesets/config@2.3.1': + '@changesets/config@3.0.4': dependencies: - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.6 - '@changesets/logger': 0.0.5 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/logger': 0.1.1 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.8 - '@changesets/errors@0.1.4': + '@changesets/errors@0.2.0': dependencies: extendable-error: 0.1.7 - '@changesets/get-dependents-graph@1.3.6': + '@changesets/get-dependents-graph@2.1.2': dependencies: - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - chalk: 2.4.2 - fs-extra: 7.0.1 - semver: 7.5.4 + picocolors: 1.1.1 + semver: 7.6.3 '@changesets/get-github-info@0.5.2': dependencies: @@ -2883,64 +3325,65 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/get-release-plan@3.0.17': + '@changesets/get-release-plan@4.0.5': dependencies: - '@babel/runtime': 7.23.4 - '@changesets/assemble-release-plan': 5.2.4 - '@changesets/config': 2.3.1 - '@changesets/pre': 1.0.14 - '@changesets/read': 0.5.9 - '@changesets/types': 5.2.1 + '@changesets/assemble-release-plan': 6.0.5 + '@changesets/config': 3.0.4 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.2 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - '@changesets/get-version-range-type@0.3.2': {} + '@changesets/get-version-range-type@0.4.0': {} - '@changesets/git@2.0.0': + '@changesets/git@3.0.2': dependencies: - '@babel/runtime': 7.23.4 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 micromatch: 4.0.8 - spawndamnit: 2.0.0 + spawndamnit: 3.0.1 - '@changesets/logger@0.0.5': + '@changesets/logger@0.1.1': dependencies: - chalk: 2.4.2 + picocolors: 1.1.1 - '@changesets/parse@0.3.16': + '@changesets/parse@0.4.0': dependencies: - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 js-yaml: 3.14.1 - '@changesets/pre@1.0.14': + '@changesets/pre@2.0.1': dependencies: - '@babel/runtime': 7.23.4 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.2.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.5.9': + '@changesets/read@0.6.2': dependencies: - '@babel/runtime': 7.23.4 - '@changesets/git': 2.0.0 - '@changesets/logger': 0.0.5 - '@changesets/parse': 0.3.16 - '@changesets/types': 5.2.1 - chalk: 2.4.2 + '@changesets/git': 3.0.2 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 fs-extra: 7.0.1 p-filter: 2.1.0 + picocolors: 1.1.1 + + '@changesets/should-skip-package@0.1.1': + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 '@changesets/types@4.1.0': {} '@changesets/types@5.2.1': {} - '@changesets/write@0.2.3': + '@changesets/types@6.0.0': {} + + '@changesets/write@0.3.2': dependencies: - '@babel/runtime': 7.23.4 - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.8 @@ -2949,32 +3392,20 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@eslint-community/eslint-utils@4.4.0(eslint@9.14.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': dependencies: - eslint: 9.14.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} - '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.18.0': - dependencies: - '@eslint/object-schema': 2.1.4 - debug: 4.3.7(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/core@0.7.0': {} - - '@eslint/eslintrc@3.1.0': + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.7(supports-color@8.1.1) - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.0 + debug: 4.4.0(supports-color@8.1.1) + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -2982,13 +3413,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.14.0': {} - - '@eslint/object-schema@2.1.4': {} - - '@eslint/plugin-kit@0.2.2': - dependencies: - levn: 0.4.1 + '@eslint/js@8.57.1': {} '@ethersproject/abi@5.7.0': dependencies: @@ -3247,38 +3672,222 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': + '@humanwhocodes/config-array@0.13.0': dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.0(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.1': {} + '@humanwhocodes/object-schema@2.0.3': {} + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.17.10 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))': + 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': 20.17.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) + 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.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.10 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.17.10 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + 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.25 + '@types/node': 20.17.10 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.26.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.17.10 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} - '@humanwhocodes/retry@0.4.1': {} + '@jridgewell/set-array@1.2.1': {} - '@jridgewell/resolve-uri@3.1.1': {} + '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping@0.3.9': dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.26.0 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.26.0 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -3293,8 +3902,16 @@ snapshots: tweetnacl: 1.0.3 tweetnacl-util: 0.15.1 + '@noble/curves@1.7.0': + dependencies: + '@noble/hashes': 1.6.0 + '@noble/hashes@1.2.0': {} + '@noble/hashes@1.6.0': {} + + '@noble/hashes@1.6.1': {} + '@noble/secp256k1@1.7.1': {} '@nodelib/fs.scandir@2.1.5': @@ -3307,133 +3924,51 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 - '@nomicfoundation/ethereumjs-block@5.0.2': - 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.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + '@nomicfoundation/edr-darwin-arm64@0.6.5': {} - '@nomicfoundation/ethereumjs-blockchain@7.0.2': - 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.4 - debug: 4.3.7(supports-color@8.1.1) - ethereum-cryptography: 0.1.3 - level: 8.0.1 - lru-cache: 5.1.1 - memory-level: 1.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + '@nomicfoundation/edr-darwin-x64@0.6.5': {} - '@nomicfoundation/ethereumjs-common@4.0.2': - dependencies: - '@nomicfoundation/ethereumjs-util': 9.0.2 - crc-32: 1.2.2 + '@nomicfoundation/edr-linux-arm64-gnu@0.6.5': {} - '@nomicfoundation/ethereumjs-ethash@3.0.2': - dependencies: - '@nomicfoundation/ethereumjs-block': 5.0.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - abstract-level: 1.0.4 - bigint-crypto-utils: 3.3.0 - ethereum-cryptography: 0.1.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + '@nomicfoundation/edr-linux-arm64-musl@0.6.5': {} - '@nomicfoundation/ethereumjs-evm@2.0.2': - dependencies: - '@ethersproject/providers': 5.7.2 - '@nomicfoundation/ethereumjs-common': 4.0.2 - '@nomicfoundation/ethereumjs-tx': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - debug: 4.3.7(supports-color@8.1.1) - ethereum-cryptography: 0.1.3 - mcl-wasm: 0.7.9 - rustbn.js: 0.2.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + '@nomicfoundation/edr-linux-x64-gnu@0.6.5': {} - '@nomicfoundation/ethereumjs-rlp@5.0.2': {} + '@nomicfoundation/edr-linux-x64-musl@0.6.5': {} - '@nomicfoundation/ethereumjs-statemanager@2.0.2': - dependencies: - '@nomicfoundation/ethereumjs-common': 4.0.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - debug: 4.3.7(supports-color@8.1.1) - ethereum-cryptography: 0.1.3 - ethers: 5.7.2 - js-sdsl: 4.4.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + '@nomicfoundation/edr-win32-x64-msvc@0.6.5': {} - '@nomicfoundation/ethereumjs-trie@6.0.2': + '@nomicfoundation/edr@0.6.5': dependencies: - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - '@types/readable-stream': 2.3.15 - ethereum-cryptography: 0.1.3 - readable-stream: 3.6.2 + '@nomicfoundation/edr-darwin-arm64': 0.6.5 + '@nomicfoundation/edr-darwin-x64': 0.6.5 + '@nomicfoundation/edr-linux-arm64-gnu': 0.6.5 + '@nomicfoundation/edr-linux-arm64-musl': 0.6.5 + '@nomicfoundation/edr-linux-x64-gnu': 0.6.5 + '@nomicfoundation/edr-linux-x64-musl': 0.6.5 + '@nomicfoundation/edr-win32-x64-msvc': 0.6.5 - '@nomicfoundation/ethereumjs-tx@5.0.2': + '@nomicfoundation/ethereumjs-common@4.0.4': dependencies: - '@chainsafe/ssz': 0.9.4 - '@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.4 transitivePeerDependencies: - - bufferutil - - utf-8-validate + - c-kzg + + '@nomicfoundation/ethereumjs-rlp@5.0.4': {} - '@nomicfoundation/ethereumjs-util@9.0.2': + '@nomicfoundation/ethereumjs-tx@5.0.4': dependencies: - '@chainsafe/ssz': 0.10.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@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-vm@7.0.2': - 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.7(supports-color@8.1.1) + '@nomicfoundation/ethereumjs-util@9.0.4': + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.4 ethereum-cryptography: 0.1.3 - mcl-wasm: 0.7.9 - rustbn.js: 0.2.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': optional: true @@ -3466,22 +4001,35 @@ snapshots: '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.2 '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 - '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2)(hardhat@2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2))': - dependencies: - ethers: 5.7.2 - hardhat: 2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2) - - '@openzeppelin/contracts-upgradeable@4.9.6': {} - '@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0)': dependencies: '@openzeppelin/contracts': 5.1.0 - '@openzeppelin/contracts@4.9.6': {} - '@openzeppelin/contracts@5.1.0': {} - '@peeramid-labs/multipass@0.3.1(hardhat@2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2))': + '@peeramid-labs/eds@2.2.2(hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2))': + dependencies: + '@ethersproject/abi': 5.7.0 + '@openzeppelin/contracts': 5.1.0 + '@openzeppelin/contracts-upgradeable': 5.1.0(@openzeppelin/contracts@5.1.0) + '@types/chai': 4.3.20 + '@types/mocha': 9.1.1 + '@types/node': 17.0.45 + chalk: 4.1.2 + cli-table: 0.3.11 + hardhat-gas-reporter: 1.0.10(hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2)) + ts-node: 10.9.2(@types/node@17.0.45)(typescript@5.7.2) + typescript: 5.7.2 + transitivePeerDependencies: + - '@codechecks/client' + - '@swc/core' + - '@swc/wasm' + - bufferutil + - debug + - hardhat + - utf-8-validate + + '@peeramid-labs/multipass@0.3.2(hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2))': dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/providers': 5.7.2 @@ -3492,9 +4040,9 @@ snapshots: '@types/node': 17.0.45 chalk: 4.1.2 cli-table: 0.3.11 - hardhat-gas-reporter: 1.0.10(hardhat@2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2)) - ts-node: 10.9.1(@types/node@17.0.45)(typescript@5.3.2) - typescript: 5.3.2 + hardhat-gas-reporter: 1.0.10(hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2)) + ts-node: 10.9.2(@types/node@17.0.45)(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - '@codechecks/client' - '@swc/core' @@ -3504,22 +4052,35 @@ snapshots: - hardhat - utf-8-validate - '@peersky/eth-auth@2.1.1': {} + '@safe-global/safe-contracts@1.4.1-build.0(ethers@5.7.2)': + dependencies: + ethers: 5.7.2 - '@pkgr/core@0.1.1': {} + '@scure/base@1.1.9': {} - '@scure/base@1.1.3': {} + '@scure/base@1.2.1': {} '@scure/bip32@1.1.5': dependencies: '@noble/hashes': 1.2.0 '@noble/secp256k1': 1.7.1 - '@scure/base': 1.1.3 + '@scure/base': 1.1.9 + + '@scure/bip32@1.6.0': + dependencies: + '@noble/curves': 1.7.0 + '@noble/hashes': 1.6.1 + '@scure/base': 1.2.1 '@scure/bip39@1.1.1': dependencies: '@noble/hashes': 1.2.0 - '@scure/base': 1.1.3 + '@scure/base': 1.1.9 + + '@scure/bip39@1.5.0': + dependencies: + '@noble/hashes': 1.6.1 + '@scure/base': 1.2.1 '@sentry/core@5.30.0': dependencies: @@ -3570,11 +4131,21 @@ snapshots: '@sentry/types': 5.30.0 tslib: 1.14.1 + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + '@solidity-parser/parser@0.14.5': dependencies: antlr4ts: 0.5.0-alpha.4 - '@tsconfig/node10@1.0.9': {} + '@tsconfig/node10@1.0.11': {} '@tsconfig/node12@1.0.11': {} @@ -3582,37 +4153,67 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.3 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.3 + '@types/bn.js@4.11.6': dependencies: - '@types/node': 22.9.0 + '@types/node': 20.17.10 '@types/bn.js@5.1.6': dependencies: - '@types/node': 22.9.0 + '@types/node': 20.17.10 '@types/chai@4.3.20': {} '@types/concat-stream@1.6.1': dependencies: - '@types/node': 22.9.0 - - '@types/crypto-js@4.2.1': {} + '@types/node': 20.17.10 - '@types/estree@1.0.6': {} + '@types/crypto-js@4.2.2': {} '@types/form-data@0.0.33': dependencies: - '@types/node': 22.9.0 + '@types/node': 20.17.10 - '@types/is-ci@3.0.4': + '@types/graceful-fs@4.1.9': dependencies: - ci-info: 3.9.0 + '@types/node': 20.17.10 - '@types/json-schema@7.0.15': {} + '@types/istanbul-lib-coverage@2.0.6': {} - '@types/lru-cache@5.1.1': {} + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 - '@types/minimist@1.2.5': {} + '@types/lru-cache@5.1.1': {} '@types/mocha@9.1.1': {} @@ -3622,158 +4223,120 @@ snapshots: '@types/node@17.0.45': {} - '@types/node@22.9.0': + '@types/node@20.17.10': dependencies: undici-types: 6.19.8 '@types/node@8.10.66': {} - '@types/normalize-package-data@2.4.4': {} - '@types/pbkdf2@3.1.2': dependencies: - '@types/node': 22.9.0 + '@types/node': 20.17.10 '@types/qs@6.9.17': {} - '@types/readable-stream@2.3.15': - dependencies: - '@types/node': 22.9.0 - safe-buffer: 5.1.2 - '@types/secp256k1@4.0.6': dependencies: - '@types/node': 22.9.0 + '@types/node': 20.17.10 + + '@types/stack-utils@2.0.3': {} + + '@types/yargs-parser@21.0.3': {} - '@types/semver@7.5.6': {} + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.3.2))(eslint@9.14.0)(typescript@5.3.2)': + '@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 8.13.0(eslint@9.14.0)(typescript@5.3.2) - '@typescript-eslint/scope-manager': 6.12.0 - '@typescript-eslint/type-utils': 6.12.0(eslint@9.14.0)(typescript@5.3.2) - '@typescript-eslint/utils': 6.12.0(eslint@9.14.0)(typescript@5.3.2) - '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.7(supports-color@8.1.1) - eslint: 9.14.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.18.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/type-utils': 8.18.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.0 + eslint: 8.57.1 graphemer: 1.4.0 - ignore: 5.3.0 + ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.2) - optionalDependencies: - typescript: 5.3.2 + ts-api-utils: 1.4.3(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.3.2)': + '@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 8.13.0 - '@typescript-eslint/types': 8.13.0 - '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.3.2) - '@typescript-eslint/visitor-keys': 8.13.0 - debug: 4.3.7(supports-color@8.1.1) - eslint: 9.14.0 - optionalDependencies: - typescript: 5.3.2 + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.0 + debug: 4.4.0(supports-color@8.1.1) + eslint: 8.57.1 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@6.12.0': + '@typescript-eslint/scope-manager@8.18.0': dependencies: - '@typescript-eslint/types': 6.12.0 - '@typescript-eslint/visitor-keys': 6.12.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 - '@typescript-eslint/scope-manager@8.13.0': + '@typescript-eslint/type-utils@8.18.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.13.0 - '@typescript-eslint/visitor-keys': 8.13.0 - - '@typescript-eslint/type-utils@6.12.0(eslint@9.14.0)(typescript@5.3.2)': - dependencies: - '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) - '@typescript-eslint/utils': 6.12.0(eslint@9.14.0)(typescript@5.3.2) - debug: 4.3.7(supports-color@8.1.1) - eslint: 9.14.0 - ts-api-utils: 1.0.3(typescript@5.3.2) - optionalDependencies: - typescript: 5.3.2 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.0(eslint@8.57.1)(typescript@5.7.2) + debug: 4.4.0(supports-color@8.1.1) + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@6.12.0': {} - - '@typescript-eslint/types@8.13.0': {} + '@typescript-eslint/types@8.18.0': {} - '@typescript-eslint/typescript-estree@6.12.0(typescript@5.3.2)': + '@typescript-eslint/typescript-estree@8.18.0(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 6.12.0 - '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.7(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.2) - optionalDependencies: - typescript: 5.3.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.13.0(typescript@5.3.2)': - dependencies: - '@typescript-eslint/types': 8.13.0 - '@typescript-eslint/visitor-keys': 8.13.0 - debug: 4.3.7(supports-color@8.1.1) + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 + debug: 4.4.0(supports-color@8.1.1) fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.3.2) - optionalDependencies: - typescript: 5.3.2 + ts-api-utils: 1.4.3(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.12.0(eslint@9.14.0)(typescript@5.3.2)': + '@typescript-eslint/utils@8.18.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.12.0 - '@typescript-eslint/types': 6.12.0 - '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) - eslint: 9.14.0 - semver: 7.5.4 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + eslint: 8.57.1 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/visitor-keys@6.12.0': + '@typescript-eslint/visitor-keys@8.18.0': dependencies: - '@typescript-eslint/types': 6.12.0 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.18.0 + eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.13.0': - dependencies: - '@typescript-eslint/types': 8.13.0 - eslint-visitor-keys: 3.4.3 + '@ungap/structured-clone@1.2.1': {} - abstract-level@1.0.4: - dependencies: - buffer: 6.0.3 - catering: 2.1.1 - is-buffer: 2.0.5 - level-supports: 4.0.1 - level-transcoder: 1.0.1 - module-error: 1.0.2 - queue-microtask: 1.2.3 + abitype@1.0.7(typescript@5.7.2): + optionalDependencies: + typescript: 5.7.2 acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 - acorn-walk@8.3.0: {} + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 acorn@8.14.0: {} @@ -3783,7 +4346,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -3799,6 +4362,10 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + ansi-colors@4.1.3: {} ansi-escapes@4.3.2: @@ -3809,14 +4376,14 @@ snapshots: ansi-regex@5.0.1: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 + ansi-sequence-parser@1.1.1: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + antlr4ts@0.5.0-alpha.4: {} anymatch@3.1.3: @@ -3832,72 +4399,110 @@ snapshots: argparse@2.0.1: {} - array-buffer-byte-length@1.0.0: - dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - array-union@2.1.0: {} array-uniq@1.0.3: {} - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - - arraybuffer.prototype.slice@1.0.2: - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - - arrify@1.0.1: {} - asap@2.0.6: {} - asynckit@0.4.0: {} + async@3.2.6: {} - available-typed-arrays@1.0.5: {} + asynckit@0.4.0: {} - axios@1.7.8: + axios@1.7.9: dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug + babel-jest@29.7.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.0) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.25.9 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) + + babel-preset-jest@29.6.3(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + balanced-match@1.0.2: {} base-x@3.0.10: dependencies: safe-buffer: 5.2.1 - base64-js@1.5.1: {} - bech32@1.1.4: {} better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 - bigint-crypto-utils@3.3.0: {} - - binary-extensions@2.2.0: {} + binary-extensions@2.3.0: {} blakejs@1.2.1: {} - bn.js@4.12.0: {} + bn.js@4.12.1: {} bn.js@5.2.1: {} + boxen@5.1.2: + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -3911,30 +4516,30 @@ snapshots: dependencies: fill-range: 7.1.1 - breakword@1.0.6: - dependencies: - wcwidth: 1.0.1 - brorand@1.1.0: {} - browser-level@1.0.1: - dependencies: - abstract-level: 1.0.4 - catering: 2.1.1 - module-error: 1.0.2 - run-parallel-limit: 1.1.0 - browser-stdout@1.3.1: {} browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 - cipher-base: 1.0.4 + cipher-base: 1.0.6 create-hash: 1.2.0 evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001687 + electron-to-chromium: 1.5.73 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + bs58@4.0.1: dependencies: base-x: 3.0.10 @@ -3945,60 +4550,45 @@ snapshots: create-hash: 1.2.0 safe-buffer: 5.2.1 + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + buffer-from@1.1.2: {} buffer-xor@1.0.3: {} - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - bytes@3.1.2: {} - call-bind@1.0.5: + call-bind-apply-helpers@1.0.1: dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - call-bind@1.0.7: + call-bind@1.0.8: dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.5 set-function-length: 1.2.2 callsites@3.1.0: {} - camelcase-keys@6.2.2: - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - camelcase@5.3.1: {} camelcase@6.3.0: {} - case@1.6.3: {} + caniuse-lite@1.0.30001687: {} caseless@0.12.0: {} - catering@2.1.1: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + char-regex@1.0.2: {} + chardet@0.7.0: {} charenc@0.0.2: {} @@ -4015,25 +4605,25 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chokidar@4.0.1: + dependencies: + readdirp: 4.0.2 + ci-info@2.0.0: {} ci-info@3.9.0: {} - cipher-base@1.0.4: + cipher-base@1.0.6: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - classic-level@1.4.1: - dependencies: - abstract-level: 1.0.4 - catering: 2.1.1 - module-error: 1.0.2 - napi-macros: 2.2.2 - node-gyp-build: 4.8.2 + cjs-module-lexer@1.4.1: {} clean-stack@2.2.0: {} + cli-boxes@2.2.1: {} + cli-table3@0.5.1: dependencies: object-assign: 4.1.1 @@ -4045,12 +4635,6 @@ snapshots: dependencies: colors: 1.0.3 - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -4063,18 +4647,14 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone@1.0.4: {} + co@4.6.0: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 + collect-v8-coverage@1.0.2: {} color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} colors@1.0.3: {} @@ -4087,7 +4667,7 @@ snapshots: command-exists@1.2.9: {} - commander@3.0.2: {} + commander@8.3.0: {} concat-map@0.0.1: {} @@ -4098,15 +4678,15 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 + convert-source-map@2.0.0: {} + cookie@0.4.2: {} core-util-is@1.0.3: {} - crc-32@1.2.2: {} - create-hash@1.2.0: dependencies: - cipher-base: 1.0.4 + cipher-base: 1.0.6 inherits: 2.0.4 md5.js: 1.3.5 ripemd160: 2.0.2 @@ -4114,22 +4694,31 @@ snapshots: create-hmac@1.1.7: dependencies: - cipher-base: 1.0.4 + cipher-base: 1.0.6 create-hash: 1.2.0 inherits: 2.0.4 ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - create-require@1.1.1: {} - - cross-spawn@5.1.0: + create-jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)): dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} - cross-spawn@7.0.3: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -4139,59 +4728,27 @@ snapshots: crypto-js@4.2.0: {} - csv-generate@3.4.3: {} - - csv-parse@4.16.3: {} - - csv-stringify@5.6.5: {} - - csv@5.5.3: - dependencies: - csv-generate: 3.4.3 - csv-parse: 4.16.3 - csv-stringify: 5.6.5 - stream-transform: 2.1.3 - dataloader@1.4.0: {} - debug@4.3.7(supports-color@8.1.1): + debug@4.4.0(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: supports-color: 8.1.1 - decamelize-keys@1.1.1: - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - - decamelize@1.2.0: {} - decamelize@4.0.0: {} + dedent@1.5.3: {} + deep-is@0.1.4: {} - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - define-data-property@1.1.1: - dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 + deepmerge@4.3.1: {} define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 - object-keys: 1.1.1 + gopd: 1.2.0 delayed-stream@1.0.0: {} @@ -4199,6 +4756,10 @@ snapshots: detect-indent@6.1.0: {} + detect-newline@3.1.0: {} + + diff-sequences@29.6.3: {} + diff@4.0.2: {} diff@5.2.0: {} @@ -4207,11 +4768,27 @@ snapshots: dependencies: path-type: 4.0.0 + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + dotenv@8.6.0: {} + dunder-proto@1.0.0: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.73: {} + elliptic@6.5.4: dependencies: - bn.js: 4.12.0 + bn.js: 4.12.1 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 @@ -4219,9 +4796,9 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - elliptic@6.6.0: + elliptic@6.6.1: dependencies: - bn.js: 4.12.0 + bn.js: 4.12.1 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 @@ -4229,6 +4806,8 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + emittery@0.13.1: {} + emoji-regex@8.0.0: {} enquirer@2.4.1: @@ -4242,103 +4821,32 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.22.3: - 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.2 - 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.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - 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-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-set-tostringtag@2.0.2: - dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 - - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.0 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - escalade@3.1.1: {} + escalade@3.2.0: {} - escape-string-regexp@1.0.5: {} + escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.0(eslint@9.14.0): + eslint-config-prettier@9.1.0(eslint@8.57.1): dependencies: - eslint: 9.14.0 + eslint: 8.57.1 - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.14.0))(eslint@9.14.0)(prettier@3.3.3): + eslint-plugin-jest@28.9.0(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2): dependencies: - eslint: 9.14.0 - prettier: 3.3.3 - prettier-linter-helpers: 1.0.0 - synckit: 0.9.2 + '@typescript-eslint/utils': 8.18.0(eslint@8.57.1)(typescript@5.7.2) + eslint: 8.57.1 optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@9.14.0) - - eslint-plugin-promise@7.1.0(eslint@9.14.0): - dependencies: - eslint: 9.14.0 - - eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.3.2))(eslint@9.14.0)(typescript@5.3.2))(eslint@9.14.0): - dependencies: - eslint: 9.14.0 - eslint-rule-composer: 0.3.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 6.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.3.2))(eslint@9.14.0)(typescript@5.3.2) - - eslint-rule-composer@0.3.0: {} + '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) + jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) + transitivePeerDependencies: + - supports-color + - typescript - eslint-scope@8.2.0: + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -4347,55 +4855,58 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.14.0: + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.18.0 - '@eslint/core': 0.7.0 - '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.14.0 - '@eslint/plugin-kit': 0.2.2 - '@humanfs/node': 0.16.6 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.1 - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.1 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.7(supports-color@8.1.1) + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@8.1.1) + doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.5.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 + file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - ignore: 5.3.0 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 + 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 + optionator: 0.9.4 + strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color - espree@10.3.0: + espree@9.6.1: dependencies: acorn: 8.14.0 acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 4.2.0 + eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -4410,7 +4921,7 @@ snapshots: eth-gas-reporter@0.2.27: dependencies: '@solidity-parser/parser': 0.14.5 - axios: 1.7.8 + axios: 1.7.9 cli-table3: 0.5.1 colors: 1.4.0 ethereum-cryptography: 1.2.0 @@ -4454,15 +4965,15 @@ snapshots: ethereumjs-abi@0.6.8: dependencies: - bn.js: 4.12.0 + bn.js: 4.12.1 ethereumjs-util: 6.2.1 ethereumjs-util@6.2.1: dependencies: '@types/bn.js': 4.11.6 - bn.js: 4.12.0 + bn.js: 4.12.1 create-hash: 1.2.0 - elliptic: 6.6.0 + elliptic: 6.6.1 ethereum-cryptography: 0.1.3 ethjs-util: 0.1.6 rlp: 2.2.7 @@ -4508,11 +5019,35 @@ snapshots: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 + eventemitter3@5.0.1: {} + evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + 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 + extendable-error@0.1.7: {} external-editor@3.1.0: @@ -4523,8 +5058,6 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-diff@1.3.0: {} - fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4537,21 +5070,29 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.15.0: + fastq@1.17.1: dependencies: reusify: 1.0.4 - file-entry-cache@8.0.0: + fb-watchman@2.0.2: dependencies: - flat-cache: 4.0.1 + bser: 2.1.1 - fill-range@7.1.1: + fdir@6.4.2(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + file-entry-cache@6.0.1: dependencies: - to-regex-range: 5.0.1 + flat-cache: 3.2.0 - find-up@2.1.0: + filelist@1.0.4: dependencies: - locate-path: 2.0.0 + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 find-up@4.1.0: dependencies: @@ -4563,27 +5104,19 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - find-yarn-workspace-root2@1.2.16: + flat-cache@3.2.0: dependencies: - micromatch: 4.0.8 - pkg-dir: 4.2.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.2.9 + flatted: 3.3.2 keyv: 4.5.4 + rimraf: 3.0.2 flat@5.0.2: {} - flatted@3.2.9: {} + flatted@3.3.2: {} - follow-redirects@1.15.9(debug@4.3.7): + follow-redirects@1.15.9(debug@4.4.0): optionalDependencies: - debug: 4.3.7(supports-color@8.1.1) - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 + debug: 4.4.0(supports-color@8.1.1) form-data@2.5.2: dependencies: @@ -4600,13 +5133,11 @@ snapshots: fp-ts@1.19.3: {} - fs-extra@0.30.0: + fs-extra@11.1.1: dependencies: graceful-fs: 4.2.11 - jsonfile: 2.4.0 - klaw: 1.3.1 - path-is-absolute: 1.0.1 - rimraf: 2.7.1 + jsonfile: 6.1.0 + universalify: 2.0.1 fs-extra@7.0.1: dependencies: @@ -4629,40 +5160,26 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - functions-have-names: 1.2.3 - - functional-red-black-tree@1.0.1: {} - - functions-have-names@1.2.3: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} - get-intrinsic@1.2.2: - dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - - get-intrinsic@1.2.4: + get-intrinsic@1.2.5: dependencies: + call-bind-apply-helpers: 1.0.1 + dunder-proto: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + + get-package-type@0.1.0: {} get-port@3.2.0: {} - get-symbol-description@1.0.0: - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + get-stream@6.0.1: {} glob-parent@5.1.2: dependencies: @@ -4672,15 +5189,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@7.2.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -4698,40 +5206,43 @@ snapshots: minimatch: 5.1.6 once: 1.4.0 - globals@14.0.0: {} - - globals@15.12.0: {} + globals@11.12.0: {} - globalthis@1.0.3: + globals@13.24.0: dependencies: - define-properties: 1.2.1 + type-fest: 0.20.2 + + globals@15.13.0: {} globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.2 + gopd@1.2.0: {} graceful-fs@4.2.11: {} - grapheme-splitter@1.0.4: {} - graphemer@1.4.0: {} - hard-rejection@2.1.0: {} + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 - hardhat-gas-reporter@1.0.10(hardhat@2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2)): + hardhat-gas-reporter@1.0.10(hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2)): dependencies: array-uniq: 1.0.3 eth-gas-reporter: 0.2.27 - hardhat: 2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2) + hardhat: 2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2) sha1: 1.1.1 transitivePeerDependencies: - '@codechecks/client' @@ -4739,20 +5250,14 @@ snapshots: - debug - utf-8-validate - hardhat@2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2): + hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 - '@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/edr': 0.6.5 + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-tx': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 '@nomicfoundation/solidity-analyzer': 0.1.2 '@sentry/node': 5.30.0 '@types/bn.js': 5.1.6 @@ -4760,64 +5265,53 @@ snapshots: adm-zip: 0.4.16 aggregate-error: 3.1.0 ansi-escapes: 4.3.2 - chalk: 2.4.2 - chokidar: 3.6.0 + boxen: 5.1.2 + chokidar: 4.0.1 ci-info: 2.0.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 ethereumjs-abi: 0.6.8 - find-up: 2.1.0 + find-up: 5.0.0 fp-ts: 1.19.3 fs-extra: 7.0.1 - glob: 7.2.0 immutable: 4.3.7 io-ts: 1.10.4 + json-stream-stringify: 3.1.6 keccak: 3.0.4 lodash: 4.17.21 mnemonist: 0.38.5 mocha: 10.8.2 p-map: 4.0.0 + picocolors: 1.1.1 raw-body: 2.5.2 resolve: 1.17.0 semver: 6.3.1 - solc: 0.7.3(debug@4.3.7) + solc: 0.8.26(debug@4.4.0) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 + tinyglobby: 0.2.10 tsort: 0.0.1 undici: 5.28.4 uuid: 8.3.2 ws: 7.5.10 optionalDependencies: - ts-node: 10.9.1(@types/node@17.0.45)(typescript@5.3.2) - typescript: 5.3.2 + ts-node: 10.9.2(@types/node@20.17.10)(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - bufferutil + - c-kzg - supports-color - utf-8-validate - has-bigints@1.0.2: {} - - has-flag@3.0.0: {} - has-flag@4.0.0: {} - has-property-descriptors@1.0.1: - dependencies: - get-intrinsic: 1.2.2 - has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 - has-proto@1.0.1: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.0: - dependencies: - has-symbols: 1.0.3 + has-symbols@1.1.0: {} hash-base@3.1.0: dependencies: @@ -4830,7 +5324,7 @@ snapshots: inherits: 2.0.4 minimalistic-assert: 1.0.1 - hasown@2.0.0: + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -4842,7 +5336,7 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - hosted-git-info@2.8.9: {} + html-escaper@2.0.2: {} http-basic@8.1.3: dependencies: @@ -4866,19 +5360,19 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color human-id@1.0.2: {} + human-signals@2.1.0: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - ieee754@1.2.1: {} - - ignore@5.3.0: {} + ignore@5.3.2: {} immutable@4.3.7: {} @@ -4887,6 +5381,11 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -4898,117 +5397,414 @@ snapshots: inherits@2.0.4: {} - internal-slot@1.0.6: - dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 - io-ts@1.10.4: dependencies: fp-ts: 1.19.3 - is-array-buffer@3.0.2: + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + binary-extensions: 2.3.0 - is-arrayish@0.2.1: {} + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@2.0.0: {} + + is-fullwidth-code-point@3.0.0: {} - is-bigint@1.0.4: + is-generator-fn@2.1.0: {} + + is-glob@4.0.3: dependencies: - has-bigints: 1.0.2 + is-extglob: 2.1.1 - is-binary-path@2.1.0: + is-hex-prefixed@1.0.0: {} + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@2.1.0: {} + + is-stream@2.0.1: {} + + is-subdir@1.2.0: dependencies: - binary-extensions: 2.2.0 + better-path-resolve: 1.0.0 - is-boolean-object@1.1.2: + is-unicode-supported@0.1.0: {} + + is-windows@1.0.2: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + isows@1.0.6(ws@8.18.0): + dependencies: + ws: 8.18.0 + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + '@babel/core': 7.26.0 + '@babel/parser': 7.26.3 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.26.0 + '@babel/parser': 7.26.3 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.0(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 - is-buffer@2.0.5: {} + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.10 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.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.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color - is-callable@1.2.7: {} + jest-cli@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node - is-ci@3.0.1: + jest-config@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)): dependencies: + '@babel/core': 7.26.0 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + chalk: 4.1.2 ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + 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.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.17.10 + ts-node: 10.9.2(@types/node@20.17.10)(typescript@5.7.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color - is-core-module@2.13.1: + jest-diff@29.7.0: dependencies: - hasown: 2.0.0 + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 - is-date-object@1.0.5: + jest-docblock@29.7.0: dependencies: - has-tostringtag: 1.0.0 + detect-newline: 3.1.0 - is-extglob@2.1.1: {} + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 - is-fullwidth-code-point@2.0.0: {} + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.10 + jest-mock: 29.7.0 + jest-util: 29.7.0 - is-fullwidth-code-point@3.0.0: {} + jest-get-type@29.6.3: {} - is-glob@4.0.3: + jest-haste-map@29.7.0: dependencies: - is-extglob: 2.1.1 + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.17.10 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 - is-hex-prefixed@1.0.0: {} + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 - is-negative-zero@2.0.2: {} + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 - is-number-object@1.0.7: + jest-message-util@29.7.0: dependencies: - has-tostringtag: 1.0.0 + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 - is-number@7.0.0: {} + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.17.10 + jest-util: 29.7.0 - is-plain-obj@1.1.0: {} + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 - is-plain-obj@2.1.0: {} + jest-regex-util@29.6.3: {} - is-regex@1.1.4: + jest-resolve-dependencies@29.7.0: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color - is-shared-array-buffer@1.0.2: + jest-resolve@29.7.0: dependencies: - call-bind: 1.0.5 + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + 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': 20.17.10 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + 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 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + 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': 20.17.10 + chalk: 4.1.2 + cjs-module-lexer: 1.4.1 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + 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 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.26.0 + '@babel/generator': 7.26.3 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.3 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + 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.6.3 + transitivePeerDependencies: + - supports-color - is-string@1.0.7: + jest-util@29.7.0: dependencies: - has-tostringtag: 1.0.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.10 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 - is-subdir@1.2.0: + jest-validate@29.7.0: dependencies: - better-path-resolve: 1.0.0 + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 - is-symbol@1.0.4: + jest-watcher@29.7.0: dependencies: - has-symbols: 1.0.3 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 - is-typed-array@1.1.12: + jest-worker@29.7.0: dependencies: - which-typed-array: 1.1.13 - - is-unicode-supported@0.1.0: {} + '@types/node': 20.17.10 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 - is-weakref@1.0.2: + jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)): dependencies: - call-bind: 1.0.5 - - is-windows@1.0.2: {} - - isarray@1.0.0: {} - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - js-sdsl@4.4.2: {} + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node js-sha3@0.8.0: {} @@ -5023,6 +5819,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsesc@3.1.0: {} + json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -5031,44 +5829,35 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - jsonfile@2.4.0: + json-stream-stringify@3.1.6: {} + + json5@2.2.3: {} + + jsonc-parser@3.3.1: {} + + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@4.0.0: + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 keccak@3.0.4: dependencies: node-addon-api: 2.0.2 - node-gyp-build: 4.8.2 + node-gyp-build: 4.8.4 readable-stream: 3.6.2 keyv@4.5.4: dependencies: json-buffer: 3.0.1 - kind-of@6.0.3: {} - - klaw@1.3.1: - optionalDependencies: - graceful-fs: 4.2.11 - - kleur@4.1.5: {} - - level-supports@4.0.1: {} - - level-transcoder@1.0.1: - dependencies: - buffer: 6.0.3 - module-error: 1.0.2 + kleur@3.0.3: {} - level@8.0.1: - dependencies: - abstract-level: 1.0.4 - browser-level: 1.0.1 - classic-level: 1.4.1 + leven@3.1.0: {} levn@0.4.1: dependencies: @@ -5077,18 +5866,6 @@ snapshots: lines-and-columns@1.2.4: {} - load-yaml-file@0.2.0: - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - - locate-path@2.0.0: - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -5097,6 +5874,8 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.memoize@4.1.2: {} + lodash.merge@4.6.2: {} lodash.startcase@4.4.0: {} @@ -5108,30 +5887,27 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 - lru-cache@4.1.5: - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - lru-cache@5.1.1: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - lru_map@0.3.3: {} - make-error@1.3.6: {} + lunr@2.3.9: {} - map-obj@1.0.1: {} + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + + make-error@1.3.6: {} - map-obj@4.3.0: {} + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 markdown-table@1.1.3: {} - mcl-wasm@0.7.9: {} + marked@4.3.0: {} md5.js@1.3.5: dependencies: @@ -5139,27 +5915,9 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 - memory-level@1.0.0: - dependencies: - abstract-level: 1.0.4 - functional-red-black-tree: 1.0.1 - module-error: 1.0.2 - memorystream@0.3.1: {} - meow@6.1.1: - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 2.5.0 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.13.1 - yargs-parser: 18.1.3 + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -5174,7 +5932,7 @@ snapshots: dependencies: mime-db: 1.52.0 - min-indent@1.0.1: {} + mimic-fn@2.1.0: {} minimalistic-assert@1.0.1: {} @@ -5192,13 +5950,7 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimist-options@4.1.0: - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - - mixme@0.5.10: {} + minimist@1.2.8: {} mnemonist@0.38.5: dependencies: @@ -5209,7 +5961,7 @@ snapshots: ansi-colors: 4.1.3 browser-stdout: 1.3.1 chokidar: 3.6.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) diff: 5.2.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 @@ -5227,14 +5979,14 @@ snapshots: yargs-parser: 20.2.9 yargs-unparser: 2.0.0 - module-error@1.0.2: {} + mri@1.2.0: {} ms@2.1.3: {} - napi-macros@2.2.2: {} - natural-compare@1.4.0: {} + neo-async@2.6.2: {} + node-addon-api@2.0.2: {} node-addon-api@5.1.0: {} @@ -5243,29 +5995,21 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-gyp-build@4.8.2: {} + node-gyp-build@4.8.4: {} - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 + node-int64@0.4.0: {} - normalize-path@3.0.0: {} + node-releases@2.0.19: {} - object-assign@4.1.1: {} + normalize-path@3.0.0: {} - object-inspect@1.13.1: {} + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 - object-keys@1.1.1: {} + object-assign@4.1.1: {} - object.assign@4.1.4: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 + object-inspect@1.13.3: {} obliterator@2.0.4: {} @@ -5273,26 +6017,40 @@ snapshots: dependencies: wrappy: 1.0.2 - optionator@0.9.3: + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 os-tmpdir@1.0.2: {} outdent@0.5.0: {} - p-filter@2.1.0: + ox@0.1.2(typescript@5.7.2): dependencies: - p-map: 2.1.0 + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.7.0 + '@noble/hashes': 1.6.1 + '@scure/bip32': 1.6.0 + '@scure/bip39': 1.5.0 + abitype: 1.0.7(typescript@5.7.2) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - zod - p-limit@1.3.0: + p-filter@2.1.0: dependencies: - p-try: 1.0.0 + p-map: 2.1.0 p-limit@2.3.0: dependencies: @@ -5302,10 +6060,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-locate@2.0.0: - dependencies: - p-limit: 1.3.0 - p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -5320,10 +6074,10 @@ snapshots: dependencies: aggregate-error: 3.1.0 - p-try@1.0.0: {} - p-try@2.2.0: {} + package-manager-detector@0.2.7: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -5332,13 +6086,11 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.23.4 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - path-exists@3.0.0: {} - path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -5357,30 +6109,31 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 + picocolors@1.1.1: {} + picomatch@2.3.1: {} + picomatch@4.0.2: {} + pify@4.0.1: {} + pirates@4.0.6: {} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - preferred-pm@3.1.2: - dependencies: - find-up: 5.0.0 - find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.0.0 - prelude-ls@1.2.1: {} - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - prettier@2.8.8: {} - prettier@3.3.3: {} + prettier@3.4.2: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 process-nextick-args@2.0.1: {} @@ -5388,44 +6141,49 @@ snapshots: dependencies: asap: 2.0.6 - proxy-from-env@1.1.0: {} + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 - pseudomap@1.0.2: {} + proxy-from-env@1.1.0: {} punycode@2.3.1: {} + pure-rand@6.1.0: {} + qs@6.13.1: dependencies: side-channel: 1.0.6 queue-microtask@1.2.3: {} - quick-lru@4.0.1: {} - randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - rankify-contracts@0.9.4(hardhat@2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2)): + rankify-contracts@0.10.1(ethers@5.7.2)(hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2)): dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/providers': 5.7.2 - '@openzeppelin/contracts': 4.9.6 - '@openzeppelin/contracts-upgradeable': 4.9.6 + '@openzeppelin/contracts': 5.1.0 + '@openzeppelin/contracts-upgradeable': 5.1.0(@openzeppelin/contracts@5.1.0) + '@safe-global/safe-contracts': 1.4.1-build.0(ethers@5.7.2) '@types/chai': 4.3.20 '@types/mocha': 9.1.1 '@types/node': 17.0.45 chalk: 4.1.2 cli-table: 0.3.11 - hardhat-gas-reporter: 1.0.10(hardhat@2.19.1(ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2))(typescript@5.3.2)) - ts-node: 10.9.1(@types/node@17.0.45)(typescript@5.3.2) - typescript: 5.3.2 + hardhat-gas-reporter: 1.0.10(hardhat@2.22.17(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))(typescript@5.7.2)) + ts-node: 10.9.2(@types/node@17.0.45)(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - '@codechecks/client' - '@swc/core' - '@swc/wasm' - bufferutil - debug + - ethers - hardhat - utf-8-validate @@ -5436,18 +6194,7 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 + react-is@18.3.1: {} read-yaml-file@1.1.0: dependencies: @@ -5476,18 +6223,9 @@ snapshots: dependencies: picomatch: 2.3.1 - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - - regenerator-runtime@0.14.0: {} + readdirp@4.0.2: {} - regexp.prototype.flags@1.5.1: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - set-function-name: 2.0.1 + regenerator-runtime@0.14.1: {} req-cwd@2.0.0: dependencies: @@ -5499,9 +6237,9 @@ snapshots: require-directory@2.1.1: {} - require-from-string@2.0.2: {} - - require-main-filename@2.0.0: {} + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 resolve-from@3.0.0: {} @@ -5509,19 +6247,21 @@ snapshots: resolve-from@5.0.0: {} + resolve.exports@2.0.3: {} + resolve@1.17.0: dependencies: path-parse: 1.0.7 resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 reusify@1.0.4: {} - rimraf@2.7.1: + rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -5534,81 +6274,43 @@ snapshots: dependencies: bn.js: 5.2.1 - run-parallel-limit@1.1.0: - dependencies: - queue-microtask: 1.2.3 - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - rustbn.js@0.2.0: {} - - safe-array-concat@1.0.1: - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - isarray: 2.0.5 - safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-regex-test@1.0.0: - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-regex: 1.1.4 - safer-buffer@2.1.2: {} scrypt-js@3.0.1: {} secp256k1@4.0.4: dependencies: - elliptic: 6.6.0 + elliptic: 6.6.1 node-addon-api: 5.1.0 - node-gyp-build: 4.8.2 + node-gyp-build: 4.8.4 semver@5.7.2: {} semver@6.3.1: {} - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - semver@7.6.3: {} serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - set-blocking@2.0.0: {} - - set-function-length@1.1.1: - dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - set-function-length@1.2.2: 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 + get-intrinsic: 1.2.5 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - set-function-name@2.0.1: - dependencies: - define-data-property: 1.1.1 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 - setimmediate@1.0.5: {} setprototypeof@1.2.0: {} @@ -5623,58 +6325,51 @@ snapshots: charenc: 0.0.2 crypt: 0.0.2 - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} - shebang-regex@3.0.0: {} - side-channel@1.0.4: + shiki@0.14.7: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 + ansi-sequence-parser: 1.1.1 + jsonc-parser: 3.3.1 + vscode-oniguruma: 1.7.0 + vscode-textmate: 8.0.0 side-channel@1.0.6: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + get-intrinsic: 1.2.5 + object-inspect: 1.13.3 signal-exit@3.0.7: {} - slash@3.0.0: {} + signal-exit@4.1.0: {} - smartwrap@2.0.2: - dependencies: - array.prototype.flat: 1.3.2 - breakword: 1.0.6 - grapheme-splitter: 1.0.4 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - yargs: 15.4.1 + sisteransi@1.0.5: {} + + slash@3.0.0: {} - solc@0.7.3(debug@4.3.7): + solc@0.8.26(debug@4.4.0): dependencies: command-exists: 1.2.9 - commander: 3.0.2 - follow-redirects: 1.15.9(debug@4.3.7) - fs-extra: 0.30.0 + commander: 8.3.0 + follow-redirects: 1.15.9(debug@4.4.0) js-sha3: 0.8.0 memorystream: 0.3.1 - require-from-string: 2.0.2 semver: 5.7.2 tmp: 0.0.33 transitivePeerDependencies: - debug + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -5682,26 +6377,16 @@ snapshots: source-map@0.6.1: {} - spawndamnit@2.0.0: - dependencies: - cross-spawn: 5.1.0 - signal-exit: 3.0.7 - - spdx-correct@3.2.0: + spawndamnit@3.0.1: dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 + cross-spawn: 7.0.6 + signal-exit: 4.1.0 - spdx-exceptions@2.3.0: {} + sprintf-js@1.0.3: {} - spdx-expression-parse@3.0.1: + stack-utils@2.0.6: dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 - - spdx-license-ids@3.0.16: {} - - sprintf-js@1.0.3: {} + escape-string-regexp: 2.0.0 stacktrace-parser@0.1.10: dependencies: @@ -5709,9 +6394,10 @@ snapshots: statuses@2.0.1: {} - stream-transform@2.1.3: + string-length@4.0.2: dependencies: - mixme: 0.5.10 + char-regex: 1.0.2 + strip-ansi: 6.0.1 string-width@2.1.1: dependencies: @@ -5724,24 +6410,6 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string.prototype.trim@1.2.8: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - - string.prototype.trimend@1.0.7: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - - string.prototype.trimstart@1.0.7: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -5760,20 +6428,16 @@ snapshots: strip-bom@3.0.0: {} + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed: 1.0.0 - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - strip-json-comments@3.1.1: {} - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -5794,13 +6458,14 @@ snapshots: dependencies: get-port: 3.2.0 - synckit@0.9.2: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.8.1 - term-size@2.2.1: {} + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + text-table@0.2.0: {} then-request@6.0.2: @@ -5817,10 +6482,17 @@ snapshots: promise: 8.3.0 qs: 6.13.1 + tinyglobby@0.2.10: + dependencies: + fdir: 6.4.2(picomatch@4.0.2) + picomatch: 4.0.2 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 + tmpl@1.0.5: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -5829,50 +6501,69 @@ snapshots: tr46@0.0.3: {} - trim-newlines@3.0.1: {} - - ts-api-utils@1.0.3(typescript@5.3.2): + ts-api-utils@1.4.3(typescript@5.7.2): dependencies: - typescript: 5.3.2 + typescript: 5.7.2 - ts-api-utils@1.4.0(typescript@5.3.2): + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2): dependencies: - typescript: 5.3.2 + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.3 + typescript: 5.7.2 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) - ts-node@10.9.1(@types/node@17.0.45)(typescript@5.3.2): + ts-node@10.9.2(@types/node@17.0.45)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 17.0.45 acorn: 8.14.0 - acorn-walk: 8.3.0 + acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.2 + typescript: 5.7.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - tslib@1.14.1: {} + ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.17.10 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 - tslib@2.8.1: {} + tslib@1.14.1: {} tsort@0.0.1: {} - tty-table@4.2.3: - 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.2 - tweetnacl-util@0.15.1: {} tweetnacl@1.0.3: {} @@ -5881,53 +6572,48 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.13.1: {} + type-detect@4.0.8: {} - type-fest@0.21.3: {} + type-fest@0.20.2: {} - type-fest@0.6.0: {} + type-fest@0.21.3: {} type-fest@0.7.1: {} - type-fest@0.8.1: {} + typedarray@0.0.6: {} - typed-array-buffer@1.0.0: + typedoc-plugin-markdown@3.17.1(typedoc@0.25.13(typescript@5.7.2)): dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + handlebars: 4.7.8 + typedoc: 0.25.13(typescript@5.7.2) - typed-array-byte-length@1.0.0: + typedoc-theme-hierarchy@4.1.3(typedoc@0.25.13(typescript@5.7.2)): dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + fs-extra: 11.1.1 + typedoc: 0.25.13(typescript@5.7.2) - typed-array-byte-offset@1.0.0: + typedoc@0.25.13(typescript@5.7.2): dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + lunr: 2.3.9 + marked: 4.3.0 + minimatch: 9.0.5 + shiki: 0.14.7 + typescript: 5.7.2 - typed-array-length@1.0.4: + typescript-eslint@8.18.0(eslint@8.57.1)(typescript@5.7.2): dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - is-typed-array: 1.1.12 - - typedarray@0.0.6: {} + '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/parser': 8.18.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.0(eslint@8.57.1)(typescript@5.7.2) + eslint: 8.57.1 + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color - typescript@5.3.2: {} + typescript@5.7.2: {} - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.5 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + uglify-js@3.19.3: + optional: true undici-types@6.19.8: {} @@ -5937,8 +6623,16 @@ snapshots: universalify@0.1.2: {} + universalify@2.0.1: {} + unpipe@1.0.0: {} + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -5949,60 +6643,63 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - validate-npm-package-license@3.0.4: + v8-to-istanbul@9.3.0: dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 - wcwidth@1.0.1: + viem@2.21.54(typescript@5.7.2): dependencies: - defaults: 1.0.4 + '@noble/curves': 1.7.0 + '@noble/hashes': 1.6.1 + '@scure/bip32': 1.6.0 + '@scure/bip39': 1.5.0 + abitype: 1.0.7(typescript@5.7.2) + isows: 1.0.6(ws@8.18.0) + ox: 0.1.2(typescript@5.7.2) + webauthn-p256: 0.0.10 + ws: 8.18.0 + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod - webidl-conversions@3.0.1: {} + vscode-oniguruma@1.7.0: {} - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 + vscode-textmate@8.0.0: {} - which-boxed-primitive@1.0.2: + walker@1.0.8: dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-module@2.0.1: {} + makeerror: 1.0.12 - which-pm@2.0.0: + webauthn-p256@0.0.10: dependencies: - load-yaml-file: 0.2.0 - path-exists: 4.0.0 + '@noble/curves': 1.7.0 + '@noble/hashes': 1.6.1 - which-typed-array@1.1.13: - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 + webidl-conversions@3.0.1: {} - which@1.3.1: + whatwg-url@5.0.0: dependencies: - isexe: 2.0.0 + tr46: 0.0.3 + webidl-conversions: 3.0.1 which@2.0.2: dependencies: isexe: 2.0.0 - workerpool@6.5.1: {} - - wrap-ansi@6.2.0: + widest-line@3.1.0: dependencies: - ansi-styles: 4.3.0 string-width: 4.2.3 - strip-ansi: 6.0.1 + + word-wrap@1.2.5: {} + + wordwrap@1.0.0: {} + + workerpool@6.5.1: {} wrap-ansi@7.0.0: dependencies: @@ -6012,25 +6709,21 @@ snapshots: wrappy@1.0.2: {} + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + ws@7.4.6: {} ws@7.5.10: {} - y18n@4.0.3: {} + ws@8.18.0: {} y18n@5.0.8: {} - yallist@2.1.2: {} - yallist@3.1.1: {} - yallist@4.0.0: {} - - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} @@ -6042,24 +6735,10 @@ snapshots: flat: 5.0.2 is-plain-obj: 2.1.0 - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -6069,7 +6748,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/scripts/copyAbi.cjs b/scripts/copyAbi.cjs new file mode 100644 index 0000000..c4f4a43 --- /dev/null +++ b/scripts/copyAbi.cjs @@ -0,0 +1,98 @@ +const fs = require("fs"); +const path = require("path"); +const { inspect } = require("util"); + +function processAbiFile(sourcePath, destDir) { + const content = fs.readFileSync(sourcePath, "utf8"); + const fileName = path.basename(sourcePath, ".json"); + const destPath = path.join(destDir, `${fileName}.ts`); + console.log("parsing abi file", sourcePath); + // Convert JSON to TypeScript with both a named export and a default export + const tsContent = `export const ${fileName}Abi = ${JSON.stringify(JSON.parse(content), null, 2)} as const;\nexport default ${fileName}Abi;`; + fs.writeFileSync(destPath, tsContent); +} + +function copyAbiFiles(source, destDir) { + const files = fs.readdirSync(source); + + files.forEach((file) => { + const sourcePath = path.join(source, file); + + if (fs.lstatSync(sourcePath).isDirectory()) { + copyAbiFiles(sourcePath, destDir); + } else if (file.endsWith(".json")) { + processAbiFile(sourcePath, destDir); + } + }); +} + +function generateIndexFile(destDir) { + const files = fs.readdirSync(destDir); + const tsFiles = files.filter(file => file.endsWith('.ts') && file !== 'index.ts'); + + // Create imports + const imports = tsFiles + .map(file => { + const name = path.basename(file, '.ts'); + return `import { ${name}Abi } from './${name}';`; + }) + .join('\n'); + + // Create named exports + const namedExports = tsFiles + .map(file => { + const name = path.basename(file, '.ts'); + return `export { ${name}Abi } from './${name}';`; + }) + .join('\n'); + + // Create the abis object + const abiObjectEntries = tsFiles + .map(file => { + const name = path.basename(file, '.ts'); + return ` ${name}Abi`; + }) + .join(',\n'); + + const indexContent = `${imports} + +// Re-export all ABIs +${namedExports} + +// Create and export the abis object +const abis = { +${abiObjectEntries} +} as const; + +export { abis }; +export default abis; +`; + + fs.writeFileSync(path.join(destDir, 'index.ts'), indexContent); +} + +// Ensure src/abis directory exists +const abiDestDir = path.join(__dirname, "../src/abis"); +if (!fs.existsSync(abiDestDir)) { + fs.mkdirSync(abiDestDir, { recursive: true }); +} + +// Copy rankify-contracts ABIs +const rankifyAbiSource = path.join(__dirname, "../node_modules/rankify-contracts/abi"); +if (fs.existsSync(rankifyAbiSource)) { + copyAbiFiles(rankifyAbiSource, abiDestDir); +} + +// Copy @peeramid-labs ABIs +const peeramidDir = path.join(__dirname, "../node_modules/@peeramid-labs"); +if (fs.existsSync(peeramidDir)) { + fs.readdirSync(peeramidDir).forEach((pkg) => { + const abiDir = path.join(peeramidDir, pkg, "abi"); + if (fs.existsSync(abiDir)) { + copyAbiFiles(abiDir, abiDestDir); + } + }); +} + +// Generate index file +generateIndexFile(abiDestDir); diff --git a/copyPackageFile.js b/scripts/copyPackageFile.cjs similarity index 71% rename from copyPackageFile.js rename to scripts/copyPackageFile.cjs index b9a82a2..cc327ea 100644 --- a/copyPackageFile.js +++ b/scripts/copyPackageFile.cjs @@ -2,21 +2,22 @@ const { writeFileSync } = require("fs"); const path = require("path"); const stage = process.argv[2]; const copyPackageFile = () => { - const packageJson = require("./package.json"); + const packageJson = require("../package.json"); console.log("pv", packageJson.version); delete packageJson.private; console.log("stage is", stage); - if (stage === "dev") { - packageJson.dependencies["rankify-contracts"] = "file:../../contracts"; - } + // if (stage === "dev") { + // packageJson.dependencies["rankify-contracts"] = "file:../../contracts"; + // } packageJson.type = "commonjs"; packageJson.main = "./lib.commonjs/index.js"; packageJson.module = "./lib.esm/index.js"; packageJson.exports["."] = { require: "./lib.commonjs/index.js", + import: "./lib.esm/index.js", default: "./lib.esm/index.js", }; - const tsconfig = require("./tsconfig.json"); + const tsconfig = require("../tsconfig.json"); writeFileSync(path.join(tsconfig.compilerOptions.outDir, "package.json"), JSON.stringify(packageJson, null, 2)); }; diff --git a/scripts/generateChainMapping.mjs b/scripts/generateChainMapping.mjs new file mode 100644 index 0000000..67ef2ab --- /dev/null +++ b/scripts/generateChainMapping.mjs @@ -0,0 +1,122 @@ +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; +import { exec } from "child_process"; +import { promisify } from "util"; + +const execAsync = promisify(exec); +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const PACKAGES_WITH_DEPLOYMENTS = ["@peeramid-labs/multipass", "rankify-contracts"]; + +function findDeploymentDirs(packagePath) { + try { + const deploymentsPath = path.join(packagePath, "deployments"); + if (!fs.existsSync(deploymentsPath)) return []; + + return fs.readdirSync(deploymentsPath).filter((dir) => { + try { + return fs.statSync(path.join(deploymentsPath, dir)).isDirectory(); + } catch (err) { + console.warn(`Error checking directory ${dir}:`, err); + return false; + } + }); + } catch (err) { + console.warn(`Error reading deployments directory:`, err); + return []; + } +} + +function getChainId(packagePath, deploymentDir) { + try { + const chainIdPath = path.join(packagePath, "deployments", deploymentDir, ".chainId"); + if (!fs.existsSync(chainIdPath)) { + console.warn(`No .chainId file found in ${deploymentDir}`); + return null; + } + + const chainId = fs.readFileSync(chainIdPath, "utf-8").trim(); + const parsedId = parseInt(chainId, 10); + if (isNaN(parsedId)) { + console.warn(`Invalid chain ID in ${chainIdPath}: ${chainId}`); + return null; + } + return parsedId; + } catch (err) { + console.warn(`Error reading chainId for ${deploymentDir}:`, err); + return null; + } +} + +async function formatFile(filePath) { + try { + console.log("Running prettier..."); + await execAsync(`pnpm prettier --write "${filePath}"`); + console.log("Running eslint..."); + await execAsync(`pnpm eslint --fix "${filePath}"`); + console.log("Formatting complete!"); + } catch (err) { + console.warn("Error running formatters:", err); + } +} + +async function generateMapping() { + try { + const mapping = { + 31337: "localhost", + }; + const projectRoot = path.resolve(__dirname, ".."); + + for (const pkg of PACKAGES_WITH_DEPLOYMENTS) { + const packagePath = path.join(projectRoot, "node_modules", pkg); + if (!fs.existsSync(packagePath)) { + console.warn(`Package ${pkg} not found in node_modules`); + continue; + } + + const deploymentDirs = findDeploymentDirs(packagePath); + console.log(`Found deployment directories for ${pkg}:`, deploymentDirs); + + for (const dir of deploymentDirs) { + const chainId = getChainId(packagePath, dir); + if (chainId !== null) { + mapping[chainId] = dir; + console.log(`Mapped chain ID ${chainId} to ${dir}`); + } + } + } + + // Generate TypeScript file + const tsContent = `// This file is auto-generated. Do not edit manually. +export type ChainMapping = Record; + +export const chainToPath: ChainMapping = ${JSON.stringify(mapping, null, 2)} as const; + +export function getChainPath(chainId: number): string { + const path = chainToPath[chainId.toString() as keyof typeof chainToPath]; + if (!path) { + throw new Error(\`Chain ID \${chainId} is not supported\`); + } + return path; +} +`; + + const outputPath = path.join(projectRoot, "src", "utils", "chainMapping.ts"); + fs.writeFileSync(outputPath, tsContent); + console.log(`Chain mapping generated successfully at ${outputPath}`); + console.log("Mapping contents:", mapping); + + // Format the generated file + await formatFile(outputPath); + } catch (err) { + console.error("Error generating chain mapping:", err); + process.exit(1); + } +} + +generateMapping().catch((err) => { + console.error("Unhandled error:", err); + process.exit(1); +}); diff --git a/scripts/setup-local-dev.sh b/scripts/setup-local-dev.sh new file mode 100755 index 0000000..42b73e8 --- /dev/null +++ b/scripts/setup-local-dev.sh @@ -0,0 +1,111 @@ +#!/bin/bash + +# Source .env file if it exists +if [ -f "$(dirname "$0")/../.env" ]; then + source "$(dirname "$0")/../.env" +fi + +# Set default environment variables if not set +export NODE_ENV="${NODE_ENV:-TEST}" +export FORK_RPC_URL="${FORK_RPC_URL:-https://arb1.arbitrum.io/rpc}" + +# Exit on error +set -e + +# Function to check if tmux session exists +tmux_session_exists() { + tmux has-session -t $1 2>/dev/null +} + +# Function to start anvil in tmux if not already running +start_anvil() { + if ! tmux_session_exists "anvil"; then + echo "🔨 Starting Anvil development network in tmux session..." + tmux new-session -d -s anvil "anvil -m 'casual vacant letter raw trend tool vacant opera buzz jaguar bridge myself'" + sleep 2 + + # Check if anvil started successfully by looking for its output in tmux + if ! tmux capture-pane -pt anvil | grep -q "Listening on"; then + echo "Error: Failed to start Anvil" + exit 1 + fi + echo "✅ Anvil started successfully in tmux session 'anvil'" + else + echo "✅ Anvil already running in tmux session 'anvil'" + fi +} + +# Check required environment variables +required_vars=( + "RANKIFY_CONTRACTS_PATH" + "EDS_PATH" + "MULTIPASS_PATH" +) + +for var in "${required_vars[@]}"; do + if [ -z "${!var}" ]; then + echo "Error: $var environment variable is not set" + exit 1 + fi +done + +# Always try to start anvil, but it will skip if already running +start_anvil + +echo "🚀 Setting up local development environment..." + +# Function to setup a repository +setup_repo() { + local repo_path=$1 + local repo_name=$2 + + echo "📦 Setting up $repo_name..." + + # Check if directory exists + if [ ! -d "$repo_path" ]; then + echo "Error: $repo_name directory not found at $repo_path" + exit 1 + fi + + # Navigate to repository + cd "$repo_path" + + # Install dependencies + echo "Installing dependencies for $repo_name..." + pnpm install + + # Run local deployment script + if [ -f "playbook/utils/deploy-to-local-anvil.sh" ]; then + echo "Deploying $repo_name contracts..." + pnpm hardhat clean + pnpm hardhat compile + bash playbook/utils/deploy-to-local-anvil.sh + else + echo "Warning: deployment script not found for $repo_name" + fi + + # Return to original directory + cd - +} + +# Setup each repository +setup_repo "$EDS_PATH" "eds" +setup_repo "$MULTIPASS_PATH" "multipass" +setup_repo "$RANKIFY_CONTRACTS_PATH" "rankify-contracts" + +# Link dependencies in SDK +echo "🔗 Linking dependencies in SDK..." +cd "$(dirname "$0")/.." +pnpm install + +# Create local links +echo "Creating local links..." +pnpm link "$RANKIFY_CONTRACTS_PATH" +pnpm link "$EDS_PATH" +pnpm link "$MULTIPASS_PATH" + +echo "✅ Local development environment setup complete!" +echo "🔨 Anvil is running in tmux session 'anvil'" +echo "To view Anvil logs: tmux attach -t anvil" +echo "To detach from Anvil logs: Ctrl+B then D" +echo "To stop Anvil: tmux kill-session -t anvil" diff --git a/src/RankToken.ts b/src/RankToken.ts deleted file mode 100644 index 5ce2840..0000000 --- a/src/RankToken.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ethers, BigNumberish } from "ethers"; -import RankifyBase from "./RankifyBase"; -import { SupportedChains, getArtifact } from "./utils/artifacts"; - -export default class RankToken { - provider: ethers.providers.JsonRpcProvider; - chain: SupportedChains; - - constructor({ provider, chain }: { provider: ethers.providers.JsonRpcProvider; chain: SupportedChains }) { - this.provider = provider; - this.chain = chain; - } -} diff --git a/src/RankifyBase.ts b/src/RankifyBase.ts deleted file mode 100644 index 6788659..0000000 --- a/src/RankifyBase.ts +++ /dev/null @@ -1,334 +0,0 @@ -import { ethers, BigNumberish, BigNumber } from "ethers"; -import { TurnEndedEventObject } from "rankify-contracts/types/hardhat-diamond-abi/HardhatDiamondABI.sol/RankifyDiamondInstance"; -import { SupportedChains, ArtifactTypes, getArtifact, ApiError, ArtifactContractInterfaces } from "./utils/index"; -import { RankifyDiamondInstance } from "rankify-contracts/types"; -import { deepArrayToObject } from "./utils"; -enum gameStatusEnum { - created = "Game created", - open = "Registration open", - started = "In progress", - lastTurn = "Playing last turn", - overtime = "PLaying in overtime", - finished = "Finished", - notFound = "not found", -} - -export default class RankifyBase { - provider: ethers.providers.JsonRpcProvider; - chain: SupportedChains; - - constructor({ provider, chain }: { provider: ethers.providers.JsonRpcProvider; chain: SupportedChains }) { - this.provider = provider; - this.chain = chain; - } - - /** - * Retrieves the contract instance for the specified chain using the provided provider. - * @param chain The supported chain for the contract. - * @param provider The Web3Provider or Signer instance used for interacting with the blockchain. - * @returns The contract instance. - */ - getContract = (artifactName: T) => { - const artifact = getArtifact(this.chain, artifactName); - - return new ethers.Contract(artifact.address, artifact.abi, this.provider) as ArtifactContractInterfaces[T]; - }; - - /** - * Retrieves the historic turn information for a specific game and turn ID. - * @param chain - The supported blockchain network. - * @param provider - The Web3 provider. - * @returns The historic turn event object. - * @throws {ApiError} If the game or turn is not found. - */ - getHistoricTurn = async (gameId: BigNumberish, turnId: BigNumberish) => { - const contract = this.getContract("RankifyInstance"); - //list all events of gameId that ended turnId. - const filterTurnEnded = contract.filters.TurnEnded(gameId, turnId); - const turnEndedEvents = await contract.queryFilter(filterTurnEnded, 0, "latest"); - //There shall be only one such event - if (turnEndedEvents.length !== 1) { - console.error("getHistoricTurn", gameId, turnId, "failed:", turnEndedEvents.length); - const err = new ApiError("Game not found", { status: 404 }); - throw err; - } - return { ...turnEndedEvents[turnEndedEvents.length - 1] }; - }; - - /** - * Retrieves the statistics of the previous turn for a specific game. - * If the current turn is greater than 1, it calls the `getHistoricTurn` function to retrieve the statistics of the previous turn. - * If the current turn is 1 or less, it returns a default object with "N/A" values. - * - * @param chain - The supported chain for the game. - * @param provider - The Web3 provider. - * @param gameId - The ID of the game. - * @returns The statistics of the previous turn. - */ - getPreviousTurnStats = async (gameId: BigNumberish) => { - const contract = this.getContract("RankifyInstance"); - const currentTurn = await contract.getTurn(gameId); - if (currentTurn.gt(1)) { - return this.getHistoricTurn(gameId, currentTurn.sub(1)); - } else { - return { - players: "N/A", - scores: "N/A", - turnSalt: "N/A", - voters: ["N/A"], - votesRevealed: ["N/A"], - }; - } - }; - - /** - * Retrieves the voting information for a specific game and turn. - * @param chain - The supported chain for the voting. - * @param signer - The JSON-RPC signer for the voting contract. - * @returns An object containing the vote events and fixed proposal arguments. - * @throws Error if gameId or turnId is not set. - */ - getVoting = async (gameId: BigNumberish, turnId: BigNumberish) => { - if (!gameId) throw new Error("gameId not set"); - if (!turnId) throw new Error("turnId not set"); - const contract = this.getContract("RankifyInstance"); - const filterVoteEvent = contract.filters.VoteSubmitted(gameId, turnId); - const filterProposalEvent = contract.filters.ProposalSubmitted(gameId, turnId, null, null, null); - const proposalEvents = await contract.queryFilter(filterProposalEvent, 0, "latest"); - const voteEvents = await contract.queryFilter(filterVoteEvent, 0, "latest"); - const fixedProposalArgs = proposalEvents.map((event) => { - return { - ...event, - args: { - gameId: event.args[0], - turn: event.args[1], - proposer: event.args[2], - commitmentHash: event.args[3], - proposalEncryptedByGM: event.args[4], - }, - }; - }); - - // for (const filterProposalEvent in filterProposalEvents.topics) { - // if (filterProposalEvent) - // proposals.push(contract.interface.parseLog({ log: proposalEvent })); - // } - // for (const voteEvent in voteEvents) { - // playersVoted.push(voteEvent[2]); - // } - return { voteEvents, proposalEvents: fixedProposalArgs }; - }; - - /** - * Retrieves the ongoing voting for a specific game. - * - * @param {object} options - The options for retrieving the ongoing voting. - * @param {SupportedChains} options.chain - The supported chain for the voting. - * @param {ethers.providers.JsonRpcSigner} options.signer - The signer for the voting. - * @returns {Promise>} - A promise that resolves to the ongoing voting for the specified game. - */ - getOngoingVoting = async (gameId: BigNumberish) => { - return this.getContract("RankifyInstance") - .getTurn(gameId) - .then((turn) => this.getVoting(gameId, turn)); - }; - - /** - * Retrieves the ongoing proposals for a specific game on a supported chain. - * - * @param chainName - The name of the supported chain. - * @param provider - The Web3Provider instance. - * @param gameId - The ID of the game. - * @returns The ongoing proposals for the specified game. - */ - getOngoingProposals = async (gameId: BigNumberish) => { - const contract = this.getContract("RankifyInstance"); - const currentTurn = await contract.getTurn(gameId); - //list all events of gameId that ended turnId. - const filter = contract.filters.TurnEnded(gameId, currentTurn.sub(1)); - const TurnEndedEvents = await contract.queryFilter(filter, 0, "latest"); - const args = contract.interface.parseLog(TurnEndedEvents[0]).args as any as TurnEndedEventObject; - return args.newProposals; - }; - - /** - * Retrieves the registration deadline for a specific game on a supported blockchain. - * @param chainName - The name of the blockchain. - * @param provider - The Web3Provider instance. - * @param gameId - The ID of the game. - * @param timeToJoin - Optional. The additional time (in seconds) to join the game. - * @returns A Promise that resolves to the registration deadline timestamp. - */ - getRegistrationDeadline = async (gameId: BigNumberish, timeToJoin?: number) => { - const contract = this.getContract("RankifyInstance"); - const filter = contract.filters.RegistrationOpen(gameId); - return contract.queryFilter(filter, 0, "latest").then((events) => - events[0].getBlock().then(async (block) => { - if (timeToJoin) return block.timestamp + timeToJoin; - else return contract.getContractState().then((cs) => block.timestamp + cs.TBGSEttings.timeToJoin.toNumber()); - }), - ); - }; - - /** - * Resolves the deadline for the current turn. - * If `timePerTurn` is provided, the deadline is calculated by adding `timePerTurn` to the current block timestamp. - * Otherwise, the deadline is obtained from the contract state and calculated by adding `timePerTurn` to the current block timestamp. - * @param block The current block. - * @param contract The RankifyDiamondInstance contract. - * @param timePerTurn The time duration per turn (optional). - * @returns The deadline for the current turn. - */ - resolveTurnDeadline = async ( - block: ethers.providers.Block, - contract: RankifyDiamondInstance, - timePerTurn?: number, - ) => { - if (timePerTurn) return block.timestamp + timePerTurn; - return contract.getContractState().then((cs) => cs.TBGSEttings.timePerTurn.toNumber() + block.timestamp); - }; - - /** - * Retrieves the deadline for the current turn in a game. - * - * @param chainName - The name of the blockchain network. - * @param provider - The Web3Provider instance. - * @param gameId - The ID of the game. - * @param timePerTurn - Optional. The duration of each turn in seconds. - * @returns A Promise that resolves to the deadline for the current turn, or 0 if the turn has not started. - * @throws An error if the gameId is not set. - */ - getTurnDeadline = async (gameId: BigNumberish, timePerTurn?: number) => { - if (!gameId) throw new Error("gameId not set"); - const contract = this.getContract("RankifyInstance"); - - return contract.getTurn(gameId).then(async (ct) => { - if (ct.eq(0)) return 0; - const filter = ct.eq(1) ? contract.filters.GameStarted(gameId) : contract.filters.TurnEnded(gameId, ct.sub(1)); - return contract - .queryFilter(filter, 0, "latest") - .then(async (evts) => - evts[0].getBlock().then(async (block) => this.resolveTurnDeadline(block, contract, timePerTurn)), - ); - }); - }; - getContractState = async () => { - const contract = this.getContract("RankifyInstance"); - const cs = await contract.getContractState().then((x) => deepArrayToObject(x)); - return cs; - }; - - getPlayersGame = async (account: string) => { - const contract = this.getContract("RankifyInstance"); - return contract.getPlayersGame(account); - }; - - getRankTokenURI = async () => { - const contract = this.getContract("RankToken"); - return contract.contractURI().then((x) => deepArrayToObject(x)); - }; - - getRankTokenBalance = async (tokenId: string, account: string) => { - const contract = this.getContract("RankToken"); - return contract.balanceOf(account, tokenId); - }; - - /** - * Retrieves the list of proposal scores for a specific game. - * @param gameId - The ID of the game. - * @returns A Promise that resolves to the list of proposal scores. - * @throws An error if the gameId is not set. - */ - getProposalScoresList = async (gameId: string) => { - if (!gameId) throw new Error("gameId not set"); - const contract = this.getContract("RankifyInstance"); - const proposalScoreFilter = contract.filters.ProposalScore(gameId); - const res = await contract.queryFilter(proposalScoreFilter, 0, "latest"); - return deepArrayToObject(res); - }; - - /** - * Retrieves the current turn of a game. - * @param gameId - The ID of the game. - * @returns A Promise that resolves to the current turn of the game. - */ - getCurrentTurn = async (gameId: string) => { - const contract = this.getContract("RankifyInstance"); - const currentTurn = await contract.getTurn(gameId); - return currentTurn; - }; - - /** - * Retrieves the game state for a specific game. - * @param gameId - The ID of the game. - * @returns A promise that resolves to an object containing the game state. - */ - getGameState = async (gameId: string) => { - const contract = this.getContract("RankifyInstance"); - const gameMaster = await contract.getGM(gameId); - const joinRequirements = await contract.getJoinRequirements(gameId); - const requirementsPerContract = await Promise.all( - joinRequirements.contractAddresses.map(async (address, idx) => { - return contract.getJoinRequirementsByToken( - gameId, - address, - joinRequirements.contractIds[idx], - joinRequirements.contractTypes[idx], - ); - }), - ); - const promises: any[] = []; - - promises.push(contract.getScores(gameId)); - promises.push(contract.getTurn(gameId)); - promises.push(contract.isGameOver(gameId)); - promises.push(contract.isOvertime(gameId)); - promises.push(contract.isLastTurn(gameId)); - promises.push(contract.isRegistrationOpen(gameId)); - promises.push(contract.gameCreator(gameId)); - promises.push(contract.getGameRank(gameId)); - promises.push(contract.getPlayers(gameId)); - promises.push(contract.canStartGame(gameId)); - return Promise.all(promises).then((values) => { - const scores = values[0] as [string, BigNumber]; - const currentTurn = values[1] as BigNumber; - const isFinished = values[2] as boolean; - const isOvertime = values[3] as boolean; - const isLastTurn = values[4] as boolean; - const isOpen = values[5] as boolean; - const createdBy = values[6] as string; - const gameRank = values[7] as BigNumber; - const players = values[8] as string[]; - const canStart = values[9] as boolean; - const gamePhase = (isFinished as boolean) - ? gameStatusEnum["finished"] - : isOvertime - ? gameStatusEnum["overtime"] - : isLastTurn - ? gameStatusEnum["lastTurn"] - : currentTurn.gt(0) - ? gameStatusEnum["started"] - : isOpen - ? gameStatusEnum["open"] - : gameMaster - ? gameStatusEnum["created"] - : gameStatusEnum["notFound"]; - return { - gameMaster, - joinRequirements, - requirementsPerContract, - scores, - currentTurn, - isFinished, - isOvertime, - isLastTurn, - isOpen, - createdBy, - gameRank, - players, - canStart, - gamePhase, - }; - }); - }; -} diff --git a/src/RankifyPlayer.ts b/src/RankifyPlayer.ts deleted file mode 100644 index fff6f7d..0000000 --- a/src/RankifyPlayer.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { ethers, BigNumberish } from "ethers"; -import RankifyBase from "./RankifyBase"; -import { SupportedChains, getArtifact } from "./utils/artifacts"; -import { LibCoinVending } from "rankify-contracts/types/hardhat-diamond-abi/HardhatDiamondABI.sol/RankifyDiamondInstance"; - -export default class RankifyPlayer extends RankifyBase { - signer: ethers.providers.JsonRpcSigner; - constructor({ - signer, - chain, - }: { - signer: ethers.providers.JsonRpcSigner; - - chain: SupportedChains; - }) { - super({ - provider: signer.provider, - chain, - }); - this.signer = signer; - } - /** - * Approves tokens if needed. - * - * @param value - The value of tokens to approve. - * @param chain - The supported chain. - * @param signer - The JSON-RPC signer. - * @returns A promise that resolves to the transaction receipt or 0 if no tokens need to be approved. - */ - approveTokensIfNeeded = async (value: BigNumberish) => { - if (ethers.BigNumber.from(value).gt(0)) { - return this.getContract("Rankify") - .connect(this.signer) - .increaseAllowance(getArtifact(this.chain, "RankifyInstance").address, value) - .then((tx) => tx.wait(1)); - } else return 0; - }; - - createGame = async (gameMaster: string, gameRank: string, gameId?: BigNumberish) => { - const contract = this.getContract("RankifyInstance").connect(this.signer); - return contract.getContractState().then(async (reqs) => - this.approveTokensIfNeeded(reqs.BestOfState.gamePrice).then(() => { - if (gameId) { - return contract["createGame(address,uint256,uint256)"](gameMaster, gameId, gameRank); - } else { - return contract["createGame(address,uint256)"](gameMaster, gameRank); - } - }), - ); - }; - - /** - * Joins a game on the specified chain using the provided signer. - * @param chain - The supported chain on which the game is being joined. - * @param signer - The JSON-RPC signer used for signing the transaction. - * @returns A promise that resolves to the transaction receipt once the join transaction is confirmed. - */ - joinGame = async (gameId: string) => { - const contract = this.getContract("RankifyInstance").connect(this.signer); - - const reqs = await contract.getJoinRequirements(gameId); - const values = reqs.ethValues; - - const value = values.bet.add(values.burn).add(values.pay); - - return contract.joinGame(gameId, { value: value.toString() ?? "0" }).then((tx) => tx.wait(1)); - }; - - /** - * Starts a game on the specified chain using the provided signer. - * @param chain The supported chain on which the game will be started. - * @param signer The JSON-RPC signer used to sign the transaction. - * @returns A promise that resolves to the result of the startGame transaction. - */ - startGame = async (gameId: string) => { - const contract = this.getContract("RankifyInstance").connect(this.signer); - return await contract.startGame(gameId); - }; - - /** - * Cancels a game. - * - * @param chain - The supported blockchain network. - * @param signer - The JSON-RPC signer. - * @returns A promise that resolves to the result of cancelling the game. - */ - cancelGame = async (gameId: string) => { - const contract = this.getContract("RankifyInstance").connect(this.signer); - return await contract.cancelGame(gameId); - }; - - /** - * Leaves a game. - * @param chain - The blockchain network. - * @param signer - The signer object. - * @returns A promise that resolves to the transaction receipt. - */ - leaveGame = async (gameId: string) => { - const contract = this.getContract("RankifyInstance").connect(this.signer); - return contract.leaveGame(gameId).then((tx) => tx.wait(1)); - }; - - /** - * Opens the registration for a game on the specified chain using the provided signer. - * @param chain - The supported chain on which the game is being played. - * @param signer - The JSON-RPC signer used to interact with the blockchain. - * @returns A promise that resolves to the result of opening the registration. - */ - openRegistration = async (gameId: string) => { - const contract = this.getContract("RankifyInstance").connect(this.signer); - return await contract.openRegistration(gameId); - }; - - /** - * Sets the join requirements for a game on the specified chain using the provided signer. - * - * @param chain - The supported chain on which the game is being played. - * @param signer - The JSON-RPC signer used to interact with the contract. - * @returns A promise that resolves to the result of setting the join requirements. - */ - setJoinRequirements = async (gameId: string, config: LibCoinVending.ConfigPositionStruct) => { - const contract = this.getContract("RankifyInstance").connect(this.signer); - return await contract.setJoinRequirements(gameId, config); - }; -} diff --git a/src/eds/Distributor.ts b/src/eds/Distributor.ts new file mode 100644 index 0000000..d408d82 --- /dev/null +++ b/src/eds/Distributor.ts @@ -0,0 +1,73 @@ +import { type Address, stringToHex, getContract, Hex, PublicClient, getAddress } from "viem"; +import DistributorAbi from "../abis/Distributor"; + +export class DistributorClient { + publicClient: PublicClient; + address: Address; + + constructor({ address, publicClient }: { address: Address; publicClient: PublicClient }) { + this.address = getAddress(address, publicClient?.chain?.id); + this.publicClient = publicClient; + } + + async getDistributions() { + const contract = getContract({ + address: getAddress(this.address), + abi: DistributorAbi, + client: this.publicClient, + }); + return contract.read.getDistributions(); + } + + async getInstances(distributorsId: Hex): Promise { + const contract = getContract({ + address: this.address, + abi: DistributorAbi, + client: this.publicClient, + }); + + const events = await contract.getEvents.Instantiated( + { + distributionId: distributorsId, + }, + { toBlock: "latest", fromBlock: 1n } //ToDo: Parametrize this + ); + + return events.map((log) => log.args.instances as Address[]); + } + + async getInstance(distributorsId: Hex, instanceId: bigint): Promise { + const contract = getContract({ + address: this.address, + abi: DistributorAbi, + client: this.publicClient, + }); + + const events = await contract.getEvents.Instantiated( + { + distributionId: distributorsId, + newInstanceId: instanceId, + }, + { toBlock: "latest", fromBlock: 1n } //ToDo: Parametrize this + ); + + if (events.length > 1) { + throw new Error(`Multiple instances found for distributor ${distributorsId} and instance ${instanceId}`); + } + if (events.length === 0) { + throw new Error(`No instances found for distributor ${distributorsId} and instance ${instanceId}`); + } + + return events[0].args.instances as Address[]; + } + + async getNamedDistributionInstances({ namedDistribution }: { namedDistribution: string }): Promise { + const id = stringToHex(namedDistribution, { size: 32 }); + return this.getInstances(id); + } + + async getNamedDistributionInstance(namedDistribution: string, instanceId: bigint): Promise { + const id = stringToHex(namedDistribution, { size: 32 }); + return this.getInstance(id, instanceId); + } +} diff --git a/src/eds/__tests__/Distributor.test.ts b/src/eds/__tests__/Distributor.test.ts new file mode 100644 index 0000000..7fa8b41 --- /dev/null +++ b/src/eds/__tests__/Distributor.test.ts @@ -0,0 +1,284 @@ +import { describe, expect, test, jest } from "@jest/globals"; +import { DistributorClient } from "../Distributor"; +import { createPublicClient, getContract, GetContractEventsReturnType } from "viem"; +import { Address } from "viem"; +import { DistributorAbi } from "../../abis/Distributor"; + +// Mock viem +jest.mock("viem", () => ({ + ...(jest.requireActual("viem") as object), + getContract: jest.fn(), + createPublicClient: jest.fn(), + http: jest.fn(), +})); + +// Mock data +const mockDistributorAddress = "0x1234567890123456789012345678901234567890"; + +describe("DistributorClient", () => { + // Mock public client + const mockPublicClient = { + request: jest.fn(), + }; + (createPublicClient as jest.Mock).mockReturnValue(mockPublicClient); + + const distributor = new DistributorClient({ + address: mockDistributorAddress as Address, + // eslint-disable-next-line + publicClient: mockPublicClient as any, + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe("getDistributions", () => { + test("should return distributions", async () => { + const mockContract = { + read: { + getDistributions: jest.fn<() => Promise>().mockResolvedValue([1n, 2n, 3n]), + }, + }; + (getContract as jest.Mock).mockReturnValue(mockContract); + + const result = await distributor.getDistributions(); + expect(result).toEqual([1n, 2n, 3n]); + expect(getContract).toHaveBeenCalledWith({ + address: mockDistributorAddress, + abi: DistributorAbi, + client: mockPublicClient, + }); + }); + }); + + describe("getInstances", () => { + test("should return instances for a distribution ID", async () => { + const mockInstances: Address[][] = [ + ["0x1234", "0x5678"], + ["0x9abc", "0xdef0"], + ]; + const resolved: GetContractEventsReturnType = []; + resolved.push({ + args: { instances: mockInstances[0] }, + address: "0x1234567890123456789012345678901234567890", + blockHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + blockNumber: BigInt(1), + data: "0x", + logIndex: 0, + transactionHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + transactionIndex: 0, + removed: false, + eventName: "Instantiated", + topics: ["0x0", "0x1", "0x2", "0x3"], + }); + resolved.push({ + args: { instances: mockInstances[1] }, + address: "0x1234567890123456789012345678901234567890", + blockHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + blockNumber: BigInt(1), + data: "0x", + logIndex: 0, + transactionHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + transactionIndex: 0, + removed: false, + eventName: "Instantiated", + topics: ["0x0", "0x1", "0x2", "0x3"], + }); + + const mockContract = { + getEvents: { + Instantiated: jest + .fn<() => Promise>>() + .mockResolvedValue(resolved), + }, + }; + (getContract as jest.Mock).mockReturnValue(mockContract); + + const result = await distributor.getInstances("0x123"); + expect(result).toEqual(mockInstances); + expect(getContract).toHaveBeenCalledWith({ + address: mockDistributorAddress, + abi: DistributorAbi, + client: mockPublicClient, + }); + expect(mockContract.getEvents.Instantiated).toHaveBeenCalledWith( + { + distributionId: "0x123", + }, + { fromBlock: 1n, toBlock: "latest" } + ); + }); + }); + + describe("getInstance", () => { + test("should return instance for a distribution ID and instance ID", async () => { + const mockInstances: Address[] = ["0x1234", "0x5678"]; + const mockContract = { + getEvents: { + Instantiated: jest + .fn<() => Promise>>() + .mockResolvedValue([ + { + args: { instances: mockInstances }, + address: "0x1234567890123456789012345678901234567890", + blockHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + blockNumber: BigInt(1), + data: "0x", + logIndex: 0, + transactionHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + transactionIndex: 0, + removed: false, + eventName: "Instantiated", + topics: ["0x0", "0x1", "0x2", "0x3"], + }, + ]), + }, + }; + (getContract as jest.Mock).mockReturnValue(mockContract); + + const result = await distributor.getInstance("0x123", 1n); + expect(result).toEqual(mockInstances); + expect(getContract).toHaveBeenCalledWith({ + address: mockDistributorAddress, + abi: DistributorAbi, + client: mockPublicClient, + }); + expect(mockContract.getEvents.Instantiated).toHaveBeenCalledWith( + { + distributionId: "0x123", + newInstanceId: 1n, + }, + { fromBlock: 1n, toBlock: "latest" } + ); + }); + + test("should throw error when multiple instances found", async () => { + const mockContract = { + getEvents: { + Instantiated: jest + .fn<() => Promise>>() + .mockResolvedValue([ + { + args: { instances: ["0x1234"] }, + address: "0x1234567890123456789012345678901234567890", + blockHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + blockNumber: BigInt(1), + data: "0x", + logIndex: 0, + transactionHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + transactionIndex: 0, + removed: false, + eventName: "Instantiated", + topics: ["0x0", "0x1", "0x2", "0x3"], + }, + { + args: { instances: ["0x5678"] }, + address: "0x1234567890123456789012345678901234567890", + blockHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + blockNumber: BigInt(1), + data: "0x", + logIndex: 1, + transactionHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + transactionIndex: 0, + removed: false, + eventName: "Instantiated", + topics: ["0x0", "0x1", "0x2", "0x3"], + }, + ]), + }, + }; + (getContract as jest.Mock).mockReturnValue(mockContract); + + await expect(distributor.getInstance("0x123", 1n)).rejects.toThrow( + "Multiple instances found for distributor 0x123 and instance 1" + ); + }); + + test("should throw error when no instances found", async () => { + const mockContract = { + getEvents: { + Instantiated: jest + .fn<() => Promise>>() + .mockResolvedValue([]), + }, + }; + (getContract as jest.Mock).mockReturnValue(mockContract); + + await expect(distributor.getInstance("0x123", 1n)).rejects.toThrow( + "No instances found for distributor 0x123 and instance 1" + ); + }); + }); + + describe("getNamedDistributionInstances", () => { + test("should convert name to hex and return instances", async () => { + const mockInstances: Address[][] = [["0x1234", "0x5678"]]; + const mockContract = { + getEvents: { + Instantiated: jest + .fn<() => Promise>>() + .mockResolvedValue([ + { + args: { instances: mockInstances[0] }, + address: "0x1234567890123456789012345678901234567890", + blockHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + blockNumber: BigInt(1), + data: "0x", + logIndex: 0, + transactionHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + transactionIndex: 0, + removed: false, + eventName: "Instantiated", + topics: ["0x0", "0x1", "0x2", "0x3"], + }, + ]), + }, + }; + (getContract as jest.Mock).mockReturnValue(mockContract); + + const result = await distributor.getNamedDistributionInstances({ namedDistribution: "test" }); + expect(result).toEqual(mockInstances); + expect(getContract).toHaveBeenCalledWith({ + address: mockDistributorAddress, + abi: DistributorAbi, + client: mockPublicClient, + }); + }); + }); + + describe("getNamedDistributionInstance", () => { + test("should convert name to hex and return specific instance", async () => { + const mockInstances: Address[] = ["0x1234", "0x5678"]; + const mockContract = { + getEvents: { + Instantiated: jest + .fn<() => Promise>>() + .mockResolvedValue([ + { + args: { instances: mockInstances }, + address: "0x1234567890123456789012345678901234567890", + blockHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + blockNumber: BigInt(1), + data: "0x", + logIndex: 0, + transactionHash: "0x1234567890123456789012345678901234567890123456789012345678901234", + transactionIndex: 0, + removed: false, + eventName: "Instantiated", + topics: ["0x0", "0x1", "0x2", "0x3"], + }, + ]), + }, + }; + (getContract as jest.Mock).mockReturnValue(mockContract); + + const result = await distributor.getNamedDistributionInstance("test", 1n); + expect(result).toEqual(mockInstances); + expect(getContract).toHaveBeenCalledWith({ + address: mockDistributorAddress, + abi: DistributorAbi, + client: mockPublicClient, + }); + }); + }); +}); diff --git a/src/index.ts b/src/index.ts index bb34a7c..f576885 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,23 @@ -export { default as Multipass } from "./multipass"; -export { default as InstanceBase } from "./RankifyBase"; -export { default as InstancePlayer } from "./RankifyPlayer"; +/** + * @file Main entry point for the Rankify SDK + * Exports core components and utilities for interacting with Peeramid protocol + */ + +// Core exports +export { default as Multipass } from "./multipass/Registrar"; +export { default as InstanceBase } from "./rankify/InstanceBase"; +export { default as InstancePlayer } from "./rankify/Player"; +export { default as MultipassBase, NameQuery } from "./multipass/MultipassBase"; +export { default as Registrar } from "./multipass/Registrar"; + +// Utility exports export * from "./utils"; export * from "./types"; +export * from "./rankify/MAODistributor"; + +// Type exports +export { gameStatusEnum } from "./rankify/InstanceBase"; +export { MAOInstances } from "./types/contracts"; + +// Re-export the abis object +export { abis } from "./abis/index"; diff --git a/src/multipass.ts b/src/multipass.ts deleted file mode 100644 index 24a23ea..0000000 --- a/src/multipass.ts +++ /dev/null @@ -1,203 +0,0 @@ -import { ethers, Wallet } from "ethers"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import { LibMultipass } from "@peeramid-labs/multipass/types/src/Multipass"; -import { RegisterMessage } from "./types"; -import { chainIdMapping, getArtifact, SupportedChains } from "./utils"; -export default class Multipass { - private chainId: string; - private name: string; - private version: string; - constructor({ chainName }: { chainName: SupportedChains }) { - this.chainId = chainIdMapping[chainName]; - const c = getArtifact(chainName, "Multipass"); - this.name = c.execute.args[0]; - this.version = c.execute.args[1]; - } - public getDappURL( - message: any, - signature: string, - basepath: string, - contractAddress: string, - domain: string, - ) { - return ( - basepath + - "/?message=" + - Buffer.from(JSON.stringify(message)).toString("base64") + - "&contractAddress=" + - contractAddress + - "&signature=" + - signature + - "&chainId=" + - this.chainId - ); - } - - public signRegistrarMessage = async ( - message: RegisterMessage, - verifierAddress: string, - signer: Wallet | SignerWithAddress, - ) => { - let chainId = this.chainId; - - const domain = { - name: this.name, - version: this.version, - chainId, - verifyingContract: verifierAddress, - }; - - const types = { - registerName: [ - { - type: "bytes32", - name: "name", - }, - { - type: "bytes32", - name: "id", - }, - { - type: "bytes32", - name: "domainName", - }, - { - type: "uint256", - name: "validUntil", - }, - { - type: "uint96", - name: "nonce", - }, - ], - }; - console.log("signing", domain, types, { ...message }); - const s = await signer._signTypedData(domain, types, { ...message }); - return s; - }; - - public getRegistrarMessage = ({ - username, - id, - domainName, - validUntil, - }: { - username: string; - id: string; - domainName: string; - validUntil: number; - }) => { - const registrarMessage = { - name: ethers.utils.formatBytes32String(username), - id: ethers.utils.formatBytes32String(id), - domainName: ethers.utils.formatBytes32String(domainName), - validUntil: ethers.BigNumber.from(validUntil), - nonce: ethers.BigNumber.from(0), - }; - - return registrarMessage; - }; - - public formQueryByAddress = ({ - address, - domainName, - targetDomain, - }: { - address: string; - targetDomain?: string; - domainName: string; - }) => { - if (!ethers.utils.isAddress(address)) throw new Error("formQueryByAddress: is not a valid address"); - const query: LibMultipass.NameQueryStruct = { - name: ethers.utils.formatBytes32String(""), - id: ethers.utils.formatBytes32String(""), - wallet: address, - domainName: ethers.utils.formatBytes32String(domainName), - targetDomain: targetDomain ?? ethers.utils.formatBytes32String(""), - }; - return query; - }; - - public formQueryById = ({ - id, - domainName, - targetDomain, - }: { - id: string; - targetDomain?: string; - domainName: string; - }) => { - const query: LibMultipass.NameQueryStruct = { - name: ethers.utils.formatBytes32String(""), - id: ethers.utils.formatBytes32String(id), - wallet: ethers.constants.AddressZero, - domainName: ethers.utils.formatBytes32String(domainName), - targetDomain: targetDomain ?? ethers.utils.formatBytes32String(""), - }; - return query; - }; - - public formQueryByUsername = ({ - username, - domainName, - targetDomain, - }: { - username: string; - targetDomain?: string; - domainName: string; - }) => { - const query: LibMultipass.NameQueryStruct = { - name: ethers.utils.formatBytes32String(username), - id: ethers.utils.formatBytes32String(""), - wallet: ethers.constants.AddressZero, - domainName: ethers.utils.formatBytes32String(domainName), - targetDomain: targetDomain ?? ethers.utils.formatBytes32String(""), - }; - return query; - }; - - public formQueryByUsernameAndId = ({ - username, - domainName, - targetDomain, - id, - }: { - username: string; - targetDomain?: string; - domainName: string; - id: string; - }) => { - const query: LibMultipass.NameQueryStruct = { - name: ethers.utils.formatBytes32String(username), - id: ethers.utils.formatBytes32String(id), - wallet: ethers.constants.AddressZero, - domainName: ethers.utils.formatBytes32String(domainName), - targetDomain: targetDomain ?? ethers.utils.formatBytes32String(""), - }; - return query; - }; - - public formQueryByFullDetails = ({ - username, - domainName, - targetDomain, - id, - address, - }: { - username: string; - targetDomain?: string; - domainName: string; - id: string; - address: string; - }) => { - if (!ethers.utils.isAddress(address)) throw new Error("formQueryByAddress: is not a valid address"); - const query: LibMultipass.NameQueryStruct = { - name: ethers.utils.formatBytes32String(username), - id: ethers.utils.formatBytes32String(id), - wallet: address, - domainName: ethers.utils.formatBytes32String(domainName), - targetDomain: targetDomain ?? ethers.utils.formatBytes32String(""), - }; - return query; - }; -} diff --git a/src/multipass/MultipassBase.ts b/src/multipass/MultipassBase.ts new file mode 100644 index 0000000..3515ff8 --- /dev/null +++ b/src/multipass/MultipassBase.ts @@ -0,0 +1,219 @@ +import { type Address, type Hex, stringToHex, zeroAddress, isAddress } from "viem"; +import type { RegisterMessage } from "../types"; + +/** + * Structure representing a name query for Multipass + * @public + */ +export type NameQuery = { + /** Hex-encoded name */ + name: Hex; + /** Hex-encoded ID */ + id: Hex; + /** Wallet address */ + wallet: Address; + /** Hex-encoded domain name */ + domainName: Hex; + /** Hex-encoded target domain */ + targetDomain: Hex; +}; + +/** + * Base class for Multipass functionality + */ +export default class MultipassBase { + /** Chain ID for the network */ + chainId: number; + + /** + * Creates a new MultipassBase instance + * @param params - Constructor parameters + * @param params.chainId - ID of the blockchain network + */ + constructor({ chainId }: { chainId: number }) { + this.chainId = chainId; + } + + /** + * Generates a URL for a dapp + * @param message - Message object to be encoded in the URL + * @param signature - Signature to be encoded in the URL + * @param basepath - Base path of the URL + * @param contractAddress - Address of the contract + * @returns The generated URL + */ + public getDappURL(message: object, signature: string, basepath: string, contractAddress: string) { + return ( + basepath + + "/?message=" + + Buffer.from(JSON.stringify(message)).toString("base64") + + "&contractAddress=" + + contractAddress + + "&signature=" + + signature + + "&chainId=" + + this.chainId + ); + } + + public getRegistrarMessage = ({ + username, + id, + domainName, + validUntil, + }: { + username: string; + id: string; + domainName: string; + validUntil: number; + }): RegisterMessage => { + return { + name: stringToHex(username, { size: 32 }), + id: stringToHex(id, { size: 32 }), + domainName: stringToHex(domainName, { size: 32 }), + validUntil: BigInt(validUntil), + nonce: 0n, + }; + }; + + /** + * Creates a name query by address + * @param params - Parameters for creating the query + * @param params.address - Address to be encoded in the query + * @param params.domainName - Domain name to be encoded in the query + * @param params.targetDomain - Target domain to be encoded in the query + * @returns The generated name query + */ + public formQueryByAddress = ({ + address, + domainName, + targetDomain, + }: { + address: string; + domainName: string; + targetDomain?: string; + }): NameQuery => { + if (!isAddress(address)) throw new Error("formQueryByAddress: is not a valid address"); + return { + name: stringToHex("", { size: 32 }), + id: stringToHex("", { size: 32 }), + wallet: address, + domainName: stringToHex(domainName, { size: 32 }), + targetDomain: stringToHex(targetDomain ?? "", { size: 32 }), + }; + }; + + /** + * Creates a name query by ID + * @param params - Parameters for creating the query + * @param params.id - ID to be encoded in the query + * @param params.domainName - Domain name to be encoded in the query + * @param params.targetDomain - Target domain to be encoded in the query + * @returns The generated name query + */ + public formQueryById = ({ + id, + domainName, + targetDomain, + }: { + id: string; + domainName: string; + targetDomain?: string; + }): NameQuery => { + return { + name: stringToHex("", { size: 32 }), + id: stringToHex(id, { size: 32 }), + wallet: zeroAddress, + domainName: stringToHex(domainName, { size: 32 }), + targetDomain: stringToHex(targetDomain ?? "", { size: 32 }), + }; + }; + + /** + * Creates a name query by username + * @param params - Parameters for creating the query + * @param params.username - Username to be encoded in the query + * @param params.domainName - Domain name to be encoded in the query + * @param params.targetDomain - Target domain to be encoded in the query + * @returns The generated name query + */ + public formQueryByUsername = ({ + username, + domainName, + targetDomain, + }: { + username: string; + domainName: string; + targetDomain?: string; + }): NameQuery => { + return { + name: stringToHex(username, { size: 32 }), + id: "0x", + wallet: zeroAddress, + domainName: stringToHex(domainName, { size: 32 }), + targetDomain: stringToHex(targetDomain ?? "", { size: 32 }), + }; + }; + + /** + * Creates a name query by username and ID + * @param params - Parameters for creating the query + * @param params.username - Username to be encoded in the query + * @param params.id - ID to be encoded in the query + * @param params.domainName - Domain name to be encoded in the query + * @param params.targetDomain - Target domain to be encoded in the query + * @returns The generated name query + */ + public formQueryByUsernameAndId = ({ + username, + id, + domainName, + targetDomain, + }: { + username: string; + id: string; + domainName: string; + targetDomain?: string; + }): NameQuery => { + return { + name: stringToHex(username, { size: 32 }), + id: stringToHex(id, { size: 32 }), + wallet: zeroAddress, + domainName: stringToHex(domainName, { size: 32 }), + targetDomain: stringToHex(targetDomain ?? "", { size: 32 }), + }; + }; + + /** + * Creates a name query with full details + * @param params - Parameters for creating the query + * @param params.username - Username to be encoded in the query + * @param params.id - ID to be encoded in the query + * @param params.domainName - Domain name to be encoded in the query + * @param params.targetDomain - Target domain to be encoded in the query + * @param params.address - Address to be encoded in the query + * @returns The generated name query + */ + public formQueryByFullDetails = ({ + username, + id, + domainName, + targetDomain, + address, + }: { + username: string; + id: string; + domainName: string; + targetDomain?: string; + address: string; + }): NameQuery => { + if (!isAddress(address)) throw new Error("formQueryByAddress: is not a valid address"); + return { + name: stringToHex(username, { size: 32 }), + id: stringToHex(id, { size: 32 }), + wallet: address, + domainName: stringToHex(domainName, { size: 32 }), + targetDomain: stringToHex(targetDomain ?? "", { size: 32 }), + }; + }; +} diff --git a/src/multipass/Registrar.ts b/src/multipass/Registrar.ts new file mode 100644 index 0000000..1841add --- /dev/null +++ b/src/multipass/Registrar.ts @@ -0,0 +1,95 @@ +import { type Address, type WalletClient, type Hex, TypedDataDomain } from "viem"; +import { getArtifact } from "../utils"; +import type { RegisterMessage } from "../types"; +import MultipassBase from "./MultipassBase"; + +/** + * Structure representing a name query for Multipass + * @public + */ +export type NameQuery = { + /** Hex-encoded name */ + name: Hex; + /** Hex-encoded ID */ + id: Hex; + /** Wallet address */ + wallet: Address; + /** Hex-encoded domain name */ + domainName: Hex; + /** Hex-encoded target domain */ + targetDomain: Hex; +}; + +/** + * Main Multipass class for handling registrations and queries + * @extends MultipassBase + */ +export default class Multipass extends MultipassBase { + /** Name of the contract */ + private name: string; + /** Version of the contract */ + private version: string; + /** Wallet client for signing transactions */ + private walletClient: WalletClient; + + /** + * Creates a new Multipass instance + * @param params - Constructor parameters + * @param params.chainId - ID of the blockchain network + * @param params.walletClient - Wallet client for signing transactions + */ + constructor({ chainId, walletClient }: { chainId: number; walletClient: WalletClient }) { + super({ chainId }); + const artifact = getArtifact(chainId, "Multipass"); + this.name = artifact.execute.args[0]; + this.version = artifact.execute.args[1]; + this.walletClient = walletClient; + } + + /** + * Signs a registrar message for registration + * @param message - Message to sign + * @param verifierAddress - Address of the verifier contract + * @returns Signed message + */ + public signRegistrarMessage = async (message: RegisterMessage, verifierAddress: Address) => { + if (!this.walletClient.account?.address) throw new Error("No account found"); + + const domain: TypedDataDomain = { + name: this.name, + version: this.version, + chainId: this.chainId, + verifyingContract: verifierAddress, + }; + + const types = { + registerName: [ + { type: "bytes32", name: "name" }, + { type: "bytes32", name: "id" }, + { type: "bytes32", name: "domainName" }, + { type: "uint256", name: "validUntil" }, + { type: "uint96", name: "nonce" }, + ], + } as const; + + return this.walletClient.signTypedData({ + account: this.walletClient.account.address, + domain: domain, + types, + primaryType: "registerName", + message: { ...message }, + }); + }; + + /** + * Generates a URL for a dapp + * @param message - Message object to be encoded in the URL + * @param signature - Signature to be encoded in the URL + * @param basepath - Base path of the URL + * @param contractAddress - Address of the contract + * @returns The generated URL + */ + public getDappURL(message: object, signature: string, basepath: string, contractAddress: string): string { + return super.getDappURL(message, signature, basepath, contractAddress); + } +} diff --git a/src/multipass/__tests__/multipass.test.ts b/src/multipass/__tests__/multipass.test.ts new file mode 100644 index 0000000..ab9b0f0 --- /dev/null +++ b/src/multipass/__tests__/multipass.test.ts @@ -0,0 +1,146 @@ +import { describe, expect, test, jest } from "@jest/globals"; +import Multipass from "../Registrar"; +import { createPublicClient, createWalletClient, Hex } from "viem"; +import { Address } from "viem"; +import { RegisterMessage } from "../../types"; + +// Mock viem +jest.mock("viem", () => ({ + ...(jest.requireActual("viem") as object), + getContract: jest.fn(), + createPublicClient: jest.fn(), + createWalletClient: jest.fn(), + http: jest.fn(), +})); + +// Mock utils +jest.mock("../../utils", () => ({ + getArtifact: jest.fn().mockReturnValue({ + execute: { + args: ["TestMultipass", "1.0.0"], + }, + address: "0x1234567890123456789012345678901234567890", + }), +})); + +describe("Multipass", () => { + const mockChainId = 1; + const mockPublicClient = { + request: jest.fn(), + }; + const mockWalletClient = { + account: { + address: "0x1234567890123456789012345678901234567890" as Address, + }, + signTypedData: jest.fn<() => Promise>(), + }; + + (createPublicClient as jest.Mock).mockReturnValue(mockPublicClient); + (createWalletClient as jest.Mock).mockReturnValue(mockWalletClient); + + const multipass = new Multipass({ + chainId: mockChainId, + // eslint-disable-next-line + walletClient: mockWalletClient as any, + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe("getDappURL", () => { + test("should return correctly formatted URL", () => { + const message = { test: "data" }; + const signature = "0xsignature"; + const basepath = "https://example.com"; + const contractAddress = "0x1234"; + + const result = multipass.getDappURL(message, signature, basepath, contractAddress); + + expect(result).toBe( + `${basepath}/?message=${Buffer.from(JSON.stringify(message)).toString("base64")}&contractAddress=${contractAddress}&signature=${signature}&chainId=${mockChainId}` + ); + }); + }); + + describe("signRegistrarMessage", () => { + test("should sign message correctly", async () => { + const message: RegisterMessage = { + name: "0x123" as Hex, + id: "0x456" as Hex, + domainName: "0x789" as Hex, + validUntil: BigInt(1234567890), + nonce: BigInt(1), + }; + const verifierAddress = "0x9876543210987654321098765432109876543210" as Address; + + mockWalletClient.signTypedData.mockResolvedValue("0xsignedMessage" as `0x${string}`); + + const result = await multipass.signRegistrarMessage(message, verifierAddress); + + expect(result).toBe("0xsignedMessage"); + expect(mockWalletClient.signTypedData).toHaveBeenCalledWith({ + account: mockWalletClient.account.address, + domain: { + name: "TestMultipass", + version: "1.0.0", + chainId: mockChainId, + verifyingContract: verifierAddress, + }, + types: { + registerName: [ + { type: "bytes32", name: "name" }, + { type: "bytes32", name: "id" }, + { type: "bytes32", name: "domainName" }, + { type: "uint256", name: "validUntil" }, + { type: "uint96", name: "nonce" }, + ], + }, + primaryType: "registerName", + message: message, + }); + }); + + test("should throw error if no account found", async () => { + const message: RegisterMessage = { + name: "0x123" as Hex, + id: "0x456" as Hex, + domainName: "0x789" as Hex, + validUntil: BigInt(1234567890), + nonce: BigInt(1), + }; + const verifierAddress = "0x9876543210987654321098765432109876543210" as Address; + + const multipassNoAccount = new Multipass({ + chainId: mockChainId, + // eslint-disable-next-line + walletClient: { ...mockWalletClient, account: null } as any, + }); + + await expect(multipassNoAccount.signRegistrarMessage(message, verifierAddress)).rejects.toThrow( + "No account found" + ); + }); + }); + + describe("getRegistrarMessage", () => { + test("should format message correctly", () => { + const input = { + username: "test", + id: "123", + domainName: "domain", + validUntil: 1234567890, + }; + + const result = multipass.getRegistrarMessage(input); + + expect(result).toHaveProperty("name"); + expect(result).toHaveProperty("id"); + expect(result).toHaveProperty("domainName"); + expect(result).toHaveProperty("validUntil"); + expect(result).toHaveProperty("nonce"); + expect(typeof result.validUntil).toBe("bigint"); + expect(typeof result.nonce).toBe("bigint"); + }); + }); +}); diff --git a/src/rankify/InstanceBase.ts b/src/rankify/InstanceBase.ts new file mode 100644 index 0000000..63bc984 --- /dev/null +++ b/src/rankify/InstanceBase.ts @@ -0,0 +1,486 @@ +import { Address, PublicClient, type GetContractReturnType, type Block } from "viem"; +import { ApiError } from "../utils/index"; + +import instanceAbi from "../abis/RankifyDiamondInstance"; + +/** + * Enum representing different states of a game instance + * @public + */ +export enum gameStatusEnum { + /** Game has been created but not opened for registration */ + created = "Game created", + /** Game is open for player registration */ + open = "Registration open", + /** Game is in progress */ + started = "In progress", + /** Game is in its final turn */ + lastTurn = "Playing last turn", + /** Game is in overtime */ + overtime = "PLaying in overtime", + /** Game has finished */ + finished = "Finished", + /** Game was not found */ + notFound = "not found", +} + +/** + * Base class for interacting with a Rankify game instance + * Provides core functionality for managing game state and interactions + */ +export default class InstanceBase { + /** Public client for blockchain interactions */ + publicClient: PublicClient; + /** Chain ID of the network */ + chainId: number; + /** Address of the Rankify instance contract */ + instanceAddress: Address; + + /** + * Creates a new InstanceBase + * @param {Object} params - Constructor parameters + * @param {PublicClient} params.publicClient - Public client for blockchain interactions + * @param {number} params.chainId - Chain ID of the network + * @param {Address} params.instanceAddress - Address of the Rankify instance contract + */ + constructor({ + publicClient, + chainId, + instanceAddress, + }: { + publicClient: PublicClient; + chainId: number; + instanceAddress: Address; + }) { + this.publicClient = publicClient; + this.chainId = chainId; + this.instanceAddress = instanceAddress; + } + + /** + * Retrieves the historic turn information for a specific game and turn ID. + * @returns The historic turn event object. + * @throws {ApiError} If the game or turn is not found. + */ + getHistoricTurn = async (gameId: bigint, turnId: bigint) => { + const logs = await this.publicClient.getContractEvents({ + address: this.instanceAddress, + abi: instanceAbi, + eventName: "TurnEnded", + args: { + gameId, + turn: turnId, + }, + }); + + if (logs.length !== 1) { + console.error("getHistoricTurn", gameId, turnId, "failed:", logs.length); + throw new ApiError("Game not found", { status: 404 }); + } + + return logs[0]; + }; + + /** + * Retrieves the previous turn information for a specific game. + * @param gameId - The ID of the game. + * @returns The previous turn information for the specified game. + */ + getPreviousTurnStats = async (gameId: bigint) => { + const currentTurn = await this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getTurn", + args: [gameId], + }); + + if (currentTurn > 1n) { + return this.getHistoricTurn(gameId, currentTurn - 1n); + } else { + return { + players: "N/A", + scores: "N/A", + turnSalt: "N/A", + voters: ["N/A"], + votesRevealed: ["N/A"], + }; + } + }; + + /** + * Retrieves the voting information for a specific game and turn. + * @param gameId - The ID of the game. + * @param turnId - The ID of the turn. + * @returns The voting information for the specified game and turn. + */ + getVoting = async (gameId: bigint, turnId: bigint) => { + if (!gameId) throw new Error("gameId not set"); + if (!turnId) throw new Error("turnId not set"); + const voteEvents = await this.publicClient.getContractEvents({ + address: this.instanceAddress, + abi: instanceAbi, + eventName: "VoteSubmitted", + args: { + gameId, + turn: turnId, + }, + }); + + const proposalEvents = await this.publicClient.getContractEvents({ + address: this.instanceAddress, + abi: instanceAbi, + eventName: "ProposalSubmitted", + args: { + gameId, + turn: turnId, + }, + }); + + return { voteEvents, proposalEvents }; + }; + + /** + * Retrieves the ongoing voting for a specific game. + * @param gameId - The ID of the game. + */ + getOngoingVoting = async (gameId: bigint) => { + try { + const turn = await this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getTurn", + args: [gameId], + }); + return this.getVoting(gameId, turn); + } catch (error) { + console.error(error); + } + }; + + /** + * Retrieves the ongoing proposals for a specific game. + * @param gameId - The ID of the game. + * @returns The ongoing proposals for the specified game. + */ + getOngoingProposals = async (gameId: bigint) => { + try { + const currentTurn = await this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getTurn", + args: [gameId], + }); + + const lastTurnEndedEvent = await this.publicClient.getContractEvents({ + address: this.instanceAddress, + abi: instanceAbi, + eventName: "TurnEnded", + args: { turn: currentTurn - 1n, gameId }, + }); + + if (lastTurnEndedEvent.length !== 1) { + console.error("getOngoingProposals", gameId, "failed:", lastTurnEndedEvent.length); + throw new ApiError("Game not found", { status: 404 }); + } + + const args = lastTurnEndedEvent[0].args as { newProposals: unknown[] }; + return args.newProposals; + } catch (error) { + console.error("Error in getOngoingProposals:", error); + return []; + } + }; + + /** + * Retrieves the registration deadline for a specific game. + * @param gameId - The ID of the game. + * @param timeToJoin - Optional. The additional time (in seconds) to join the game. + * @returns A Promise that resolves to the registration deadline timestamp. + */ + getRegistrationDeadline = async (gameId: bigint, timeToJoin?: number) => { + const log = await this.publicClient.getContractEvents({ + address: this.instanceAddress, + abi: instanceAbi, + eventName: "RegistrationOpen", + args: { + gameId: gameId, + }, + }); + + if (log.length !== 1) { + console.error("getRegistrationDeadline", gameId, "failed:", log.length); + throw new ApiError("Game not found", { status: 404 }); + } + + const block = await this.publicClient.getBlock({ blockNumber: log[0].blockNumber }); + + if (timeToJoin) { + return Number(block.timestamp) + timeToJoin; + } + + const gameState = await this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getGameState", + args: [gameId], + }); + + return Number(block.timestamp) + Number(gameState.timeToJoin); + }; + + /** + * Resolves the deadline for the current turn. + * @param block The current block. + * @param gameId The ID of the game. + * @param timePerTurn The time duration per turn (optional). + * @returns The deadline for the current turn. + */ + resolveTurnDeadline = async (block: Block, gameId: bigint, timePerTurn?: number) => { + if (timePerTurn) return Number(block.timestamp) + timePerTurn; + + const gameState = await this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getGameState", + args: [gameId], + }); + + return Number(block.timestamp) + Number(gameState.timePerTurn); + }; + + /** + * Retrieves the deadline for the current turn in a game. + * @param gameId - The ID of the game. + * @param timePerTurn - Optional. The duration of each turn in seconds. + * @returns A Promise that resolves to the deadline for the current turn, or 0 if the turn has not started. + */ + getTurnDeadline = async (gameId: bigint, timePerTurn?: number) => { + if (!gameId) throw new Error("gameId not set"); + + const currentTurn = await this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getTurn", + args: [gameId], + }); + + if (currentTurn === 0n) return 0; + + const eventName = currentTurn === 1n ? "GameStarted" : "TurnEnded"; + const args = currentTurn === 1n ? { gameId } : { gameId, turnId: currentTurn - 1n }; + + const logs = await this.publicClient.getContractEvents({ + address: this.instanceAddress, + abi: instanceAbi, + eventName: eventName, + args: args, + }); + + if (logs.length !== 1) { + console.error("getTurnDeadline", gameId, "failed:", logs.length); + throw new ApiError("Game not found", { status: 404 }); + } + + const block = await this.publicClient.getBlock({ blockNumber: logs[0].blockNumber }); + return this.resolveTurnDeadline(block, gameId, timePerTurn); + }; + + /** + * Retrieves the contract state. + */ + getContractState = async () => { + const state = await this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getContractState", + }); + return state; + }; + + /** + * Retrieves a player's game. + * @param account - The player's account address. + */ + getPlayersGame = async (account: Address) => { + return this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getPlayersGame", + args: [account], + }); + }; + + /** + * Retrieves the list of proposal scores for a specific game. + * @param gameId - The ID of the game. + * @returns A Promise that resolves to the list of proposal scores. + */ + getProposalScoresList = async (gameId: bigint) => { + if (!gameId) throw new Error("gameId not set"); + + const logs = await this.publicClient.getContractEvents({ + address: this.instanceAddress, + abi: instanceAbi, + eventName: "ProposalScore", + args: { gameId }, + }); + + return logs; + }; + + /** + * Retrieves the current turn of a game. + * @param gameId - The ID of the game. + * @returns A Promise that resolves to the current turn of the game. + */ + getCurrentTurn = async (gameId: bigint) => { + return this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getTurn", + args: [gameId], + }); + }; + + /** + * Retrieves the game state for a specific game. + * @param gameId - The ID of the game. + * @returns A promise that resolves to an object containing the game state. + */ + getGameState = async (gameId: bigint) => { + const [ + gameMaster, + joinRequirements, + scores, + currentTurn, + isFinished, + isOvertime, + isLastTurn, + isOpen, + createdBy, + gameRank, + players, + canStart, + ] = await Promise.all([ + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getGM", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getJoinRequirements", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getScores", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getTurn", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "isGameOver", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "isOvertime", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "isLastTurn", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "isRegistrationOpen", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "gameCreator", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getGameRank", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getPlayers", + args: [gameId], + }), + this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "canStartGame", + args: [gameId], + }), + ]); + + const requirementsPerContract = await Promise.all( + joinRequirements.contractAddresses.map(async (address, idx) => { + return this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getJoinRequirementsByToken", + args: [gameId, address, joinRequirements.contractIds[idx], joinRequirements.contractTypes[idx]], + }); + }) + ); + + const gamePhase = isFinished + ? gameStatusEnum["finished"] + : isOvertime + ? gameStatusEnum["overtime"] + : isLastTurn + ? gameStatusEnum["lastTurn"] + : currentTurn > 0n + ? gameStatusEnum["started"] + : isOpen + ? gameStatusEnum["open"] + : gameMaster + ? gameStatusEnum["created"] + : gameStatusEnum["notFound"]; + + return { + gameMaster, + joinRequirements, + requirementsPerContract, + scores, + currentTurn, + isFinished, + isOvertime, + isLastTurn, + isOpen, + createdBy, + gameRank, + players, + canStart, + gamePhase, + }; + }; +} + +/** + * Contract type for Rankify instance + */ +export type RankifyContract = GetContractReturnType; diff --git a/src/rankify/MAODistributor.ts b/src/rankify/MAODistributor.ts new file mode 100644 index 0000000..ed1be2e --- /dev/null +++ b/src/rankify/MAODistributor.ts @@ -0,0 +1,240 @@ +/** + * @file MAO (Meritocratic Autonomous Organization) Distribution implementation + * Provides functionality for managing and distributing MAO tokens and instances + */ + +import { DistributorClient } from "../eds/Distributor"; +import { getArtifact } from "../utils"; +import { MAOInstances, parseInstantiated } from "../types/contracts"; +import instanceAbi from "../abis/RankifyDiamondInstance"; +import rankTokenAbi from "../abis/RankToken"; +import govtTokenAbi from "../abis/DistributableGovernanceERC20"; +import govtAccessManagerAbi from "../abis/SimpleAccessManager"; +import { + getAddress, + getContract, + GetContractReturnType, + Chain, + encodeAbiParameters, + GetAbiItemParameters, + getAbiItem, + stringToHex, + PublicClient, + WalletClient, + parseEventLogs, +} from "viem"; +import MaoDistributionAbi from "../abis/MAODistribution"; +import distributorAbi from "../abis/IDistributor"; + +/** + * Structure defining token-related arguments + */ +export type TokenArgumentsStructOutput = { + /** Name of the token */ + tokenName: string; + /** Symbol for the token */ + tokenSymbol: string; +}; + +/** + * Configuration settings for Rankify user settings + */ +export type UserRankifySettingsStructOutput = { + /** Cost of the principal token */ + principalCost: bigint; + /** Time constant for principal calculations */ + principalTimeConstant: bigint; + /** Additional metadata for the settings */ + metadata: string; + /** URI for the rank token */ + rankTokenURI: string; + /** Contract URI for the rank token */ + rankTokenContractURI: string; +}; + +/** + * Combined arguments for new community initialization + */ +export type DistributorArgumentsStruct = { + /** Token configuration settings */ + tokenSettings: TokenArgumentsStructOutput; + /** Rankify-specific settings */ + rankifySettings: UserRankifySettingsStructOutput; +}; + +/** + * Collection of contract instances for a MAO deployment + */ +export interface MAOInstanceContracts { + /** Rank token contract instance */ + rankToken: GetContractReturnType; + /** Main instance contract */ + instance: GetContractReturnType; + /** Governance token contract */ + govtToken: GetContractReturnType; + /** Access manager for governance token */ + govTokenAccessManager: GetContractReturnType; + /** Access manager for ACID */ + ACIDAccessManager: GetContractReturnType; +} + +/** + * Client for managing MAO Distribution operations + * Handles creation, management and interaction with MAO instances + */ +export class MAODistributorClient extends DistributorClient { + private static readonly DEFAULT_NAME = "MAO Distribution"; + walletClient: WalletClient; + + /** + * Creates a new MAODistributorClient instance + * @param chainId - ID of the blockchain network + * @param client - Object containing public and wallet clients + */ + constructor(chainId: number, client: { publicClient: PublicClient; walletClient: WalletClient }) { + const { address } = getArtifact(chainId, "DAODistributor"); + super({ address: getAddress(address), publicClient: client.publicClient }); + this.walletClient = client.walletClient; + } + + /** + * Converts MAOInstances addresses to their respective contract instances + * @param addresses Object containing contract addresses for MAO distribution components + * @returns Object containing initialized contract instances + * @throws Error if any of the addresses are invalid + */ + addressesToContracts(addresses: MAOInstances): MAOInstanceContracts { + const instance = getContract({ + address: getAddress(addresses.ACIDInstance), + abi: instanceAbi, + client: this.walletClient, + }); + + const rankToken = getContract({ + address: getAddress(addresses.rankToken), + abi: rankTokenAbi, + client: this.walletClient, + }); + + const govtToken = getContract({ + address: getAddress(addresses.govToken), + abi: govtTokenAbi, + client: this.walletClient, + }); + + const govTokenAccessManager = getContract({ + address: getAddress(addresses.govTokenAccessManager), + abi: govtAccessManagerAbi, + client: this.walletClient, + }); + + const ACIDAccessManager = getContract({ + address: getAddress(addresses.ACIDAccessManager), + abi: govtAccessManagerAbi, + client: this.walletClient, + }); + + return { rankToken, instance, govtToken, govTokenAccessManager, ACIDAccessManager }; + } + + /** + * Get MAOInstances instances by distribution name + * @param namedDistribution Distribution name (defaults to "MAO Distribution") + * @returns Array of MAOInstances contract instances + */ + async getMAOInstances( + namedDistribution: string = MAODistributorClient.DEFAULT_NAME + ): Promise { + const logs = await this.publicClient.getContractEvents({ + address: this.address, + abi: distributorAbi, + eventName: "Instantiated", + args: { + distributionId: stringToHex(namedDistribution, { size: 32 }), + }, + }); + + const instances = logs + .map((l) => parseInstantiated(l.args.instances as string[])) + .map((ip) => this.addressesToContracts(ip)); + + return instances; + } + + async getMAOInstance( + name: string = MAODistributorClient.DEFAULT_NAME, + instanceId: bigint + ): Promise { + const logs = await this.publicClient.getContractEvents({ + address: this.address, + abi: distributorAbi, + eventName: "Instantiated", + args: { + distributionId: stringToHex(name, { size: 32 }), + newInstanceId: instanceId, + }, + }); + + if (logs.length === 0) { + console.error("No instance found"); + throw new Error(`No instance found for distribution ${name} and id ${instanceId}`); + } + + if (logs.length > 1) { + console.error("Multiple instances found"); + throw new Error(`Multiple instances found for distribution ${name} and id ${instanceId}`); + } + + const { instances } = logs[0].args; + if (!instances) throw new Error(`No instances found for distribution ${name} and id ${instanceId}`); + return this.addressesToContracts(parseInstantiated(instances as string[])); + } + + /** + * Create a new MAODistribution instance + * @param args Distribution arguments (encoded as bytes) + * @returns Array of created contract addresses + */ + async instantiate( + args: GetAbiItemParameters["args"], + name: string = MAODistributorClient.DEFAULT_NAME, + chain: Chain + ): Promise { + if (!args) throw new Error("args is required"); + const abiItem = getAbiItem({ abi: MaoDistributionAbi, name: "distributionSchema" }); + const encodedParams = encodeAbiParameters(abiItem.inputs, args); + const encodedName = stringToHex(name, { size: 32 }); + if (!this.walletClient.account?.address) throw new Error("No account address found"); + const { request } = await this.publicClient.simulateContract({ + abi: distributorAbi, + address: this.address, + functionName: "instantiate", + args: [encodedName, encodedParams], + account: this.walletClient.account?.address, + chain: chain, + }); + + const receipt = await this.walletClient + .writeContract(request) + .then((h) => this.publicClient.waitForTransactionReceipt({ hash: h })); + + const instantiatedEvent = parseEventLogs({ + abi: distributorAbi, + logs: receipt.logs, + eventName: "Instantiated", + // strict: false, + }); + + if (instantiatedEvent.length == 0) { + console.error("Transaction receipt:", receipt); + throw new Error("Instantiated event not found in transaction receipt"); + } + if (instantiatedEvent.length > 1) { + console.error("Transaction receipt:", receipt); + throw new Error("Multiple Instantiated events found in transaction receipt"); + } + + const addresses = parseInstantiated(instantiatedEvent[0].args.instances as string[]); + return this.addressesToContracts(addresses); + } +} diff --git a/src/rankify/Player.ts b/src/rankify/Player.ts new file mode 100644 index 0000000..a65ac93 --- /dev/null +++ b/src/rankify/Player.ts @@ -0,0 +1,222 @@ +import { + type Address, + type PublicClient, + type WalletClient, + type Hex, + GetAbiItemParameters, + ContractFunctionArgs, +} from "viem"; +import { getContract } from "../utils/artifacts"; +import instanceAbi from "../abis/RankifyDiamondInstance"; +import InstanceBase from "./InstanceBase"; +type stateMutability = "nonpayable" | "payable"; +export type NewGameParams = { + minGameTime: bigint; + maxGameTime: bigint; + maxPlayers: number; + minPlayers: number; + timePerTurn: bigint; + timeToJoin: bigint; + gameMaster: Hex; + joinRequirements: { + contractAddresses: readonly Hex[]; + contractIds: readonly bigint[]; + contractTypes: readonly number[]; + ethValues: { + have: bigint; + lock: bigint; + burn: bigint; + pay: bigint; + bet: bigint; + }[]; + }; +}; + +export default class RankifyPlayer extends InstanceBase { + walletClient: WalletClient; + account: Address; + + constructor({ + publicClient, + walletClient, + chainId, + instanceAddress, + account, + }: { + publicClient: PublicClient; + walletClient: WalletClient; + chainId: number; + instanceAddress: Address; + account: Address; + }) { + super({ + publicClient, + chainId, + instanceAddress, + }); + this.walletClient = walletClient; + this.account = account; + } + + approveTokensIfNeeded = async (value: bigint) => { + const tokenContract = getContract(this.chainId, "Rankify", this.walletClient); + if (!this.walletClient.account?.address) throw new Error("Account not found"); + if (value > 0n) { + const { request } = await this.publicClient.simulateContract({ + address: tokenContract.address, + abi: tokenContract.abi, + functionName: "approve", + args: [this.instanceAddress, value], + account: this.walletClient.account?.address, + }); + + const hash = await this.walletClient.writeContract(request); + await this.publicClient.waitForTransactionReceipt({ hash }); + } + }; + + createGame = async (creationArgs: ContractFunctionArgs[0]) => { + // if (!creationArgs) throw new Error("args is required"); + const estimationArgs: ContractFunctionArgs = [ + creationArgs.minGameTime, + ]; + const price = await this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "estimateGamePrice", + args: estimationArgs, + }); + + await this.approveTokensIfNeeded(price); + if (!this.walletClient.account?.address) throw new Error("Account not found"); + const { request } = await this.publicClient.simulateContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "createGame", + args: [creationArgs], + account: this.walletClient.account.address, + }); + + const hash = await this.walletClient.writeContract(request); + const receipt = await this.publicClient.waitForTransactionReceipt({ hash }); + + const events = await this.publicClient.getContractEvents({ + address: this.instanceAddress, + abi: instanceAbi, + eventName: "gameCreated", + args: {}, + fromBlock: receipt.blockNumber, + toBlock: receipt.blockNumber, + }); + + if (events.length > 1) { + throw new Error("Failed to create game: Multiple GameCreated events found"); + } + if (events.length === 0) { + throw new Error("Failed to create game: GameCreated event not found"); + } + if (!events[0].args) throw new Error("Failed to create game: Event args not found"); + if (!("gameId" in events[0].args)) throw new Error("Failed to create game: GameId not found"); + const { gameId } = events[0].args; + + return { + gameId, + receipt, + }; + }; + + joinGame = async (gameId: bigint) => { + const reqs = (await this.publicClient.readContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "getJoinRequirements", + args: [gameId], + })) as { ethValues: { have: bigint; lock: bigint; burn: bigint; pay: bigint; bet: bigint } }; + + const values = reqs.ethValues; + const value = values.bet + values.burn + values.pay; + if (this.walletClient.account?.address) throw new Error("Account not found"); + const { request } = await this.publicClient.simulateContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "joinGame", + args: [gameId], + value, + account: this.walletClient.account?.address, + }); + + const hash = await this.walletClient.writeContract(request); + return this.publicClient.waitForTransactionReceipt({ hash }); + }; + + startGame = async (gameId: bigint) => { + if (!this.walletClient.account?.address) throw new Error("Account not found"); + const { request } = await this.publicClient.simulateContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "startGame", + args: [gameId], + account: this.walletClient.account?.address, + }); + + const hash = await this.walletClient.writeContract(request); + return this.publicClient.waitForTransactionReceipt({ hash }); + }; + + cancelGame = async (gameId: bigint) => { + if (!this.walletClient.account?.address) throw new Error("Account not found"); + const { request } = await this.publicClient.simulateContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "cancelGame", + args: [gameId], + account: this.walletClient.account?.address, + }); + + const hash = await this.walletClient.writeContract(request); + return this.publicClient.waitForTransactionReceipt({ hash }); + }; + + leaveGame = async (gameId: bigint) => { + if (!this.walletClient.account?.address) throw new Error("Account not found"); + const { request } = await this.publicClient.simulateContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "leaveGame", + args: [gameId], + account: this.walletClient.account?.address, + }); + + const hash = await this.walletClient.writeContract(request); + return this.publicClient.waitForTransactionReceipt({ hash }); + }; + + openRegistration = async (gameId: bigint) => { + if (!this.walletClient.account?.address) throw new Error("Account not found"); + const { request } = await this.publicClient.simulateContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "openRegistration", + args: [gameId], + account: this.walletClient.account?.address, + }); + + const hash = await this.walletClient.writeContract(request); + return this.publicClient.waitForTransactionReceipt({ hash }); + }; + + setJoinRequirements = async (params: GetAbiItemParameters["args"]) => { + if (!this.walletClient.account?.address) throw new Error("Account not found"); + if (!params) throw new Error("params is required"); + const { request } = await this.publicClient.simulateContract({ + address: this.instanceAddress, + abi: instanceAbi, + functionName: "setJoinRequirements", + args: params, + account: this.walletClient.account?.address, + }); + + const hash = await this.walletClient.writeContract(request); + return this.publicClient.waitForTransactionReceipt({ hash }); + }; +} diff --git a/src/rankify/RankToken.ts b/src/rankify/RankToken.ts new file mode 100644 index 0000000..9924418 --- /dev/null +++ b/src/rankify/RankToken.ts @@ -0,0 +1,32 @@ +import { Address, PublicClient, getContract } from "viem"; +import RankTokenAbi from "../abis/RankToken"; + +export default class RankTokenClient { + chainId: number; + publicClient: PublicClient; + rankTokenAddress: Address; + + constructor({ address, chainId, publicClient }: { address: Address; chainId: number; publicClient: PublicClient }) { + this.chainId = chainId; + this.publicClient = publicClient; + this.rankTokenAddress = address; + } + + getRankTokenURI = () => { + const rankToken = getContract({ + address: this.rankTokenAddress, + abi: RankTokenAbi, + client: this.publicClient, + }); + return rankToken.read.contractURI(); + }; + + getRankTokenBalance = async (tokenId: bigint, account: Address) => { + const rankToken = getContract({ + address: this.rankTokenAddress, + abi: RankTokenAbi, + client: this.publicClient, + }); + return rankToken.read.balanceOf([account, tokenId]); + }; +} diff --git a/src/rankify/__tests__/MAODistributor.test.ts b/src/rankify/__tests__/MAODistributor.test.ts new file mode 100644 index 0000000..4ba612e --- /dev/null +++ b/src/rankify/__tests__/MAODistributor.test.ts @@ -0,0 +1,491 @@ +import { describe, it, expect, beforeEach, jest } from "@jest/globals"; +import { + type PublicClient, + type WalletClient, + type Address, + type Hash, + type TransactionReceipt, + type Log, + GetContractEventsReturnType, + encodeAbiParameters, + stringToHex, + encodeEventTopics, +} from "viem"; +// Mock addresses for different contracts and actors +export const MOCK_ADDRESSES = { + DISTRIBUTOR: "0x1234567890123456789012345678901234567890" as Address, + RANK_TOKEN: "0x1234567890123456789012345678901234567891" as Address, + GOVT_TOKEN: "0x1234567890123456789012345678901234567892" as Address, + GOVT_ACCESS_MANAGER: "0x1234567890123456789012345678901234567893" as Address, + ACID_ACCESS_MANAGER: "0x1234567890123456789012345678901234567894" as Address, + ACID_INSTANCE: "0x1234567890123456789012345678901234567895" as Address, + OWNER: "0x1234567890123456789012345678901234567896" as Address, + PLAYER: "0x1234567890123456789012345678901234567897" as Address, +}; + +import { MAODistributorClient } from "../MAODistributor"; +import { MAOInstances } from "../../types/contracts"; +import distributorAbi from "../../abis/IDistributor"; + +// Mock viem +jest.mock("viem", () => ({ + ...(jest.requireActual("viem") as object), + getContract: jest.fn(), + createPublicClient: jest.fn(), + createWalletClient: jest.fn(), + http: jest.fn(), +})); + +// Mock utils +jest.mock("../../utils", () => ({ + getArtifact: jest.fn().mockImplementation((chainId: unknown, artifactName: unknown) => { + if (artifactName === "DAODistributor") { + return { + abi: distributorAbi, + address: MOCK_ADDRESSES.DISTRIBUTOR, + execute: { + args: ["TestDistributor", "1.0.0"], + }, + }; + } + return { + abi: [], + address: "0x0000000000000000000000000000000000000000", + execute: { + args: [], + }, + }; + }), +})); + +// Error.stackTraceLimit = 3; + +const mockChainId = 31337; // localhost +const mockChain = { + id: mockChainId, + name: "Arbitrum One", + network: "arbitrum", + nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, + rpcUrls: { + default: { http: ["https://arb1.arbitrum.io/rpc"] }, + }, +} as const; + +// Mock transaction hashes and block hashes +const MOCK_HASHES = { + BLOCK: "0x1234567890123456789012345678901234567890123456789012345678901234" as Hash, + TRANSACTION: "0x1234567890123456789012345678901234567890123456789012345678901235" as Hash, +} as const; + +// Create mock functions with correct return types +const mockGetContractEvents = jest + .fn<() => Promise>>() + .mockResolvedValue([ + { + address: MOCK_ADDRESSES.DISTRIBUTOR, + blockHash: MOCK_HASHES.BLOCK, + blockNumber: BigInt(1), + data: encodeAbiParameters( + [{ type: "string" }, { type: "address[]" }], + [ + "test", + [ + MOCK_ADDRESSES.GOVT_TOKEN, + MOCK_ADDRESSES.GOVT_ACCESS_MANAGER, + MOCK_ADDRESSES.ACID_INSTANCE, + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, + MOCK_ADDRESSES.RANK_TOKEN, + "0x0000000000000000000000000000000000000000", // padding for indices 5-9 + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, // index 10 + MOCK_ADDRESSES.RANK_TOKEN, // index 11 + ], + ] + ), + logIndex: 0, + transactionHash: MOCK_HASHES.TRANSACTION, + transactionIndex: 0, + removed: false, + topics: encodeEventTopics({ + abi: distributorAbi, + eventName: "Instantiated", + }) as [`0x${string}`, `0x${string}`, `0x${string}`, `0x${string}`], + eventName: "Instantiated", + args: { + distributionId: stringToHex("test", { size: 32 }), + instances: [ + MOCK_ADDRESSES.GOVT_TOKEN, + MOCK_ADDRESSES.GOVT_ACCESS_MANAGER, + MOCK_ADDRESSES.ACID_INSTANCE, + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, + MOCK_ADDRESSES.RANK_TOKEN, + "0x0000000000000000000000000000000000000000", // padding for indices 5-9 + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, // index 10 + MOCK_ADDRESSES.RANK_TOKEN, // index 11 + ], + }, + }, + ]); + +const mockSimulateContract = jest.fn(() => Promise.resolve({ request: {} })); +const mockWaitForTransactionReceipt = jest.fn(() => + Promise.resolve({ + blockNumber: BigInt(1), + blockHash: MOCK_HASHES.BLOCK, + transactionIndex: 0, + status: "success", + contractAddress: MOCK_ADDRESSES.DISTRIBUTOR, + from: MOCK_ADDRESSES.OWNER, + to: MOCK_ADDRESSES.DISTRIBUTOR, + logs: [ + { + address: MOCK_ADDRESSES.DISTRIBUTOR, + blockHash: MOCK_HASHES.BLOCK, + blockNumber: BigInt(1), + data: encodeAbiParameters( + [{ type: "address[]" }], + [ + [ + MOCK_ADDRESSES.GOVT_TOKEN, + MOCK_ADDRESSES.GOVT_ACCESS_MANAGER, + MOCK_ADDRESSES.ACID_INSTANCE, + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, + MOCK_ADDRESSES.RANK_TOKEN, + "0x0000000000000000000000000000000000000000", // padding for indices 5-9 + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, // index 10 + MOCK_ADDRESSES.RANK_TOKEN, // index 11 + ], + ] + ), + logIndex: 0, + transactionHash: MOCK_HASHES.TRANSACTION, + transactionIndex: 0, + removed: false, + topics: [ + // keccak256("Instantiated(address[])") - you can replace this with the actual event signature hash + "0x0000000000000000000000000000000000000000000000000000000000000001", + ], + }, + ] as Log[], + logsBloom: "0x", + gasUsed: BigInt(1000), + cumulativeGasUsed: BigInt(1000), + effectiveGasPrice: BigInt(1000), + transactionHash: MOCK_HASHES.TRANSACTION, + type: "eip1559", + } as TransactionReceipt) +); + +const mockWriteContract = jest.fn(() => Promise.resolve("0xabc" as Hash)); + +const mockPublicClient = { + account: undefined, + batch: undefined, + cacheTime: 0, + chain: mockChain, + key: "public", + name: "Public Client", + pollingInterval: 4000, + request: jest.fn(), + transport: { type: "http" }, + type: "publicClient", + uid: "test", + extend: jest.fn(), + getContractEvents: mockGetContractEvents, + simulateContract: mockSimulateContract, + waitForTransactionReceipt: mockWaitForTransactionReceipt, +} as unknown as PublicClient; + +const mockWalletClient = { + account: { + address: MOCK_ADDRESSES.OWNER, + type: "json-rpc", + source: "local", + signMessage: async () => "0x" as Hash, + signTransaction: async () => "0x" as Hash, + signTypedData: async () => "0x" as Hash, + }, + chain: mockChain, + key: "wallet", + name: "Wallet Client", + pollingInterval: 4000, + request: jest.fn(), + transport: { type: "http" }, + type: "walletClient", + uid: "test", + extend: jest.fn(), + writeContract: mockWriteContract, +} as unknown as WalletClient; + +describe("MAODistributorClient", () => { + let distributor: MAODistributorClient; + + beforeEach(() => { + jest.clearAllMocks(); + distributor = new MAODistributorClient(mockChainId, { + publicClient: mockPublicClient, + walletClient: mockWalletClient, + }); + }); + + describe("addressesToContracts", () => { + it("should convert valid addresses to contract instances", async () => { + const mockInstances: MAOInstances = { + rankToken: MOCK_ADDRESSES.RANK_TOKEN, + govToken: MOCK_ADDRESSES.GOVT_TOKEN, + govTokenAccessManager: MOCK_ADDRESSES.GOVT_ACCESS_MANAGER, + ACIDAccessManager: MOCK_ADDRESSES.ACID_ACCESS_MANAGER, + ACIDInstance: MOCK_ADDRESSES.ACID_INSTANCE, + }; + + const mockLog = [ + { + address: MOCK_ADDRESSES.DISTRIBUTOR, + blockHash: MOCK_HASHES.BLOCK, + blockNumber: BigInt(1), + data: "0x", + logIndex: 0, + transactionHash: MOCK_HASHES.TRANSACTION, + transactionIndex: 0, + removed: false, + eventName: "Instantiated", + topics: ["0x0", "0x1", "0x01", "0x2"], + args: { + distributionId: "0x12334", + instances: [ + MOCK_ADDRESSES.GOVT_TOKEN, + MOCK_ADDRESSES.GOVT_ACCESS_MANAGER, + MOCK_ADDRESSES.ACID_INSTANCE, + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, + MOCK_ADDRESSES.RANK_TOKEN, + "0x0000000000000000000000000000000000000000", // padding for indices 5-9 + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, // index 10 + MOCK_ADDRESSES.RANK_TOKEN, // index 11 + ], + }, + }, + ] as GetContractEventsReturnType; + + mockGetContractEvents.mockResolvedValue(mockLog); + + const contracts = distributor.addressesToContracts(mockInstances); + expect(contracts).toHaveProperty("rankToken"); + expect(contracts).toHaveProperty("instance"); + expect(contracts).toHaveProperty("govtToken"); + expect(contracts).toHaveProperty("govTokenAccessManager"); + expect(contracts).toHaveProperty("ACIDAccessManager"); + }); + + it("should throw error for invalid addresses", () => { + const mockInstances = { + rankToken: "invalid" as Address, + govToken: "invalid" as Address, + govTokenAccessManager: "invalid" as Address, + ACIDAccessManager: "invalid" as Address, + ACIDInstance: "invalid" as Address, + }; + + expect(() => distributor.addressesToContracts(mockInstances)).toThrow(); + }); + }); + + describe("getMAOInstances", () => { + it("should return instances for valid distribution name", async () => { + const mockLog = [ + { + address: MOCK_ADDRESSES.DISTRIBUTOR, + blockHash: MOCK_HASHES.BLOCK, + blockNumber: BigInt(1), + data: "0x", + logIndex: 0, + transactionHash: MOCK_HASHES.TRANSACTION, + transactionIndex: 0, + removed: false, + eventName: "Instantiated", + topics: ["0x0", "0x1", "0x01", "0x2"], + args: { + distributionId: "0x12334", + instances: [ + MOCK_ADDRESSES.GOVT_TOKEN, + MOCK_ADDRESSES.GOVT_ACCESS_MANAGER, + MOCK_ADDRESSES.ACID_INSTANCE, + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, + MOCK_ADDRESSES.RANK_TOKEN, + "0x0000000000000000000000000000000000000000", // padding for indices 5-9 + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, // index 10 + MOCK_ADDRESSES.RANK_TOKEN, // index 11 + ], + }, + }, + ] as GetContractEventsReturnType; + + mockGetContractEvents.mockResolvedValue(mockLog); + + const instances = await distributor.getMAOInstances("test"); + expect(instances).toBeDefined(); + expect(instances.length).toBeGreaterThan(0); + expect(instances[0]).toHaveProperty("rankToken"); + }); + + it("should return empty array when no instances found", async () => { + mockGetContractEvents.mockResolvedValue([]); + + const instances = await distributor.getMAOInstances("test"); + expect(instances).toHaveLength(0); + }); + }); + + describe("getMAOInstance", () => { + it("should throw error when multiple instances found", async () => { + const t = encodeEventTopics({ + abi: distributorAbi, + eventName: "Instantiated", + })[0]; + const mockLog = [ + { + address: MOCK_ADDRESSES.DISTRIBUTOR, + blockHash: MOCK_HASHES.BLOCK, + blockNumber: BigInt(1), + data: "0x", + logIndex: 0, + transactionHash: MOCK_HASHES.TRANSACTION, + transactionIndex: 0, + removed: false, + eventName: "Instantiated", + topics: [t, "0x1", "0x01", "0x2"], + args: { + distributionId: "0x12334", + instances: [ + MOCK_ADDRESSES.GOVT_TOKEN, + MOCK_ADDRESSES.GOVT_ACCESS_MANAGER, + MOCK_ADDRESSES.ACID_INSTANCE, + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, + MOCK_ADDRESSES.RANK_TOKEN, + "0x0000000000000000000000000000000000000000", // padding for indices 5-9 + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + MOCK_ADDRESSES.ACID_ACCESS_MANAGER, // index 10 + MOCK_ADDRESSES.RANK_TOKEN, // index 11 + ], + }, + }, + ] as GetContractEventsReturnType; + + mockGetContractEvents.mockResolvedValue([...mockLog, ...mockLog]); + + await expect(distributor.getMAOInstance("test", BigInt(1))).rejects.toThrow("Multiple instances found"); + }); + + it("should throw error when no instances found", async () => { + mockGetContractEvents.mockResolvedValue([]); + + await expect(distributor.getMAOInstance("test", BigInt(1))).rejects.toThrow( + "No instance found for distribution test and id 1" + ); + }); + }); + + describe("instantiate", () => { + it("should create a new MAO distribution instance", async () => { + const mockArgs = [ + { + tokenSettings: { + tokenName: "Test Token", + tokenSymbol: "TEST", + }, + rankifySettings: { + principalCost: BigInt(1000), + principalTimeConstant: BigInt(1000), + metadata: "test", + rankTokenURI: "test", + rankTokenContractURI: "test", + }, + }, + ] as const; + + const mockHash = "0xabc" as Hash; + + const mockReceipt = { + blockNumber: BigInt(1), + blockHash: MOCK_HASHES.BLOCK, + transactionIndex: 0, + status: "success", + contractAddress: MOCK_ADDRESSES.DISTRIBUTOR, + from: MOCK_ADDRESSES.OWNER, + to: MOCK_ADDRESSES.DISTRIBUTOR, + logs: [ + { + address: MOCK_ADDRESSES.DISTRIBUTOR, + blockHash: MOCK_HASHES.BLOCK, + blockNumber: BigInt(1), + data: encodeAbiParameters( + [{ type: "address[]" }, { type: "bytes" }], + [ + [ + MOCK_ADDRESSES.GOVT_TOKEN as Address, + MOCK_ADDRESSES.GOVT_ACCESS_MANAGER as Address, + MOCK_ADDRESSES.ACID_INSTANCE as Address, + MOCK_ADDRESSES.ACID_ACCESS_MANAGER as Address, + MOCK_ADDRESSES.RANK_TOKEN as Address, + "0x0000000000000000000000000000000000000000" as Address, // padding for indices 5-9 + "0x0000000000000000000000000000000000000000" as Address, + "0x0000000000000000000000000000000000000000" as Address, + "0x0000000000000000000000000000000000000000" as Address, + "0x0000000000000000000000000000000000000000" as Address, + MOCK_ADDRESSES.ACID_ACCESS_MANAGER as Address, // index 10 + MOCK_ADDRESSES.RANK_TOKEN as Address, // index 11 + ], + "0x", // The bytes parameter + ] + ), + logIndex: 0, + transactionHash: MOCK_HASHES.TRANSACTION, + transactionIndex: 0, + removed: false, + topics: [ + encodeEventTopics({ + abi: distributorAbi, + eventName: "Instantiated", + })[0], + stringToHex("0x01", { size: 32 }), + stringToHex("0x02", { size: 32 }), + stringToHex("0x03", { size: 32 }), + ], + // eventName: "Instantiated", + }, + ] as Log[], + logsBloom: "0x", + gasUsed: BigInt(1000), + cumulativeGasUsed: BigInt(1000), + effectiveGasPrice: BigInt(1000), + transactionHash: MOCK_HASHES.TRANSACTION, + type: "eip1559", + } as TransactionReceipt; + mockWriteContract.mockResolvedValue(mockHash); + mockWaitForTransactionReceipt.mockResolvedValue(mockReceipt); + + await expect(distributor.instantiate(mockArgs, "test", mockChain)).resolves.not.toThrow(); + }); + }); +}); diff --git a/src/rankify/__tests__/Player.test.ts b/src/rankify/__tests__/Player.test.ts new file mode 100644 index 0000000..dc30d35 --- /dev/null +++ b/src/rankify/__tests__/Player.test.ts @@ -0,0 +1,205 @@ +import { describe, it, expect, beforeEach, jest } from "@jest/globals"; +import { type PublicClient, type WalletClient, type Address, type Hash, type TransactionReceipt } from "viem"; +import RankifyPlayer from "../Player"; +import rankifyAbi from "../../abis/Rankify"; + +// Mock viem +jest.mock("viem", () => ({ + ...(jest.requireActual("viem") as object), + getContract: jest.fn(), + createPublicClient: jest.fn(), + createWalletClient: jest.fn(), + http: jest.fn(), +})); + +// Mock utils/artifacts +jest.mock("../../utils/artifacts", () => ({ + getArtifact: jest.fn().mockImplementation(() => { + const mockAddress = "0x1234567890123456789012345678901234567890"; + const mockArtifact = { + abi: rankifyAbi, + address: mockAddress, + execute: { + args: ["TestRankify", "1.0.0"], + }, + }; + return mockArtifact; + }), + getContract: jest.fn().mockReturnValue({ + read: { + allowance: jest.fn<() => Promise>().mockResolvedValue(100n), + balanceOf: jest.fn<() => Promise>().mockResolvedValue(100n), + }, + write: { + approve: jest.fn<() => Promise>().mockResolvedValue("0x123"), + createGame: jest.fn<() => Promise>().mockResolvedValue("0x123"), + }, + }), +})); + +// Mock the chain mapping +jest.mock("../../utils/chainMapping", () => ({ + getChainPath: jest.fn().mockReturnValue("localhost"), + chainToPath: { + 42161: "localhost", + }, +})); + +// Create mock functions with correct return types +const mockReadContract = jest.fn(() => Promise.resolve(0n)); +const mockSimulateContract = jest.fn(() => Promise.resolve({ request: {} })); +const mockWaitForTransactionReceipt = jest.fn(() => Promise.resolve({} as TransactionReceipt)); +const mockWriteContract = jest.fn(() => Promise.resolve("0x" as Hash)); +const mockGetContractEvents = jest.fn(() => + Promise.resolve([ + { + args: { + gameId: 1n, + }, + }, + ]) +); + +// Mock implementations +const mockPublicClient = { + readContract: mockReadContract, + simulateContract: mockSimulateContract, + waitForTransactionReceipt: mockWaitForTransactionReceipt, + getContractEvents: mockGetContractEvents, +} as unknown as PublicClient; + +const mockWalletClient = { + writeContract: mockWriteContract, + account: { + address: "0x123" as Address, + }, +} as unknown as WalletClient; + +const mockInstanceAddress = "0x456" as Address; +const mockAccount = "0x789" as Address; +const mockChainId = 42161; // Arbitrum One chain ID + +describe("RankifyPlayer", () => { + let player: RankifyPlayer; + + beforeEach(() => { + jest.clearAllMocks(); + player = new RankifyPlayer({ + publicClient: mockPublicClient, + walletClient: mockWalletClient, + chainId: mockChainId, + instanceAddress: mockInstanceAddress, + account: mockAccount, + }); + }); + + describe("createGame", () => { + it("should create a game successfully", async () => { + const mockPrice = 100n; + const mockHash = "0xabc" as Hash; + const mockReceipt = { status: "success", blockNumber: 1n } as TransactionReceipt; + + const mockGameParams = { + gameRank: 1n, + minPlayerCnt: 2n, + maxPlayerCnt: 4n, + nTurns: 10n, + voteCredits: 100n, + gameMaster: "0x123" as `0x${string}`, + minGameTime: 300n, + timePerTurn: 60n, + timeToJoin: 300n, + }; + + // Mock the contract read for price estimation + mockReadContract.mockResolvedValue(mockPrice); + + // Mock the contract simulation + mockSimulateContract.mockResolvedValue({ + request: {}, + }); + + // Mock the transaction write + mockWriteContract.mockResolvedValue(mockHash); + + // Mock the transaction receipt + mockWaitForTransactionReceipt.mockResolvedValue(mockReceipt); + + // Mock the contract events + mockGetContractEvents.mockResolvedValue([ + { + args: { + gameId: 1n, + }, + }, + ]); + + // Execute the createGame function + const result = await player.createGame(mockGameParams); + + // Verify the contract interactions + expect(mockReadContract).toHaveBeenCalledWith({ + address: mockInstanceAddress, + abi: expect.any(Array), + functionName: "estimateGamePrice", + args: [mockGameParams.minGameTime], + }); + + expect(mockSimulateContract).toHaveBeenCalledWith({ + address: mockInstanceAddress, + abi: expect.any(Array), + functionName: "createGame", + args: [mockGameParams], + account: mockWalletClient.account?.address, + }); + + expect(mockWriteContract).toHaveBeenCalled(); + expect(mockWaitForTransactionReceipt).toHaveBeenCalledWith({ hash: mockHash }); + expect(mockGetContractEvents).toHaveBeenCalledWith({ + address: mockInstanceAddress, + abi: expect.any(Array), + eventName: "gameCreated", + args: {}, + fromBlock: mockReceipt.blockNumber, + toBlock: mockReceipt.blockNumber, + }); + + // Verify the result + expect(result).toEqual({ + gameId: 1n, + receipt: mockReceipt, + }); + }); + + it("should throw error when account is not found", async () => { + const clientWithoutAccount = { + ...mockWalletClient, + account: undefined, + } as unknown as WalletClient; + + const playerWithoutAccount = new RankifyPlayer({ + publicClient: mockPublicClient, + walletClient: clientWithoutAccount, + chainId: mockChainId, + instanceAddress: mockInstanceAddress, + account: mockAccount, + }); + + const mockGameParams = { + gameRank: 1n, + minPlayerCnt: 2n, + maxPlayerCnt: 4n, + nTurns: 10n, + voteCredits: 100n, + gameMaster: "0x123" as `0x${string}`, + minGameTime: 300n, + timePerTurn: 60n, + timeToJoin: 300n, + }; + + mockReadContract.mockResolvedValue(100n); + + await expect(playerWithoutAccount.createGame(mockGameParams)).rejects.toThrow("Account not found"); + }); + }); +}); diff --git a/src/types.ts b/src/types.ts index 7790b81..b626b9b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,21 +1,43 @@ -import { BigNumber, Wallet, BytesLike } from "ethers"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +/** + * @file Core type definitions for the Peeramid SDK + */ + +import { Hex, WalletClient } from "viem"; export { LibMultipass, Multipass as MultipassDiamond } from "@peeramid-labs/multipass/types/src/Multipass"; +/** + * Criteria used for searching entities in the system + */ export enum SearchCriteria { id, username, address, } + +/** + * Represents a signer's identity in the system + */ export interface SignerIdentity { + /** User's display name */ name: string; + /** Unique identifier for the user */ id: string; - wallet: Wallet | SignerWithAddress; + /** Wallet client associated with the signer */ + wallet: WalletClient; } + +/** + * Message structure for user registration + */ export interface RegisterMessage { - name: BytesLike; - id: BytesLike; - domainName: BytesLike; - validUntil: BigNumber; - nonce: BigNumber; + /** Hex encoded name */ + name: Hex; + /** Hex encoded unique identifier */ + id: Hex; + /** Hex encoded domain name */ + domainName: Hex; + /** Timestamp until which the registration is valid */ + validUntil: bigint; + /** Registration nonce */ + nonce: bigint; } diff --git a/src/types/contracts.ts b/src/types/contracts.ts new file mode 100644 index 0000000..41f4a57 --- /dev/null +++ b/src/types/contracts.ts @@ -0,0 +1,31 @@ +/** + * Interface representing the contract addresses for a MAO instance + * @public + */ +export interface MAOInstances { + /** Address of the governance token contract */ + govToken: string; + /** Address of the governance token access manager contract */ + govTokenAccessManager: string; + /** Address of the ACID instance contract */ + ACIDInstance: string; + /** Address of the ACID access manager contract */ + ACIDAccessManager: string; + /** Address of the rank token contract */ + rankToken: string; +} + +/** + * Parse an array of contract addresses into a MAOInstances object + * @param instances - Array of contract addresses in the order they were deployed + * @returns MAOInstances object with named contract addresses + */ +export const parseInstantiated = (instances: string[]): MAOInstances => { + return { + govToken: instances[0], + govTokenAccessManager: instances[1], + ACIDInstance: instances[2], + ACIDAccessManager: instances[10], + rankToken: instances[11], + }; +}; diff --git a/src/utils/ApiError.ts b/src/utils/ApiError.ts index c1a0263..03acea9 100644 --- a/src/utils/ApiError.ts +++ b/src/utils/ApiError.ts @@ -6,6 +6,11 @@ export interface ApiErrorOptions extends ErrorOptions { status?: number; } +interface ApiErrorResponse { + msg?: string; + status?: number; +} + export class ApiError extends Error { status: number | undefined; constructor(message: string, options?: ApiErrorOptions) { @@ -14,8 +19,10 @@ export class ApiError extends Error { } } -export async function getApiError(response: any) { - const body = await response.json(); +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export async function getApiError(response: any): Promise { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const body = (await response.json()) as ApiErrorResponse; return new ApiError(body.msg || "server_error", { status: body?.status, }); diff --git a/src/utils/artifacts.ts b/src/utils/artifacts.ts index aae4f97..6e8ac3c 100644 --- a/src/utils/artifacts.ts +++ b/src/utils/artifacts.ts @@ -1,7 +1,19 @@ -import { RankToken, RankifyDiamondInstance, MultipassDiamond } from "rankify-contracts/types"; -import { JsonFragment } from "@ethersproject/abi"; -import { Rankify } from "rankify-contracts/types"; -import { ethers } from "ethers"; +import { + type Address, + type PublicClient, + type WalletClient, + getContract as viemGetContract, + type GetContractReturnType, + AbiItem, +} from "viem"; + +import rankifyAbi from "../abis/Rankify"; +import multipassAbi from "../abis/Multipass"; +import simpleAccessManagerAbi from "../abis/SimpleAccessManager"; +import DAODistributorabi from "../abis/DAODistributor"; + +import { getChainPath } from "./chainMapping"; + export type SupportedChains = "anvil" | "localhost"; export const chainIdMapping: { [key in SupportedChains]: string } = { @@ -9,46 +21,64 @@ export const chainIdMapping: { [key in SupportedChains]: string } = { localhost: "42161", }; -export type ArtifactTypes = "Rankify" | "RankifyInstance" | "RankToken" | "Multipass"; +export type ArtifactTypes = "Rankify" | "Multipass" | "SimpleAccessManager" | "DAODistributor"; + +export type ArtifactAbi = { + Rankify: typeof rankifyAbi; + Multipass: typeof multipassAbi; + SimpleAccessManager: typeof simpleAccessManagerAbi; + DAODistributor: typeof DAODistributorabi; +}; + /** - * Retrieves the Rankify artifact for the specified chain. - * @param chain The chain identifier. - * @param artifactName - * @returns The Rankify artifact containing the ABI and address. - * @throws Error if the contract deployment is not found. + * Retrieves the contract artifact for the specified chain. + * @param chain The viem Chain object + * @param artifactName The name of the artifact to retrieve + * @returns The artifact containing the address and execution args + * @throws Error if the contract deployment is not found or chain is not supported. */ export const getArtifact = ( - chain: SupportedChains, + chainId: number, artifactName: ArtifactTypes, -): { abi: JsonFragment[]; address: string; execute: { args: string[] } } => { - const artifact = + overrideChainName?: string +): { abi: readonly AbiItem[]; address: Address; execute: { args: string[] } } => { + const chainPath = overrideChainName ?? getChainPath(chainId); + const artifact = ( artifactName === "Multipass" - ? require(`@peeramid-labs/multipass/deployments/${chain}/${artifactName}.json`) - : require(`rankify-contracts/deployments/${chain}/${artifactName}.json`); + ? require(`@peeramid-labs/multipass/deployments/${chainPath}/${artifactName}.json`) + : require(`rankify-contracts/deployments/${chainPath}/${artifactName}.json`) + ) as { + abi: AbiItem[]; + address: Address; + execute: { args: string[] }; + }; + if (!artifact) { throw new Error("Contract deployment not found"); } - return artifact; -}; -export type ArtifactContractInterfaces = { - Rankify: Rankify; - RankToken: RankToken; - RankifyInstance: RankifyDiamondInstance; - Multipass: MultipassDiamond; + return { + address: artifact.address, + execute: artifact.execute, + abi: artifact.abi, + }; }; /** - * Retrieves the contract instance for the specified chain using the provided provider. - * @param chain The supported chain for the contract. - * @param provider The Web3Provider or Signer instance used for interacting with the blockchain. - * @returns The contract instance. + * Gets a contract instance with the appropriate ABI and address for the given chain + * @param chain The chain to get the contract for + * @param artifactName The name of the contract to get + * @param client The viem client to use (public or wallet) + * @returns A viem contract instance */ -export const getContract = ( - chain: SupportedChains, - artifactName: T, - providerOrSigner: ethers.providers.JsonRpcProvider | ethers.providers.JsonRpcSigner, -) => { - const artifact = getArtifact(chain, artifactName); - - return new ethers.Contract(artifact.address, artifact.abi, providerOrSigner) as ArtifactContractInterfaces[T]; +export const getContract = ( + chainId: number, + artifactName: TArtifactName, + client: TClient +): GetContractReturnType => { + const artifact = getArtifact(chainId, artifactName); + return viemGetContract({ + address: artifact.address, + abi: artifact.abi, + client, + }) as GetContractReturnType; }; diff --git a/src/utils/chainMapping.ts b/src/utils/chainMapping.ts new file mode 100644 index 0000000..0d70e97 --- /dev/null +++ b/src/utils/chainMapping.ts @@ -0,0 +1,15 @@ +// This file is auto-generated. Do not edit manually. +export type ChainMapping = Record; + +export const chainToPath: ChainMapping = { + "31337": "localhost", + "97113": "anvil", +} as const; + +export function getChainPath(chainId: number): string { + const path = chainToPath[chainId.toString() as keyof typeof chainToPath]; + if (!path) { + throw new Error(`Chain ID ${chainId} is not supported`); + } + return path; +} diff --git a/src/utils/index.ts b/src/utils/index.ts index 33beeca..7c358c4 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,3 +1,2 @@ export * from "./ApiError"; export * from "./artifacts"; -export * from "./utils"; diff --git a/src/utils/utils.ts b/src/utils/utils.ts deleted file mode 100644 index ebe62c3..0000000 --- a/src/utils/utils.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ethers } from "ethers"; - -/** - * Ethers.js returns a proxy object of mixed arrays and objects. This proxy breaks when using hardcopy. - * Im still in progress of solving this issue. For now, this function is a workaround that converts the proxy to a deep copy. - * it might produce unexpected results still. - * @param object The object to convert. - * @returns The converted object. - */ -export const deepArrayToObject = (object: T) => { - if (typeof object == "string") return object; - let result = Array.isArray(object) ? [] : {}; - Object.keys(object).forEach((key) => { - if (typeof object[key] === "string") result[key] = (" " + object[key]).slice(1); - else if (typeof object[key] === "number") result[key] = Number(object[key]); - else if (typeof object[key] === "boolean") result[key] = Boolean(object[key]); - else if (object[key] === null) result[key] = null; - else if (object[key] === undefined) result[key] = undefined; - else if (object[key]?._isBigNumber) result[key] = ethers.BigNumber.from((" " + object[key].toString()).slice(1)); - else result[key] = deepArrayToObject(object[key]); - }); - return result as T; -}; diff --git a/tsconfig.esm.json b/tsconfig.esm.json index 17588c2..200e84d 100644 --- a/tsconfig.esm.json +++ b/tsconfig.esm.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "module": "NodeNext", + "module": "ESNext", "outDir": "./dist/lib.esm" } } diff --git a/tsconfig.json b/tsconfig.json index 850a0dd..d58c30b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,18 @@ { "compilerOptions": { - "declarationMap": true, - "importHelpers": false, - "target": "es2022", - "module": "CommonJS", - "lib": ["es2022", "es5"], + "target": "ESNext", + "module": "esnext", + "lib": ["es2020", "dom", "esnext"], "declaration": true, - "outDir": "dist", - "resolveJsonModule": true, - "strict": false, + "declarationMap": true, "sourceMap": true, + "outDir": "./dist", + "strict": true, + "moduleResolution": "node", + "esModuleInterop": true, "skipLibCheck": true, - "esModuleInterop": true + "forceConsistentCasingInFileNames": true }, - "include": ["src"], - "exclude": [] + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "**/__tests__/*"] } diff --git a/tsconfig.test.json b/tsconfig.test.json new file mode 100644 index 0000000..a23b848 --- /dev/null +++ b/tsconfig.test.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/**/__tests__/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts"], + "exclude": ["node_modules", "dist"] +} diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 0000000..f26899c --- /dev/null +++ b/typedoc.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "entryPoints": ["./src/index.ts"], + "out": "docs", + "exclude": ["**/__tests__/**/*", "**/node_modules/**/*"], + "excludePrivate": true, + "excludeProtected": true, + "excludeExternals": false, + "includeVersion": true, + "plugin": ["typedoc-plugin-markdown"], + "theme": "markdown", + "readme": "none", + "name": "Rankify SDK API Documentation", + "basePath": "./", + "excludeNotDocumented": false, + "sort": ["source-order"], + "categorizeByGroup": true, + "categoryOrder": [ + "Core", + "Rankify", + "Multipass", + "*" + ], + "intentionallyNotExported": [ + "RankifyAbi", + "MultipassAbi", + "SimpleAccessManagerAbi", + "DAODistributorAbi" + ] +}