diff --git a/.eslintrc.js b/.eslintrc.js index 444d4cde..13b79a6a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,7 +4,7 @@ module.exports = { browser: true, es6: true, node: true, - jest: true, + mocha: true, }, globals: { BigInt: true, @@ -161,14 +161,25 @@ module.exports = { }, { files: ["**/test/**/*.test.ts"], - plugins: ["jest"], + plugins: ["mocha", "chai-expect"], + extends: ["plugin:mocha/recommended", "plugin:chai-expect/recommended"], rules: { - "jest/no-disabled-tests": "warn", - "jest/no-focused-tests": "error", - "jest/no-identical-title": "error", - "jest/prefer-to-have-length": "warn", - "jest/valid-expect": "error" - } + // We observed that having multiple top level "describe" save valuable indentation + // https://github.com/lo1tuma/eslint-plugin-mocha/blob/master/docs/rules/max-top-level-suites.md + "mocha/max-top-level-suites": "off", + // We need to disable because we disabled "mocha/no-setup-in-describe" rule + // TODO: Move all setup code to before/beforeEach and then disable async describe + // https://github.com/lo1tuma/eslint-plugin-mocha/blob/master/docs/rules/no-async-describe.md + "mocha/no-async-describe": "off", + // Use of arrow functions are very common + "mocha/no-mocha-arrows": "off", + // It's common to call function inside describe block + // https://github.com/lo1tuma/eslint-plugin-mocha/blob/master/docs/rules/no-setup-in-describe.md + "mocha/no-setup-in-describe": "off", + // We use to split before in small isolated tasks + // https://github.com/lo1tuma/eslint-plugin-mocha/blob/master/docs/rules/no-sibling-hooks.md + "mocha/no-sibling-hooks": "off", + }, }, { files: ["**/types/**/*.ts"], diff --git a/.mocharc.yaml b/.mocharc.yaml new file mode 100644 index 00000000..d63ab5e9 --- /dev/null +++ b/.mocharc.yaml @@ -0,0 +1,4 @@ +extension: ["ts"] +colors: true +node-option: + - "loader=ts-node/esm" \ No newline at end of file diff --git a/README.md b/README.md index 7bccf47c..56ef6b1a 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,7 @@ Or follow the steps below: 4. edit `config.json` 5. (optional) run local geth-node from `test/geth-dev` 6. run `./skandha` -7. Skandha will run for all chains available in `config.json` -8. Networks will be available at `http://localhost:14337/{chainId}/` (e.g. for dev `http://localhost:14337/1337/`) +7. The bundler will be available on `http://localhost:14337/rpc/` For a video tutorial on the above, you can [view this here.](https://www.youtube.com/watch?v=O0_lm7b0GXE) @@ -70,18 +69,12 @@ For a video tutorial on the above, you can [view this here.](https://www.youtube #### Simplest config.json ```yaml { - "networks": { - "mumbai": { - "entryPoints": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "relayers": [ - "0x{RELAYER-PRIVATE-KEY}" - ], - "beneficiary": "0x{BENEFICIARY-ADDRESS}", - "rpcEndpoint": "https://polygon-mumbai.blockpi.network/v1/rpc/public" - } - } + "entryPoints": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "relayer": "0x{RELAYER-PRIVATE-KEY}", + "beneficiary": "0x{BENEFICIARY-ADDRESS}", + "rpcEndpoint": "https://polygon-mumbai.blockpi.network/v1/rpc/public" } ``` @@ -89,47 +82,48 @@ For a video tutorial on the above, you can [view this here.](https://www.youtube ```yaml { - "networks": { - "dev": { # network Id (check packages/params/src/networks/.ts) - "entryPoints": [ # supported entry points - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "relayers": [ - "0x0101010101010101010101010101010101010101010101010101010101010101", - "test test test test test test test test test test test junk" - ], # relayers private keys, can access from here or via environment variables (SKANDHA_MUMBAI_RELAYERS | SKANDHA_DEV_RELAYERS | etc.) - "beneficiary": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", # optional, fee collector, avaiable via env var (SKANDHA_MUMBAI_BENEFICIARY | etc) - if not set, relayer will be used - "rpcEndpoint": "http://localhost:8545", # rpc provider, also available via env variable (SKANDHA_MUMBAI_RPC | etc) - "minInclusionDenominator": 10, # optional, see EIP-4337 - "throttlingSlack": 10, # optional, see EIP-4337 - "banSlack": 50 # optional, see EIP-4337 - "minStake": 10000000000, # optional, min stake of an entity (in wei) - "minUnstakeDelay": 0, # optional, min unstake delay of an entity - "minSignerBalance": 1, # optional, default is 0.1 ETH. If the relayer's balance drops lower than this, it will be selected as a fee collector - "multicall": "0xcA11bde05977b3631167028862bE2a173976CA11", # optional, multicall3 contract (see https://github.com/mds1/multicall#multicall3-contract-addresses) - "estimationStaticBuffer": 21000, # optional,adds certain amount of gas to callGasLimit on estimation - "validationGasLimit": 10e6, # optional,gas limit during simulateHandleOps and simulateValidation calls - "receiptLookupRange": 1024, # optional,limits the block range of getUserOperationByHash and getUserOperationReceipt - "etherscanApiKey": "", # optional,etherscan api is used to fetch gas prices - "conditionalTransactions": false, # optional,enable conditional transactions - "rpcEndpointSubmit": "", # optional,rpc endpoint that is used only during submission of a bundle - "gasPriceMarkup": 0, # optional,adds % markup on reported gas price via skandha_getGasPrice, 10000 = 100.00%, 500 = 5% - "enforceGasPrice": false, # optional,do not bundle userops with low gas prices - "enforceGasPriceThreshold": 1000, # optional,gas price threshold in bps. If set to 500, userops' gas price is allowed to be 5% lower than the network's gas price - "eip2930": false, # optional, enables eip-2930 - "useropsTTL": 300, # optional, Userops time to live (in seconds) - "whitelistedEntities": { # optional, Entities that bypass stake and opcode validation (array of addresses) - "factory": [], - "paymaster": [], - "account": [] - }, - "bundleGasLimitMarkup": 25000, # optional, adds some amount of additional gas to a bundle tx - "relayingMode": "classic"; # optional, "flashbots" for Flashbots Builder API, "merkle" for Merkle.io, "kolibri" for kolibr.io, "echo" for Chainbound's Echo - "bundleInterval": 10000, # bundle creation interval - "bundleSize": 4, # optional, max size of a bundle, 4 userops by default - "pvgMarkup": 0 # optional, adds some gas on top of estimated PVG - } - } + "entryPoints": [ # supported entry points + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "relayers": [ + "0x0101010101010101010101010101010101010101010101010101010101010101", + "test test test test test test test test test test test junk" + ], # relayers private keys, can access from here or via environment variables (SKANDHA_MUMBAI_RELAYERS | SKANDHA_DEV_RELAYERS | etc.) + "beneficiary": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", # optional, fee collector, avaiable via env var (SKANDHA_MUMBAI_BENEFICIARY | etc) - if not set, relayer will be used + "rpcEndpoint": "http://localhost:8545", # rpc provider, also available via env variable (SKANDHA_MUMBAI_RPC | etc) + "minInclusionDenominator": 10, # optional, see EIP-4337 + "throttlingSlack": 10, # optional, see EIP-4337 + "banSlack": 50 # optional, see EIP-4337 + "minStake": 10000000000, # optional, min stake of an entity (in wei) + "minUnstakeDelay": 0, # optional, min unstake delay of an entity + "minSignerBalance": 1, # optional, default is 0.1 ETH. If the relayer's balance drops lower than this, it will be selected as a fee collector + "multicall": "0xcA11bde05977b3631167028862bE2a173976CA11", # optional, multicall3 contract (see https://github.com/mds1/multicall#multicall3-contract-addresses) + "estimationStaticBuffer": 21000, # optional,adds certain amount of gas to callGasLimit on estimation + "validationGasLimit": 10e6, # optional,gas limit during simulateHandleOps and simulateValidation calls + "receiptLookupRange": 1024, # optional,limits the block range of getUserOperationByHash and getUserOperationReceipt + "etherscanApiKey": "", # optional,etherscan api is used to fetch gas prices + "conditionalTransactions": false, # optional,enable conditional transactions + "rpcEndpointSubmit": "", # optional,rpc endpoint that is used only during submission of a bundle + "gasPriceMarkup": 0, # optional,adds % markup on reported gas price via skandha_getGasPrice, 10000 = 100.00%, 500 = 5% + "enforceGasPrice": false, # optional,do not bundle userops with low gas prices + "enforceGasPriceThreshold": 1000, # optional,gas price threshold in bps. If set to 500, userops' gas price is allowed to be 5% lower than the network's gas price + "eip2930": false, # optional, enables eip-2930 + "useropsTTL": 300, # optional, Userops time to live (in seconds) + "whitelistedEntities": { # optional, Entities that bypass stake and opcode validation (array of addresses) + "factory": [], + "paymaster": [], + "account": [] + }, + "bundleGasLimitMarkup": 25000, # optional, adds some amount of additional gas to a bundle tx + "relayingMode": "classic"; # optional, allows to switch to Flashbots Builder api if set to "flashbots", see packages/executor/src/interfaces.ts for more + "bundleInterval": 10000, # bundle creation interval + "bundleSize": 4, # optional, max size of a bundle, 4 userops by default + "pvgMarkup": 0 # optional, adds some gas on top of estimated PVG + "cglMarkup": 35000, # optional, markup on estimated call gas limit + "vglMarkup": 0, # optional, markup on estimated verification gas limit + "skipBundleValidation": false, # # optional, skips bundle validation + "userOpGasLimit": 25000000, # optional, gas limit of a userop + "bundleGasLimit": 25000000, # optional, gas limit of a bundle } ``` ## 💬 Contact @@ -149,9 +143,6 @@ Licensed under the [MIT License](https://github.com/etherspot/skandha/blob/maste - Mumbai | QmQfRyE9iVTBqZ17hPSP4tuMzaez83Y5wD874ymyRtj9VE | https://ipfs.io/ipfs/QmQfRyE9iVTBqZ17hPSP4tuMzaez83Y5wD874ymyRtj9VE?filename=mumbai_canonical_mempool.yaml - Goerli | QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF | https://ipfs.io/ipfs/QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF?filename=goerli_canonical_mempool.yaml -> [!WARNING] -> This version of the bundler is not compatible with the latest p2p-spec. If you're looking to run a P2P-bundler, switch to this branch - https://github.com/etherspot/skandha/tree/version1-p2p - ## 🔢 Statistics ![Alt](https://repobeats.axiom.co/api/embed/4d7ec3ece88b2461c5b1757574321f4f6540cdd5.svg "Skandha analytics image") diff --git a/config.json.default b/config.json.default index e16c2790..6c71f4fd 100644 --- a/config.json.default +++ b/config.json.default @@ -1,14 +1,10 @@ { - "networks": { - "dev": { - "entryPoints": [ - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - ], - "relayers": [ - "test test test test test test test test test test test junk", - "0x0101010101010101010101010101010101010101010101010101010101010101" - ], - "rpcEndpoint": "http://localhost:8545" - } - } + "entryPoints": [ + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + ], + "relayers": [ + "test test test test test test test test test test test junk", + "0x0101010101010101010101010101010101010101010101010101010101010101" + ], + "rpcEndpoint": "http://localhost:8545" } diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 1639eede..00000000 --- a/jest.config.js +++ /dev/null @@ -1,183 +0,0 @@ -// For a detailed explanation regarding each configuration property, visit: -// https://jestjs.io/docs/en/configuration.html - -module.exports = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // Respect "browser" field in package.json when resolving modules - // browser: false, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/private/var/folders/z9/ww5sjb513_z4t4hj9z817f5r0000gn/T/jest_dx", - - // Automatically clear mock calls and instances between every test - clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - collectCoverage: true, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - collectCoverageFrom: ["packages/**/test/**/*.{ts,tsx}"], - - // The directory where Jest should output its coverage files - coverageDirectory: "coverage", - - // An array of regexp pattern strings used to skip coverage collection - coveragePathIgnorePatterns: ["/node_modules/"], - - // A list of reporter names that Jest uses when writing coverage reports - coverageReporters: ["json", "text", "lcov", "clover", "html"], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: null, - - // A path to a custom dependency extractor - // dependencyExtractor: null, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: null, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: null, - - // A set of global variables that need to be available in all test environments - // globals: {}, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - // moduleFileExtensions: [ - // "js", - // "json", - // "jsx", - // "ts", - // "tsx", - // "node" - // ], - - // A map from regular expressions to module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - // preset: null, - - // Run tests from one or more projects - // projects: null, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state between every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: null, - - // Automatically restore mock state between every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: null, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: "node", - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: null, - - // This option allows use of a custom test runner - // testRunner: "jasmine2", - - // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href - // testURL: "http://localhost", - - // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" - // timers: "real", - - // A map from regular expressions to paths to transformers - transform: { - "^.+\\.ts?$": "ts-jest", - }, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "/node_modules/" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: null, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, -}; diff --git a/lerna.json b/lerna.json index af9a94f7..fa029f8b 100644 --- a/lerna.json +++ b/lerna.json @@ -4,7 +4,7 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "1.0.49-alpha", + "version": "1.5.4", "stream": "true", "command": { "version": { diff --git a/package.json b/package.json index cb9d6186..cec08490 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "root", "private": true, - "version": "1.0.49-alpha", + "version": "1.5.4", "engines": { "node": ">=18.0.0" }, @@ -12,7 +12,9 @@ "build": "yarn workspace types run build && yarn workspace db run build & lerna run build", "lint": "eslint --color --ext .ts packages/*/src/", "fix-lint": "eslint --ext .ts --fix packages/*/src/", + "test": "lerna run test --concurrency 1", "test:unit": "lerna run test:unit --no-bail --concurrency 1", + "coverage": "vitest run --coverage", "check-readme": "lerna run check-readme", "release:publish": "lerna publish from-package --yes --no-verify-access", "release:docker": "exit 0" @@ -22,9 +24,13 @@ "lru-cache": "^6.0.0" }, "devDependencies": { + "@types/chai": "4.3.6", + "@types/chai-as-promised": "7.1.6", + "@types/mocha": "10.0.1", + "@types/sinon": "10.0.16", + "@types/sinon-chai": "3.2.9", "@types/abstract-leveldown": "7.2.1", "@types/compression": "1.7.2", - "@types/jest": "29.2.3", "@types/node": "18.11.9", "@typescript-eslint/eslint-plugin": "5.43.0", "@typescript-eslint/parser": "5.43.0", @@ -32,13 +38,19 @@ "eslint-config-airbnb-base": "15.0.0", "eslint-plugin-import": "2.26.0", "eslint-plugin-prettier": "4.2.1", - "jest": "29.3.1", - "jest-express": "1.12.0", + "eslint-plugin-mocha": "10.2.0", "lerna": "6.4.1", - "ts-jest": "29.0.3", "ts-node": "10.9.1", "tsconfig-paths": "4.1.2", - "typescript": "4.8.4" + "typescript": "4.8.4", + "chai": "4.3.8", + "chai-as-promised": "7.1.1", + "sinon": "16.0.0", + "sinon-chai": "3.7.0", + "mocha": "10.2.0", + "vitest": "0.34.6", + "vitest-when": "0.2.0", + "@vitest/coverage-v8": "0.34.6" }, "license": "MIT", "workspaces": [ diff --git a/packages/api/package.json b/packages/api/package.json index 7b43a641..d4cdabcc 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "api", - "version": "1.0.49-alpha", + "version": "1.5.4", "description": "The API module of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -25,23 +25,20 @@ "build": "tsc -p tsconfig.build.json", "lint": "eslint --color --ext .ts src/ test/", "lint:fix": "yarn run lint --fix", - "pretest": "yarn run check-types", - "test": "yarn test:unit", - "test:unit": "mocha 'test/unit/**/*.test.ts'", "check-readme": "typescript-docs-verifier" }, "dependencies": { "@fastify/cors": "8.2.1", "class-transformer": "0.5.1", - "class-validator": "0.14.0", + "class-validator": "0.14.1", "ethers": "5.7.2", - "executor": "^1.0.49-alpha", + "executor": "^1.5.4", "fastify": "4.14.1", - "monitoring": "^1.0.49-alpha", + "monitoring": "^1.5.4", "pino": "8.11.0", "pino-pretty": "10.0.0", "reflect-metadata": "0.1.13", - "types": "^1.0.49-alpha" + "types": "^1.5.4" }, "devDependencies": { "@types/connect": "3.4.35" diff --git a/packages/api/src/app.ts b/packages/api/src/app.ts index c1b81465..93e2a4d4 100644 --- a/packages/api/src/app.ts +++ b/packages/api/src/app.ts @@ -1,12 +1,8 @@ -import { NetworkName } from "types/lib"; -import { IDbController } from "types/lib"; import { Executor } from "executor/lib/executor"; -import { Executors } from "executor/lib/interfaces"; import { Config } from "executor/lib/config"; import RpcError from "types/lib/api/errors/rpc-error"; import * as RpcErrorCodes from "types/lib/api/errors/rpc-error-codes"; import { FastifyInstance, RouteHandler } from "fastify"; -import logger from "./logger"; import { BundlerRPCMethods, CustomRPCMethods, @@ -18,16 +14,13 @@ import { deepHexlify } from "./utils"; import { SkandhaAPI } from "./modules/skandha"; export interface RpcHandlerOptions { - network: NetworkName; - db: IDbController; config: Config; } export interface EtherspotBundlerOptions { server: FastifyInstance; config: Config; - db: IDbController; - executors: Executors; + executor: Executor; testingMode: boolean; redirectRpc: boolean; } @@ -43,8 +36,7 @@ export interface RelayerAPI { export class ApiApp { private server: FastifyInstance; private config: Config; - private db: IDbController; - private executors: Executors; + private executor: Executor; private testingMode = false; private redirectRpc = false; @@ -52,36 +44,18 @@ export class ApiApp { constructor(options: EtherspotBundlerOptions) { this.server = options.server; this.config = options.config; - this.db = options.db; this.testingMode = options.testingMode; this.redirectRpc = options.redirectRpc; - this.executors = options.executors; - this.setupRoutes(); + this.executor = options.executor; + this.server.post("/rpc/", this.setupRoutes()); } - private setupRoutes(): void { - if (this.testingMode) { - this.server.post("/rpc/", this.setupRouteFor(1337)); - logger.info("Setup route for dev: /rpc/"); - return; - } - - const networkNames = this.config.supportedNetworks; - for (const [network, chainId] of Object.entries(networkNames)) { - this.server.post(`/${chainId}`, this.setupRouteFor(chainId)); - logger.info(`Setup route for ${network}: /${chainId}/`); - } - } - - private setupRouteFor(chainId: number): RouteHandler { - const executor = this.executors.get(chainId); - if (!executor) { - throw new Error("Couldn't find executor"); - } + private setupRoutes(): RouteHandler { + const { executor } = this; const ethApi = new EthAPI(executor.eth); const debugApi = new DebugAPI(executor.debug); const web3Api = new Web3API(executor.web3); - const redirectApi = new RedirectAPI(executor.networkName, this.config); + const redirectApi = new RedirectAPI(this.config); const skandhaApi = new SkandhaAPI(executor.eth, executor.skandha); const handleRpc = async ( @@ -209,6 +183,9 @@ export class ApiApp { result = await skandhaApi.getConfig(); // skip hexlify for this particular rpc return { jsonrpc, id, result }; + case CustomRPCMethods.skandha_peers: + result = await skandhaApi.getPeers(); + break; default: throw new RpcError( `Method ${method} is not supported`, diff --git a/packages/api/src/constants.ts b/packages/api/src/constants.ts index 163860f4..e5323d39 100644 --- a/packages/api/src/constants.ts +++ b/packages/api/src/constants.ts @@ -2,6 +2,7 @@ export const CustomRPCMethods = { skandha_getGasPrice: "skandha_getGasPrice", skandha_config: "skandha_config", skandha_feeHistory: "skandha_feeHistory", + skandha_peers: "skandha_peers", }; export const BundlerRPCMethods = { diff --git a/packages/api/src/modules/redirect.ts b/packages/api/src/modules/redirect.ts index c3f9dc62..fe687dff 100644 --- a/packages/api/src/modules/redirect.ts +++ b/packages/api/src/modules/redirect.ts @@ -1,14 +1,11 @@ import { providers } from "ethers"; import { Config } from "executor/lib/config"; -import { NetworkName } from "types/lib"; export class RedirectAPI { private provider: providers.JsonRpcProvider; - constructor(private network: NetworkName, private config: Config) { - this.provider = this.config.getNetworkProvider( - this.network - ) as providers.JsonRpcProvider; + constructor(private config: Config) { + this.provider = this.config.getNetworkProvider(); } async redirect(method: string, params: any[]): Promise { diff --git a/packages/api/src/modules/skandha.ts b/packages/api/src/modules/skandha.ts index 4b70c521..e3b39c2d 100644 --- a/packages/api/src/modules/skandha.ts +++ b/packages/api/src/modules/skandha.ts @@ -38,4 +38,8 @@ export class SkandhaAPI { async getConfig(): Promise { return await this.skandhaModule.getConfig(); } + + async getPeers() { + return await this.skandhaModule.getPeers(); + } } diff --git a/packages/cli/package.json b/packages/cli/package.json index bb3f44fc..4439e7ba 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "cli", - "version": "1.0.49-alpha", + "version": "1.5.4", "description": "> TODO: description", "author": "zincoshine ", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -19,12 +19,10 @@ }, "scripts": { "clean": "rm -rf lib && rm -f *.tsbuildinfo", - "build": "tsc -p tsconfig.build.json", + "build": "tsc -p tsconfig.build.json && yarn write-git-data", + "write-git-data": "node lib/util/writeGitData.js", "lint": "eslint --color --ext .ts src/ test/", "lint:fix": "yarn run lint --fix", - "pretest": "yarn run check-types", - "test": "yarn test:unit", - "test:unit": "mocha 'test/unit/**/*.test.ts'", "check-readme": "typescript-docs-verifier" }, "bugs": { @@ -38,15 +36,15 @@ "@libp2p/peer-id-factory": "2.0.1", "@libp2p/prometheus-metrics": "1.1.3", "@multiformats/multiaddr": "12.1.3", - "api": "^1.0.49-alpha", - "db": "^1.0.49-alpha", - "executor": "^1.0.49-alpha", + "api": "^1.5.4", + "db": "^1.5.4", + "executor": "^1.5.4", "find-up": "5.0.0", "got": "12.5.3", "js-yaml": "4.1.0", - "monitoring": "^1.0.49-alpha", - "node": "^1.0.49-alpha", - "types": "^1.0.49-alpha", + "monitoring": "^1.5.4", + "node": "^1.5.4", + "types": "^1.5.4", "yargs": "17.6.2" }, "devDependencies": { diff --git a/packages/cli/src/cmds/node/handler.ts b/packages/cli/src/cmds/node/handler.ts index cc7e6418..a9c347d2 100644 --- a/packages/cli/src/cmds/node/handler.ts +++ b/packages/cli/src/cmds/node/handler.ts @@ -1,7 +1,7 @@ -/* eslint-disable no-console */ +import { resolve } from "node:path"; import { Config } from "executor/lib/config"; import { Namespace, getNamespaceByValue, RocksDbController } from "db/lib"; -import { ConfigOptions } from "executor/lib/interfaces"; +import { NetworkConfig } from "executor/lib/interfaces"; import { BundlerNode, IBundlerNodeOptions, defaultOptions } from "node/lib"; import { initNetworkOptions } from "node/lib"; import logger from "api/lib/logger"; @@ -9,6 +9,7 @@ import { ExecutorOptions, ApiOptions, P2POptions } from "types/lib/options"; import { MetricsOptions } from "types/lib/options/metrics"; import { IGlobalArgs } from "../../options"; import { mkdir, readFile } from "../../util"; +import { getVersionData } from "../../util/version"; import { initPeerIdAndEnr } from "./initPeerIdAndEnr"; export async function nodeHandler(args: IGlobalArgs): Promise { @@ -16,6 +17,8 @@ export async function nodeHandler(args: IGlobalArgs): Promise { //create the necessary directories mkdir(params.dataDir); + const networkDataDir = resolve(params.dataDir, "p2p"); + mkdir(networkDataDir); logger.info(" ___ ___ "); logger.info(" (o o) (o o) "); @@ -28,9 +31,9 @@ export async function nodeHandler(args: IGlobalArgs): Promise { let config: Config; try { - const configOptions = readFile(params.configFile) as ConfigOptions; + const networkConfig = readFile(params.configFile) as NetworkConfig; config = await Config.init({ - networks: configOptions.networks, + config: networkConfig, testingMode: params.testingMode, unsafeMode: params.unsafeMode, redirectRpc: params.redirectRpc, @@ -42,7 +45,7 @@ export async function nodeHandler(args: IGlobalArgs): Promise { } logger.info("Config file not found. Proceeding with env vars..."); config = await Config.init({ - networks: {}, + config: null, testingMode: params.testingMode, unsafeMode: params.unsafeMode, redirectRpc: params.redirectRpc, @@ -65,9 +68,10 @@ export async function nodeHandler(args: IGlobalArgs): Promise { cors: params.api["cors"], enableRequestLogging: params.api["enableRequestLogging"], }, - network: initNetworkOptions(enr, params.p2p, params.dataDir), + network: initNetworkOptions(enr, params.p2p, networkDataDir), }; + const version = getVersionData(); const node = await BundlerNode.init({ nodeOptions: options, relayersConfig: config, @@ -77,6 +81,7 @@ export async function nodeHandler(args: IGlobalArgs): Promise { bundlingMode: params.executor.bundlingMode, peerId, metricsOptions: params.metrics, + version, }); await node.start(); diff --git a/packages/cli/src/cmds/standalone/handler.ts b/packages/cli/src/cmds/standalone/handler.ts index 6b0933ab..03618d6d 100644 --- a/packages/cli/src/cmds/standalone/handler.ts +++ b/packages/cli/src/cmds/standalone/handler.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { Server } from "api/lib/server"; import { ApiApp } from "api/lib/app"; import { Config } from "executor/lib/config"; @@ -8,14 +7,14 @@ import { RocksDbController, LocalDbController, } from "db/lib"; -import { ConfigOptions } from "executor/lib/interfaces"; +import { NetworkConfig } from "executor/lib/interfaces"; import { IDbController } from "types/lib"; -import { Executors } from "executor/lib/interfaces"; import { Executor } from "executor/lib/executor"; import logger from "api/lib/logger"; import { createMetrics, getHttpMetricsServer } from "monitoring/lib"; import { mkdir, readFile } from "../../util"; import { IStandaloneGlobalArgs } from "../../options"; +import { getVersionData } from "../../util/version"; export async function bundlerHandler( args: IStandaloneGlobalArgs @@ -36,9 +35,9 @@ export async function bundlerHandler( let config: Config; try { - const configOptions = readFile(configFile) as ConfigOptions; + const networkConfig = readFile(configFile) as NetworkConfig; config = await Config.init({ - networks: configOptions.networks, + config: networkConfig, testingMode, unsafeMode, redirectRpc, @@ -50,7 +49,7 @@ export async function bundlerHandler( } logger.debug("Config file not found. Proceeding with env vars..."); config = await Config.init({ - networks: {}, + config: null, testingMode, unsafeMode, redirectRpc, @@ -88,33 +87,30 @@ export async function bundlerHandler( ? createMetrics({ p2p: false }, logger) : null; - const executors: Executors = new Map(); + const version = getVersionData(); + let executor: Executor; if (config.testingMode) { metrics?.addChain(1337); - const executor = new Executor({ - network: "dev", + executor = new Executor({ chainId: 1337, db: db, config: config, logger: logger, bundlingMode: args["executor.bundlingMode"], metrics: metrics?.chains[1337] || null, + version, }); - executors.set(1337, executor); } else { - for (const [network, chainId] of Object.entries(config.supportedNetworks)) { - metrics?.addChain(chainId); - const executor = new Executor({ - network, - chainId, - db: db, - config: config, - logger: logger, - bundlingMode: args["executor.bundlingMode"], - metrics: metrics?.chains[chainId] || null, - }); - executors.set(chainId, executor); - } + metrics?.addChain(config.chainId); + executor = new Executor({ + chainId: config.chainId, + db: db, + config: config, + logger: logger, + bundlingMode: args["executor.bundlingMode"], + metrics: metrics?.chains[config.chainId] || null, + version, + }); } args["metrics.enable"] @@ -129,10 +125,9 @@ export async function bundlerHandler( new ApiApp({ server: server.application, config: config, - db, testingMode, redirectRpc, - executors, + executor, }); await server.listen(); diff --git a/packages/cli/src/util/git.ts b/packages/cli/src/util/git.ts new file mode 100644 index 00000000..0ce1cf1a --- /dev/null +++ b/packages/cli/src/util/git.ts @@ -0,0 +1,88 @@ +import { execSync } from "node:child_process"; +import path from "node:path"; +import fs from "node:fs"; +import { fileURLToPath } from "node:url"; + +/** Git data type used to construct version information string and persistence. */ +export type GitData = { + branch: string; + commit: string; +}; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +export const gitDataPath = path.resolve(__dirname, "../../.git-data.json"); + +/** Writes a persistent git data file. */ +export function writeGitDataFile(gitData: GitData): void { + fs.writeFileSync(gitDataPath, JSON.stringify(gitData, null, 2)); +} + +/** Reads the persistent git data file. */ +export function readGitDataFile(): GitData { + return JSON.parse(fs.readFileSync(gitDataPath, "utf8")) as GitData; +} + +export function readAndGetGitData(): GitData { + try { + // Gets git data containing current branch and commit info from persistent file. + let persistedGitData: Partial; + try { + persistedGitData = readGitDataFile(); + } catch (e) { + persistedGitData = {}; + } + + const currentGitData = getGitData(); + + return { + // If the CLI is run from source, prioritze current git data + // over `.git-data.json` file, which might be stale here. + branch: + currentGitData.branch && currentGitData.branch.length > 0 + ? currentGitData.branch + : persistedGitData.branch ?? "", + commit: + currentGitData.commit && currentGitData.commit.length > 0 + ? currentGitData.commit + : persistedGitData.commit ?? "", + }; + } catch (e) { + return { + branch: "", + commit: "", + }; + } +} + +/** Gets git data containing current branch and commit info from CLI. */ +export function getGitData(): GitData { + return { + branch: getBranch(), + commit: getCommit(), + }; +} + +/** Tries to get branch from git CLI. */ +export function getBranch(): string { + try { + return shellSilent("git rev-parse --abbrev-ref HEAD"); + } catch (e) { + return ""; + } +} + +/** Tries to get commit from git from git CLI. */ +export function getCommit(): string { + try { + return shellSilent("git rev-parse --verify HEAD"); + } catch (e) { + return ""; + } +} + +/** Silent shell that won't pollute stdout, or stderr */ +function shellSilent(cmd: string): string { + return execSync(cmd, { stdio: ["ignore", "pipe", "ignore"] }) + .toString() + .trim(); +} diff --git a/packages/cli/src/util/version.ts b/packages/cli/src/util/version.ts index 12d76e54..8b95bf71 100644 --- a/packages/cli/src/util/version.ts +++ b/packages/cli/src/util/version.ts @@ -1,5 +1,6 @@ import fs from "node:fs"; import findUp from "find-up"; +import { readAndGetGitData } from "./git"; const __dirname = process.cwd(); @@ -17,7 +18,7 @@ export function getVersionData(): { commit: string; } { const parts: string[] = []; - const commit = ""; + const gitData = readAndGetGitData(); /** Returns local version from `lerna.json` or `package.json` as `"0.28.2"` */ const localVersion = readCliPackageJson() || readVersionFromLernaJson(); @@ -28,7 +29,7 @@ export function getVersionData(): { return { // Guard against empty parts array version: parts.length > 0 ? parts.join("/") : "unknown", - commit, + commit: gitData.commit, }; } diff --git a/packages/cli/src/util/writeGitData.ts b/packages/cli/src/util/writeGitData.ts new file mode 100644 index 00000000..1f5d706b --- /dev/null +++ b/packages/cli/src/util/writeGitData.ts @@ -0,0 +1,6 @@ +#!/usr/bin/env node + +import { getGitData, writeGitDataFile } from "./git.js"; + +// Script to write the git data file (json) used by the build procedures to persist git data. +writeGitDataFile(getGitData()); diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 2541d6d2..7845d954 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,6 +1,6 @@ { "name": "contracts", - "version": "1.0.49-alpha", + "version": "1.5.4", "description": "Smart contracts of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", diff --git a/packages/db/package.json b/packages/db/package.json index 217be5e7..205a8632 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -1,6 +1,6 @@ { "name": "db", - "version": "1.0.49-alpha", + "version": "1.5.4", "description": "The DB module of Etherspot bundler client", "author": "Etherspot", "homepage": "https://github.com/etherspot/etherspot-bundler#readme", @@ -25,15 +25,12 @@ "build": "tsc -p tsconfig.build.json", "lint": "eslint --color --ext .ts src/ test/", "lint:fix": "yarn run lint --fix", - "pretest": "yarn run check-types", - "test": "yarn test:unit", - "test:unit": "mocha 'test/unit/**/*.test.ts'", "check-readme": "typescript-docs-verifier" }, "dependencies": { "@chainsafe/ssz": "0.10.1", "@farcaster/rocksdb": "5.5.0", - "types": "^1.0.49-alpha" + "types": "^1.5.4" }, "devDependencies": { "@types/rocksdb": "3.0.1", diff --git a/packages/executor/.mocharc.yml b/packages/executor/.mocharc.yml new file mode 100644 index 00000000..5e09e87e --- /dev/null +++ b/packages/executor/.mocharc.yml @@ -0,0 +1,8 @@ +colors: true +require: + - ./test/setup.ts +timeout: 5000 +exit: true +extension: ["ts"] +node-option: + - "loader=ts-node/esm" \ No newline at end of file diff --git a/packages/executor/package.json b/packages/executor/package.json index 816e0893..f24bf92a 100644 --- a/packages/executor/package.json +++ b/packages/executor/package.json @@ -1,6 +1,6 @@ { "name": "executor", - "version": "1.0.49-alpha", + "version": "1.5.4", "description": "The Relayer module of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -25,17 +25,16 @@ "build": "tsc -p tsconfig.build.json", "lint": "eslint --color --ext .ts src/ test/", "lint:fix": "yarn run lint --fix", - "pretest": "yarn run check-types", "test": "yarn test:unit", - "test:unit": "mocha 'test/unit/**/*.test.ts'", + "test:unit": "vitest --run --dir test/unit/", "check-readme": "typescript-docs-verifier" }, "dependencies": { "@flashbots/ethers-provider-bundle": "0.6.2", "async-mutex": "0.4.0", "ethers": "5.7.2", - "monitoring": "^1.0.49-alpha", - "params": "^1.0.49-alpha", - "types": "^1.0.49-alpha" + "monitoring": "^1.5.4", + "params": "^1.5.4", + "types": "^1.5.4" } } diff --git a/packages/executor/src/config.ts b/packages/executor/src/config.ts index a9e31894..6cc181d4 100644 --- a/packages/executor/src/config.ts +++ b/packages/executor/src/config.ts @@ -1,59 +1,43 @@ // TODO: create a new package "config" instead of this file and refactor import { BigNumber, Wallet, providers, utils } from "ethers"; -import { NetworkName } from "types/lib"; import { IEntity, RelayingMode } from "types/lib/executor"; import { getAddress } from "ethers/lib/utils"; -import { - BundlerConfig, - ConfigOptions, - NetworkConfig, - Networks, -} from "./interfaces"; +import { BundlerConfig, ConfigOptions, NetworkConfig } from "./interfaces"; export class Config { - supportedNetworks: { - [networkName in NetworkName]: number; - }; - networks: Networks; testingMode: boolean; unsafeMode: boolean; redirectRpc: boolean; - - constructor(private config: ConfigOptions) { - this.testingMode = config.testingMode ?? false; - this.unsafeMode = config.unsafeMode ?? false; - this.redirectRpc = config.redirectRpc ?? false; - this.supportedNetworks = this.parseSupportedNetworks(); - this.networks = this.parseNetworkConfigs(); + config: NetworkConfig; + chainId: number; + + constructor(options: ConfigOptions) { + this.testingMode = options.testingMode ?? false; + this.unsafeMode = options.unsafeMode ?? false; + this.redirectRpc = options.redirectRpc ?? false; + this.config = this.getDefaultNetworkConfig(options.config); + this.chainId = 0; } static async init(configOptions: ConfigOptions): Promise { const config = new Config(configOptions); - await config.fetchChainIds(); + await config.fetchChainId(); return config; } - getNetworkProvider(network: string): providers.JsonRpcProvider | null { - const conf = this.networks[network]; - const endpoint = conf?.rpcEndpoint; - return endpoint ? new providers.JsonRpcProvider(endpoint) : null; + getNetworkProvider(): providers.JsonRpcProvider { + return new providers.JsonRpcProvider(this.config.rpcEndpoint); } - getRelayers(network: string): Wallet[] | providers.JsonRpcSigner[] | null { - const config = this.getNetworkConfig(network); - if (!config) return null; - - const provider = this.getNetworkProvider(network); - if (!provider) { - throw new Error("no provider"); - } + getRelayers(): Wallet[] | providers.JsonRpcSigner[] | null { + const provider = this.getNetworkProvider(); if (this.testingMode) { return [provider.getSigner()]; } const wallets = []; - for (const privKey of config.relayers) { + for (const privKey of this.config.relayers) { if (privKey.startsWith("0x")) { wallets.push(new Wallet(privKey, provider)); } else { @@ -63,349 +47,267 @@ export class Config { return wallets; } - getBeneficiary(network: string): string | null { - const config = this.getNetworkConfig(network); - if (!config) return null; - return config.beneficiary; + getBeneficiary(): string | null { + return this.config.beneficiary; } - getNetworkConfig(network: string): NetworkConfig | null { - const config = this.networks[network]; - if (!config) { - return null; - } - return config; + getNetworkConfig(): NetworkConfig { + return this.config; } - async fetchChainIds(): Promise { - for (const networkName of Object.keys(this.supportedNetworks)) { - const provider = this.getNetworkProvider(networkName); - if (!provider) { - throw new Error(`No provider for ${networkName}`); - } - try { - const network = await provider.getNetwork(); - this.supportedNetworks[networkName] = network.chainId; - } catch (err) { - throw new Error(`Could not fetch chain id for ${networkName}`); - } - } + getCanonicalMempool(): { entryPoint: string; mempoolId: string } { + return { + entryPoint: this.config.canonicalEntryPoint, + mempoolId: this.config.canonicalMempoolId, + }; } - isNetworkSupported(network: NetworkName | number): boolean { - if (typeof network === "number") { - return Object.values(this.supportedNetworks).some( - (chainId) => chainId === network - ); + async fetchChainId(): Promise { + const provider = this.getNetworkProvider(); + try { + const network = await provider.getNetwork(); + this.chainId = network.chainId; + } catch (err) { + throw new Error("Could not fetch chain id"); } - return Object.keys(this.supportedNetworks).some((name) => name === network); } - isEntryPointSupported( - network: NetworkName | number, - entryPoint: string - ): boolean { - if (typeof network === "number") { - const networkName = this.getNetworkNameByChainId(network); - if (!networkName) return false; - return this.isEntryPointSupported(networkName, entryPoint); - } - const config = this.getNetworkConfig(network); - return !!config?.entryPoints.some( + isEntryPointSupported(entryPoint: string): boolean { + return !!this.config.entryPoints.some( (addr) => addr.toLowerCase() === entryPoint.toLowerCase() ); } - getNetworkNameByChainId(chainId: number): string | undefined { - return Object.keys(this.supportedNetworks).find( - (name) => this.supportedNetworks[name] === chainId - ); - } - - private parseSupportedNetworks(): { [name: string]: number } { - if (this.testingMode) { - return { dev: 1337 }; - } - const envNetworks = NETWORKS_ENV(); - let networkNames = envNetworks; - if (!networkNames) { - networkNames = Object.keys(this.config.networks); - } - return networkNames.reduce((networks, networkName) => { - networks[networkName] = 0; - return networks; - }, {} as { [name: string]: number }); - } - - private parseNetworkConfigs(): Networks { - const networks: Networks = {}; - for (const network of Object.keys(this.supportedNetworks)) { - const config = this.getDefaultNetworkConfig(network); - networks[network] = { - ...config, - name: network, - }; - } - return networks; - } - - private getDefaultNetworkConfig(network: string): NetworkConfig { - let conf = this.config.networks[network]; - if (!conf) { - conf = {} as NetworkConfig; - } - conf.entryPoints = fromEnvVar( - network, + private getDefaultNetworkConfig(config: NetworkConfig | null): NetworkConfig { + if (config == null) config = {} as NetworkConfig; + config.entryPoints = fromEnvVar( "ENTRYPOINTS", - conf.entryPoints, + config.entryPoints, true ) as string[]; - conf.relayer = fromEnvVar(network, "RELAYER", conf.relayer) as string; // deprecated - conf.relayers = fromEnvVar( - network, - "RELAYERS", - conf.relayers ?? [conf.relayer], // fallback to `relayer` if `relayers` not found - true - ) as string[]; + config.relayers = fromEnvVar("RELAYERS", config.relayers, true) as string[]; - conf.beneficiary = fromEnvVar( - network, + config.beneficiary = fromEnvVar( "BENEFICIARY", - conf.beneficiary || bundlerDefaultConfigs.beneficiary + config.beneficiary || bundlerDefaultConfigs.beneficiary ) as string; - conf.rpcEndpoint = fromEnvVar(network, "RPC", conf.rpcEndpoint) as string; - if (this.testingMode && !conf.rpcEndpoint) { - conf.rpcEndpoint = "http://localhost:8545"; // local geth + config.rpcEndpoint = fromEnvVar("RPC", config.rpcEndpoint) as string; + + if (this.testingMode && !config.rpcEndpoint) { + config.rpcEndpoint = "http://localhost:8545"; // local geth } - conf.etherscanApiKey = fromEnvVar( - network, + config.etherscanApiKey = fromEnvVar( "ETHERSCAN_API_KEY", - conf.etherscanApiKey || bundlerDefaultConfigs.etherscanApiKey + config.etherscanApiKey || bundlerDefaultConfigs.etherscanApiKey ) as string; - conf.receiptLookupRange = Number( + config.receiptLookupRange = Number( fromEnvVar( - network, "RECEIPT_LOOKUP_RANGE", - conf.receiptLookupRange || bundlerDefaultConfigs.receiptLookupRange + config.receiptLookupRange || bundlerDefaultConfigs.receiptLookupRange ) ); - conf.conditionalTransactions = Boolean( + config.conditionalTransactions = Boolean( fromEnvVar( - network, "CONDITIONAL_TRANSACTIONS", - conf.conditionalTransactions || + config.conditionalTransactions || bundlerDefaultConfigs.conditionalTransactions ) ); - conf.rpcEndpointSubmit = fromEnvVar( - network, + config.rpcEndpointSubmit = fromEnvVar( "RPC_SUBMIT", - conf.rpcEndpointSubmit || bundlerDefaultConfigs.rpcEndpointSubmit + config.rpcEndpointSubmit || bundlerDefaultConfigs.rpcEndpointSubmit ) as string; - conf.gasPriceMarkup = Number( + config.gasPriceMarkup = Number( fromEnvVar( - network, "GAS_PRICE_MARKUP", - conf.gasPriceMarkup || bundlerDefaultConfigs.gasPriceMarkup + config.gasPriceMarkup || bundlerDefaultConfigs.gasPriceMarkup ) ); - conf.enforceGasPrice = Boolean( + config.enforceGasPrice = Boolean( fromEnvVar( - network, "ENFORCE_GAS_PRICE", - conf.enforceGasPrice || bundlerDefaultConfigs.enforceGasPrice + config.enforceGasPrice || bundlerDefaultConfigs.enforceGasPrice ) ); - conf.enforceGasPriceThreshold = Number( + config.enforceGasPriceThreshold = Number( fromEnvVar( - network, "ENFORCE_GAS_PRICE_THRESHOLD", - conf.enforceGasPriceThreshold || + config.enforceGasPriceThreshold || bundlerDefaultConfigs.enforceGasPriceThreshold ) ); - conf.eip2930 = Boolean( - fromEnvVar( - network, - "EIP2930", - conf.eip2930 || bundlerDefaultConfigs.eip2930 - ) + config.eip2930 = Boolean( + fromEnvVar("EIP2930", config.eip2930 || bundlerDefaultConfigs.eip2930) ); - conf.useropsTTL = Number( + config.useropsTTL = Number( fromEnvVar( - network, "USEROPS_TTL", - conf.useropsTTL || bundlerDefaultConfigs.useropsTTL + config.useropsTTL || bundlerDefaultConfigs.useropsTTL ) ); - conf.minStake = BigNumber.from( + config.minStake = BigNumber.from( fromEnvVar( - network, "MIN_STAKE", - conf.minStake ?? bundlerDefaultConfigs.minStake + config.minStake ?? bundlerDefaultConfigs.minStake ) ); - conf.minUnstakeDelay = Number( + config.minUnstakeDelay = Number( fromEnvVar( - network, "MIN_UNSTAKE_DELAY", - conf.minUnstakeDelay || bundlerDefaultConfigs.minUnstakeDelay + config.minUnstakeDelay || bundlerDefaultConfigs.minUnstakeDelay ) ); - conf.bundleGasLimitMarkup = Number( + config.bundleGasLimitMarkup = Number( fromEnvVar( - network, "BUNDLE_GAS_LIMIT_MARKUP", - conf.bundleGasLimitMarkup || bundlerDefaultConfigs.bundleGasLimitMarkup + config.bundleGasLimitMarkup || + bundlerDefaultConfigs.bundleGasLimitMarkup ) ); - conf.relayingMode = fromEnvVar( - network, + config.relayingMode = fromEnvVar( "RELAYING_MODE", - conf.relayingMode || bundlerDefaultConfigs.relayingMode + config.relayingMode || bundlerDefaultConfigs.relayingMode ) as RelayingMode; - conf.bundleInterval = Number( + config.bundleInterval = Number( fromEnvVar( - network, "BUNDLE_INTERVAL", - conf.bundleInterval || bundlerDefaultConfigs.bundleInterval + config.bundleInterval || bundlerDefaultConfigs.bundleInterval ) ); - conf.bundleSize = Number( + config.bundleSize = Number( fromEnvVar( - network, "BUNDLE_SIZE", - conf.bundleSize || bundlerDefaultConfigs.bundleSize + config.bundleSize || bundlerDefaultConfigs.bundleSize ) ); - conf.pvgMarkup = Number( + config.pvgMarkup = Number( fromEnvVar( - network, "PVG_MARKUP", - conf.pvgMarkup || bundlerDefaultConfigs.pvgMarkup + config.pvgMarkup || bundlerDefaultConfigs.pvgMarkup + ) + ); + + config.canonicalMempoolId = String( + fromEnvVar( + "CANONICAL_MEMPOOL", + config.canonicalMempoolId || bundlerDefaultConfigs.canonicalMempoolId ) ); - conf.cglMarkup = Number( + config.canonicalEntryPoint = String( + fromEnvVar( + "CANONICAL_ENTRY_POINT", + config.canonicalEntryPoint || bundlerDefaultConfigs.canonicalEntryPoint + ) + ); + + config.cglMarkup = Number( fromEnvVar( - network, "CGL_MARKUP", - conf.cglMarkup || bundlerDefaultConfigs.cglMarkup + config.cglMarkup || bundlerDefaultConfigs.cglMarkup ) ); - conf.vglMarkup = Number( + config.vglMarkup = Number( fromEnvVar( - network, "VGL_MARKUP", - conf.vglMarkup || bundlerDefaultConfigs.vglMarkup + config.vglMarkup || bundlerDefaultConfigs.vglMarkup ) ); - conf.gasFeeInSimulation = Boolean( + config.gasFeeInSimulation = Boolean( fromEnvVar( - network, "GAS_FEE_IN_SIMULATION", - conf.gasFeeInSimulation || bundlerDefaultConfigs.gasFeeInSimulation + config.gasFeeInSimulation || bundlerDefaultConfigs.gasFeeInSimulation ) ); - conf.throttlingSlack = Number( + config.throttlingSlack = Number( fromEnvVar( - network, "THROTTLING_SLACK", - conf.throttlingSlack || bundlerDefaultConfigs.throttlingSlack + config.throttlingSlack || bundlerDefaultConfigs.throttlingSlack ) ); - conf.banSlack = Number( + config.banSlack = Number( fromEnvVar( - network, "BAN_SLACK", - conf.banSlack || bundlerDefaultConfigs.banSlack + config.banSlack || bundlerDefaultConfigs.banSlack ) ); - conf.minInclusionDenominator = Number( + config.minInclusionDenominator = Number( fromEnvVar( - network, "MIN_INCLUSION_DENOMINATOR", - conf.minInclusionDenominator || + config.minInclusionDenominator || bundlerDefaultConfigs.minInclusionDenominator ) ); - conf.merkleApiURL = String( + config.merkleApiURL = String( fromEnvVar( - network, "MERKLE_API_URL", - conf.merkleApiURL || bundlerDefaultConfigs.merkleApiURL + config.merkleApiURL || bundlerDefaultConfigs.merkleApiURL ) ); - conf.skipBundleValidation = Boolean( + config.skipBundleValidation = Boolean( fromEnvVar( - network, "SKIP_BUNDLE_VALIDATION", - conf.skipBundleValidation || bundlerDefaultConfigs.skipBundleValidation + config.skipBundleValidation || bundlerDefaultConfigs.skipBundleValidation ) ); - conf.bundleGasLimit = Number( + config.bundleGasLimit = Number( fromEnvVar( - network, "BUNDLE_GAS_LIMIT", - conf.bundleGasLimit || bundlerDefaultConfigs.bundleGasLimit + config.bundleGasLimit || bundlerDefaultConfigs.bundleGasLimit ) ); - conf.userOpGasLimit = Number( + config.userOpGasLimit = Number( fromEnvVar( - network, "USEROP_GAS_LIMIT", - conf.userOpGasLimit || bundlerDefaultConfigs.userOpGasLimit + config.userOpGasLimit || bundlerDefaultConfigs.userOpGasLimit ) ); - conf.kolibriAuthKey = String( + config.kolibriAuthKey = String( fromEnvVar( - network, "KOLIBRI_AUTH_KEY", - conf.kolibriAuthKey || bundlerDefaultConfigs.kolibriAuthKey + config.kolibriAuthKey || bundlerDefaultConfigs.kolibriAuthKey ) ); - conf.entryPointForwarder = String( + config.entryPointForwarder = String( fromEnvVar( - network, "ENTRYPOINT_FORWARDER", - conf.entryPointForwarder || bundlerDefaultConfigs.entryPointForwarder + config.entryPointForwarder || bundlerDefaultConfigs.entryPointForwarder ) ); // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions - if (!conf.whitelistedEntities) { - conf.whitelistedEntities = bundlerDefaultConfigs.whitelistedEntities; + if (!config.whitelistedEntities) { + config.whitelistedEntities = bundlerDefaultConfigs.whitelistedEntities; } /** * validate whitelist addresses */ for (const entity of ["paymaster", "account", "factory"]) { - conf.whitelistedEntities[entity as IEntity] = fromEnvVar( - network, + config.whitelistedEntities[entity as IEntity] = fromEnvVar( `WL_${entity.toUpperCase()}`, - conf.whitelistedEntities[entity as IEntity], + config.whitelistedEntities[entity as IEntity], true ) as string[]; - const entities = conf.whitelistedEntities[entity as IEntity]; + const entities = config.whitelistedEntities[entity as IEntity]; if (typeof entities != "undefined" && typeof entities != "object") { throw new Error("Invalid config"); } @@ -417,7 +319,7 @@ export class Config { } } - return Object.assign({}, bundlerDefaultConfigs, conf); + return Object.assign({}, bundlerDefaultConfigs, config); } } @@ -446,6 +348,8 @@ const bundlerDefaultConfigs: BundlerConfig = { bundleSize: 4, // max size of bundle (in terms of user ops) relayingMode: "classic", pvgMarkup: 0, + canonicalMempoolId: "", + canonicalEntryPoint: "", cglMarkup: 35000, vglMarkup: 0, gasFeeInSimulation: false, @@ -458,27 +362,6 @@ const bundlerDefaultConfigs: BundlerConfig = { echoAuthKey: "", }; -const NETWORKS_ENV = (): string[] | undefined => { - const networks = process.env["SKANDHA_NETWORKS"]; - if (networks) { - return networks.replace(/ /g, "").split(","); - } - return undefined; -}; - -/** - * str = baseGoerli => SKANDHA_BASE_GOERLI - * str = goerli = SKANDHA_GOERLI - * str = baseGoerli, suffix = ENTRYPOINTS => SKANDHA_BASE_GOERLI_ENTRYPOINTS - */ -function strToEnv(str: string, suffix = ""): string { - const prefix = `SKANDHA_${str.replace(/([A-Z])+/, "_$1").toUpperCase()}`; - if (suffix) { - return `${prefix}_${suffix}`; - } - return prefix; -} - function getEnvVar(envVar: string, fallback: T): T | string { const env = process.env[envVar]; if (!env) return fallback; @@ -486,12 +369,11 @@ function getEnvVar(envVar: string, fallback: T): T | string { } function fromEnvVar( - networkName: string, - suffix = "", + envVar = "", fallback: T, isArray = false ): T | string | string[] { - const envVarName = strToEnv(networkName, suffix); + const envVarName = `SKANDHA_${envVar}`; const envVarOrFallback = getEnvVar(envVarName, fallback); if (isArray && typeof envVarOrFallback === "string") { return (envVarOrFallback as string) diff --git a/packages/executor/src/executor.ts b/packages/executor/src/executor.ts index 2c33825a..d64132a9 100644 --- a/packages/executor/src/executor.ts +++ b/packages/executor/src/executor.ts @@ -1,9 +1,9 @@ /* eslint-disable @typescript-eslint/explicit-member-accessibility */ import { BigNumber, providers } from "ethers"; -import { IDbController, NetworkName, Logger } from "types/lib"; -import { INodeAPI } from "types/lib/node"; +import { IDbController, Logger } from "types/lib"; import { chainsWithoutEIP1559 } from "params/lib"; import { PerChainMetrics } from "monitoring/lib"; +import { SkandhaVersion } from "types/lib/executor"; import { Web3, Debug, Eth, Skandha } from "./modules"; import { MempoolService, @@ -14,15 +14,15 @@ import { EventsService, } from "./services"; import { Config } from "./config"; -import { BundlingMode, NetworkConfig } from "./interfaces"; +import { BundlingMode, GetNodeAPI, NetworkConfig } from "./interfaces"; export interface ExecutorOptions { - network: NetworkName; + version: SkandhaVersion; chainId: number; db: IDbController; config: Config; logger: Logger; - nodeApi?: INodeAPI; + getNodeApi?: GetNodeAPI; bundlingMode: BundlingMode; metrics: PerChainMetrics | null; } @@ -32,8 +32,8 @@ export class Executor { private logger: Logger; private metrics: PerChainMetrics | null; + public version: SkandhaVersion; public chainId: number; - public networkName: NetworkName; public config: Config; public provider: providers.JsonRpcProvider; @@ -51,32 +51,20 @@ export class Executor { private db: IDbController; - private nodeApi: INodeAPI | undefined; + private getNodeApi: GetNodeAPI; constructor(options: ExecutorOptions) { + this.version = options.version; this.db = options.db; - this.networkName = options.network; this.config = options.config; this.logger = options.logger; this.chainId = options.chainId; - this.nodeApi = options.nodeApi; + this.getNodeApi = options.getNodeApi ?? (() => null); this.metrics = options.metrics; - this.networkConfig = options.config.networks[ - options.network - ] as NetworkConfig; + this.networkConfig = options.config.getNetworkConfig(); - this.provider = this.config.getNetworkProvider( - this.networkName - ) as providers.JsonRpcProvider; - - this.skandha = new Skandha( - this.networkName, - this.chainId, - this.provider, - this.config, - this.logger - ); + this.provider = this.config.getNetworkProvider(); this.reputationService = new ReputationService( this.db, @@ -87,12 +75,20 @@ export class Executor { BigNumber.from(this.networkConfig.minStake), this.networkConfig.minUnstakeDelay ); + + this.skandha = new Skandha( + this.getNodeApi, + this.chainId, + this.provider, + this.config, + this.logger, + ); + this.userOpValidationService = new UserOpValidationService( this.skandha, this.provider, this.reputationService, this.chainId, - this.networkName, this.config, this.logger ); @@ -105,7 +101,6 @@ export class Executor { ); this.bundlingService = new BundlingService( this.chainId, - this.networkName, this.provider, this.mempoolService, this.userOpValidationService, @@ -126,7 +121,7 @@ export class Executor { ); this.eventsService.initEventListener(); - this.web3 = new Web3(this.config); + this.web3 = new Web3(this.config, this.version); this.debug = new Debug( this.provider, this.bundlingService, @@ -134,6 +129,7 @@ export class Executor { this.reputationService, this.networkConfig ); + this.eth = new Eth( this.chainId, this.provider, @@ -143,19 +139,13 @@ export class Executor { this.networkConfig, this.logger, this.metrics, - this.nodeApi - ); - this.p2pService = new P2PService( - this.provider, - this.mempoolService, - this.bundlingService, - this.config, - this.logger + this.getNodeApi ); + this.p2pService = new P2PService(this.mempoolService); if (this.config.testingMode || options.bundlingMode == "manual") { this.bundlingService.setBundlingMode("manual"); - this.logger.info(`${this.networkName}: [X] MANUAL BUNDLING`); + this.logger.info("[X] MANUAL BUNDLING"); } if (this.config.testingMode) { @@ -163,17 +153,15 @@ export class Executor { } if (this.networkConfig.conditionalTransactions) { - this.logger.info(`${this.networkName}: [x] CONDITIONAL TRANSACTIONS`); + this.logger.info("[x] CONDITIONAL TRANSACTIONS"); } if (this.networkConfig.rpcEndpointSubmit) { - this.logger.info( - `${this.networkName}: [x] SEPARATE RPC FOR SUBMITTING BUNDLES` - ); + this.logger.info("[x] SEPARATE RPC FOR SUBMITTING BUNDLES"); } if (this.networkConfig.enforceGasPrice) { - this.logger.info(`${this.networkName}: [x] ENFORCING GAS PRICES`); + this.logger.info("[x] ENFORCING GAS PRICES"); } // can't use eip2930 in unsafeMode and on chains that dont support 1559 @@ -189,11 +177,9 @@ export class Executor { } if (this.networkConfig.eip2930) { - this.logger.info(`${this.networkName}: [x] EIP2930 ENABLED`); + this.logger.info("[x] EIP2930 ENABLED"); } - this.logger.info( - `${this.networkName}: [x] USEROPS TTL - ${this.networkConfig.useropsTTL}` - ); + this.logger.info(`[x] USEROPS TTL - ${this.networkConfig.useropsTTL}`); } } diff --git a/packages/executor/src/interfaces.ts b/packages/executor/src/interfaces.ts index 20a33176..3d9e228f 100644 --- a/packages/executor/src/interfaces.ts +++ b/packages/executor/src/interfaces.ts @@ -1,7 +1,6 @@ import { BigNumber, BigNumberish, BytesLike } from "ethers"; -import { NetworkName } from "types/lib"; import { IWhitelistedEntities, RelayingMode } from "types/lib/executor"; -import { Executor } from "./executor"; +import { INodeAPI } from "types/lib/node"; import { MempoolEntry } from "./entities/MempoolEntry"; export interface Log { @@ -72,13 +71,12 @@ export type EthChainIdResponse = { chainId: number }; export type BundlingMode = "auto" | "manual"; -export type Executors = Map; +export type GetNodeAPI = () => INodeAPI | null; + export interface NetworkConfig { entryPoints: string[]; - relayer: string; // deprecated, but kept for backwards compatibility relayers: string[]; beneficiary: string; - name?: NetworkName; rpcEndpoint: string; minInclusionDenominator: number; throttlingSlack: number; @@ -149,6 +147,10 @@ export interface NetworkConfig { // 1000 = adds 1000 gas on top of estimated PVG // default = 0 pvgMarkup: number; + // canonical mempool id + canonicalMempoolId: string; + // canonical entry point + canonicalEntryPoint: string; // add gas fee in simulated transactions (may be required for some rpc providers) gasFeeInSimulation: boolean; // api url of Merkle.io (by default https://pool.merkle.io) @@ -169,12 +171,8 @@ export type BundlerConfig = Omit< "entryPoints" | "rpcEndpoint" | "relayer" | "relayers" >; -export type Networks = { - [network in NetworkName]?: NetworkConfig; -}; - export interface ConfigOptions { - networks: Networks; + config: NetworkConfig | null; testingMode?: boolean; unsafeMode: boolean; redirectRpc: boolean; diff --git a/packages/executor/src/modules/eth.ts b/packages/executor/src/modules/eth.ts index 153d873d..87b5ce1a 100644 --- a/packages/executor/src/modules/eth.ts +++ b/packages/executor/src/modules/eth.ts @@ -13,7 +13,6 @@ import { UserOperationReceipt, } from "types/lib/api/interfaces"; import { IEntryPoint__factory } from "types/lib/executor/contracts/factories"; -import { INodeAPI } from "types/lib/node"; import { IPVGEstimator } from "params/lib/types/IPVGEstimator"; import { estimateOptimismPVG, @@ -25,7 +24,7 @@ import { Logger } from "types/lib"; import { PerChainMetrics } from "monitoring/lib"; import { deepHexlify, packUserOp } from "../utils"; import { UserOpValidationService, MempoolService } from "../services"; -import { Log, NetworkConfig } from "../interfaces"; +import { GetNodeAPI, Log, NetworkConfig } from "../interfaces"; import { getUserOpGasLimit } from "../services/BundlingService/utils"; import { EstimateUserOperationGasArgs, @@ -45,7 +44,7 @@ export class Eth { private config: NetworkConfig, private logger: Logger, private metrics: PerChainMetrics | null, - private nodeApi?: INodeAPI + private getNodeAPI: GetNodeAPI = () => null ) { // ["arbitrum", "arbitrumNova"] if ([42161, 42170].includes(this.chainId)) { @@ -112,16 +111,19 @@ export class Eth { this.metrics?.useropsInMempool.inc(); try { - if (this.nodeApi) { - const blockNumber = await this.provider.getBlockNumber(); // TODO: fetch blockNumber from simulateValidation - const chainId = await this.getChainId(); - await this.nodeApi.publishUserOpsWithEntryPointJSON( - entryPoint, - chainId, - [userOp], - blockNumber.toString() - ); - this.metrics?.useropsSent?.inc(); + const nodeApi = this.getNodeAPI(); + if (nodeApi) { + const { canonicalEntryPoint, canonicalMempoolId } = this.config; + if (canonicalEntryPoint.toLowerCase() == entryPoint.toLowerCase() && canonicalMempoolId.length > 0) { + const blockNumber = await this.provider.getBlockNumber(); // TODO: fetch blockNumber from simulateValidation + await nodeApi.publishVerifiedUserOperationJSON( + entryPoint, + userOp, + blockNumber.toString(), + canonicalMempoolId + ); + this.metrics?.useropsSent?.inc(); + } } } catch (err) { this.logger.debug(`Could not send userop over gossipsub: ${err}`); diff --git a/packages/executor/src/modules/skandha.ts b/packages/executor/src/modules/skandha.ts index 725cb451..93e36a70 100644 --- a/packages/executor/src/modules/skandha.ts +++ b/packages/executor/src/modules/skandha.ts @@ -1,5 +1,5 @@ import { BigNumber, BigNumberish, ethers } from "ethers"; -import { Logger, NetworkName } from "types/lib"; +import { Logger } from "types/lib"; import { GetConfigResponse, GetFeeHistoryResponse, @@ -11,7 +11,7 @@ import { GasPriceMarkupOne } from "params/lib"; import { getGasFee } from "params/lib"; import { IEntryPoint__factory } from "types/lib/executor/contracts"; import { UserOperationStruct } from "types/lib/executor/contracts/EntryPoint"; -import { NetworkConfig } from "../interfaces"; +import { GetNodeAPI, NetworkConfig } from "../interfaces"; import { Config } from "../config"; // custom features of Skandha @@ -19,16 +19,13 @@ export class Skandha { networkConfig: NetworkConfig; constructor( - private networkName: NetworkName, + private getNodeAPI: GetNodeAPI = () => null, private chainId: number, private provider: ethers.providers.JsonRpcProvider, private config: Config, private logger: Logger ) { - const networkConfig = this.config.getNetworkConfig(this.networkName); - if (!networkConfig) { - throw new Error("No network config"); - } + const networkConfig = this.config.getNetworkConfig(); this.networkConfig = networkConfig; void this.getConfig().then((config) => this.logger.debug(config)); } @@ -70,7 +67,7 @@ export class Skandha { } async getConfig(): Promise { - const wallets = this.config.getRelayers(this.networkName); + const wallets = this.config.getRelayers(); const walletAddresses = []; if (wallets) { for (const wallet of wallets) { @@ -95,11 +92,13 @@ export class Skandha { this.networkConfig.throttlingSlack ).toNumber(), banSlack: BigNumber.from(this.networkConfig.banSlack).toNumber(), - minStake: this.networkConfig.minStake, minUnstakeDelay: this.networkConfig.minUnstakeDelay, minSignerBalance: `${ethers.utils.formatEther( this.networkConfig.minSignerBalance )} eth`, + minStake: `${ethers.utils.formatEther( + this.networkConfig.minStake! + )} eth`, multicall: this.networkConfig.multicall, validationGasLimit: BigNumber.from( this.networkConfig.validationGasLimit @@ -125,10 +124,15 @@ export class Skandha { bundleInterval: this.networkConfig.bundleInterval, bundleSize: this.networkConfig.bundleSize, pvgMarkup: this.networkConfig.pvgMarkup, + canonicalMempoolId: this.networkConfig.canonicalMempoolId, + canonicalEntryPoint: this.networkConfig.canonicalEntryPoint, cglMarkup: this.networkConfig.cglMarkup, vglMarkup: this.networkConfig.vglMarkup, skipBundleValidation: this.networkConfig.skipBundleValidation, entryPointForwarder: this.networkConfig.entryPointForwarder, + gasFeeInSimulation: this.networkConfig.gasFeeInSimulation, + userOpGasLimit: this.networkConfig.userOpGasLimit, + bundleGasLimit: this.networkConfig.bundleGasLimit, }; } @@ -186,4 +190,10 @@ export class Skandha { ), }; } + + async getPeers() { + const nodeApi = this.getNodeAPI(); + if (!nodeApi) return []; + return nodeApi.getPeers(); + } } diff --git a/packages/executor/src/modules/web3.ts b/packages/executor/src/modules/web3.ts index 6e86c07b..5709d800 100644 --- a/packages/executor/src/modules/web3.ts +++ b/packages/executor/src/modules/web3.ts @@ -1,8 +1,10 @@ +import { SkandhaVersion } from "types/lib/executor"; import { Config } from "../config"; + export class Web3 { - constructor(private config: Config) {} + constructor(private config: Config, private version: SkandhaVersion) {} clientVersion(): string { - return `skandha/${this.config.unsafeMode ? "unsafe/" : ""}0.0.3`; // TODO: get version based on commit hash + return `skandha/${this.version.version}-${this.version.commit}`; } } diff --git a/packages/executor/src/services/BundlingService/relayers/base.ts b/packages/executor/src/services/BundlingService/relayers/base.ts index 2a0bfc98..beba03d9 100644 --- a/packages/executor/src/services/BundlingService/relayers/base.ts +++ b/packages/executor/src/services/BundlingService/relayers/base.ts @@ -1,6 +1,6 @@ import { Mutex } from "async-mutex"; import { constants, providers, utils } from "ethers"; -import { Logger, NetworkName } from "types/lib"; +import { Logger } from "types/lib"; import { PerChainMetrics } from "monitoring/lib"; import { Config } from "../../../config"; import { Bundle, NetworkConfig } from "../../../interfaces"; @@ -19,7 +19,6 @@ export abstract class BaseRelayer implements IRelayingMode { constructor( protected logger: Logger, protected chainId: number, - protected network: NetworkName, protected provider: providers.JsonRpcProvider, protected config: Config, protected networkConfig: NetworkConfig, @@ -27,7 +26,7 @@ export abstract class BaseRelayer implements IRelayingMode { protected reputationService: ReputationService, protected metrics: PerChainMetrics | null ) { - const relayers = this.config.getRelayers(this.network); + const relayers = this.config.getRelayers(); if (!relayers) throw new Error("Relayers are not set"); this.relayers = [...relayers]; this.mutexes = this.relayers.map(() => new Mutex()); @@ -139,8 +138,8 @@ export abstract class BaseRelayer implements IRelayingMode { * if signer's balance is too low, send it to signer. otherwise, send to configured beneficiary. */ protected async selectBeneficiary(relayer: Relayer): Promise { - const config = this.config.getNetworkConfig(this.network); - let beneficiary = this.config.getBeneficiary(this.network); + const config = this.config.getNetworkConfig(); + let beneficiary = this.config.getBeneficiary(); if (!beneficiary || !utils.isAddress(beneficiary)) { return relayer.getAddress(); } @@ -148,7 +147,7 @@ export abstract class BaseRelayer implements IRelayingMode { const signerAddress = await relayer.getAddress(); const currentBalance = await this.provider.getBalance(signerAddress); - if (currentBalance.lte(config!.minSignerBalance) || !beneficiary) { + if (currentBalance.lte(config.minSignerBalance) || !beneficiary) { beneficiary = signerAddress; this.logger.info( `low balance on ${signerAddress}. using it as beneficiary` diff --git a/packages/executor/src/services/BundlingService/relayers/classic.ts b/packages/executor/src/services/BundlingService/relayers/classic.ts index 13878d11..511a6bec 100644 --- a/packages/executor/src/services/BundlingService/relayers/classic.ts +++ b/packages/executor/src/services/BundlingService/relayers/classic.ts @@ -1,5 +1,5 @@ import { providers } from "ethers"; -import { NetworkName, Logger } from "types/lib"; +import { Logger } from "types/lib"; import { PerChainMetrics } from "monitoring/lib"; import { IEntryPoint__factory } from "types/lib/executor/contracts"; import { chainsWithoutEIP1559 } from "params/lib"; @@ -17,7 +17,6 @@ export class ClassicRelayer extends BaseRelayer { constructor( logger: Logger, chainId: number, - network: NetworkName, provider: providers.JsonRpcProvider, config: Config, networkConfig: NetworkConfig, @@ -28,7 +27,6 @@ export class ClassicRelayer extends BaseRelayer { super( logger, chainId, - network, provider, config, networkConfig, diff --git a/packages/executor/src/services/BundlingService/relayers/echo.ts b/packages/executor/src/services/BundlingService/relayers/echo.ts index 86ec94ef..2b15456e 100644 --- a/packages/executor/src/services/BundlingService/relayers/echo.ts +++ b/packages/executor/src/services/BundlingService/relayers/echo.ts @@ -1,6 +1,6 @@ import { providers } from "ethers"; import { PerChainMetrics } from "monitoring/lib"; -import { Logger, NetworkName } from "types/lib"; +import { Logger } from "types/lib"; import { IEntryPoint__factory } from "types/lib/executor/contracts"; import { MempoolEntryStatus } from "types/lib/executor"; import { Config } from "../../../config"; @@ -18,7 +18,6 @@ export class EchoRelayer extends BaseRelayer { constructor( logger: Logger, chainId: number, - network: NetworkName, provider: providers.JsonRpcProvider, config: Config, networkConfig: NetworkConfig, @@ -29,7 +28,6 @@ export class EchoRelayer extends BaseRelayer { super( logger, chainId, - network, provider, config, networkConfig, diff --git a/packages/executor/src/services/BundlingService/relayers/flashbots.ts b/packages/executor/src/services/BundlingService/relayers/flashbots.ts index 85c76717..bd3ef24e 100644 --- a/packages/executor/src/services/BundlingService/relayers/flashbots.ts +++ b/packages/executor/src/services/BundlingService/relayers/flashbots.ts @@ -1,6 +1,6 @@ import { providers } from "ethers"; import { PerChainMetrics } from "monitoring/lib"; -import { Logger, NetworkName } from "types/lib"; +import { Logger } from "types/lib"; import { IEntryPoint__factory } from "types/lib/executor/contracts"; import { FlashbotsBundleProvider, @@ -22,7 +22,6 @@ export class FlashbotsRelayer extends BaseRelayer { constructor( logger: Logger, chainId: number, - network: NetworkName, provider: providers.JsonRpcProvider, config: Config, networkConfig: NetworkConfig, @@ -33,7 +32,6 @@ export class FlashbotsRelayer extends BaseRelayer { super( logger, chainId, - network, provider, config, networkConfig, @@ -150,7 +148,7 @@ export class FlashbotsRelayer extends BaseRelayer { this.provider, signer, this.networkConfig.rpcEndpointSubmit, - this.network + this.config.chainId ); const submitStart = now(); return new Promise((resolve, reject) => { diff --git a/packages/executor/src/services/BundlingService/relayers/kolibri.ts b/packages/executor/src/services/BundlingService/relayers/kolibri.ts index c6916ebd..fd2a7a1c 100644 --- a/packages/executor/src/services/BundlingService/relayers/kolibri.ts +++ b/packages/executor/src/services/BundlingService/relayers/kolibri.ts @@ -1,6 +1,6 @@ import { providers } from "ethers"; import { PerChainMetrics } from "monitoring/lib"; -import { Logger, NetworkName } from "types/lib"; +import { Logger } from "types/lib"; import { IEntryPoint__factory } from "types/lib/executor/contracts"; import { fetchJson } from "ethers/lib/utils"; import { MempoolEntryStatus } from "types/lib/executor"; @@ -16,7 +16,6 @@ export class KolibriRelayer extends BaseRelayer { constructor( logger: Logger, chainId: number, - network: NetworkName, provider: providers.JsonRpcProvider, config: Config, networkConfig: NetworkConfig, @@ -27,7 +26,6 @@ export class KolibriRelayer extends BaseRelayer { super( logger, chainId, - network, provider, config, networkConfig, diff --git a/packages/executor/src/services/BundlingService/relayers/merkle.ts b/packages/executor/src/services/BundlingService/relayers/merkle.ts index 09d6699e..ca1ba2d6 100644 --- a/packages/executor/src/services/BundlingService/relayers/merkle.ts +++ b/packages/executor/src/services/BundlingService/relayers/merkle.ts @@ -1,7 +1,7 @@ import path from "node:path"; import { providers } from "ethers"; import { PerChainMetrics } from "monitoring/lib"; -import { Logger, NetworkName } from "types/lib"; +import { Logger } from "types/lib"; import { IEntryPoint__factory } from "types/lib/executor/contracts"; import { AccessList, fetchJson } from "ethers/lib/utils"; import { MempoolEntryStatus } from "types/lib/executor"; @@ -19,7 +19,6 @@ export class MerkleRelayer extends BaseRelayer { constructor( logger: Logger, chainId: number, - network: NetworkName, provider: providers.JsonRpcProvider, config: Config, networkConfig: NetworkConfig, @@ -30,7 +29,6 @@ export class MerkleRelayer extends BaseRelayer { super( logger, chainId, - network, provider, config, networkConfig, diff --git a/packages/executor/src/services/BundlingService/service.ts b/packages/executor/src/services/BundlingService/service.ts index 0b2b06df..2229ba3f 100644 --- a/packages/executor/src/services/BundlingService/service.ts +++ b/packages/executor/src/services/BundlingService/service.ts @@ -1,6 +1,6 @@ import { BigNumber, providers } from "ethers"; import { PerChainMetrics } from "monitoring/lib"; -import { NetworkName, Logger } from "types/lib"; +import { Logger } from "types/lib"; import { BundlingMode } from "types/lib/api/interfaces"; import { IEntryPoint__factory } from "types/lib/executor/contracts"; import { @@ -46,7 +46,6 @@ export class BundlingService { constructor( private chainId: number, - private network: NetworkName, private provider: providers.JsonRpcProvider, private mempoolService: MempoolService, private userOpValidationService: UserOpValidationService, @@ -57,30 +56,29 @@ export class BundlingService { relayingMode: RelayingMode ) { this.mutex = new Mutex(); - this.networkConfig = config.getNetworkConfig(network)!; + this.networkConfig = config.getNetworkConfig(); let Relayer: RelayerClass; if (relayingMode === "flashbots") { - this.logger.debug(`${this.network}: Using flashbots relayer`); + this.logger.debug(`Using flashbots relayer`); Relayer = FlashbotsRelayer; } else if (relayingMode === "merkle") { - this.logger.debug(`${this.network}: Using merkle relayer`); + this.logger.debug(`Using merkle relayer`); Relayer = MerkleRelayer; } else if (relayingMode === "kolibri") { - this.logger.debug(`${this.network}: Using kolibri relayer`); + this.logger.debug(`Using kolibri relayer`); Relayer = KolibriRelayer; } else if (relayingMode === "echo") { - this.logger.debug(`${this.network}: Using echo relayer`); + this.logger.debug(`Using echo relayer`); Relayer = EchoRelayer; } else { - this.logger.debug(`${this.network}: Using classic relayer`); + this.logger.debug(`Using classic relayer`); Relayer = ClassicRelayer; } this.relayer = new Relayer( this.logger, this.chainId, - this.network, this.provider, this.config, this.networkConfig, @@ -116,8 +114,6 @@ export class BundlingService { gasFee: IGetGasFeeResult, entries: MempoolEntry[] ): Promise { - // TODO: support multiple entry points - // filter bundles by entry points const bundle: Bundle = { storageMap: {}, entries: [], diff --git a/packages/executor/src/services/P2PService.ts b/packages/executor/src/services/P2PService.ts index 08dc4cf2..e406370b 100644 --- a/packages/executor/src/services/P2PService.ts +++ b/packages/executor/src/services/P2PService.ts @@ -1,40 +1,30 @@ -import { providers } from "ethers"; import { UserOperationStruct } from "types/lib/executor/contracts/EntryPoint"; -import { Logger } from "types/lib"; -import { Config } from "../config"; -import { BundlingService } from "./BundlingService"; import { MempoolService } from "./MempoolService"; export type PooledUserOpHashesResponse = { - more_flag: boolean; + next_cursor: number; hashes: string[]; }; export type PooledUseropsByHashResponse = UserOperationStruct[]; export class P2PService { - constructor( - private provider: providers.JsonRpcProvider, - private mempoolService: MempoolService, - private bundlingService: BundlingService, - private config: Config, - private logger: Logger - ) {} + constructor(private mempoolService: MempoolService) {} async getPooledUserOpHashes( limit: number, offset: number ): Promise { - let more_flag = false; + let hasMore = false; let keys = await this.mempoolService.fetchKeys(); if (keys.length > limit + offset) { - more_flag = true; + hasMore = true; } keys = keys.slice(offset, offset + limit); const mempoolEntries = await this.mempoolService.fetchManyByKeys(keys); return { - more_flag, + next_cursor: hasMore ? keys.length + offset : 0, hashes: mempoolEntries .map((entry) => entry.userOpHash) .filter((hash) => hash && hash.length === 66), diff --git a/packages/executor/src/services/UserOpValidation/service.ts b/packages/executor/src/services/UserOpValidation/service.ts index ec986cd7..5fd86d68 100644 --- a/packages/executor/src/services/UserOpValidation/service.ts +++ b/packages/executor/src/services/UserOpValidation/service.ts @@ -1,5 +1,5 @@ import { BigNumber, providers } from "ethers"; -import { NetworkName, Logger } from "types/lib"; +import { Logger } from "types/lib"; import { UserOperationStruct } from "types/lib/executor/contracts/EntryPoint"; import RpcError from "types/lib/api/errors/rpc-error"; import * as RpcErrorCodes from "types/lib/api/errors/rpc-error-codes"; @@ -29,14 +29,10 @@ export class UserOpValidationService { private provider: providers.Provider, private reputationService: ReputationService, private chainId: number, - private network: NetworkName, private config: Config, private logger: Logger ) { - const networkConfig = config.getNetworkConfig(network); - if (!networkConfig) { - throw new Error(`No config found for ${network}`); - } + const networkConfig = config.getNetworkConfig(); this.networkConfig = networkConfig; this.estimationService = new EstimationService( @@ -51,7 +47,6 @@ export class UserOpValidationService { this.chainId, this.config, this.networkConfig, - this.network, this.logger ); this.unsafeValidationService = new UnsafeValidationService( diff --git a/packages/executor/src/services/UserOpValidation/validators/safe.ts b/packages/executor/src/services/UserOpValidation/validators/safe.ts index ca4f83b7..335b87e2 100644 --- a/packages/executor/src/services/UserOpValidation/validators/safe.ts +++ b/packages/executor/src/services/UserOpValidation/validators/safe.ts @@ -7,7 +7,7 @@ import { BigNumber, ethers, providers } from "ethers"; import { BundlerCollectorReturn, ExitInfo } from "types/lib/executor"; import RpcError from "types/lib/api/errors/rpc-error"; import * as RpcErrorCodes from "types/lib/api/errors/rpc-error-codes"; -import { NetworkName, Logger } from "types/lib"; +import { Logger } from "types/lib"; import { IWhitelistedEntities } from "types/lib/executor"; import { AddressZero, BytesZero, EPv6UserOpEventHash } from "params/lib"; import { GetGasPriceResponse } from "types/lib/api/interfaces"; @@ -65,7 +65,6 @@ export class SafeValidationService { private chainId: number, private config: Config, private networkConfig: NetworkConfig, - private network: NetworkName, private logger: Logger ) { this.gethTracer = new GethTracer( diff --git a/packages/executor/test/constants.ts b/packages/executor/test/constants.ts new file mode 100644 index 00000000..068af0e1 --- /dev/null +++ b/packages/executor/test/constants.ts @@ -0,0 +1,14 @@ +import { constants } from "ethers"; +import { StakeInfo } from "../src/interfaces"; + +export const TestAccountMnemonic = "test test test test test test test test test test test junk"; +export const EntryPointAddress = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"; +export const SimpleFactoryAddress = "0x6Cf2534C6AA425F20fb6A15FC836C8DD7e8f14e3"; +export const DefaultRpcUrl = "http://127.0.0.1:8545"; +export const NetworkName = "anvil"; +export const ChainId = 31337; +export const ZeroStakeInfo: StakeInfo = { + addr: constants.AddressZero, + stake: constants.Zero, + unstakeDelaySec: constants.Zero +} diff --git a/packages/executor/test/fixtures/accounts.ts b/packages/executor/test/fixtures/accounts.ts new file mode 100644 index 00000000..b2cc8968 --- /dev/null +++ b/packages/executor/test/fixtures/accounts.ts @@ -0,0 +1,12 @@ +export const testAccounts = [ // test accounts + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // (0) "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" (10000 ETH) + "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d", // (1) "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" (10000 ETH) + "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a", // (2) "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC" (10000 ETH) + "0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6", // (3) "0x90F79bf6EB2c4f870365E785982E1f101E93b906" (10000 ETH) + "0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a", // (4) "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65" (10000 ETH) + "0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba", // (5) "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc" (10000 ETH) + "0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e", // (6) "0x976EA74026E726554dB657fA54763abd0C3a0aa9" (10000 ETH) + "0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356", // (7) "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955" (10000 ETH) + "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97", // (8) "0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f" (10000 ETH) + "0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6", // (9) "0xa0Ee7A142d267C1f36714E4a8F75612F20a79720" (10000 ETH) +] diff --git a/packages/executor/test/fixtures/getClient.ts b/packages/executor/test/fixtures/getClient.ts new file mode 100644 index 00000000..5bea4658 --- /dev/null +++ b/packages/executor/test/fixtures/getClient.ts @@ -0,0 +1,85 @@ +import { exec } from "child_process"; +import { now, wait } from "../../src/utils"; +import { BytesLike, hexConcat, hexZeroPad, hexlify } from "ethers/lib/utils"; +import { IEntryPoint__factory, SimpleAccountFactory__factory } from "types/src/executor/contracts"; +import { DefaultRpcUrl, EntryPointAddress } from "../constants"; +import { Wallet, constants, providers, utils } from "ethers"; +import { testAccounts } from "./accounts"; + +let provider: providers.JsonRpcProvider; + +export async function getClient() { + if (provider) return provider; + await runAnvil(); + provider = new providers.JsonRpcProvider(DefaultRpcUrl); + await deployDetermisticDeployer(); + await deployEntryPointAndFactory(); + return provider; +} + +export async function getWallet(index: number = 0) { + const client = await getClient(); + return new Wallet(testAccounts[index], client); +} + +async function runAnvil() { + exec("anvil"); + const time = now(); + while (now() < time + 5000) { + try { + let provider = new providers.JsonRpcProvider(DefaultRpcUrl); + (await provider.getNetwork()).chainId; + return; + } catch (err) { + await wait(500); + } + } +} + +export async function deployEntryPointAndFactory() { + await deployContractDeterministically(IEntryPoint__factory.bytecode); + await deployContractDeterministically((new SimpleAccountFactory__factory()).getDeployTransaction(EntryPointAddress).data!); +} + +export async function deployDetermisticDeployer() { + const contractAddress = '0x4e59b44847b379578588920ca78fbf26c0b4956c' + const factoryTx = '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222' + const factoryDeployer = '0x3fab184622dc19b6109349b94811493bf2a45362' + const deploymentGasPrice = 100e9 + const deploymentGasLimit = 100000 + const factoryDeploymentFee = deploymentGasPrice * deploymentGasLimit; + + const deployedBytecode = await provider.getCode(contractAddress); + if (deployedBytecode.length > 2) return; + const wallet = await getWallet(); + try { + let tx = await wallet.sendTransaction({ + to: factoryDeployer, + value: BigInt(factoryDeploymentFee), + nonce: await wallet.getTransactionCount() + }) + await tx.wait(); + tx = await provider.sendTransaction(factoryTx); + await tx.wait(); + } catch (err) {} +} + +export async function deployContractDeterministically(bytecode: BytesLike) { + const salt = constants.HashZero; + const saltBytes32 = hexZeroPad(hexlify(salt), 32); + const deployerAddress = '0x4e59b44847b379578588920ca78fbf26c0b4956c'; + const bytecodeHash = utils.keccak256(bytecode); + const address = utils.getCreate2Address(deployerAddress, salt, bytecodeHash); + const deployedBytecode = await provider.getCode(address); + if (deployedBytecode.length > 2) return address; + const wallet = await getWallet(); + try { + const tx = await wallet.sendTransaction({ + to: deployerAddress, + data: hexConcat([saltBytes32, bytecode]), + nonce: await wallet.getTransactionCount() + }); + await tx.wait(); + } catch (err) { } + return address; +} diff --git a/packages/executor/test/fixtures/getConfig.ts b/packages/executor/test/fixtures/getConfig.ts new file mode 100644 index 00000000..b7a7a868 --- /dev/null +++ b/packages/executor/test/fixtures/getConfig.ts @@ -0,0 +1,75 @@ +import { utils } from "ethers"; +import { Config } from "../../src/config"; +import { DefaultRpcUrl, EntryPointAddress, TestAccountMnemonic } from "../constants"; +import { ConfigOptions, NetworkConfig } from "../../src/interfaces"; + +const BaseConfig: ConfigOptions = { + config: { + entryPoints: [EntryPointAddress], + relayers: [TestAccountMnemonic], + rpcEndpoint: DefaultRpcUrl, + beneficiary: "", + minInclusionDenominator: 10, + throttlingSlack: 10, + banSlack: 50, + minStake: utils.parseEther("0.01"), + minUnstakeDelay: 0, + minSignerBalance: utils.parseEther("0.1"), + multicall: "0xcA11bde05977b3631167028862bE2a173976CA11", + validationGasLimit: 10e6, + receiptLookupRange: 1024, + etherscanApiKey: "", + conditionalTransactions: false, + rpcEndpointSubmit: "", + gasPriceMarkup: 0, + enforceGasPrice: false, + enforceGasPriceThreshold: 1000, + eip2930: false, + useropsTTL: 300, + whitelistedEntities: { paymaster: [], account: [], factory: [] }, + bundleGasLimitMarkup: 25000, + bundleInterval: 10000, + bundleSize: 4, + relayingMode: "classic", + pvgMarkup: 0, + canonicalMempoolId: "", + canonicalEntryPoint: EntryPointAddress, + cglMarkup: 35000, + vglMarkup: 0, + skipBundleValidation: false, + entryPointForwarder: "", + gasFeeInSimulation: true, + userOpGasLimit: 1000000, + bundleGasLimit: 6000000, + merkleApiURL: "", + echoAuthKey: "", + kolibriAuthKey: "" + }, + testingMode: false, + unsafeMode: false, + redirectRpc: false, +} + +let config: Config, + networkConfig: NetworkConfig, + configUnsafe: Config, + networkConfigUnsafe: NetworkConfig; + +export async function getConfigs() { + if (!config) { + config = await Config.init(BaseConfig); + networkConfig = config.getNetworkConfig(); + + configUnsafe = await Config.init({ + ...BaseConfig, + unsafeMode: true + }); + networkConfigUnsafe = configUnsafe.getNetworkConfig(); + } + return { + config, + networkConfig, + configUnsafe, + networkConfigUnsafe, + } +} diff --git a/packages/executor/test/fixtures/index.ts b/packages/executor/test/fixtures/index.ts new file mode 100644 index 00000000..bc092094 --- /dev/null +++ b/packages/executor/test/fixtures/index.ts @@ -0,0 +1,6 @@ +export * from "./getClient"; +export * from "./getConfig"; +export * from "./services"; +export * from "./accounts"; +export * from "./userOp"; +export * from "./modules"; diff --git a/packages/executor/test/fixtures/modules.ts b/packages/executor/test/fixtures/modules.ts new file mode 100644 index 00000000..8e9bbf9e --- /dev/null +++ b/packages/executor/test/fixtures/modules.ts @@ -0,0 +1,52 @@ +import { Config } from "../../src/config"; +import { NetworkConfig } from "../../src/interfaces"; +import { ChainId } from "../constants"; +import { logger } from "../mocks/logger"; +import { getServices } from "./services"; +import { Web3, Debug, Eth } from "../../src/modules"; + +export async function getModules(config: Config, networkConfig: NetworkConfig) { + const provider = config.getNetworkProvider()!; + const { + reputationService, + userOpValidationService, + mempoolService, + bundlingService, + skandha + } = await getServices(config, networkConfig); + + const web3 = new Web3(config, { + version: "test", + commit: "commit" + }); + const debug = new Debug( + provider, + bundlingService, + mempoolService, + reputationService, + networkConfig + ); + + const eth = new Eth( + ChainId, + provider, + userOpValidationService, + mempoolService, + skandha, + networkConfig, + logger, + null, // metrics + undefined // INodeAPI + ); + + return { + web3, + debug, + skandha, + eth, + reputationService, + userOpValidationService, + mempoolService, + bundlingService, + } +} diff --git a/packages/executor/test/fixtures/services.ts b/packages/executor/test/fixtures/services.ts new file mode 100644 index 00000000..e621e8c6 --- /dev/null +++ b/packages/executor/test/fixtures/services.ts @@ -0,0 +1,80 @@ +import { BigNumber } from "ethers"; +import { Config } from "../../src/config"; +import { NetworkConfig } from "../../src/interfaces"; +import { BundlingService, EventsService, MempoolService, ReputationService, UserOpValidationService } from "../../src/services"; +import { LocalDbController } from "../mocks/database"; +import { ChainId } from "../constants"; +import { logger } from "../mocks/logger"; +import { Skandha } from "../../src/modules"; + +export async function getServices(config: Config, networkConfig: NetworkConfig) { + const provider = config.getNetworkProvider(); + const db = new LocalDbController("test"); + const reputationService = new ReputationService( + db, + config.chainId, + networkConfig.minInclusionDenominator, + networkConfig.throttlingSlack, + networkConfig.banSlack, + BigNumber.from(networkConfig.minStake), + networkConfig.minUnstakeDelay + ); + + const skandha = new Skandha( + undefined, + ChainId, + provider, + config, + logger + ); + + const userOpValidationService = new UserOpValidationService( + skandha, + provider, + reputationService, + ChainId, + config, + logger + ); + + const mempoolService = new MempoolService( + db, + ChainId, + reputationService, + networkConfig, + logger + ); + + const bundlingService = new BundlingService( + ChainId, + provider, + mempoolService, + userOpValidationService, + reputationService, + config, + logger, + null, + "classic" + ); + + bundlingService.setBundlingMode("manual"); + + const eventsService = new EventsService( + ChainId, + provider, + logger, + reputationService, + mempoolService, + networkConfig.entryPoints, + db + ); + + return { + reputationService, + userOpValidationService, + mempoolService, + bundlingService, + eventsService, + skandha + } +} \ No newline at end of file diff --git a/packages/executor/test/fixtures/userOp.ts b/packages/executor/test/fixtures/userOp.ts new file mode 100644 index 00000000..4eaccb20 --- /dev/null +++ b/packages/executor/test/fixtures/userOp.ts @@ -0,0 +1,123 @@ +import { IEntryPoint__factory, SimpleAccountFactory__factory, SimpleAccount__factory } from "types/src/executor/contracts" +import { ChainId, DefaultRpcUrl, EntryPointAddress, SimpleFactoryAddress } from "../constants" +import { BigNumber, BigNumberish, Contract, Wallet, ethers, providers, utils } from "ethers"; +import { arrayify, defaultAbiCoder, hexConcat, keccak256 } from "ethers/lib/utils"; +import { UserOperationStruct } from "types/src/executor/contracts/EntryPoint"; +import { applyEstimatedUserOp, randomAddress } from "../utils"; +import { packUserOp } from "../../src/utils"; +import { Eth } from "../../src/modules"; + +// Creates random simple transfer userop +export async function createRandomUnsignedUserOp( + ownerAddress: string, + salt: number = 0 +): Promise { + const accountAddress = await getCounterFactualAddress(ownerAddress, salt); + const isDeployed = await isAccountDeployed(ownerAddress, salt); + const initCode = isDeployed ? '0x' : _getAccountInitCode(ownerAddress, salt); + const verificationGasLimit = isDeployed ? 100000 : 200000; // random value, double if not deployed + const maxFeePerGas = 1; // TODO: fetch gas prices from skandhaService + const maxPriorityFeePerGas = 1; + + // generate random calldata + const callData = _encodeExecute(accountAddress, randomAddress().address, utils.parseUnits('1', 9), '0x'); + const callGasLimit = 35000; + + return { + sender: accountAddress, + nonce: isDeployed ? await _getNonce(accountAddress) : 0, + initCode, + callGasLimit, + callData, + verificationGasLimit, + maxFeePerGas, + maxPriorityFeePerGas, + preVerificationGas: 45000, + signature: '0x', + paymasterAndData: '0x' + } +} + +export async function createSignedUserOp(eth: Eth, wallet: Wallet) { + let unsignedUserOp = await createRandomUnsignedUserOp(wallet.address); + const response = await eth.estimateUserOperationGas({ + userOp: unsignedUserOp, + entryPoint: EntryPointAddress + }); + unsignedUserOp = applyEstimatedUserOp(unsignedUserOp, response); + const userOp = await signUserOp(wallet, unsignedUserOp); + return userOp; +} + +export async function signUserOp(wallet: Wallet, userOp: UserOperationStruct): Promise { + const userOpHash = getUserOpHash(userOp); + const signature = await _signUserOpHash(wallet, userOpHash); + return { + ...userOp, + signature, + }; +} + +export async function getCounterFactualAddress(ownerAddress: string, salt: number = 0): Promise { + try { + const provider = new providers.JsonRpcProvider(DefaultRpcUrl); + const initCode = await _getAccountInitCode(ownerAddress, salt); + const entryPoint = IEntryPoint__factory.connect(EntryPointAddress, provider); + await entryPoint.callStatic.getSenderAddress(initCode); + + throw new Error("getSenderAddress: unexpected result"); + } catch (error: any) { + const addr = error?.errorArgs?.sender; + if (!addr) throw error; + if (addr === ethers.constants.AddressZero) throw new Error('Unsupported chain_id/walletFactoryAddress'); + return addr; + } +} + +async function isAccountDeployed(ownerAddress: string, salt: number = 0): Promise { + const provider = new providers.JsonRpcProvider(DefaultRpcUrl); + const senderAddressCode = await provider.getCode(getCounterFactualAddress(ownerAddress, salt)); + return senderAddressCode.length > 2; +} + +export function getUserOpHash(userOp: UserOperationStruct): string { + const userOpHash = keccak256(packUserOp(userOp, true)); + const enc = defaultAbiCoder.encode(['bytes32', 'address', 'uint256'], [userOpHash, EntryPointAddress, ChainId]); + return keccak256(enc); +} + +async function _signUserOpHash(wallet: Wallet, userOpHash: string): Promise { + return await wallet.signMessage(arrayify(userOpHash)); +} + +function _getAccountContract(accountAddress: string): Contract { + const provider = new providers.JsonRpcProvider(DefaultRpcUrl); + return new ethers.Contract(accountAddress, SimpleAccount__factory.abi, provider); +} + +async function _getNonce(accountAddress: string): Promise { + const accountContract = _getAccountContract(accountAddress); + return await accountContract.getNonce(); +} + +function _encodeExecute(accountAddress: string, target: string, value: BigNumberish, data: string): string { + const accountContract = new ethers.Contract(accountAddress, SimpleAccount__factory.abi); + return accountContract.interface.encodeFunctionData('execute', [target, value, data]); +} + +function _encodeBatch(accountAddress: string, targets: string[], datas: string[]): string { + const accountContract = new ethers.Contract(accountAddress, SimpleAccount__factory.abi); + return accountContract.interface.encodeFunctionData('executeBatch', [targets, datas]); +} + +function _getAccountInitCode(ownerAddress: string, salt: number = 0): string { + const factory = new ethers.Contract(SimpleFactoryAddress, SimpleAccountFactory__factory.abi); + + return hexConcat([ + SimpleFactoryAddress, + factory.interface.encodeFunctionData('createAccount', [ + ownerAddress, + salt, + ]), + ]); +} diff --git a/packages/executor/test/mocks/GethTracer.ts b/packages/executor/test/mocks/GethTracer.ts new file mode 100644 index 00000000..b88c5c07 --- /dev/null +++ b/packages/executor/test/mocks/GethTracer.ts @@ -0,0 +1,23 @@ +import { providers } from "ethers"; +import { BundlerCollectorReturn } from "types/lib/executor"; +import { TracerPrestateResponse } from "../../src/interfaces"; + +export class GethTracer { + async debug_traceCall( + tx: providers.TransactionRequest + ): Promise { + return { + callsFromEntryPoint: [], + keccak: [], + calls: [], + logs: [], + debug: [], + } + } + + async debug_traceCallPrestate( + tx: providers.TransactionRequest + ): Promise { + return {}; + } +} \ No newline at end of file diff --git a/packages/executor/test/mocks/database.ts b/packages/executor/test/mocks/database.ts new file mode 100644 index 00000000..7c8d208a --- /dev/null +++ b/packages/executor/test/mocks/database.ts @@ -0,0 +1,68 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +import { IDbController } from "types/src"; + +enum Status { + started = "started", + stopped = "stopped", +} + +export class LocalDbController implements IDbController { + private namespace: string; + private status = Status.stopped; + private db: { + [key: string]: any; + } = {}; + + constructor(namespace: string) { + this.namespace = namespace; + } + + async get(key: string): Promise { + key = `${this.namespace}:${key}`; + const value = this.db[key]; + if (!value) { + throw new Error("Not Found"); + } + try { + return JSON.parse(value as string); + } catch (_) { + return value as T; + } + } + + // eslint-disable-next-line @typescript-eslint/ban-types + async put(key: string, value: Object): Promise { + key = `${this.namespace}:${key}`; + this.db[key] = JSON.stringify(value); + } + + async del(key: string): Promise { + key = `${this.namespace}:${key}`; + delete this.db[key]; + } + + async getMany(keys: string[]): Promise { + return keys.map((key) => { + key = `${this.namespace}:${key}`; + const value = this.db[key]; + if (!value) { + throw new Error("Not Found"); + } + try { + return JSON.parse(value as string); + } catch (_) { + return value as T; + } + }); + } + + async start(): Promise { + if (this.status === Status.started) return; + this.status = Status.started; + } + + async stop(): Promise { + if (this.status === Status.stopped) return; + this.status = Status.stopped; + } +} diff --git a/packages/executor/test/mocks/index.ts b/packages/executor/test/mocks/index.ts new file mode 100644 index 00000000..9a64cfeb --- /dev/null +++ b/packages/executor/test/mocks/index.ts @@ -0,0 +1,3 @@ +export * from "./GethTracer"; +export * from "./database"; +export * from "./logger"; diff --git a/packages/executor/test/mocks/logger.ts b/packages/executor/test/mocks/logger.ts new file mode 100644 index 00000000..3521a8fd --- /dev/null +++ b/packages/executor/test/mocks/logger.ts @@ -0,0 +1,11 @@ +import { Logger } from "types/src"; + +export const logger: Logger = { + fatal: (...args: any[]) => {}, + error: (...args: any[]) => {}, + warn: (...args: any[]) => {}, + info: (...args: any[]) => {}, + debug: (...args: any[]) => {}, + trace: (...args: any[]) => {}, + silent: (...args: any[]) => {}, +} diff --git a/packages/executor/test/setup.ts b/packages/executor/test/setup.ts new file mode 100644 index 00000000..b83e6cb7 --- /dev/null +++ b/packages/executor/test/setup.ts @@ -0,0 +1,6 @@ +import chai from "chai"; +import chaiAsPromised from "chai-as-promised"; +import sinonChai from "sinon-chai"; + +chai.use(chaiAsPromised); +chai.use(sinonChai); diff --git a/packages/executor/test/unit/modules/eth.test.ts b/packages/executor/test/unit/modules/eth.test.ts new file mode 100644 index 00000000..cf2ddc32 --- /dev/null +++ b/packages/executor/test/unit/modules/eth.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, it } from "vitest"; +import { Wallet } from "ethers"; +import { createRandomUnsignedUserOp, getClient, getConfigs, getCounterFactualAddress, getModules, testAccounts } from "../../fixtures"; +import { setBalance } from "../../utils"; +import { EntryPointAddress } from "../../constants"; +import { EstimatedUserOperationGas } from "types/src/api/interfaces"; + +describe("Eth module", async () => { + const client = await getClient(); // runs anvil + const wallet = new Wallet(testAccounts[0]); + const aaWalletAddress = await getCounterFactualAddress(wallet.address); + + describe("Unsafe mode", async () => { + const { configUnsafe, networkConfigUnsafe } = await getConfigs(); + const { eth } = await getModules(configUnsafe, networkConfigUnsafe); + + it("Estimation should fails with AA21 error", async () => { + const userOp = await createRandomUnsignedUserOp(wallet.address); + await setBalance(userOp.sender, 0); // reset the balance + const aaBalance = await client.getBalance(userOp.sender); + expect(aaBalance.toHexString()).toEqual('0x00'); + try { + await eth.estimateUserOperationGas({ + userOp, + entryPoint: EntryPointAddress + }); + expect.unreachable("Estimation should fail"); + } catch (err) { + expect(err).toBeInstanceOf(Error); + } + }); + + it("Simple transfer should pass through estimation", async () => { + await setBalance(aaWalletAddress); + const userOp = await createRandomUnsignedUserOp(wallet.address); + const response: EstimatedUserOperationGas = await eth.estimateUserOperationGas({ + userOp, + entryPoint: EntryPointAddress + }); + expect(response).toBeDefined(); + }); + }); +}); diff --git a/packages/executor/test/unit/modules/skandha.test.ts b/packages/executor/test/unit/modules/skandha.test.ts new file mode 100644 index 00000000..dec0d9e5 --- /dev/null +++ b/packages/executor/test/unit/modules/skandha.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, it } from "vitest"; +import { Wallet } from "ethers"; +import { getClient, getConfigs, getModules } from "../../fixtures"; +import { TestAccountMnemonic } from "../../constants"; + +describe("Skandha module", async () => { + const client = await getClient(); // runs anvil + const wallet = Wallet.fromMnemonic(TestAccountMnemonic).connect(client); + + const { config, networkConfig } = await getConfigs(); + const { skandha } = await getModules(config, networkConfig); + + it("getGasPrice should return actual onchain gas price", async () => { + const gasFee = await client.getFeeData(); + const responseFromSkandha = await skandha.getGasPrice(); + expect(gasFee.maxFeePerGas).toEqual(responseFromSkandha.maxFeePerGas); + expect(gasFee.maxPriorityFeePerGas).toEqual(responseFromSkandha.maxPriorityFeePerGas); + }); + + it("getConfig should return all config values and hide sensitive data", async () => { + const configSkandha = await skandha.getConfig(); + expect(configSkandha.flags.redirectRpc).toEqual(config.redirectRpc); + expect(configSkandha.flags.testingMode).toEqual(config.testingMode); + expect(configSkandha.relayers).toEqual([wallet.address]); + + const sensitiveFields = [ + "relayers", + "relayer", + "rpcEndpoint", + "name", + "merkleApiURL", + "kolibriAuthKey", + "echoAuthKey" + ]; + for (const [key, value] of Object.entries(networkConfig)) { + if (sensitiveFields.indexOf(key) > -1) continue; + if (!configSkandha.hasOwnProperty(key)) { + throw new Error(`${key} is not defined in skandha_config`); + } + } + }); +}); diff --git a/packages/executor/test/unit/services/BundlingService.test.ts b/packages/executor/test/unit/services/BundlingService.test.ts new file mode 100644 index 00000000..fa5d227b --- /dev/null +++ b/packages/executor/test/unit/services/BundlingService.test.ts @@ -0,0 +1,51 @@ +import { describe, it, expect } from "vitest"; +import { getConfigs, getModules, getClient, getWallet, createSignedUserOp, getCounterFactualAddress } from "../../fixtures"; +import { EntryPointAddress } from "../../constants"; +import { setBalance } from "../../utils"; + +describe("Bundling Service", async () => { + await getClient(); // runs anvil + + const { service, ethModule, networkConfigUnsafe, debugModule } = await prepareTest(); + describe("Unsafe mode", async () => { + it("Submitted bundle should contain configured number of userops", async () => { + const { bundleSize } = networkConfigUnsafe; + const userOpHashes = []; + for (let i = 0; i < bundleSize; ++i) { + const wallet = await getWallet(i); + const aaWallet = await getCounterFactualAddress(wallet.address); + await setBalance(aaWallet); + const userOp = await createSignedUserOp(ethModule, wallet); + const hash = await ethModule.sendUserOperation({ + userOp, + entryPoint: EntryPointAddress + }); + userOpHashes.push(hash); + } + expect(userOpHashes).toHaveLength(bundleSize); + expect((await debugModule.dumpMempool())).toHaveLength(bundleSize); + expect(await debugModule.sendBundleNow()).toBe("ok"); + + // check that all userops are in the same bundle + let txHash = null; + for (let i = 0; i < bundleSize; ++i) { + const response = await ethModule.getUserOperationByHash(userOpHashes[i]); + if (!txHash) { + txHash = response?.transactionHash; + } else { + expect(response?.transactionHash).toEqual(txHash); + } + } + }); + }); +}); + +async function prepareTest() { + const { configUnsafe, networkConfigUnsafe } = await getConfigs(); + const { + eth: ethModule, + bundlingService: service, + debug: debugModule + } = await getModules(configUnsafe, networkConfigUnsafe); + return { service, ethModule, networkConfigUnsafe, debugModule }; +}; diff --git a/packages/executor/test/unit/services/MempoolService.test.ts b/packages/executor/test/unit/services/MempoolService.test.ts new file mode 100644 index 00000000..3f085954 --- /dev/null +++ b/packages/executor/test/unit/services/MempoolService.test.ts @@ -0,0 +1,63 @@ +import { describe, it, expect, vi } from "vitest"; +import { + createRandomUnsignedUserOp, + getClient, + getConfigs, + getCounterFactualAddress, + getModules, + signUserOp, + testAccounts +} from "../../fixtures"; +import { Wallet, constants } from "ethers"; +import { applyEstimatedUserOp, setBalance } from "../../utils"; +import { EntryPointAddress, ZeroStakeInfo } from "../../constants"; +import { Eth } from "../../../src/modules"; +import { now } from "../../../src/utils"; + +describe("Mempool Service", async () => { + await getClient(); + const { service, ethModule, networkConfig } = await prepareTest(); + const wallet = new Wallet(testAccounts[0]); + const aaWalletAddress = await getCounterFactualAddress(wallet.address); + + it("Userop should be replaced after TTL without increasing fees", async () => { + await setBalance(aaWalletAddress); + const userOp = await createUserOp(ethModule, wallet); + + let timestamp = now(); + await service.addUserOp( userOp, EntryPointAddress, 0, ZeroStakeInfo, ZeroStakeInfo, ZeroStakeInfo, ZeroStakeInfo, constants.HashZero); + try { + await service.addUserOp( userOp, EntryPointAddress, 0, ZeroStakeInfo, ZeroStakeInfo, ZeroStakeInfo, ZeroStakeInfo, constants.HashZero); + expect.unreachable("Validation should fail"); + } catch (err) { + expect(err.message).toContain("fee too low"); + } + try { + vi.useFakeTimers(); + vi.setSystemTime(timestamp + networkConfig.useropsTTL * 1001); // after around ttl seconds passed we can replace with the same userop + await service.addUserOp( userOp, EntryPointAddress, 0, ZeroStakeInfo, ZeroStakeInfo, ZeroStakeInfo, ZeroStakeInfo, constants.HashZero); + } catch (err) { + console.log(err); + expect.unreachable("Validation should not fail"); + } finally { + vi.useRealTimers(); + } + }); +}); + +async function prepareTest() { + const { config, networkConfig } = await getConfigs(); + const { eth: ethModule, mempoolService: service } = await getModules(config, networkConfig); + return { service, ethModule, networkConfig }; +}; + +async function createUserOp(eth: Eth, wallet: Wallet) { + let unsignedUserOp = await createRandomUnsignedUserOp(wallet.address); + const response = await eth.estimateUserOperationGas({ + userOp: unsignedUserOp, + entryPoint: EntryPointAddress + }); + unsignedUserOp = applyEstimatedUserOp(unsignedUserOp, response); + const userOp = await signUserOp(wallet, unsignedUserOp); + return userOp; +} \ No newline at end of file diff --git a/packages/executor/test/unit/services/ReputationService.test.ts b/packages/executor/test/unit/services/ReputationService.test.ts new file mode 100644 index 00000000..ec1ca570 --- /dev/null +++ b/packages/executor/test/unit/services/ReputationService.test.ts @@ -0,0 +1,200 @@ +import { describe, it } from 'vitest'; +import { utils } from 'ethers'; +import { ReputationStatus } from 'types/src/executor'; +import { randomAddress } from '../../utils'; +import { getClient, getConfigs, getServices } from '../../fixtures'; +import { assert } from 'chai'; +import * as RpcErrorCodes from 'types/lib/api/errors/rpc-error-codes'; + +describe('Reputation Service', async () => { + await getClient(); + it('The status of a fresh entry should be OK', async () => { + const { service } = await prepareTest(); + const wallet = randomAddress(); + + const status = await service.getStatus(wallet.address); + assert.strictEqual( + status, + ReputationStatus.OK, + 'The reputation status is not displayed OK.' + ); + }); + + it('The status of an entry should be BANNED', async () => { + const { service } = await prepareTest(); + const wallet = randomAddress(); + await service.setReputation(wallet.address, 1000000000000000, 100); + + const status = await service.getStatus(wallet.address); + assert.strictEqual( + status, + ReputationStatus.BANNED, + 'The reputation status is not displayed BANNED.' + ); + }); + + it('Set the reputation with valid details', async () => { + let random1 = Math.floor(Math.random() * 10 + 1); + let random2 = Math.floor(Math.random() * 10 + 1); + const { service } = await prepareTest(); + const wallet = randomAddress(); + await service.setReputation(wallet.address, random1, random2); + + const data = await service.fetchOne(wallet.address); + + assert.strictEqual( + data.chainId, + 31337, + 'The chainId value is not displayed correctly in the response of fetchone function.' + ); + assert.isNotEmpty( + data.address, + 'The address value is displayed empty in the response of fetchone function.' + ); + + assert.strictEqual( + data.opsSeen, + random1, + 'The _opsSeen value is not displayed correctly in the response of fetchone function.' + ); + + assert.strictEqual( + data.opsIncluded, + random2, + 'The _opsIncluded value is not displayed correctly in the response of fetchone function.' + ); + + assert.isNumber( + data.lastUpdateTime, + 'The lastUpdateTime value is not number in the response of fetchone function.' + ); + }); + + it('Dump with single address details', async () => { + let random1 = Math.floor(Math.random() * 10 + 1); + let random2 = Math.floor(Math.random() * 10 + 1); + const { service } = await prepareTest(); + const wallet = randomAddress(); + await service.setReputation(wallet.address, random1, random2); + const data = await service.dump(); + + assert.isNotEmpty( + data[0].address, + 'The address value is emplty in the dump response.' + ); + assert.strictEqual( + data[0].opsSeen, + random1, + 'The opsSeen value is not displayed equal in the dump response.' + ); + assert.strictEqual( + data[0].opsIncluded, + random2, + 'The opsIncluded value is not displayed equal in the dump response.' + ); + assert.strictEqual( + data[0].status, + 0, + 'The status value is not displayed equal in the dump response.' + ); + }); + + it('Check the stake with too low stakes', async () => { + const { service } = await prepareTest(); + const wallet = randomAddress(); + const data = await service.checkStake({ + stake: utils.parseEther('0.00001'), + unstakeDelaySec: 2000, + addr: wallet.address, + }); + + assert.strictEqual( + data.msg, + wallet.address + + ' stake 10000000000000 is too low (min=10000000000000000)', + 'The msg value is not displayed correctly in the response of checkStake function with too low stakes.' + ); + + assert.strictEqual( + data.code, + RpcErrorCodes.STAKE_DELAY_TOO_LOW, + 'The code value is not displayed correctly in the response of checkStake function with too low stakes.' + ); + }); + + it('Check the stake with zero stakes', async () => { + const { service } = await prepareTest(); + const wallet = randomAddress(); + const data = await service.checkStake({ + stake: 0, + unstakeDelaySec: 2000, + addr: wallet.address, + }); + + assert.strictEqual( + data.msg, + wallet.address + ' is unstaked', + 'The msg value is not displayed correctly in the response of checkStake function with zero stake.' + ); + + assert.strictEqual( + data.code, + RpcErrorCodes.STAKE_DELAY_TOO_LOW, + 'The code value is not displayed correctly in the response of checkStake function with zero stake.' + ); + }); + + it('Check the stake with less than minUnstakeDelay value', async () => { + const { service } = await prepareTest(); + const wallet = randomAddress(); + const data = await service.checkStake({ + stake: utils.parseEther('0.1'), + unstakeDelaySec: -1, // minUnstakeDelay is given in the config file in packages\executor\test\fixtures\getConfig.ts + addr: wallet.address, + }); + + assert.strictEqual( + data.msg, + wallet.address + ' unstake delay -1 is too low (min=0)', + 'The msg value is not displayed correctly in the response of checkStake function with less than minUnstakeDelay value.' + ); + + assert.strictEqual( + data.code, + RpcErrorCodes.STAKE_DELAY_TOO_LOW, + 'The code value is not displayed correctly in the response of checkStake function with less than minUnstakeDelay value.' + ); + }); + + it('Check the stake with banned address', async () => { + const { service } = await prepareTest(); + const wallet = randomAddress(); + await service.setReputation(wallet.address, 1000000000000000, 100); + const data = await service.checkStake({ + stake: utils.parseEther('0.1'), + unstakeDelaySec: 2000, + addr: wallet.address, + }); + + assert.strictEqual( + data.msg, + wallet.address + ' is banned', + 'The msg value is not displayed correctly in the response of checkStake function with banned address.' + ); + + assert.strictEqual( + data.code, + RpcErrorCodes.PAYMASTER_OR_AGGREGATOR_BANNED, + 'The code value is not displayed correctly in the response of checkStake function with banned address.' + ); + }); +}); + +async function prepareTest() { + const { config, networkConfig } = await getConfigs(); + const { reputationService: service } = await getServices( + config, + networkConfig + ); + return { service }; +} diff --git a/packages/executor/test/unit/services/UserOpValidationService.test.ts b/packages/executor/test/unit/services/UserOpValidationService.test.ts new file mode 100644 index 00000000..add864a4 --- /dev/null +++ b/packages/executor/test/unit/services/UserOpValidationService.test.ts @@ -0,0 +1,53 @@ +import { describe, it } from 'vitest'; +import { + getClient, + getConfigs, + getCounterFactualAddress, + getModules, + testAccounts, +} from '../../fixtures'; +import { Wallet } from 'ethers'; +import { setBalance } from '../../utils'; +import { assert } from 'chai'; + +describe('UserOpValidation Service', async () => { + await getClient(); // runs anvil + const wallet = new Wallet(testAccounts[0]); + const aaWalletAddress = await getCounterFactualAddress(wallet.address); + const { configUnsafe, networkConfigUnsafe } = + await getConfigs(); + const { userOpValidationService: service } = await getModules( + configUnsafe, + networkConfigUnsafe + ); + it('Validate Gas Fee with maxFeePerGas less than baseFee', async () => { + await setBalance(aaWalletAddress); + const userOp = { + sender: '0xcd4295624350aB5F3e5413a667472f68Dd6d0030', + nonce: 0, + initCode: + '0x6cf2534c6aa425f20fb6a15fc836c8dd7e8f14e35fbfb9cf000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb922660000000000000000000000000000000000000000000000000000000000000000', + callGasLimit: 35000, + callData: + '0xb61d27f600000000000000000000000040379505221ef0a561fee9c70e2ed41586b0f435000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000', + verificationGasLimit: 200000, + maxFeePerGas: '5', + maxPriorityFeePerGas: '10', + preVerificationGas: 45000, + signature: '0x', + paymasterAndData: '0x', + }; + + try { + await service.validateGasFee(userOp); + } catch (e: any) { + if (e.message === 'maxFeePerGas must be greater or equal to baseFee') { + assert.ok( + 'The correct code is display for the invalid details for the validating gas fee.' + ); + } else { + assert.fail('The validate gas fee is not working correctly.'); + } + } + }); +}); diff --git a/packages/executor/test/unit/utils/client.test.ts b/packages/executor/test/unit/utils/client.test.ts new file mode 100644 index 00000000..1e127640 --- /dev/null +++ b/packages/executor/test/unit/utils/client.test.ts @@ -0,0 +1,24 @@ +import { describe, it, expect } from "vitest"; +import { getClient } from "../../fixtures"; +import { ChainId, EntryPointAddress, SimpleFactoryAddress } from "../../constants"; + +describe("Initial check of test environment", async () => { + const client = await getClient(); + + it("Anvil should run", async () => { + const chainId = (await client.getNetwork()).chainId; + expect(chainId).toEqual(ChainId); + }); + + it("EntryPoint v0.6.0 should be deployed", async () => { + const bytecode = await client.getCode(EntryPointAddress); + expect(bytecode).toBeDefined(); + expect(bytecode?.length).toBeGreaterThan(2); + }); + + it("SimpleFactory should be deployed", async () => { + const bytecode = await client.getCode(SimpleFactoryAddress); + expect(bytecode).toBeDefined(); + expect(bytecode?.length).toBeGreaterThan(2); + }); +}); diff --git a/packages/executor/test/utils/applyEstimatedUserOp.ts b/packages/executor/test/utils/applyEstimatedUserOp.ts new file mode 100644 index 00000000..247a0ae4 --- /dev/null +++ b/packages/executor/test/utils/applyEstimatedUserOp.ts @@ -0,0 +1,11 @@ +import { EstimatedUserOperationGas } from "types/src/api/interfaces"; +import { UserOperationStruct } from "types/src/executor/contracts/EntryPoint"; + +export function applyEstimatedUserOp(userOp: UserOperationStruct, estimated: EstimatedUserOperationGas) { + userOp.maxFeePerGas = estimated.maxFeePerGas; + userOp.maxPriorityFeePerGas = estimated.maxPriorityFeePerGas; + userOp.preVerificationGas = estimated.preVerificationGas; + userOp.verificationGasLimit = estimated.verificationGasLimit; + userOp.callGasLimit = estimated.callGasLimit; + return userOp; +} diff --git a/packages/executor/test/utils/index.ts b/packages/executor/test/utils/index.ts new file mode 100644 index 00000000..f0e1357e --- /dev/null +++ b/packages/executor/test/utils/index.ts @@ -0,0 +1,3 @@ +export * from "./randomAddress"; +export * from "./setBalance"; +export * from "./applyEstimatedUserOp"; diff --git a/packages/executor/test/utils/randomAddress.ts b/packages/executor/test/utils/randomAddress.ts new file mode 100644 index 00000000..3d074296 --- /dev/null +++ b/packages/executor/test/utils/randomAddress.ts @@ -0,0 +1,5 @@ +import { Wallet } from "ethers"; + +export function randomAddress(): Wallet { + return Wallet.createRandom((Math.random() + 1).toString(36).substring(7)); +} diff --git a/packages/executor/test/utils/setBalance.ts b/packages/executor/test/utils/setBalance.ts new file mode 100644 index 00000000..0728837f --- /dev/null +++ b/packages/executor/test/utils/setBalance.ts @@ -0,0 +1,16 @@ +import { BigNumber, BigNumberish } from "ethers"; +import { getClient } from "../fixtures"; +import { parseEther } from "ethers/lib/utils"; +import { wait } from "../../src/utils"; + +export async function setBalance( + address: string, + desiredBalance: BigNumberish = parseEther('1') +): Promise { + const provider = await getClient(); + await provider.send("anvil_setBalance", [ + address, + BigNumber.from(desiredBalance).toHexString() + ]); + await provider.send('evm_mine', []); +} diff --git a/packages/executor/test/vitestSetup.ts b/packages/executor/test/vitestSetup.ts new file mode 100644 index 00000000..7082f319 --- /dev/null +++ b/packages/executor/test/vitestSetup.ts @@ -0,0 +1,8 @@ +import { vi } from "vitest"; +import { GethTracer } from "./mocks/GethTracer"; + +vi.mock('../src/services/UserOpValidation/GethTracer.ts', async () => { + return { + GethTracer: GethTracer, + }; +}); \ No newline at end of file diff --git a/packages/executor/vitest.config.js b/packages/executor/vitest.config.js new file mode 100644 index 00000000..9b8b7e2e --- /dev/null +++ b/packages/executor/vitest.config.js @@ -0,0 +1,11 @@ +import { mergeConfig, defineConfig } from "vitest/config"; +import vitestConfig from "../../vitest.base.config"; + +export default mergeConfig( + vitestConfig, + defineConfig({ + test: { + setupFiles: "./test/vitestSetup.ts", + } + }) +); diff --git a/packages/monitoring/package.json b/packages/monitoring/package.json index 7ea30d95..81a93a3e 100644 --- a/packages/monitoring/package.json +++ b/packages/monitoring/package.json @@ -1,6 +1,6 @@ { "name": "monitoring", - "version": "1.0.49-alpha", + "version": "1.5.4", "description": "The Monitoring module of Etherspot bundler client", "author": "Etherspot", "homepage": "https://github.com/etherspot/etherspot-bundler#readme", @@ -25,13 +25,10 @@ "build": "tsc -p tsconfig.build.json", "lint": "eslint --color --ext .ts src/ test/", "lint:fix": "yarn run lint --fix", - "pretest": "yarn run check-types", - "test": "yarn test:unit", - "test:unit": "mocha 'test/unit/**/*.test.ts'", "check-readme": "typescript-docs-verifier" }, "dependencies": { - "prom-client": "15.1.0", - "types": "^1.0.49-alpha" + "prom-client": "^14.2.0", + "types": "^1.5.4" } } diff --git a/packages/node/package.json b/packages/node/package.json index ec5bc7f0..88e35e2a 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,6 +1,6 @@ { "name": "node", - "version": "1.0.49-alpha", + "version": "1.5.4", "description": "The bundler node module of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -25,9 +25,6 @@ "build": "tsc -p tsconfig.build.json", "lint": "eslint --color --ext .ts src/ test/", "lint:fix": "yarn run lint --fix", - "pretest": "yarn run check-types", - "test": "yarn test:unit", - "test:unit": "mocha 'test/unit/**/*.test.ts'", "check-readme": "typescript-docs-verifier" }, "dependencies": { @@ -55,33 +52,29 @@ "@libp2p/prometheus-metrics": "1.1.3", "@libp2p/tcp": "6.1.0", "@multiformats/multiaddr": "11.4.0", + "@types/varint": "6.0.1", "abstract-leveldown": "7.2.0", - "api": "^1.0.49-alpha", + "api": "^1.5.4", "datastore-core": "8.0.1", - "db": "^1.0.49-alpha", + "db": "^1.5.4", "ethers": "5.7.2", - "executor": "^1.0.49-alpha", + "executor": "^1.5.4", "it-filter": "1.0.2", "it-map": "1.0.5", "it-sort": "1.0.0", "it-take": "1.0.1", "libp2p": "0.42.2", - "monitoring": "^1.0.49-alpha", - "params": "^1.0.49-alpha", - "prettier": "2.8.4", + "monitoring": "^1.5.4", + "params": "^1.5.4", "snappy": "7.2.2", "snappyjs": "0.7.0", "stream-to-it": "0.2.4", "strict-event-emitter-types": "2.0.0", - "types": "^1.0.49-alpha", - "utils": "^1.0.49-alpha", + "types": "^1.5.4", + "utils": "^1.5.4", "varint": "6.0.0", "xxhash-wasm": "1.0.2" }, - "devDependencies": { - "@types/abstract-leveldown": "7.2.1", - "@types/varint": "6.0.1" - }, "overrides": { "libp2p": { "@libp2p/interface-connection-manager": "1.3.8" diff --git a/packages/node/src/api/index.ts b/packages/node/src/api/index.ts index d4a547e5..1e612bcd 100644 --- a/packages/node/src/api/index.ts +++ b/packages/node/src/api/index.ts @@ -1,11 +1,20 @@ import { INodeAPI } from "types/lib/node"; import { NodeAPIModules } from "./types"; -import publishUserOpsWithEntryPoint from "./publishUserOpsWithEntryPoint"; -import publishUserOpsWithEntryPointJSON from "./publishUserOpsWithEntryPointJSON"; +import publishVerifiedUserOperation from "./publishVerifiedUserOperation"; +import publishVerifiedUserOperationJSON from "./publishVerifiedUserOperationJSON"; export function getApi(modules: NodeAPIModules): INodeAPI { return { - publishUserOpsWithEntryPoint: publishUserOpsWithEntryPoint(modules), - publishUserOpsWithEntryPointJSON: publishUserOpsWithEntryPointJSON(modules), + publishVerifiedUserOperation: publishVerifiedUserOperation(modules), + publishVerifiedUserOperationJSON: publishVerifiedUserOperationJSON(modules), + getPeers() { + return modules.network.getConnectedPeers().map(peerId => { + return { + cid: peerId.toCID().toString(), + str: peerId.toString(), + type: peerId.type, + } + }) + } }; } diff --git a/packages/node/src/api/publishUserOpsWithEntryPoint.ts b/packages/node/src/api/publishUserOpsWithEntryPoint.ts deleted file mode 100644 index e7149d61..00000000 --- a/packages/node/src/api/publishUserOpsWithEntryPoint.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ts } from "types/lib"; -import { NodeAPIModules } from "./types"; - -export default function api(modules: NodeAPIModules) { - return async function publishUserOpsWithEntryPoint( - userOp: ts.UserOpsWithEntryPoint - ): Promise { - await modules.network.publishUserOpsWithEntryPoint(userOp); - }; -} diff --git a/packages/node/src/api/publishUserOpsWithEntryPointJSON.ts b/packages/node/src/api/publishUserOpsWithEntryPointJSON.ts deleted file mode 100644 index 671c46a1..00000000 --- a/packages/node/src/api/publishUserOpsWithEntryPointJSON.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { toUserOpsWithEP } from "params/lib/utils/userOp"; -import { UserOperationStruct } from "types/lib/executor/contracts/EntryPoint"; -import { NodeAPIModules } from "./types"; - -export default function api(modules: NodeAPIModules) { - return async function publishUserOpsWithEntryPointJSON( - entryPoint: string, - chainId: number, - userOps: UserOperationStruct[], - blockHash: string - ): Promise { - const userOpWithEP = toUserOpsWithEP( - entryPoint, - chainId, - userOps, - blockHash - ); - await modules.network.publishUserOpsWithEntryPoint(userOpWithEP); - }; -} diff --git a/packages/node/src/api/publishVerifiedUserOperation.ts b/packages/node/src/api/publishVerifiedUserOperation.ts new file mode 100644 index 00000000..22073f64 --- /dev/null +++ b/packages/node/src/api/publishVerifiedUserOperation.ts @@ -0,0 +1,11 @@ +import { ts } from "types/lib"; +import { NodeAPIModules } from "./types"; + +export default function api(modules: NodeAPIModules) { + return async function publishVerifiedUserOperation( + userOp: ts.VerifiedUserOperation, + mempool: string + ): Promise { + await modules.network.publishVerifiedUserOperation(userOp, mempool); + }; +} diff --git a/packages/node/src/api/publishVerifiedUserOperationJSON.ts b/packages/node/src/api/publishVerifiedUserOperationJSON.ts new file mode 100644 index 00000000..36188fee --- /dev/null +++ b/packages/node/src/api/publishVerifiedUserOperationJSON.ts @@ -0,0 +1,22 @@ +import { toVerifiedUserOperation } from "params/lib/utils/userOp"; +import { UserOperationStruct } from "types/lib/executor/contracts/EntryPoint"; +import { NodeAPIModules } from "./types"; + +export default function api(modules: NodeAPIModules) { + return async function publishVerifiedUserOperationJSON( + entryPoint: string, + userOp: UserOperationStruct, + blockHash: string, + mempool: string + ): Promise { + const VerifiedUserOperation = toVerifiedUserOperation( + entryPoint, + userOp, + blockHash + ); + await modules.network.publishVerifiedUserOperation( + VerifiedUserOperation, + mempool + ); + }; +} diff --git a/packages/node/src/constants/network.ts b/packages/node/src/constants/network.ts index 639f0a19..4e450d2a 100644 --- a/packages/node/src/constants/network.ts +++ b/packages/node/src/constants/network.ts @@ -1,22 +1,3 @@ -/** - * For more info on some of these constants: - * https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/phase0/p2p-interface.md#configuration - */ - -// Gossip constants - -/** - * The maximum number of slots during which an attestation can be propagated. - */ -export const ATTESTATION_PROPAGATION_SLOT_RANGE = 32; - -/** The maximum allowed size of uncompressed gossip messages. */ -export const GOSSIP_MAX_SIZE = 2 ** 20; -export const GOSSIP_MAX_SIZE_BELLATRIX = 10 * GOSSIP_MAX_SIZE; -/** The maximum allowed size of uncompressed req/resp chunked responses. */ -export const MAX_CHUNK_SIZE = 2 ** 20; -export const MAX_CHUNK_SIZE_BELLATRIX = 10 * MAX_CHUNK_SIZE; - export enum GoodByeReasonCode { CLIENT_SHUTDOWN = 1, IRRELEVANT_NETWORK = 2, diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index 7c01f888..dae2d52f 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -7,10 +7,11 @@ import { SignableENR } from "@chainsafe/discv5"; import { INodeAPI } from "types/lib/node"; import { Executor } from "executor/lib/executor"; import logger from "api/lib/logger"; -import { Executors } from "executor/lib/interfaces"; import { BundlingMode } from "types/lib/api/interfaces"; import { createMetrics, getHttpMetricsServer } from "monitoring/lib"; import { MetricsOptions } from "types/lib/options/metrics"; +import { GetNodeAPI } from "executor/lib/interfaces"; +import { SkandhaVersion } from "types/lib/executor"; import { Network } from "./network/network"; import { SyncService } from "./sync"; import { IBundlerNodeOptions } from "./options"; @@ -30,7 +31,7 @@ export interface BundlerNodeOptions { server: Server; bundler: ApiApp; nodeApi: INodeAPI; - executors: Executors; + executor: Executor; syncService: SyncService; } @@ -43,6 +44,7 @@ export interface BundlerNodeInitOptions { redirectRpc: boolean; bundlingMode: BundlingMode; metricsOptions: MetricsOptions; + version: SkandhaVersion; } export class BundlerNode { @@ -69,6 +71,7 @@ export class BundlerNode { redirectRpc, bundlingMode, metricsOptions, + version, } = opts; let { peerId } = opts; @@ -77,27 +80,57 @@ export class BundlerNode { peerId = await enr.peerId(); } - const executors: Executors = new Map(); + let executor: Executor; + let nodeApi: INodeAPI | null = null; const metrics = metricsOptions.enable ? createMetrics({ p2p: true }, logger) : null; + const getNodeApi: GetNodeAPI = () => nodeApi; + if (relayersConfig.testingMode) { + metrics?.addChain(1337); + executor = new Executor({ + chainId: 1337, + db: relayerDb, + config: relayersConfig, + logger: logger, + getNodeApi, + bundlingMode, + metrics: metrics?.chains[1337] || null, + version, + }); + } else { + metrics?.addChain(relayersConfig.chainId); + executor = new Executor({ + chainId: relayersConfig.chainId, + db: relayerDb, + config: relayersConfig, + logger: logger, + getNodeApi, + bundlingMode, + metrics: metrics?.chains[relayersConfig.chainId] || null, + version, + }); + } + const network = await Network.init({ opts: nodeOptions.network, relayersConfig: relayersConfig, peerId: peerId, peerStoreDir: nodeOptions.network.dataDir, - executors, // ok: is empty at the moment + executor, // ok: is null at the moment metrics: metrics?.chains || null, }); const syncService = new SyncService({ network, metrics: metrics?.chains || null, + executor, + executorConfig: relayersConfig, }); - const nodeApi = getApi({ network }); + nodeApi = getApi({ network }); await relayerDb.start(); @@ -108,38 +141,6 @@ export class BundlerNode { cors: nodeOptions.api.cors, }); - if (relayersConfig.testingMode) { - metrics?.addChain(1337); - const executor = new Executor({ - network: "dev", - chainId: 1337, - db: relayerDb, - config: relayersConfig, - logger: logger, - nodeApi, - bundlingMode, - metrics: metrics?.chains[1337] || null, - }); - executors.set(1337, executor); - } else { - for (const [networkName, chainId] of Object.entries( - relayersConfig.supportedNetworks - )) { - metrics?.addChain(chainId); - const executor = new Executor({ - network: networkName, - chainId, - db: relayerDb, - config: relayersConfig, - logger: logger, - nodeApi, - bundlingMode, - metrics: metrics?.chains[chainId] || null, - }); - executors.set(chainId, executor); - } - } - metricsOptions.enable ? await getHttpMetricsServer( metricsOptions.port, @@ -152,10 +153,9 @@ export class BundlerNode { const bundler = new ApiApp({ server: server.application, config: relayersConfig, - db: relayerDb, testingMode, redirectRpc, - executors, + executor, }); return new BundlerNode({ @@ -163,7 +163,7 @@ export class BundlerNode { server, bundler, nodeApi, - executors, + executor, syncService, }); } diff --git a/packages/node/src/network/discv5/types.ts b/packages/node/src/network/discv5/types.ts index 97bb71f1..8132c3de 100644 --- a/packages/node/src/network/discv5/types.ts +++ b/packages/node/src/network/discv5/types.ts @@ -1,7 +1,6 @@ import { Discv5, ENRData, SignableENRData } from "@chainsafe/discv5"; import { Observable } from "@chainsafe/threads/observable"; -// TODO export IDiscv5Config so we don't need this convoluted type type Discv5Config = Parameters<(typeof Discv5)["create"]>[0]["config"]; /** discv5 worker constructor data */ diff --git a/packages/node/src/network/events.ts b/packages/node/src/network/events.ts index 970db16a..24b80252 100644 --- a/packages/node/src/network/events.ts +++ b/packages/node/src/network/events.ts @@ -9,6 +9,7 @@ import { PendingGossipsubMessage } from "./processor/types"; export enum NetworkEvent { peerConnected = "peer-manager.peer-connected", peerDisconnected = "peer-manager.peer-disconnected", + peerMetadataReceived = "peer-manager.peer-metadata-received", gossipStart = "gossip.start", gossipStop = "gossip.stop", gossipHeartbeat = "gossipsub.heartbeat", @@ -21,6 +22,10 @@ export enum NetworkEvent { export type NetworkEvents = { [NetworkEvent.peerConnected]: (peer: PeerId, status: ts.Status) => void; + [NetworkEvent.peerMetadataReceived]: ( + peer: PeerId, + metadata: ts.Metadata + ) => void; [NetworkEvent.peerDisconnected]: (peer: PeerId) => void; [NetworkEvent.reqRespRequest]: ( request: RequestTypedContainer, diff --git a/packages/node/src/network/gossip/handler.ts b/packages/node/src/network/gossip/handler.ts index e54b410e..e8f9f605 100644 --- a/packages/node/src/network/gossip/handler.ts +++ b/packages/node/src/network/gossip/handler.ts @@ -105,19 +105,16 @@ export class BundlerGossipsub extends GossipSub { return stringifyGossipTopic(topic); } - async publishUserOpsWithEntryPoint( - userOpsWithEP: ts.UserOpsWithEntryPoint + async publishVerifiedUserOperation( + userOpsWithEP: ts.VerifiedUserOperation, + mempool: string ): Promise { - const chainId = Number(userOpsWithEP.chain_id); - if (!chainId || !networksConfig[chainId]) { - logger.warn(`Unknown chainId ${userOpsWithEP.chain_id}. Skipping msg...`); - return; - } // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const networkConfig = networksConfig[chainId]!; - const mempool = deserializeMempoolId(networkConfig.MEMPOOL_IDS[0]); - await this.publishObject( - { type: GossipType.user_operations_with_entrypoint, mempool }, + await this.publishObject( + { + type: GossipType.user_operations, + mempool: mempool, + }, userOpsWithEP ); } diff --git a/packages/node/src/network/gossip/interface.ts b/packages/node/src/network/gossip/interface.ts index c4fe3b07..db2daa32 100644 --- a/packages/node/src/network/gossip/interface.ts +++ b/packages/node/src/network/gossip/interface.ts @@ -7,7 +7,7 @@ import { ts } from "types/lib"; import { NetworkEvent } from "../events"; export enum GossipType { - user_operations_with_entrypoint = "user_ops_with_entry_point", + user_operations = "user_operations", } export enum GossipEncoding { @@ -21,8 +21,8 @@ export interface IGossipTopic { } export type GossipTopicTypeMap = { - [GossipType.user_operations_with_entrypoint]: { - type: GossipType.user_operations_with_entrypoint; + [GossipType.user_operations]: { + type: GossipType.user_operations; }; }; @@ -36,12 +36,12 @@ export type GossipTopicMap = { export type GossipTopic = GossipTopicMap[keyof GossipTopicMap]; export type GossipTypeMap = { - [GossipType.user_operations_with_entrypoint]: ts.UserOpsWithEntryPoint; + [GossipType.user_operations]: ts.VerifiedUserOperation; }; export type GossipFnByType = { - [GossipType.user_operations_with_entrypoint]: ( - userOpsWithEP: ts.UserOpsWithEntryPoint + [GossipType.user_operations]: ( + userOpsWithEP: ts.VerifiedUserOperation ) => Promise | void; }; diff --git a/packages/node/src/network/gossip/scoringParameters.ts b/packages/node/src/network/gossip/scoringParameters.ts index a0543a31..93a5576f 100644 --- a/packages/node/src/network/gossip/scoringParameters.ts +++ b/packages/node/src/network/gossip/scoringParameters.ts @@ -126,7 +126,7 @@ function getAllTopicsScoreParams( // other topics topicsParams[ stringifyGossipTopic({ - type: GossipType.user_operations_with_entrypoint, + type: GossipType.user_operations, mempool: "", }) ] = getTopicScoreParams(precomputedParams, { diff --git a/packages/node/src/network/gossip/topic.ts b/packages/node/src/network/gossip/topic.ts index 884b60f7..eef0b11c 100644 --- a/packages/node/src/network/gossip/topic.ts +++ b/packages/node/src/network/gossip/topic.ts @@ -54,7 +54,7 @@ export function stringifyGossipTopic(topic: GossipTopic): string { */ function stringifyGossipTopicType(topic: GossipTopic): string { switch (topic.type) { - case GossipType.user_operations_with_entrypoint: + case GossipType.user_operations: return topic.type; } } @@ -62,8 +62,8 @@ function stringifyGossipTopicType(topic: GossipTopic): string { // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export function getGossipSSZType(topic: GossipTopic) { switch (topic.type) { - case GossipType.user_operations_with_entrypoint: - return ssz.UserOpsWithEntryPoint; + case GossipType.user_operations: + return ssz.VerifiedUserOperation; } } @@ -93,7 +93,7 @@ export function parseGossipTopic(topicStr: string): Required { // Inline-d the parseGossipTopicType() function since spreading the resulting object x4 the time to parse a topicStr switch (gossipTypeStr) { - case GossipType.user_operations_with_entrypoint: + case GossipType.user_operations: return { type: gossipTypeStr, encoding, mempool }; } @@ -109,7 +109,7 @@ export function parseGossipTopic(topicStr: string): Required { export function getCoreTopics(): GossipTopicTypeMap[keyof GossipTopicTypeMap][] { // Common topics const topics: GossipTopicTypeMap[keyof GossipTopicTypeMap][] = [ - { type: GossipType.user_operations_with_entrypoint }, + { type: GossipType.user_operations }, ]; return topics; diff --git a/packages/node/src/network/interface.ts b/packages/node/src/network/interface.ts index fd52e259..36545b8c 100644 --- a/packages/node/src/network/interface.ts +++ b/packages/node/src/network/interface.ts @@ -8,7 +8,6 @@ import { SignableENR } from "@chainsafe/discv5"; import type { ConnectionManager } from "@libp2p/interface-connection-manager"; import type { Registrar } from "@libp2p/interface-registrar"; import { Logger } from "api/lib/logger"; -import { Executor } from "executor/lib/executor"; import { INetworkEventBus } from "./events"; import { MetadataController } from "./metadata"; import { BundlerGossipsub } from "./gossip"; @@ -19,17 +18,13 @@ export type PeerSearchOptions = { count?: number; }; -export type MempoolToExecutor = Map; - export interface INetwork { events: INetworkEventBus; metadata: MetadataController; gossip: BundlerGossipsub; - reqResp: ReqRespNode; //TODO - Define the class for reqResp + reqResp: ReqRespNode; logger: Logger; - mempoolToExecutor: MempoolToExecutor; - /** Our network identity */ peerId: PeerId; localMultiaddrs: Multiaddr[]; @@ -39,7 +34,10 @@ export interface INetwork { getConnectedPeerCount(): number; /* List of p2p functions supported by Bundler */ - publishUserOpsWithEntryPoint(userOp: ts.UserOpsWithEntryPoint): Promise; + publishVerifiedUserOperation( + userOp: ts.VerifiedUserOperation, + mempool: string + ): Promise; pooledUserOpHashes( peerId: PeerId, req: ts.PooledUserOpHashesRequest diff --git a/packages/node/src/network/metadata.ts b/packages/node/src/network/metadata.ts index 949c9d75..3d300a3e 100644 --- a/packages/node/src/network/metadata.ts +++ b/packages/node/src/network/metadata.ts @@ -1,18 +1,13 @@ -import { BitArray } from "@chainsafe/ssz"; import { ts, ssz } from "types/lib"; export enum ENRKey { tcp = "tcp", - mempoolSubnets = "mempool_subnets", + chainId = "chain_id", } export interface IMetadataOpts { + chainId: number; metadata?: ts.Metadata; - // TODO: add logger -} - -export enum SubnetType { - mempoolnets = "mempoolnets", } /** @@ -22,39 +17,31 @@ export enum SubnetType { */ export class MetadataController { private setEnrValue?: (key: string, value: Uint8Array) => Promise; - private _metadata: ts.Metadata; + private metadata: ts.Metadata; + private chainId: number; constructor(opts: IMetadataOpts) { - this._metadata = opts.metadata ?? ssz.Metadata.defaultValue(); + this.chainId = opts.chainId; + this.metadata = opts.metadata ?? ssz.Metadata.defaultValue(); } start(setEnrValue: (key: string, value: Uint8Array) => Promise): void { this.setEnrValue = setEnrValue; void this.setEnrValue( - ENRKey.mempoolSubnets, - ssz.MempoolSubnets.serialize(this._metadata.mempoolSubnets) + ENRKey.chainId, + ssz.ChainId.serialize(BigInt(this.chainId)) ); } - get seqNumber(): bigint { - return this._metadata.seqNumber; - } - - get mempoolSubnets(): BitArray { - return this._metadata.mempoolSubnets; + get seq_number(): bigint { + return this.metadata.seq_number; } - set mempoolSubnets(mempoolSubnets: BitArray) { - if (this.setEnrValue) { - void this.setEnrValue( - ENRKey.mempoolSubnets, - ssz.MempoolSubnets.serialize(mempoolSubnets) - ); - } - this._metadata.mempoolSubnets = mempoolSubnets; + get supported_mempools(): Uint8Array[] { + return this.metadata.supported_mempools; } get json(): ts.Metadata { - return this._metadata; + return this.metadata; } } diff --git a/packages/node/src/network/network.ts b/packages/node/src/network/network.ts index e6d4e516..93b83fa2 100644 --- a/packages/node/src/network/network.ts +++ b/packages/node/src/network/network.ts @@ -2,15 +2,13 @@ import { Connection } from "@libp2p/interface-connection"; import { Multiaddr } from "@multiformats/multiaddr"; import { PeerId } from "@libp2p/interface-peer-id"; -import { ts } from "types/lib"; +import { ssz, ts } from "types/lib"; import { SignableENR } from "@chainsafe/discv5"; import logger, { Logger } from "api/lib/logger"; -import { networksConfig } from "params/lib"; -import { deserializeMempoolId } from "params/lib"; +import { serializeMempoolId } from "params/lib"; import { Config } from "executor/lib/config"; -import { Executors } from "executor/lib/interfaces"; -import { toHexString } from "utils/lib"; import { AllChainsMetrics } from "monitoring/lib"; +import { Executor } from "executor/lib/executor"; import { INetworkOptions } from "../options"; import { getConnectionsMap } from "../utils"; import { INetwork, Libp2p } from "./interface"; @@ -27,6 +25,7 @@ import { getCoreTopics } from "./gossip/topic"; import { Discv5Worker } from "./discv5"; import { NetworkProcessor } from "./processor"; import { pooledUserOpHashes, pooledUserOpsByHash } from "./reqresp"; +import { LocalStatusCache } from "./statusCache"; type NetworkModules = { libp2p: Libp2p; @@ -38,7 +37,7 @@ type NetworkModules = { peerId: PeerId; networkProcessor: NetworkProcessor; relayersConfig: Config; - executors: Executors; + executor: Executor; metrics: AllChainsMetrics | null; }; @@ -46,7 +45,7 @@ export type NetworkInitOptions = { opts: INetworkOptions; relayersConfig: Config; peerId: PeerId; - executors: Executors; + executor: Executor; peerStoreDir?: string; metrics: AllChainsMetrics | null; }; @@ -63,12 +62,11 @@ export class Network implements INetwork { peerManager: PeerManager; libp2p: Libp2p; networkProcessor: NetworkProcessor; - executors: Executors; + executor: Executor; metrics: AllChainsMetrics | null; relayersConfig: Config; subscribedMempools = new Set(); - mempoolToExecutor = new Map(); constructor(opts: NetworkModules) { const { @@ -81,7 +79,7 @@ export class Network implements INetwork { peerId, networkProcessor, relayersConfig, - executors, + executor, metrics, } = opts; this.libp2p = libp2p; @@ -94,13 +92,13 @@ export class Network implements INetwork { this.peerId = peerId; this.networkProcessor = networkProcessor; this.relayersConfig = relayersConfig; - this.executors = executors; + this.executor = executor; this.metrics = metrics; this.logger.info("Initialised the bundler node module", "node"); } static async init(options: NetworkInitOptions): Promise { - const { peerId, relayersConfig, executors, metrics } = options; + const { peerId, relayersConfig, executor, metrics } = options; const libp2p = await createNodeJsLibp2p(peerId, options.opts, { peerStoreDir: options.peerStoreDir, }); @@ -113,12 +111,24 @@ export class Network implements INetwork { events: networkEventBus, metrics, }); - const metadata = new MetadataController({}); + + const chainId = relayersConfig.chainId; + const defaultMetadata = ssz.Metadata.defaultValue(); + const canonicalMempool = relayersConfig.getCanonicalMempool() + if (canonicalMempool.mempoolId) { + defaultMetadata.supported_mempools.push(serializeMempoolId(canonicalMempool.mempoolId)); + } + const metadata = new MetadataController({ + chainId, + metadata: defaultMetadata, + }); + + const reqRespHandlers = getReqRespHandlers(executor, relayersConfig, metrics) const reqResp = new ReqRespNode({ libp2p, peersData, logger, - reqRespHandlers: getReqRespHandlers(executors, relayersConfig, metrics), + reqRespHandlers, metadata, peerRpcScores, networkEventBus, @@ -126,10 +136,16 @@ export class Network implements INetwork { }); const networkProcessor = new NetworkProcessor( - { events: networkEventBus, relayersConfig, executors, metrics }, + { events: networkEventBus, relayersConfig, executor, metrics }, {} ); + const statusCache = new LocalStatusCache(reqRespHandlers, { + chain_id: BigInt(chainId), + block_hash: new Uint8Array(), + block_number: BigInt(0) + }); + const peerManagerModules = { libp2p, reqResp, @@ -138,8 +154,13 @@ export class Network implements INetwork { peerRpcScores, networkEventBus, peersData, + statusCache, }; - const peerManager = new PeerManager(peerManagerModules, options.opts); + + const peerManager = new PeerManager(peerManagerModules, { + ...options.opts, + chainId + }); return new Network({ libp2p, @@ -151,7 +172,7 @@ export class Network implements INetwork { peerId, networkProcessor, relayersConfig, - executors, + executor, metrics, }); } @@ -189,20 +210,9 @@ export class Network implements INetwork { const enr = await this.getEnr(); - const { supportedNetworks } = this.relayersConfig; - for (const [_, chainId] of Object.entries(supportedNetworks)) { - const mempoolIds = networksConfig[chainId]?.MEMPOOL_IDS; - if (mempoolIds) { - for (const mempoolIdHex of mempoolIds) { - this.mempoolToExecutor.set( - toHexString(mempoolIdHex), - this.executors.get(chainId)! - ); - - const mempoolId = deserializeMempoolId(mempoolIdHex); - this.subscribeGossipCoreTopics(mempoolId); - } - } + const canonicalMempool = this.relayersConfig.getCanonicalMempool() + if (canonicalMempool.mempoolId) { + this.subscribeGossipCoreTopics(canonicalMempool.mempoolId); } if (enr) { @@ -234,8 +244,8 @@ export class Network implements INetwork { async getMetadata(): Promise { return { - seqNumber: this.metadata.seqNumber, - mempoolSubnets: this.metadata.mempoolSubnets, + seq_number: this.metadata.seq_number, + supported_mempools: this.metadata.supported_mempools, }; } @@ -260,10 +270,11 @@ export class Network implements INetwork { } /* List of p2p functions supported by Bundler */ - async publishUserOpsWithEntryPoint( - userOp: ts.UserOpsWithEntryPoint + async publishVerifiedUserOperation( + userOp: ts.VerifiedUserOperation, + mempool: string ): Promise { - await this.gossip.publishUserOpsWithEntryPoint(userOp); + await this.gossip.publishVerifiedUserOperation(userOp, mempool); } async pooledUserOpHashes( @@ -273,7 +284,7 @@ export class Network implements INetwork { return await pooledUserOpHashes( this.reqResp, peerId, - this.executors, + this.executor, this.relayersConfig, req ); @@ -286,7 +297,7 @@ export class Network implements INetwork { return await pooledUserOpsByHash( this.reqResp, peerId, - this.executors, + this.executor, this.relayersConfig, req ); diff --git a/packages/node/src/network/nodejs/bundle.ts b/packages/node/src/network/nodejs/bundle.ts index 729ba0a5..af476cc8 100644 --- a/packages/node/src/network/nodejs/bundle.ts +++ b/packages/node/src/network/nodejs/bundle.ts @@ -61,8 +61,8 @@ export async function createNodejsLibp2p( connectionManager: { // dialer config maxParallelDials: 100, - maxAddrsToDial: 4, - maxDialsPerPeer: 2, + maxAddrsToDial: 25, + maxDialsPerPeer: 4, dialTimeout: 30_000, autoDial: false, @@ -70,26 +70,6 @@ export async function createNodejsLibp2p( minConnections: options.minConnections, }, datastore: options.datastore, - nat: { - enabled: false, - }, - relay: { - enabled: false, - hop: { - enabled: false, - active: false, - }, - advertise: { - enabled: false, - ttl: 0, - bootDelay: 0, - }, - autoRelay: { - enabled: false, - maxListeners: 0, - }, - }, - identify: { host: { agentVersion: options.skandhaVersion diff --git a/packages/node/src/network/peers/discover.ts b/packages/node/src/network/peers/discover.ts index 5bc8f361..47bd2a55 100644 --- a/packages/node/src/network/peers/discover.ts +++ b/packages/node/src/network/peers/discover.ts @@ -6,7 +6,7 @@ import Logger from "api/lib/logger"; import { pruneSetToMax, sleep } from "utils/lib"; import { ssz } from "types/lib"; import { Libp2p } from "../interface"; -import { ENRKey, SubnetType } from "../metadata"; +import { ENRKey } from "../metadata"; import { getConnectionsMap, getDefaultDialer, @@ -14,10 +14,6 @@ import { } from "../../utils"; import { Discv5Worker } from "../discv5"; import { IPeerRpcScoreStore, ScoreState } from "./score"; -import { - deserializeEnrSubnets, - zeroMempoolnets, -} from "./utils/enrSubnetsDeserialize"; /** Max number of cached ENRs after discovering a good peer */ const MAX_CACHED_ENRS = 100; @@ -32,6 +28,7 @@ export type PeerDiscoveryOpts = { "metrics" | "searchInterval" | "enabled" >; connectToDiscv5Bootnodes?: boolean; + chainId: number; }; export type PeerDiscoveryModules = { @@ -61,9 +58,7 @@ enum DiscoveredPeerStatus { } type UnixMs = number; -export type SubnetDiscvQueryMs = { - subnet: number; - type: SubnetType; +export type DiscvQueryMs = { toUnixMs: UnixMs; maxPeersToDiscover: number; }; @@ -71,7 +66,7 @@ export type SubnetDiscvQueryMs = { type CachedENR = { peerId: PeerId; multiaddrTCP: Multiaddr; - subnets: Record; + chainId: number; addedUnixMs: number; }; @@ -87,17 +82,15 @@ export class PeerDiscovery { private cachedENRs = new Map(); private randomNodeQuery: QueryStatus = { code: QueryStatusCode.NotActive }; private peersToConnect = 0; - private subnetRequests: Record> = { - mempoolnets: new Map(), - }; - /** The maximum number of peers we allow (exceptions for subnet peers) */ private maxPeers: number; private discv5StartMs: number; private discv5FirstQueryDelayMs: number; private connectToDiscv5BootnodesOnStart: boolean | undefined = false; + private chainId: number; + constructor(modules: PeerDiscoveryModules, opts: PeerDiscoveryOpts) { const { libp2p, peerRpcScores, logger } = modules; this.libp2p = libp2p; @@ -107,6 +100,7 @@ export class PeerDiscovery { this.discv5StartMs = 0; this.discv5FirstQueryDelayMs = opts.discv5FirstQueryDelayMs; this.connectToDiscv5BootnodesOnStart = opts.connectToDiscv5Bootnodes; + this.chainId = opts.chainId; this.discv5 = new Discv5Worker({ discv5: opts.discv5, @@ -146,13 +140,9 @@ export class PeerDiscovery { } /** - * Request to find peers, both on specific subnets and in general + * Request to find peers */ - discoverPeers( - peersToConnect: number, - subnetRequests: SubnetDiscvQueryMs[] = [] - ): void { - const subnetsToDiscoverPeers: SubnetDiscvQueryMs[] = []; + discoverPeers(peersToConnect: number): void { const cachedENRsToDial = new Map(); // Iterate in reverse to consider first the most recent ENRs const cachedENRsReverse: CachedENR[] = []; @@ -172,35 +162,6 @@ export class PeerDiscovery { this.peersToConnect += peersToConnect; - subnet: for (const subnetRequest of subnetRequests) { - // Extend the toUnixMs for this subnet - const prevUnixMs = this.subnetRequests[subnetRequest.type].get( - subnetRequest.subnet - ); - if (prevUnixMs === undefined || prevUnixMs < subnetRequest.toUnixMs) { - this.subnetRequests[subnetRequest.type].set( - subnetRequest.subnet, - subnetRequest.toUnixMs - ); - } - - // Get cached ENRs from the discovery service that are in the requested `subnetId`, but not connected yet - let cachedENRsInSubnet = 0; - for (const cachedENR of cachedENRsReverse) { - if (cachedENR.subnets[subnetRequest.type][subnetRequest.subnet]) { - cachedENRsToDial.set(cachedENR.peerId.toString(), cachedENR); - - if (++cachedENRsInSubnet >= subnetRequest.maxPeersToDiscover) { - continue subnet; - } - } - } - - // Query a discv5 query if more peers are needed - subnetsToDiscoverPeers.push(subnetRequest); - } - - // If subnetRequests won't connect enough peers for peersToConnect, add more if (cachedENRsToDial.size < peersToConnect) { for (const cachedENR of cachedENRsReverse) { cachedENRsToDial.set(cachedENR.peerId.toString(), cachedENR); @@ -210,7 +171,6 @@ export class PeerDiscovery { } } - // Queue an outgoing connection request to the cached peers that are on `s.subnet_id`. // If we connect to the cached peers before the discovery query starts, then we potentially // save a costly discovery query. for (const [id, cachedENRToDial] of cachedENRsToDial) { @@ -218,11 +178,7 @@ export class PeerDiscovery { void this.dialPeer(cachedENRToDial); } - // Run a discv5 subnet query to try to discover new peers - if ( - subnetsToDiscoverPeers.length > 0 || - cachedENRsToDial.size < peersToConnect - ) { + if (cachedENRsToDial.size < peersToConnect) { void this.runFindRandomNodeQuery(); } } @@ -256,8 +212,8 @@ export class PeerDiscovery { evt: CustomEvent ): Promise => { const { id, multiaddrs } = evt.detail; - const mempoolnets = zeroMempoolnets; - await this.handleDiscoveredPeer(id, multiaddrs[0], mempoolnets); + if (!multiaddrs || multiaddrs.length === 0) return; + await this.handleDiscoveredPeer(id, multiaddrs[0], this.chainId); }; /** @@ -277,18 +233,13 @@ export class PeerDiscovery { }); return; } - // Are this fields mandatory? - const mempoolnetsBytes = enr.kvs.get(ENRKey.mempoolSubnets); // 64 bits - - // Use faster version than ssz's implementation that leverages pre-cached. - // Some nodes don't serialize the bitfields properly, encoding the syncnets as attnets, - // which cause the ssz implementation to throw on validation. deserializeEnrSubnets() will - // never throw and treat too long or too short bitfields as zero-ed - const mempoolnets = mempoolnetsBytes - ? deserializeEnrSubnets(mempoolnetsBytes, ssz.MEMPOOL_ID_SUBNET_COUNT) - : zeroMempoolnets; - - await this.handleDiscoveredPeer(peerId, multiaddrTCP, mempoolnets); + const rChainId = enr.kvs.get(ENRKey.chainId); + if (!rChainId) { + this.logger.debug(`Could not find chain id: ${enr.encodeTxt()}`); + return; + }; + const chainId = ssz.ChainId.deserialize(rChainId); + await this.handleDiscoveredPeer(peerId, multiaddrTCP, Number(chainId)); }; /** @@ -297,7 +248,7 @@ export class PeerDiscovery { private async handleDiscoveredPeer( peerId: PeerId, multiaddrTCP: Multiaddr, - mempoolnets: boolean[] + chainId: number ): Promise { try { // Check if peer is not banned or disconnected @@ -319,10 +270,12 @@ export class PeerDiscovery { const cachedPeer: CachedENR = { peerId, multiaddrTCP, - subnets: { mempoolnets }, + chainId, addedUnixMs: Date.now(), }; + this.logger.debug(cachedPeer, "Saving ENR..."); + // Only dial peer if necessary if (this.shouldDialPeer(cachedPeer)) { await this.dialPeer(cachedPeer); @@ -347,19 +300,6 @@ export class PeerDiscovery { return true; } - for (const type of [SubnetType.mempoolnets]) { - for (const [subnet, toUnixMs] of this.subnetRequests[type].entries()) { - if (toUnixMs < Date.now()) { - // Prune all requests - this.subnetRequests[type].delete(subnet); - } else { - if (peer.subnets[type][subnet]) { - return true; - } - } - } - } - return false; } @@ -368,12 +308,6 @@ export class PeerDiscovery { * Peers that have been returned by discovery requests are dialed here if they are suitable. */ private async dialPeer(cachedPeer: CachedENR): Promise { - // we dial a peer when: - // - this.peersToConnect > 0 - // - or the peer subscribes to a subnet that we want - // If this.peersToConnect is 3 while we need to dial 5 subnet peers, in that case we want this.peersToConnect - // to be 0 instead of a negative value. The next heartbeat may increase this.peersToConnect again if some dials - // are not successful. this.peersToConnect = Math.max(this.peersToConnect - 1, 0); const { peerId, multiaddrTCP } = cachedPeer; diff --git a/packages/node/src/network/peers/peerManager.ts b/packages/node/src/network/peers/peerManager.ts index 13d6861d..f1a8cc06 100644 --- a/packages/node/src/network/peers/peerManager.ts +++ b/packages/node/src/network/peers/peerManager.ts @@ -3,7 +3,6 @@ import { PeerId } from "@libp2p/interface-peer-id"; import { IDiscv5DiscoveryInputOptions } from "@chainsafe/discv5"; import Logger from "api/lib/logger"; import { ts } from "types/lib"; -import { devNetworkConfig } from "params/lib/networks/dev"; import { GoodByeReasonCode, GOODBYE_KNOWN_CODES, @@ -12,12 +11,11 @@ import { import { NetworkEvent, INetworkEventBus } from "../events"; import { Libp2p } from "../interface"; import { getConnection, prettyPrintPeerId } from "../../utils/network"; -import { SubnetType } from "../metadata"; import { BundlerGossipsub } from "../gossip/handler"; import { ReqRespMethod, RequestTypedContainer } from "../reqresp"; import { IReqRespNode } from "../reqresp/interface"; import { PeersData, PeerData } from "./peersData"; -import { PeerDiscovery, SubnetDiscvQueryMs } from "./discover"; +import { PeerDiscovery } from "./discover"; import { IPeerRpcScoreStore, ScoreState, updateGossipsubScores } from "./score"; import { clientFromAgentVersion } from "./client"; import { @@ -25,6 +23,7 @@ import { hasSomeConnectedPeer, prioritizePeers, } from "./utils"; +import { StatusCache } from "../statusCache"; /** heartbeat performs regular updates such as updating reputations and performing discovery requests */ const HEARTBEAT_INTERVAL_MS = 15 * 1000; @@ -53,7 +52,7 @@ const ALLOWED_NEGATIVE_GOSSIPSUB_FACTOR = 0.1; export type PeerManagerOpts = { /** The target number of peers we would like to connect to. */ targetPeers: number; - /** The maximum number of peers we allow (exceptions for subnet peers) */ + /** The maximum number of peers we allow */ maxPeers: number; discv5FirstQueryDelayMs: number; /** @@ -64,6 +63,8 @@ export type PeerManagerOpts = { * If set to true, connect to Discv5 bootnodes. If not set or false, do not connect */ connectToDiscv5Bootnodes?: boolean; + /** default chain id */ + chainId: number; }; export type PeerManagerModules = { @@ -71,12 +72,11 @@ export type PeerManagerModules = { logger: typeof Logger; reqResp: IReqRespNode; gossip: BundlerGossipsub; - // attnetsService: SubnetsService; - // syncnetsService: SubnetsService; peerRpcScores: IPeerRpcScoreStore; networkEventBus: INetworkEventBus; peersData: PeersData; discovery?: PeerDiscovery; + statusCache: StatusCache; }; type PeerIdStr = string; @@ -92,7 +92,6 @@ enum RelevantPeerStatus { * - Ping peers every `PING_INTERVAL_MS` * - Status peers every `STATUS_INTERVAL_MS` * - Execute discovery query if under target peers - * - Execute discovery query if need peers on some subnet: TODO * - Disconnect peers if over target peers */ export class PeerManager { @@ -107,6 +106,7 @@ export class PeerManager { // A single map of connected peers with all necessary data to handle PINGs, STATUS, and metrics private connectedPeers: Map; + private statusCache: StatusCache; private opts: PeerManagerOpts; private intervals: NodeJS.Timeout[] = []; @@ -119,6 +119,7 @@ export class PeerManager { this.peerRpcScores = modules.peerRpcScores; this.networkEventBus = modules.networkEventBus; this.connectedPeers = modules.peersData.connectedPeers; + this.statusCache = modules.statusCache; this.opts = opts; // opts.discv5 === null, discovery is disabled @@ -130,6 +131,7 @@ export class PeerManager { discv5FirstQueryDelayMs: opts.discv5FirstQueryDelayMs, discv5: opts.discv5, connectToDiscv5Bootnodes: opts.connectToDiscv5Bootnodes, + chainId: opts.chainId })); } @@ -241,7 +243,7 @@ export class PeerManager { private onPing(peer: PeerId, seqNumber: ts.Ping): void { // if the sequence number is unknown update the peer's metadata const metadata = this.connectedPeers.get(peer.toString())?.metadata; - if (!metadata || metadata.seqNumber < seqNumber) { + if (!metadata || metadata.seq_number < seqNumber) { void this.requestMetadata(peer); } } @@ -253,12 +255,17 @@ export class PeerManager { const peerData = this.connectedPeers.get(peer.toString()); if (peerData) { peerData.metadata = { - seqNumber: metadata.seqNumber, - mempoolSubnets: metadata.mempoolSubnets, + seq_number: metadata.seq_number, + supported_mempools: metadata.supported_mempools, }; this.logger.debug(`Received metadata from ${peer.toString()}`); + this.networkEventBus.emit( + NetworkEvent.peerMetadataReceived, + peer, + metadata + ); } else { - this.logger.error(`Could not metadata from ${peer.toString()}`); + this.logger.error(`Could not parse metadata from ${peer.toString()}`); } } @@ -332,12 +339,12 @@ export class PeerManager { } } - private async requestStatus( - peer: PeerId, - localStatus: ts.Status - ): Promise { + private async requestStatus(peer: PeerId, localStatus: ts.Status): Promise { try { - this.onStatus(peer, await this.reqResp.status(peer, localStatus)); + this.onStatus( + peer, + await this.reqResp.status(peer, localStatus) + ); } catch (e) { // TODO: Failed to get peer latest status: downvote but don't disconnect } @@ -369,39 +376,19 @@ export class PeerManager { } } - const { peersToDisconnect, peersToConnect, mempoolSubnetQueries } = - prioritizePeers( - connectedHealthyPeers.map((peer) => { - const peerData = this.connectedPeers.get(peer.toString()); - return { - id: peer, - direction: peerData?.direction ?? null, - mempoolSubnets: peerData?.metadata?.mempoolSubnets ?? null, - score: this.peerRpcScores.getScore(peer), - }; - }), - [], //this.attnetsService.getActiveSubnets(), - this.opts - ); + const { peersToDisconnect, peersToConnect } = prioritizePeers( + connectedHealthyPeers.map((peer) => { + const peerData = this.connectedPeers.get(peer.toString()); + return { + id: peer, + direction: peerData?.direction ?? null, + score: this.peerRpcScores.getScore(peer), + }; + }), + this.opts + ); - const queriesMerged: SubnetDiscvQueryMs[] = []; - for (const { type, queries } of [ - { type: SubnetType.mempoolnets, queries: mempoolSubnetQueries }, - ]) { - if (queries.length > 0) { - let count = 0; - for (const query of queries) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - count += query.maxPeersToDiscover; - queriesMerged.push({ - subnet: query.subnet, - type, - maxPeersToDiscover: query.maxPeersToDiscover, - toUnixMs: 1000, - }); - } - } - } + this.logger.debug(connectedHealthyPeers, `peersToConnect: ${peersToConnect}`); // disconnect first to have more slots before we dial new peers // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -412,8 +399,9 @@ export class PeerManager { } if (this.discovery) { + this.logger.debug("Discovering peers..."); try { - this.discovery.discoverPeers(peersToConnect, queriesMerged); + this.discovery.discoverPeers(peersToConnect); } catch (e) { this.logger.error("Error on discoverPeers", {}, e as Error); } @@ -531,9 +519,10 @@ export class PeerManager { }; this.connectedPeers.set(peer.toString(), peerData); + const localStatus = await this.statusCache.get(); if (direction === "outbound") { void this.requestPing(peer); - void this.requestStatus(peer, devNetworkConfig.MEMPOOL_IDS); // TODO: change + void this.requestStatus(peer, localStatus); } // AgentVersion was set in libp2p IdentifyService, 'peer:connect' event handler diff --git a/packages/node/src/network/peers/utils/enrSubnetsDeserialize.ts b/packages/node/src/network/peers/utils/enrSubnetsDeserialize.ts deleted file mode 100644 index 0524b96c..00000000 --- a/packages/node/src/network/peers/utils/enrSubnetsDeserialize.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { getUint8ByteToBitBooleanArray } from "@chainsafe/ssz"; -import { ssz } from "types/lib"; - -export function newFilledArray(n: number, val: T): T[] { - const arr = new Array(n); - for (let i = 0; i < n; ++i) { - arr[i] = val; - } - return arr; -} - -export const zeroMempoolnets = newFilledArray( - ssz.MEMPOOL_ID_SUBNET_COUNT, - false -); - -/** - * Fast deserialize a BitVector, with pre-cached bool array in `getUint8ByteToBitBooleanArray()` - * - * Never throw a deserialization error: - * - if bytes is too short, it will pad with zeroes - * - if bytes is too long, it will ignore the extra values - */ -export function deserializeEnrSubnets( - bytes: Uint8Array, - subnetCount: number -): boolean[] { - if (subnetCount <= 8) { - return getUint8ByteToBitBooleanArray(bytes[0] ?? 0); - } - - let boolsArr: boolean[] = []; - const byteCount = Math.ceil(subnetCount / 8); - for (let i = 0; i < byteCount; i++) { - boolsArr = boolsArr.concat(getUint8ByteToBitBooleanArray(bytes[i] ?? 0)); - } - - return boolsArr; -} diff --git a/packages/node/src/network/peers/utils/index.ts b/packages/node/src/network/peers/utils/index.ts index f5434906..6898b0c0 100644 --- a/packages/node/src/network/peers/utils/index.ts +++ b/packages/node/src/network/peers/utils/index.ts @@ -1,3 +1,2 @@ export * from "./getConnectedPeerIds"; export * from "./prioritizePeers"; -export * from "./subnetMap"; diff --git a/packages/node/src/network/peers/utils/prioritizePeers.ts b/packages/node/src/network/peers/utils/prioritizePeers.ts index ca101439..e0a489ab 100644 --- a/packages/node/src/network/peers/utils/prioritizePeers.ts +++ b/packages/node/src/network/peers/utils/prioritizePeers.ts @@ -1,19 +1,6 @@ import { PeerId } from "@libp2p/interface-peer-id"; import { Direction } from "@libp2p/interface-connection"; -import { ts, ssz } from "types/lib"; -import { shuffle, sortBy, MapDef } from "utils/lib"; -import { BitArray } from "@chainsafe/ssz"; -import { RequestedSubnet } from "./subnetMap"; - -/** Target number of peers we'd like to have connected to a given long-lived subnet */ -const TARGET_SUBNET_PEERS = 6; - -/** - * This is used in the pruning logic. We avoid pruning peers on sync-committees if doing so would - * lower our peer count below this number. Instead we favour a non-uniform distribution of subnet - * peers. - */ -// const MIN_SYNC_COMMITTEE_PEERS = 2; +import { shuffle, MapDef } from "utils/lib"; const LOW_SCORE_TO_PRUNE_IF_TOO_MANY_PEERS = -2; @@ -26,18 +13,9 @@ const PEERS_TO_CONNECT_OVERSHOOT_FACTOR = 3; const OUTBOUND_PEERS_RATIO = 0.1; -const mempoolSubnetsZero = BitArray.fromBitLen(ssz.MEMPOOL_ID_SUBNET_COUNT); - -type SubnetDiscvQuery = { - subnet: number; - maxPeersToDiscover: number; -}; - type PeerInfo = { id: PeerId; direction: Direction | null; - mempoolSubnets: ts.MempoolSubnets; - mempoolSubnetsTrueBitIndices: number[]; score: number; }; @@ -45,13 +23,11 @@ export interface PrioritizePeersOpts { targetPeers: number; maxPeers: number; outboundPeersRatio?: number; - targetSubnetPeers?: number; } export enum ExcessPeerDisconnectReason { LOW_SCORE = "low_score", - NO_LONG_LIVED_SUBNET = "no_long_lived_subnet", - TOO_GROUPED_SUBNET = "too_grouped_subnet", + NO_LONG_LIVED = "no_long_lived", FIND_BETTER_PEERS = "find_better_peers", } @@ -59,22 +35,19 @@ export enum ExcessPeerDisconnectReason { * Prioritize which peers to disconect and which to connect. Conditions: * - Reach `targetPeers` * - Don't exceed `maxPeers` - * - Ensure there are enough peers per active subnet + * - Ensure there are enough peers * - Prioritize peers with good score */ export function prioritizePeers( connectedPeersInfo: { id: PeerId; direction: Direction | null; - mempoolSubnets: ts.MempoolSubnets | null; score: number; }[], - activeMempoolnets: RequestedSubnet[], opts: PrioritizePeersOpts ): { peersToConnect: number; peersToDisconnect: Map; - mempoolSubnetQueries: SubnetDiscvQuery[]; } { const { targetPeers, maxPeers } = opts; @@ -83,24 +56,15 @@ export function prioritizePeers( () => [] ); - // Pre-compute trueBitIndexes for re-use below. Set null subnets Maps to default zero value + // Pre-compute trueBitIndexes for re-use below const connectedPeers = connectedPeersInfo.map( (peer): PeerInfo => ({ id: peer.id, direction: peer.direction, - mempoolSubnets: peer.mempoolSubnets ?? mempoolSubnetsZero, - mempoolSubnetsTrueBitIndices: - peer.mempoolSubnets?.getTrueBitIndexes() ?? [], score: peer.score, }) ); - const { mempoolSubnetQueries, dutiesByPeer } = requestMempoolnetPeers( - connectedPeers, - activeMempoolnets, - opts - ); - const connectedPeerCount = connectedPeers.length; if (connectedPeerCount < targetPeers) { @@ -114,94 +78,24 @@ export function prioritizePeers( maxPeers - connectedPeerCount ); } else if (connectedPeerCount > targetPeers) { - pruneExcessPeers( - connectedPeers, - dutiesByPeer, - activeMempoolnets, - peersToDisconnect, - opts - ); + pruneExcessPeers(connectedPeers, peersToDisconnect, opts); } return { peersToConnect, peersToDisconnect, - mempoolSubnetQueries, }; } -/** - * If more peers are needed in mempoolnets and syncnets, create SubnetDiscvQuery for each subnet - */ -function requestMempoolnetPeers( - connectedPeers: PeerInfo[], - activeMempoolnets: RequestedSubnet[], - opts: PrioritizePeersOpts -): { - mempoolSubnetQueries: SubnetDiscvQuery[]; - dutiesByPeer: Map; -} { - const { targetSubnetPeers = TARGET_SUBNET_PEERS } = opts; - const mempoolSubnetQueries: SubnetDiscvQuery[] = []; - - // To filter out peers containing enough mempoolnets of interest from possible disconnection - const dutiesByPeer = new Map(); - - // mempoolnets, do we need queries for more peers - if (activeMempoolnets.length > 0) { - /** Map of peers per subnet, peer may be in multiple arrays */ - const peersPerSubnet = new Map(); - - for (const peer of connectedPeers) { - const trueBitIndices = peer.mempoolSubnetsTrueBitIndices; - let dutyCount = 0; - for (const { subnet } of activeMempoolnets) { - if (trueBitIndices.includes(subnet)) { - dutyCount += 1; - peersPerSubnet.set(subnet, 1 + (peersPerSubnet.get(subnet) ?? 0)); - } - } - dutiesByPeer.set(peer, dutyCount); - } - - for (const { subnet } of activeMempoolnets) { - const peersInSubnet = peersPerSubnet.get(subnet) ?? 0; - if (peersInSubnet < targetSubnetPeers) { - // We need more peers - mempoolSubnetQueries.push({ - subnet, - maxPeersToDiscover: targetSubnetPeers - peersInSubnet, - }); - } - } - } - - return { mempoolSubnetQueries, dutiesByPeer }; -} - /** * Remove excess peers back down to our target values. - * 1. Remove peers that are not subscribed to a subnet (they have less value) - * 2. Remove worst scoring peers - * 3. Remove peers that we have many on any particular subnet - * - Only consider removing peers on subnet that has > TARGET_SUBNET_PEERS to be safe - * - If we have a choice, do not remove peer that would drop us below targetPeersPermempoolnetSubnet - * - If we have a choice, do not remove peer that would drop us below MIN_SYNC_COMMITTEE_PEERS - * - * Although the logic looks complicated, we'd prune 5 peers max per heartbeat based on the mainnet config. */ function pruneExcessPeers( connectedPeers: PeerInfo[], - dutiesByPeer: Map, - activeMempoolSubnets: RequestedSubnet[], peersToDisconnect: MapDef, opts: PrioritizePeersOpts ): void { - const { - targetPeers, - targetSubnetPeers = TARGET_SUBNET_PEERS, - outboundPeersRatio = OUTBOUND_PEERS_RATIO, - } = opts; + const { targetPeers, outboundPeersRatio = OUTBOUND_PEERS_RATIO } = opts; const connectedPeerCount = connectedPeers.length; const outboundPeersTarget = Math.round( outboundPeersRatio * connectedPeerCount @@ -217,16 +111,11 @@ function pruneExcessPeers( let outboundPeersEligibleForPruning = 0; - const sortedPeers = sortPeersToPrune(connectedPeers, dutiesByPeer); + const sortedPeers = sortPeersToPrune(connectedPeers); const peersEligibleForPruning = sortedPeers // Then, iterate from highest score to lowest doing a manual filter for duties and outbound ratio .filter((peer) => { - // Peers with duties are not eligible for pruning - if ((dutiesByPeer.get(peer) ?? 0) > 0) { - return false; - } - // outbound peers up to OUTBOUND_PEER_RATIO sorted by highest score and not eligible for pruning if (peer.direction === "outbound") { if ( @@ -243,23 +132,19 @@ function pruneExcessPeers( }); let peersToDisconnectCount = 0; - const noLongLivedSubnetPeersToDisconnect: PeerId[] = []; + const noLongLivedPeersToDisconnect: PeerId[] = []; const peersToDisconnectTarget = connectedPeerCount - targetPeers; for (const peer of peersEligibleForPruning) { - const hasLongLivedSubnet = peer.mempoolSubnetsTrueBitIndices.length > 0; - if ( - !hasLongLivedSubnet && - peersToDisconnectCount < peersToDisconnectTarget - ) { - noLongLivedSubnetPeersToDisconnect.push(peer.id); + if (peersToDisconnectCount < peersToDisconnectTarget) { + noLongLivedPeersToDisconnect.push(peer.id); peersToDisconnectCount++; } } peersToDisconnect.set( - ExcessPeerDisconnectReason.NO_LONG_LIVED_SUBNET, - noLongLivedSubnetPeersToDisconnect + ExcessPeerDisconnectReason.NO_LONG_LIVED, + noLongLivedPeersToDisconnect ); // 2. Disconnect peers that have score < LOW_SCORE_TO_PRUNE_IF_TOO_MANY_PEERS @@ -268,7 +153,7 @@ function pruneExcessPeers( if ( peer.score < LOW_SCORE_TO_PRUNE_IF_TOO_MANY_PEERS && peersToDisconnectCount < peersToDisconnectTarget && - !noLongLivedSubnetPeersToDisconnect.includes(peer.id) + !noLongLivedPeersToDisconnect.includes(peer.id) ) { badScorePeersToDisconnect.push(peer.id); peersToDisconnectCount++; @@ -279,88 +164,26 @@ function pruneExcessPeers( badScorePeersToDisconnect ); - // 3. Disconnect peers that are too grouped on any given subnet + // 3. Disconnect peers const tooGroupedPeersToDisconnect: PeerId[] = []; if (peersToDisconnectCount < peersToDisconnectTarget) { - // PeerInfo array by attestation subnet - const subnetToPeers = new MapDef(() => []); - // number of peers per long lived sync committee - const syncCommitteePeerCount = new MapDef(() => 0); - // populate the above variables for (const peer of connectedPeers) { if ( - noLongLivedSubnetPeersToDisconnect.includes(peer.id) || + noLongLivedPeersToDisconnect.includes(peer.id) || badScorePeersToDisconnect.includes(peer.id) ) { continue; } - for (const subnet of peer.mempoolSubnetsTrueBitIndices) { - subnetToPeers.getOrDefault(subnet).push(peer); - } } - while (peersToDisconnectCount < peersToDisconnectTarget) { - const maxPeersSubnet = findMaxPeersSubnet( - subnetToPeers, - targetSubnetPeers - ); - // peers are NOT too grouped on any given subnet, finish this loop - if (maxPeersSubnet === null) { - break; - } - - const peersOnMostGroupedSubnet = subnetToPeers.get(maxPeersSubnet); - if (peersOnMostGroupedSubnet === undefined) { - break; - } - - // Find peers to remove from the current maxPeersSubnet - const removedPeer = findPeerToRemove( - subnetToPeers, - syncCommitteePeerCount, - peersOnMostGroupedSubnet, - targetSubnetPeers, - activeMempoolSubnets - ); - - // If we have successfully found a candidate peer to prune, prune it, - // otherwise all peers on this subnet should not be removed. - // In this case, we remove all peers from the pruning logic and try another subnet. - if (removedPeer != null) { - // recalculate variables - removePeerFromSubnetToPeers(subnetToPeers, removedPeer); - // decreaseSynccommitteePeerCount( - // syncCommitteePeerCount, - // removedPeer.syncnetsTrueBitIndices - // ); - - tooGroupedPeersToDisconnect.push(removedPeer.id); - peersToDisconnectCount++; - } else { - // no peer to remove from the maxPeersSubnet - // should continue with the 2nd biggest maxPeersSubnet - subnetToPeers.delete(maxPeersSubnet); - } - } - - peersToDisconnect.set( - ExcessPeerDisconnectReason.TOO_GROUPED_SUBNET, - tooGroupedPeersToDisconnect - ); - - // 4. Ensure to always to prune to target peers - // In rare case, all peers may have duties and good score but very low long lived subnet, - // and not too grouped to any subnets, we need to always disconnect peers until it reaches targetPeers - // because we want to keep improving peers (long lived subnets + score) - // otherwise we'll not able to accept new peer connection to consider better peers const remainingPeersToDisconnect: PeerId[] = []; for (const { id } of sortedPeers) { if (peersToDisconnectCount >= peersToDisconnectTarget) { break; } if ( - noLongLivedSubnetPeersToDisconnect.includes(id) || + noLongLivedPeersToDisconnect.includes(id) || badScorePeersToDisconnect.includes(id) || tooGroupedPeersToDisconnect.includes(id) ) { @@ -380,117 +203,7 @@ function pruneExcessPeers( /** * Sort peers ascending, peer-0 has the most chance to prune, peer-n has the least. * Shuffling first to break ties. - * prefer sorting by dutied subnets first then number of long lived subnets, - * peer score is the last criteria since they are supposed to be in the same score range, - * bad score peers are removed by peer manager anyway - */ -export function sortPeersToPrune( - connectedPeers: PeerInfo[], - dutiesByPeer: Map -): PeerInfo[] { - return shuffle(connectedPeers).sort((p1: any, p2: any) => { - const dutiedSubnet1 = dutiesByPeer.get(p1) ?? 0; - const dutiedSubnet2 = dutiesByPeer.get(p2) ?? 0; - if (dutiedSubnet1 === dutiedSubnet2) { - const [longLivedSubnets1, longLivedSubnets2] = [p1, p2].map( - (p) => - p.mempoolSubnetsTrueBitIndices.length + - p.syncnetsTrueBitIndices.length - ); - if (longLivedSubnets1 === longLivedSubnets2) { - return p1.score - p2.score; - } - return longLivedSubnets1 - longLivedSubnets2; - } - return dutiedSubnet1 - dutiedSubnet2; - }); -} - -/** - * Find subnet that has the most peers and > TARGET_SUBNET_PEERS, return null if peers are not grouped - * to any subnets. - */ -function findMaxPeersSubnet( - subnetToPeers: Map, - targetSubnetPeers: number -): number | null { - let maxPeersSubnet: number | null = null; - let maxPeerCountPerSubnet = -1; - - for (const [subnet, peers] of subnetToPeers) { - if ( - peers.length > targetSubnetPeers && - peers.length > maxPeerCountPerSubnet - ) { - maxPeersSubnet = subnet; - maxPeerCountPerSubnet = peers.length; - } - } - - return maxPeersSubnet; -} - -/** - * Find peers to remove from the current maxPeersSubnet. - * In the long term, this logic will help us gradually find peers with more long lived subnet. - * Return null if we should not remove any peer on the most grouped subnet. */ -function findPeerToRemove( - subnetToPeers: Map, - syncCommitteePeerCount: Map, - peersOnMostGroupedSubnet: PeerInfo[], - targetSubnetPeers: number, - activeMempoolSubnets: RequestedSubnet[] -): PeerInfo | null { - const peersOnSubnet = sortBy( - peersOnMostGroupedSubnet, - (peer: any) => peer.mempoolnetsTrueBitIndices.length - ); - let removedPeer: PeerInfo | null = null; - for (const candidatePeer of peersOnSubnet) { - // new logic of lodestar - const mempoolSubnetIndices = candidatePeer.mempoolSubnetsTrueBitIndices; - if (mempoolSubnetIndices.length > 0) { - const requestedSubnets = activeMempoolSubnets.map( - (activemempoolnet) => activemempoolnet.subnet - ); - let minMempoolnetCount = ssz.MEMPOOL_ID_SUBNET_COUNT; - // intersection of requested subnets and subnets that peer subscribes to - for (const subnet of requestedSubnets) { - const numSubnetPeers = subnetToPeers.get(subnet)?.length; - if ( - numSubnetPeers !== undefined && - numSubnetPeers < minMempoolnetCount && - mempoolSubnetIndices.includes(subnet) - ) { - minMempoolnetCount = numSubnetPeers; - } - } - // shouldn't remove this peer because it drops us below targetSubnetPeers - if (minMempoolnetCount <= targetSubnetPeers) { - continue; - } - } - - // ok, found a peer to remove - removedPeer = candidatePeer; - break; - } - - return removedPeer; -} - -/** - * Remove a peer from subnetToPeers map. - */ -function removePeerFromSubnetToPeers( - subnetToPeers: Map, - removedPeer: PeerInfo -): void { - for (const peers of subnetToPeers.values()) { - const index = peers.findIndex((peer) => peer === removedPeer); - if (index >= 0) { - peers.splice(index, 1); - } - } +export function sortPeersToPrune(connectedPeers: PeerInfo[]): PeerInfo[] { + return shuffle(connectedPeers); } diff --git a/packages/node/src/network/peers/utils/subnetMap.ts b/packages/node/src/network/peers/utils/subnetMap.ts deleted file mode 100644 index 09b4405a..00000000 --- a/packages/node/src/network/peers/utils/subnetMap.ts +++ /dev/null @@ -1,70 +0,0 @@ -export type RequestedSubnet = { - subnet: number; -}; - -/** - * Track requested subnets by `toSlot` - */ -export class SubnetMap { - /** Map of subnets and the slot until they are needed */ - private subnets = new Map(); - - get size(): number { - return this.subnets.size; - } - - has(subnet: number): boolean { - return this.subnets.has(subnet); - } - - /** - * Register requested subnets, extends toSlot if same subnet. - **/ - request(requestedSubnet: RequestedSubnet): void { - const { subnet } = requestedSubnet; - this.subnets.set(subnet, true); - } - - isActive(subnet: number): boolean { - return !!this.subnets.get(subnet); - } - - getActive(): number[] { - const subnetIds: number[] = []; - for (const [subnet, isActive] of this.subnets.entries()) { - if (isActive) { - subnetIds.push(subnet); - } - } - return subnetIds; - } - - getActiveTtl(): RequestedSubnet[] { - const subnets: RequestedSubnet[] = []; - for (const [subnet, isActive] of this.subnets.entries()) { - if (isActive) { - subnets.push({ subnet }); - } - } - return subnets; - } - - getExpired(): number[] { - const subnetIds: number[] = []; - for (const [subnet, isActive] of this.subnets.entries()) { - if (!isActive) { - subnetIds.push(subnet); - this.subnets.delete(subnet); - } - } - return subnetIds; - } - - getAll(): number[] { - return Array.from(this.subnets.keys()); - } - - delete(subnet: number): void { - this.subnets.delete(subnet); - } -} diff --git a/packages/node/src/network/processor/gossipHandlers.ts b/packages/node/src/network/processor/gossipHandlers.ts index 44696264..90bd786e 100644 --- a/packages/node/src/network/processor/gossipHandlers.ts +++ b/packages/node/src/network/processor/gossipHandlers.ts @@ -1,28 +1,28 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ -import { ts, NetworkName } from "types/lib"; +import { ts } from "types/lib"; import logger from "api/lib/logger"; import { Config } from "executor/lib/config"; -import { Executors } from "executor/lib/interfaces"; -import { deserializeUserOpsWithEP } from "params/lib/utils/userOp"; +import { deserializeVerifiedUserOperation } from "params/lib/utils/userOp"; import { AllChainsMetrics } from "monitoring/lib"; +import { Executor } from "executor/lib/executor"; import { GossipHandlers, GossipType } from "../gossip/interface"; -import { validateGossipUserOpsWithEntryPoint } from "../validation"; +import { validateGossipVerifiedUserOperation } from "../validation"; import { NetworkEventBus } from "../events"; import { GossipValidationError } from "../gossip/errors"; export type ValidatorFnsModules = { relayersConfig: Config; events: NetworkEventBus; - executors: Executors; + executor: Executor; metrics: AllChainsMetrics | null; }; export function getGossipHandlers( modules: ValidatorFnsModules ): GossipHandlers { - const { relayersConfig, executors } = modules; - async function validateUserOpsWithEntryPoint( - userOp: ts.UserOpsWithEntryPoint, + const { relayersConfig, executor } = modules; + async function validateVerifiedUserOperation( + userOp: ts.VerifiedUserOperation, mempool: string, peerIdStr: string, seenTimestampSec: number @@ -36,7 +36,7 @@ export function getGossipHandlers( "Received gossip block" ); try { - await validateGossipUserOpsWithEntryPoint(relayersConfig, userOp); + await validateGossipVerifiedUserOperation(relayersConfig, userOp); logger.debug("Validation successful"); return true; } catch (err) { @@ -49,59 +49,55 @@ export function getGossipHandlers( } } - async function handleValidUserOpsWithEntryPoint( - userOpsWithEP: ts.UserOpsWithEntryPoint, + async function handleValidVerifiedUserOperation( + verifiedUserOp: ts.VerifiedUserOperation, mempool: string, peerIdStr: string, seenTimestampSec: number ): Promise { - const { entryPoint, chainId, userOps } = - deserializeUserOpsWithEP(userOpsWithEP); - const executor = executors.get(chainId); - if (!executor) { - logger.error(`Executor for ${chainId} not found`); - return; - } - for (const userOp of userOps) { - try { - const isNewOrReplacing = - await executor.p2pService.isNewOrReplacingUserOp(userOp, entryPoint); - if (!isNewOrReplacing) { - logger.debug( - `[${userOp.sender}, ${userOp.nonce.toString()}] exists, skipping...` - ); - continue; - } - const userOpHash = await executor.eth.sendUserOperation({ - userOp, - entryPoint, - }); - logger.debug(`Processed userOp: ${userOpHash}`); - if (modules.metrics) { - modules.metrics[chainId].useropsReceived?.inc(); - } - } catch (err) { - logger.error(`Could not process userOp: ${err}`); + const { entryPoint, userOp } = + deserializeVerifiedUserOperation(verifiedUserOp); + try { + const isNewOrReplacing = await executor.p2pService.isNewOrReplacingUserOp( + userOp, + entryPoint + ); + if (!isNewOrReplacing) { + logger.debug( + `[${userOp.sender}, ${userOp.nonce.toString()}] exists, skipping...` + ); + return; + } + const userOpHash = await executor.eth.sendUserOperation({ + userOp, + entryPoint, + }); + logger.debug(`Processed userOp: ${userOpHash}`); + if (modules.metrics) { + modules.metrics[executor.chainId].useropsReceived?.inc(); } + } catch (err) { + logger.error(`Could not process userOp: ${err}`); } + return; } return { - [GossipType.user_operations_with_entrypoint]: async ( + [GossipType.user_operations]: async ( userOp, topic, peerIdStr, seenTimestampSec ) => { if ( - await validateUserOpsWithEntryPoint( + await validateVerifiedUserOperation( userOp, topic.mempool, peerIdStr, seenTimestampSec ) ) { - await handleValidUserOpsWithEntryPoint( + await handleValidVerifiedUserOperation( userOp, topic.mempool, peerIdStr, diff --git a/packages/node/src/network/processor/gossipQueues.ts b/packages/node/src/network/processor/gossipQueues.ts index 672e750b..1987f839 100644 --- a/packages/node/src/network/processor/gossipQueues.ts +++ b/packages/node/src/network/processor/gossipQueues.ts @@ -13,7 +13,7 @@ const gossipQueueOpts: { [K in GossipType]: GossipQueueOpts; } = { // validation gossip block asap - [GossipType.user_operations_with_entrypoint]: { + [GossipType.user_operations]: { maxLength: 256, type: QueueType.FIFO, }, diff --git a/packages/node/src/network/processor/index.ts b/packages/node/src/network/processor/index.ts index e72e0dd8..ab939d5b 100644 --- a/packages/node/src/network/processor/index.ts +++ b/packages/node/src/network/processor/index.ts @@ -27,7 +27,7 @@ type WorkOpts = { * in order to process the gossip object. */ const executeGossipWorkOrderObj: Record = { - [GossipType.user_operations_with_entrypoint]: {}, + [GossipType.user_operations]: {}, }; const executeGossipWorkOrder = Object.keys( executeGossipWorkOrderObj diff --git a/packages/node/src/network/reqresp/ReqRespNode.ts b/packages/node/src/network/reqresp/ReqRespNode.ts index a9bc9e94..0c7758ab 100644 --- a/packages/node/src/network/reqresp/ReqRespNode.ts +++ b/packages/node/src/network/reqresp/ReqRespNode.ts @@ -156,7 +156,7 @@ export class ReqRespNode extends ReqResp implements IReqRespNode { peerId, ReqRespMethod.Ping, [Version.V1], - this.metadataController.seqNumber + this.metadataController.seq_number ) ); } @@ -256,7 +256,7 @@ export class ReqRespNode extends ReqResp implements IReqRespNode { peerId ); - yield* this.reqRespHandlers.onStatus(req, peerId); + yield* this.reqRespHandlers.onStatus(); } private async *onGoodbye( @@ -281,7 +281,7 @@ export class ReqRespNode extends ReqResp implements IReqRespNode { ); yield { type: EncodedPayloadType.ssz, - data: this.metadataController.seqNumber, + data: this.metadataController.seq_number, }; } diff --git a/packages/node/src/network/reqresp/handlers/index.ts b/packages/node/src/network/reqresp/handlers/index.ts index 23646c05..dbc95fd8 100644 --- a/packages/node/src/network/reqresp/handlers/index.ts +++ b/packages/node/src/network/reqresp/handlers/index.ts @@ -1,14 +1,15 @@ import { Config } from "executor/lib/config"; -import { Executors } from "executor/lib/interfaces"; +import { Executor } from "executor/lib/executor"; import { AllChainsMetrics } from "monitoring/lib"; import * as protocols from "../../../reqresp/protocols"; -import { HandlerTypeFromMessage } from "../../../reqresp/types"; +import { EncodedPayloadSsz, HandlerTypeFromMessage } from "../../../reqresp/types"; import { onStatus } from "./status"; import { onPooledUserOpHashes } from "./pooledUserOpHashes"; import { onPooledUserOpsByHash } from "./pooledUserOpsByHash"; +import { ts } from "types/lib"; export interface ReqRespHandlers { - onStatus: HandlerTypeFromMessage; + onStatus: () => AsyncIterable>; onPooledUserOpHashes: HandlerTypeFromMessage< typeof protocols.PooledUserOpHashes >; @@ -18,7 +19,7 @@ export interface ReqRespHandlers { } export function getReqRespHandlers( - executors: Executors, + executor: Executor, config: Config, metrics: AllChainsMetrics | null ): ReqRespHandlers { @@ -27,10 +28,10 @@ export function getReqRespHandlers( yield* onStatus(config); }, async *onPooledUserOpHashes(req) { - yield* onPooledUserOpHashes(executors, config, req); + yield* onPooledUserOpHashes(executor, config, req); }, async *onPooledUserOpsByHash(req) { - yield* onPooledUserOpsByHash(executors, config, req, metrics); + yield* onPooledUserOpsByHash(executor, config, req, metrics); }, }; } diff --git a/packages/node/src/network/reqresp/handlers/pooledUserOpHashes.ts b/packages/node/src/network/reqresp/handlers/pooledUserOpHashes.ts index e33b3def..27852a45 100644 --- a/packages/node/src/network/reqresp/handlers/pooledUserOpHashes.ts +++ b/packages/node/src/network/reqresp/handlers/pooledUserOpHashes.ts @@ -1,51 +1,26 @@ import { ts, ssz } from "types/lib"; import { Config } from "executor/lib/config"; -import { Executors } from "executor/lib/interfaces"; -import { networksConfig, deserializeMempoolId } from "params/lib"; +import { Executor } from "executor/lib/executor"; import { MAX_OPS_PER_REQUEST } from "types/lib/sszTypes"; import logger from "api/lib/logger"; import { userOpHashToBytes } from "params/lib/utils/userOp"; +import { bytes32ToNumber, numberToBytes32 } from "params/lib/utils/cursor"; import { EncodedPayload, EncodedPayloadType } from "../../../reqresp/types"; -import { ResponseError } from "../../../reqresp/response"; -import { RespStatus } from "../interface"; export async function* onPooledUserOpHashes( - executors: Executors, + executor: Executor, relayersConfig: Config, req: ts.PooledUserOpHashesRequest ): AsyncIterable> { - const { supportedNetworks } = relayersConfig; - let chainId: number | null = null; - for (const [_, id] of Object.entries(supportedNetworks)) { - const mempoolIds = networksConfig[id]?.MEMPOOL_IDS; - if (mempoolIds) { - for (const mempoolIdHex of mempoolIds) { - const mempoolId = deserializeMempoolId(mempoolIdHex); - if (mempoolId == deserializeMempoolId(req.mempool)) { - chainId = id; - } - } - } - } - - if (chainId == null) { - throw new ResponseError(RespStatus.INVALID_REQUEST, "Unsupported mempool"); - } - - const executor = executors.get(chainId); - if (!executor) { - throw new ResponseError(RespStatus.SERVER_ERROR, "Executor not found"); - } - const pooledUserOpHashes = await executor.p2pService.getPooledUserOpHashes( MAX_OPS_PER_REQUEST, - Number(req.offset) + bytes32ToNumber(req.cursor) ); logger.debug( `Sending: ${JSON.stringify( { - more_flag: Number(pooledUserOpHashes.more_flag), + next_cursor: pooledUserOpHashes.next_cursor, hashes: pooledUserOpHashes.hashes, }, undefined, @@ -54,7 +29,7 @@ export async function* onPooledUserOpHashes( ); const data = ssz.PooledUserOpHashes.defaultValue(); - data.more_flag = BigInt(pooledUserOpHashes.more_flag); + data.next_cursor = numberToBytes32(pooledUserOpHashes.next_cursor); data.hashes = pooledUserOpHashes.hashes.map((hash) => userOpHashToBytes(hash) ); diff --git a/packages/node/src/network/reqresp/handlers/pooledUserOpsByHash.ts b/packages/node/src/network/reqresp/handlers/pooledUserOpsByHash.ts index 38607d58..8e7a309e 100644 --- a/packages/node/src/network/reqresp/handlers/pooledUserOpsByHash.ts +++ b/packages/node/src/network/reqresp/handlers/pooledUserOpsByHash.ts @@ -1,31 +1,19 @@ import { ts } from "types/lib"; import { Config } from "executor/lib/config"; -import { Executors } from "executor/lib/interfaces"; +import { Executor } from "executor/lib/executor"; import { serializeUserOp, userOpHashToString } from "params/lib/utils/userOp"; import logger from "api/lib/logger"; import { AllChainsMetrics } from "monitoring/lib"; import { EncodedPayload, EncodedPayloadType } from "../../../reqresp/types"; -import { ResponseError } from "../../../reqresp/response"; -import { RespStatus } from "../interface"; export async function* onPooledUserOpsByHash( - executors: Executors, + executor: Executor, relayersConfig: Config, req: ts.PooledUserOpsByHashRequest, metrics: AllChainsMetrics | null ): AsyncIterable> { const userOpHashes = req.hashes.map((hash) => userOpHashToString(hash)); logger.debug(`UserOpsByHash, received hashes: ${userOpHashes.join(", ")}`); - const { supportedNetworks } = relayersConfig; - const chainId = Object.values(supportedNetworks).at(0); // OK: any network works - // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions - if (!chainId) { - throw new ResponseError(RespStatus.SERVER_ERROR, "No network found"); - } - const executor = executors.get(chainId); - if (!executor) { - throw new ResponseError(RespStatus.SERVER_ERROR, "Executor not found"); - } const userOps = await executor.p2pService.getPooledUserOpsByHash( userOpHashes ); @@ -34,7 +22,7 @@ export async function* onPooledUserOpsByHash( const sszUserOps = userOps.map((userOp) => serializeUserOp(userOp)); - if (metrics) metrics[chainId].useropsSent?.inc(userOps.length); + if (metrics) metrics[relayersConfig.chainId].useropsSent?.inc(userOps.length); yield { type: EncodedPayloadType.ssz, diff --git a/packages/node/src/network/reqresp/handlers/status.ts b/packages/node/src/network/reqresp/handlers/status.ts index 14abda26..3c189065 100644 --- a/packages/node/src/network/reqresp/handlers/status.ts +++ b/packages/node/src/network/reqresp/handlers/status.ts @@ -1,20 +1,19 @@ import { ts } from "types/lib"; import { Config } from "executor/lib/config"; -import { networksConfig } from "params/lib"; -import { EncodedPayload, EncodedPayloadType } from "../../../reqresp/types"; +import { fromHex } from "utils/lib"; +import { EncodedPayloadSsz, EncodedPayloadType } from "../../../reqresp/types"; export async function* onStatus( relayersConfig: Config -): AsyncIterable> { - const { supportedNetworks } = relayersConfig; - const data: ts.Status = []; - for (const chainId of Object.values(supportedNetworks)) { - const mempoolIds = networksConfig[chainId]?.MEMPOOL_IDS; - if (mempoolIds) { - for (const mempoolIdHex of mempoolIds) { - data.push(mempoolIdHex); - } - } - } - yield { type: EncodedPayloadType.ssz, data }; +): AsyncIterable> { + const provider = relayersConfig.getNetworkProvider(); + const block = await provider.getBlock("latest"); + yield { + type: EncodedPayloadType.ssz, + data: { + chain_id: BigInt(relayersConfig.chainId), + block_hash: fromHex(block.hash), + block_number: BigInt(block.number), + }, + }; } diff --git a/packages/node/src/network/reqresp/pooledUserOpHashes.ts b/packages/node/src/network/reqresp/pooledUserOpHashes.ts index 1163814b..46d9dfc9 100644 --- a/packages/node/src/network/reqresp/pooledUserOpHashes.ts +++ b/packages/node/src/network/reqresp/pooledUserOpHashes.ts @@ -1,4 +1,4 @@ -import { Executors } from "executor/lib/interfaces"; +import { Executor } from "executor/lib/executor"; import { Config } from "executor/lib/config"; import { ts } from "types/lib"; import { PeerId } from "@libp2p/interface-peer-id"; @@ -7,7 +7,7 @@ import { IReqRespNode } from "./interface"; export async function pooledUserOpHashes( reqResp: IReqRespNode, peerId: PeerId, - executors: Executors, + executor: Executor, relayersConfig: Config, req: ts.PooledUserOpHashesRequest ): Promise { diff --git a/packages/node/src/network/reqresp/pooledUserOpsByHash.ts b/packages/node/src/network/reqresp/pooledUserOpsByHash.ts index 51ff0cc7..8a94776c 100644 --- a/packages/node/src/network/reqresp/pooledUserOpsByHash.ts +++ b/packages/node/src/network/reqresp/pooledUserOpsByHash.ts @@ -1,4 +1,4 @@ -import { Executors } from "executor/lib/interfaces"; +import { Executor } from "executor/lib/executor"; import { Config } from "executor/lib/config"; import { ts } from "types/lib"; import { PeerId } from "@libp2p/interface-peer-id"; @@ -7,7 +7,7 @@ import { IReqRespNode } from "./interface"; export async function pooledUserOpsByHash( reqResp: IReqRespNode, peerId: PeerId, - executors: Executors, + executor: Executor, relayersConfig: Config, req: ts.PooledUserOpsByHashRequest ): Promise { diff --git a/packages/node/src/network/reqresp/types.ts b/packages/node/src/network/reqresp/types.ts index 7c52722d..01877659 100644 --- a/packages/node/src/network/reqresp/types.ts +++ b/packages/node/src/network/reqresp/types.ts @@ -5,7 +5,7 @@ export enum ReqRespMethod { Goodbye = "goodbye", Ping = "ping", Metadata = "metadata", - PooledUserOpHashes = "pooled_user_ops_hashes", + PooledUserOpHashes = "pooled_user_op_hashes", PooledUserOpsByHash = "pooled_user_ops_by_hash", } diff --git a/packages/node/src/network/statusCache.ts b/packages/node/src/network/statusCache.ts new file mode 100644 index 00000000..b4e1794c --- /dev/null +++ b/packages/node/src/network/statusCache.ts @@ -0,0 +1,31 @@ +import { ts } from "types/lib"; +import { ReqRespHandlers } from "./reqresp/handlers"; +import { now } from "executor/lib/utils"; + +export interface StatusCache { + get(): Promise; +} + +export class LocalStatusCache implements StatusCache { + private lastUpdatedTime = 0; + + constructor( + private reqRespHandlers: ReqRespHandlers, + private cached: ts.Status + ) { + this.lastUpdatedTime = now(); + } + + async get(): Promise { + if (this.lastUpdatedTime - now() < 5000) { // 5 seconds + return this.cached; + } + try { + for await (const statusEncoded of this.reqRespHandlers.onStatus()) { + this.lastUpdatedTime = now(); + return this.cached = statusEncoded.data; + } + } catch (err) {}; + return this.cached; + } +} diff --git a/packages/node/src/network/validation/index.ts b/packages/node/src/network/validation/index.ts index efaa1977..f4523a93 100644 --- a/packages/node/src/network/validation/index.ts +++ b/packages/node/src/network/validation/index.ts @@ -1 +1 @@ -export * from "./userOpsWithEntryPoint"; +export * from "./verifiedUserOperation"; diff --git a/packages/node/src/network/validation/userOpsWithEntryPoint.ts b/packages/node/src/network/validation/userOpsWithEntryPoint.ts deleted file mode 100644 index 40703e62..00000000 --- a/packages/node/src/network/validation/userOpsWithEntryPoint.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { toHexString } from "@chainsafe/ssz"; -import { Config } from "executor/lib/config"; -import { ts } from "types/lib"; -import { GossipErrorCode, GossipValidationError } from "../gossip/errors"; - -export async function validateGossipUserOpsWithEntryPoint( - relayersConfig: Config, - userOpWithEP: ts.UserOpsWithEntryPoint -): Promise { - const chainId = Number(userOpWithEP.chain_id); - const entryPoint = toHexString(userOpWithEP.entry_point_contract); - const blockHash = Number(userOpWithEP.verified_at_block_hash); - - if (!relayersConfig.isNetworkSupported(chainId)) { - throw new GossipValidationError( - GossipErrorCode.INVALID_CHAIN_ID, - "Network is not supported" - ); - } - - if (!relayersConfig.isEntryPointSupported(chainId, entryPoint)) { - throw new GossipValidationError( - GossipErrorCode.INVALID_ENTRY_POINT, - "Entrypoint is not supported" - ); - } - - const networkName = relayersConfig.getNetworkNameByChainId(chainId); - const networkProvider = relayersConfig.getNetworkProvider(networkName!); - - const blockNumber = await networkProvider?.getBlockNumber(); - if (blockNumber == null || blockHash + 20 < blockNumber) { - throw new GossipValidationError( - GossipErrorCode.OUTDATED_USER_OP, - "Old user op" - ); - } -} diff --git a/packages/node/src/network/validation/verifiedUserOperation.ts b/packages/node/src/network/validation/verifiedUserOperation.ts new file mode 100644 index 00000000..58dc9d99 --- /dev/null +++ b/packages/node/src/network/validation/verifiedUserOperation.ts @@ -0,0 +1,29 @@ +import { toHexString } from "@chainsafe/ssz"; +import { Config } from "executor/lib/config"; +import { ts } from "types/lib"; +import { GossipErrorCode, GossipValidationError } from "../gossip/errors"; + +export async function validateGossipVerifiedUserOperation( + relayersConfig: Config, + verifiedUserOperation: ts.VerifiedUserOperation +): Promise { + const entryPoint = toHexString(verifiedUserOperation.entry_point); + const blockHash = Number(verifiedUserOperation.verified_at_block_hash); + + if (!relayersConfig.isEntryPointSupported(entryPoint)) { + throw new GossipValidationError( + GossipErrorCode.INVALID_ENTRY_POINT, + "Entrypoint is not supported" + ); + } + + const networkProvider = relayersConfig.getNetworkProvider(); + + const blockNumber = await networkProvider?.getBlockNumber(); + if (blockNumber == null || blockHash + 20 < blockNumber) { + throw new GossipValidationError( + GossipErrorCode.OUTDATED_USER_OP, + "Old user op" + ); + } +} diff --git a/packages/node/src/options/network.ts b/packages/node/src/options/network.ts index f830d0e8..937ec652 100644 --- a/packages/node/src/options/network.ts +++ b/packages/node/src/options/network.ts @@ -1,4 +1,3 @@ -import { homedir } from "node:os"; import { IDiscv5DiscoveryInputOptions, SignableENR, @@ -13,7 +12,6 @@ export const defaultP2PPort = 4337; export interface INetworkOptions extends PeerManagerOpts { localMultiaddrs: string[]; bootMultiaddrs?: string[]; - subscribeAllSubnets?: boolean; mdns: boolean; connectToDiscv5Bootnodes?: boolean; version?: string; @@ -25,10 +23,6 @@ export const initNetworkOptions = ( p2pOptions: P2POptions, dataDir: string ): INetworkOptions => { - if (dataDir === "") { - dataDir = `${homedir()}/.skandha/db/`; - } - const discv5Options: IDiscv5DiscoveryInputOptions = { bindAddr: `/ip4/${p2pOptions.host}/udp/${p2pOptions.enrPort}`, enr: enr, @@ -38,8 +32,8 @@ export const initNetworkOptions = ( }; const networkOptions = { - maxPeers: 7, // Allow some room above targetPeers for new inbound peers - targetPeers: 5, + maxPeers: 55, // Allow some room above targetPeers for new inbound peers + targetPeers: 50, discv5FirstQueryDelayMs: 1000, localMultiaddrs: [`/ip4/${p2pOptions.host}/tcp/${p2pOptions.port}`], bootMultiaddrs: [], diff --git a/packages/node/src/options/peers.ts b/packages/node/src/options/peers.ts index 23fca299..bb113424 100644 --- a/packages/node/src/options/peers.ts +++ b/packages/node/src/options/peers.ts @@ -3,7 +3,7 @@ import { IDiscv5DiscoveryInputOptions } from "@chainsafe/discv5"; export type PeerManagerOpts = { /** The target number of peers we would like to connect to. */ targetPeers: number; - /** The maximum number of peers we allow (exceptions for subnet peers) */ + /** The maximum number of peers we allow */ maxPeers: number; discv5FirstQueryDelayMs: number; /** diff --git a/packages/node/src/reqresp/protocols/PooledUserOpHashes.ts b/packages/node/src/reqresp/protocols/PooledUserOpHashes.ts index f889324d..69b16cd4 100644 --- a/packages/node/src/reqresp/protocols/PooledUserOpHashes.ts +++ b/packages/node/src/reqresp/protocols/PooledUserOpHashes.ts @@ -1,5 +1,4 @@ import { ssz, ts } from "types/lib"; -import { deserializeMempoolId } from "params/lib"; import { ContextBytesType, DuplexProtocolDefinitionGenerator, @@ -11,7 +10,7 @@ export const PooledUserOpHashes: DuplexProtocolDefinitionGenerator< ts.PooledUserOpHashes > = (modules, handler) => { return { - method: "pooled_user_ops_hashes", + method: "pooled_user_op_hashes", version: 1, encoding: Encoding.SSZ_SNAPPY, requestType: () => ssz.PooledUserOpHashesRequest, @@ -21,8 +20,5 @@ export const PooledUserOpHashes: DuplexProtocolDefinitionGenerator< inboundRateLimits: { byPeer: { quota: 5, quotaTimeMs: 15_000 }, }, - renderRequestBody: (req) => { - return `${deserializeMempoolId(req.mempool)}, ${req.offset.toString(10)}`; - }, }; }; diff --git a/packages/node/src/reqresp/protocols/Status.ts b/packages/node/src/reqresp/protocols/Status.ts index 896163ab..73f36532 100644 --- a/packages/node/src/reqresp/protocols/Status.ts +++ b/packages/node/src/reqresp/protocols/Status.ts @@ -1,6 +1,5 @@ import { ssz, ts } from "types/lib"; import { MAX_MEMPOOLS_PER_BUNDLER } from "types/lib/sszTypes"; -import { deserializeMempoolId } from "params/lib"; import { ContextBytesType, DialOnlyProtocolDefinition, @@ -31,7 +30,5 @@ export const Status: MixedProtocolDefinitionGenerator = (( // Rationale: https://github.com/sigp/lighthouse/blob/bf533c8e42cc73c35730e285c21df8add0195369/beacon_node/lighthouse_network/src/rpc/mod.rs#L118-L130 byPeer: { quota: MAX_MEMPOOLS_PER_BUNDLER, quotaTimeMs: 15_000 }, }, - renderRequestBody: (req) => - req.map((mempool) => deserializeMempoolId(mempool)).join(", "), }; }) as MixedProtocolDefinitionGenerator; diff --git a/packages/node/src/reqresp/types.ts b/packages/node/src/reqresp/types.ts index 50c26932..b89319f8 100644 --- a/packages/node/src/reqresp/types.ts +++ b/packages/node/src/reqresp/types.ts @@ -80,6 +80,7 @@ export interface ProtocolDefinition responseType: () => TypeSerializer; ignoreResponse?: boolean; renderRequestBody?: (request: Req) => string; + renderResponseBody?: (response: Resp) => string; contextBytes: ContextBytesFactory; inboundRateLimits?: InboundRateLimitQuota; } diff --git a/packages/node/src/sync/interface.ts b/packages/node/src/sync/interface.ts index 3e77333d..24a754eb 100644 --- a/packages/node/src/sync/interface.ts +++ b/packages/node/src/sync/interface.ts @@ -1,5 +1,7 @@ import { ts } from "types/lib"; import { AllChainsMetrics } from "monitoring/lib"; +import { Executor } from "executor/lib/executor"; +import { Config } from "executor/lib/config"; import { INetwork } from "../network/interface"; export interface ISyncService { @@ -29,7 +31,8 @@ export enum PeerSyncState { export interface PeerState { syncState: PeerSyncState; - status: ts.Status; + status?: ts.Status; + metadata?: ts.Metadata; } // eslint-disable-next-line @typescript-eslint/ban-types @@ -38,4 +41,6 @@ export type SyncOptions = {}; export interface SyncModules { network: INetwork; metrics: AllChainsMetrics | null; + executor: Executor; + executorConfig: Config; } diff --git a/packages/node/src/sync/sync.ts b/packages/node/src/sync/sync.ts index ad5f8cf1..b0e92855 100644 --- a/packages/node/src/sync/sync.ts +++ b/packages/node/src/sync/sync.ts @@ -1,10 +1,12 @@ import logger from "api/lib/logger"; import { PeerId } from "@libp2p/interface-peer-id"; -import { ts, ssz } from "types/lib"; -import { deserializeMempoolId, mempoolsConfig } from "params/lib"; -import { toHexString } from "utils/lib"; +import { ts } from "types/lib"; +import { deserializeMempoolId, isMempoolIdEqual } from "params/lib"; import { deserializeUserOp, userOpHashToString } from "params/lib/utils/userOp"; import { AllChainsMetrics } from "monitoring/lib"; +import { Executor } from "executor/lib/executor"; +import { Config } from "executor/lib/config"; +import { numberToBytes32 } from "params/lib/utils/cursor"; import { INetwork } from "../network/interface"; import { NetworkEvent } from "../network/events"; import { PeerMap } from "../utils"; @@ -22,14 +24,22 @@ export class SyncService implements ISyncService { private readonly network: INetwork; private readonly metrics: AllChainsMetrics | null; + private readonly executor: Executor; + private readonly executorConfig: Config; constructor(modules: SyncModules) { this.state = SyncState.Stalled; this.network = modules.network; this.metrics = modules.metrics; + this.executor = modules.executor; + this.executorConfig = modules.executorConfig; this.network.events.on(NetworkEvent.peerConnected, this.addPeer); + this.network.events.on( + NetworkEvent.peerMetadataReceived, + this.addPeerMetadata + ); this.network.events.on(NetworkEvent.peerDisconnected, this.removePeer); } @@ -46,22 +56,46 @@ export class SyncService implements ISyncService { return this.state === SyncState.Synced; } - /** - * A peer has connected which has blocks that are unknown to us. - */ private addPeer = (peerId: PeerId, status: ts.Status): void => { - if (this.peers.get(peerId)) { + const peer = this.peers.get(peerId); + if (peer && peer.status != null) { + logger.debug(`Sync service: status already added: ${peerId.toString()}`); return; } this.peers.set(peerId, { status, + metadata: peer?.metadata, syncState: PeerSyncState.New, }); logger.debug(`Sync service: added peer: ${peerId.toString()}`); - this.startSyncing(); + if (peer?.metadata) { + this.startSyncing(); + } + }; + + private addPeerMetadata = (peerId: PeerId, metadata: ts.Metadata): void => { + const peer = this.peers.get(peerId); + if (peer && peer.metadata) { + logger.debug( + `Sync service: metadata already added: ${peerId.toString()}` + ); + return; + } + + this.peers.set(peerId, { + status: peer?.status, + metadata: metadata, + syncState: PeerSyncState.New, + }); + + logger.debug(`Sync service: metadata added: ${peerId.toString()}`); + + if (peer?.status) { + this.startSyncing(); + } }; /** @@ -84,47 +118,33 @@ export class SyncService implements ISyncService { private async requestBatches(): Promise { logger.debug("Sync service: requested batches"); - const peerIds = this.peers.keys(); - for (const peerId of peerIds) { + for (const [peerId, peer] of this.peers.entries()) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const peer = this.peers.get(peerId)!; - if (peer.syncState !== PeerSyncState.New) { + if (peer.syncState !== PeerSyncState.New || !peer.metadata) { continue; // Already synced; } peer.syncState = PeerSyncState.Syncing; try { - for (const mempool of peer.status) { - const executor = this.network.mempoolToExecutor.get( - toHexString(mempool) - ); - - if (!executor) { - logger.debug(`executor not found: ${peerId.toString()}`); - continue; - } - - const networkMempools = mempoolsConfig[executor.chainId]; - const mempoolStr = deserializeMempoolId(mempool); + for (const mempool of peer.metadata.supported_mempools) { + const canonicalMempool = this.executorConfig.getCanonicalMempool(); // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions - if (!networkMempools || !networkMempools[mempoolStr]) { - logger.debug(`mempool not supported: ${mempoolStr}`); + if (!isMempoolIdEqual(canonicalMempool.mempoolId, mempool)) { + logger.debug(`mempool not supported: ${deserializeMempoolId(mempool)}`); continue; } - const entryPoint = networkMempools[mempoolStr].entrypoint; const hashes: Uint8Array[] = []; - let offset = 0; + let cursor = numberToBytes32(0); // eslint-disable-next-line no-constant-condition while (true) { const response = await this.network.pooledUserOpHashes(peerId, { - mempool, - offset: BigInt(offset), + cursor, }); hashes.push(...response.hashes); - if (response.more_flag) { - offset += ssz.MAX_OPS_PER_REQUEST; + if (response.next_cursor) { + cursor = response.next_cursor; } break; } @@ -141,7 +161,7 @@ export class SyncService implements ISyncService { const missingHashes: Uint8Array[] = []; for (const hash of hashes) { - const exists = await executor.p2pService.userOpByHash( + const exists = await this.executor.p2pService.userOpByHash( userOpHashToString(hash) ); if (!exists) { @@ -161,13 +181,17 @@ export class SyncService implements ISyncService { try { for (const sszUserOp of sszUserOps) { const userOp = deserializeUserOp(sszUserOp); - await executor.eth.sendUserOperation({ - entryPoint: entryPoint, - userOp, - }); + try { + await this.executor.eth.sendUserOperation({ + entryPoint: canonicalMempool.entryPoint, + userOp, + }); + } catch (err) { + logger.error(err, `Could not save userop ${userOp.sender}, ${userOp.nonce}`); + } // if metrics are enabled if (this.metrics) { - this.metrics[executor.chainId].useropsReceived?.inc(); + this.metrics[this.executor.chainId].useropsReceived?.inc(); } } } catch (err) { diff --git a/packages/params/package.json b/packages/params/package.json index 518e21d7..85e31db4 100644 --- a/packages/params/package.json +++ b/packages/params/package.json @@ -1,6 +1,6 @@ { "name": "params", - "version": "1.0.49-alpha", + "version": "1.5.4", "description": "Various bundler parameters", "author": "Etherspot", "homepage": "https://github.com/etherspot/skandha#readme", @@ -26,17 +26,14 @@ "@eth-optimism/sdk": "3.2.3", "@mantleio/sdk": "0.2.1", "ethers": "5.7.2", - "types": "^1.0.49-alpha", - "utils": "^1.0.49-alpha" + "types": "^1.5.4", + "utils": "^1.5.4" }, "scripts": { "clean": "rm -rf lib && rm -f *.tsbuildinfo", "build": "tsc -p tsconfig.build.json", "lint": "eslint --color --ext .ts src/ test/", "lint:fix": "yarn run lint --fix", - "pretest": "yarn run check-types", - "test": "yarn test:unit", - "test:unit": "mocha 'test/unit/**/*.test.ts'", "check-readme": "typescript-docs-verifier" } } diff --git a/packages/params/src/index.ts b/packages/params/src/index.ts index 23a62ffe..a7f1d013 100644 --- a/packages/params/src/index.ts +++ b/packages/params/src/index.ts @@ -1,7 +1,6 @@ export * from "./bannedContracts"; export * from "./networks"; export * from "./utils"; -export * from "./mempools"; export * from "./eip1559"; export * from "./gas-estimation"; export * from "./constants"; diff --git a/packages/params/src/mempools/dev/Qmf7P3CuhzSbpJa8LqXPwRzfPqsvoQ6RG7aXvthYTzGxb2.ts b/packages/params/src/mempools/dev/Qmf7P3CuhzSbpJa8LqXPwRzfPqsvoQ6RG7aXvthYTzGxb2.ts deleted file mode 100644 index fc2c0201..00000000 --- a/packages/params/src/mempools/dev/Qmf7P3CuhzSbpJa8LqXPwRzfPqsvoQ6RG7aXvthYTzGxb2.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default { - entrypoint: "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", -}; diff --git a/packages/params/src/mempools/dev/index.ts b/packages/params/src/mempools/dev/index.ts deleted file mode 100644 index 704a775b..00000000 --- a/packages/params/src/mempools/dev/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Qmf7P3CuhzSbpJa8LqXPwRzfPqsvoQ6RG7aXvthYTzGxb2 from "./Qmf7P3CuhzSbpJa8LqXPwRzfPqsvoQ6RG7aXvthYTzGxb2"; - -export default { Qmf7P3CuhzSbpJa8LqXPwRzfPqsvoQ6RG7aXvthYTzGxb2 }; diff --git a/packages/params/src/mempools/goerli/QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF.ts b/packages/params/src/mempools/goerli/QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF.ts deleted file mode 100644 index fc2c0201..00000000 --- a/packages/params/src/mempools/goerli/QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default { - entrypoint: "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", -}; diff --git a/packages/params/src/mempools/goerli/index.ts b/packages/params/src/mempools/goerli/index.ts deleted file mode 100644 index 05b2611e..00000000 --- a/packages/params/src/mempools/goerli/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF from "./QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF"; - -export default { QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF }; diff --git a/packages/params/src/mempools/index.ts b/packages/params/src/mempools/index.ts deleted file mode 100644 index 07d283f4..00000000 --- a/packages/params/src/mempools/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IMempoolsConfig } from "../types"; -import mumbaiMempools from "./mumbai"; -import sepoliaMempools from "./sepolia"; -import devMempools from "./dev"; -import goerliMempools from "./goerli"; - -export const mempoolsConfig: IMempoolsConfig = { - 80001: mumbaiMempools, - 11155111: sepoliaMempools, - 1337: devMempools, - 5: goerliMempools, -}; diff --git a/packages/params/src/mempools/mumbai/QmcFZKUX9qoo3StwVycJTAhwdiqbEjcwNvQVK246p3z1rk.ts b/packages/params/src/mempools/mumbai/QmcFZKUX9qoo3StwVycJTAhwdiqbEjcwNvQVK246p3z1rk.ts deleted file mode 100644 index fc2c0201..00000000 --- a/packages/params/src/mempools/mumbai/QmcFZKUX9qoo3StwVycJTAhwdiqbEjcwNvQVK246p3z1rk.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default { - entrypoint: "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", -}; diff --git a/packages/params/src/mempools/mumbai/index.ts b/packages/params/src/mempools/mumbai/index.ts deleted file mode 100644 index a69eb438..00000000 --- a/packages/params/src/mempools/mumbai/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import QmcFZKUX9qoo3StwVycJTAhwdiqbEjcwNvQVK246p3z1rk from "./QmcFZKUX9qoo3StwVycJTAhwdiqbEjcwNvQVK246p3z1rk"; - -export default { QmcFZKUX9qoo3StwVycJTAhwdiqbEjcwNvQVK246p3z1rk }; diff --git a/packages/params/src/mempools/sepolia/QmPjLZLgwocemJMQ2wHyWF97vyJ8cgnfWjAMR7EV26Yeoj.ts b/packages/params/src/mempools/sepolia/QmPjLZLgwocemJMQ2wHyWF97vyJ8cgnfWjAMR7EV26Yeoj.ts deleted file mode 100644 index fc2c0201..00000000 --- a/packages/params/src/mempools/sepolia/QmPjLZLgwocemJMQ2wHyWF97vyJ8cgnfWjAMR7EV26Yeoj.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default { - entrypoint: "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", -}; diff --git a/packages/params/src/mempools/sepolia/index.ts b/packages/params/src/mempools/sepolia/index.ts deleted file mode 100644 index 1cf7daf0..00000000 --- a/packages/params/src/mempools/sepolia/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import QmPjLZLgwocemJMQ2wHyWF97vyJ8cgnfWjAMR7EV26Yeoj from "./QmPjLZLgwocemJMQ2wHyWF97vyJ8cgnfWjAMR7EV26Yeoj"; - -export default { QmPjLZLgwocemJMQ2wHyWF97vyJ8cgnfWjAMR7EV26Yeoj }; diff --git a/packages/params/src/networks/dev.ts b/packages/params/src/networks/dev.ts index dd51952a..09f2464f 100644 --- a/packages/params/src/networks/dev.ts +++ b/packages/params/src/networks/dev.ts @@ -3,10 +3,9 @@ import { serializeMempoolId } from "../utils"; import { INetworkParams } from "../types"; export const devNetworkConfig: INetworkParams = { - CONFIG_NAME: "dev", CHAIN_ID: 1337, ENTRY_POINT_CONTRACT: [b("0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789")], - MEMPOOL_IDS: [ - serializeMempoolId("Qmf7P3CuhzSbpJa8LqXPwRzfPqsvoQ6RG7aXvthYTzGxb2"), - ], + CANONICAL_MEMPOOL: serializeMempoolId( + "Qmf7P3CuhzSbpJa8LqXPwRzfPqsvoQ6RG7aXvthYTzGxb2" + ), }; diff --git a/packages/params/src/networks/goerli.ts b/packages/params/src/networks/goerli.ts index 43648236..94555e5a 100644 --- a/packages/params/src/networks/goerli.ts +++ b/packages/params/src/networks/goerli.ts @@ -3,10 +3,9 @@ import { INetworkParams } from "../types"; import { serializeMempoolId } from "../utils"; export const goerliNetworkConfig: INetworkParams = { - CONFIG_NAME: "goerli", CHAIN_ID: 5, ENTRY_POINT_CONTRACT: [b("0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789")], - MEMPOOL_IDS: [ - serializeMempoolId("QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF"), - ], + CANONICAL_MEMPOOL: serializeMempoolId( + "QmTmj4cizhWpEFCCqk5dP67yws7R2PPgCtb2bd2RgVPCbF" + ), }; diff --git a/packages/params/src/networks/mainnet.ts b/packages/params/src/networks/mainnet.ts index e54d14fa..d73f5254 100644 --- a/packages/params/src/networks/mainnet.ts +++ b/packages/params/src/networks/mainnet.ts @@ -2,8 +2,6 @@ import { fromHexString as b } from "@chainsafe/ssz"; import { INetworkParams } from "../types"; export const mainnetNetworkConfig: INetworkParams = { - CONFIG_NAME: "mainnet", CHAIN_ID: 1, ENTRY_POINT_CONTRACT: [b("0x0576a174D229E3cFA37253523E645A78A0C91B57")], - MEMPOOL_IDS: [b("")], }; diff --git a/packages/params/src/networks/matic.ts b/packages/params/src/networks/matic.ts index b0e23ed5..99b97b9d 100644 --- a/packages/params/src/networks/matic.ts +++ b/packages/params/src/networks/matic.ts @@ -2,8 +2,6 @@ import { fromHexString as b } from "@chainsafe/ssz"; import { INetworkParams } from "../types"; export const maticNetworkConfig: INetworkParams = { - CONFIG_NAME: "matic", CHAIN_ID: 137, ENTRY_POINT_CONTRACT: [b("0x0576a174D229E3cFA37253523E645A78A0C91B57")], - MEMPOOL_IDS: [b("")], }; diff --git a/packages/params/src/networks/mumbai.ts b/packages/params/src/networks/mumbai.ts index f7890ecf..8f4a63cc 100644 --- a/packages/params/src/networks/mumbai.ts +++ b/packages/params/src/networks/mumbai.ts @@ -3,10 +3,9 @@ import { serializeMempoolId } from "../utils"; import { INetworkParams } from "../types"; export const mumbaiNetworkConfig: INetworkParams = { - CONFIG_NAME: "mumbai", CHAIN_ID: 80001, ENTRY_POINT_CONTRACT: [b("0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789")], - MEMPOOL_IDS: [ - serializeMempoolId("QmcFZKUX9qoo3StwVycJTAhwdiqbEjcwNvQVK246p3z1rk"), - ], + CANONICAL_MEMPOOL: serializeMempoolId( + "QmcFZKUX9qoo3StwVycJTAhwdiqbEjcwNvQVK246p3z1rk" + ), }; diff --git a/packages/params/src/networks/sepolia.ts b/packages/params/src/networks/sepolia.ts index d507b36c..e4f8fd84 100644 --- a/packages/params/src/networks/sepolia.ts +++ b/packages/params/src/networks/sepolia.ts @@ -3,10 +3,9 @@ import { serializeMempoolId } from "../utils"; import { INetworkParams } from "../types"; export const sepoliaNetworkConfig: INetworkParams = { - CONFIG_NAME: "sepolia", CHAIN_ID: 11155111, ENTRY_POINT_CONTRACT: [b("0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789")], - MEMPOOL_IDS: [ - serializeMempoolId("QmPjLZLgwocemJMQ2wHyWF97vyJ8cgnfWjAMR7EV26Yeoj"), - ], + CANONICAL_MEMPOOL: serializeMempoolId( + "QmPjLZLgwocemJMQ2wHyWF97vyJ8cgnfWjAMR7EV26Yeoj" + ), }; diff --git a/packages/params/src/networks/xdai.ts b/packages/params/src/networks/xdai.ts index c85227f3..a4392308 100644 --- a/packages/params/src/networks/xdai.ts +++ b/packages/params/src/networks/xdai.ts @@ -2,8 +2,6 @@ import { fromHexString as b } from "@chainsafe/ssz"; import { INetworkParams } from "../types"; export const xdaiNetworkConfig: INetworkParams = { - CONFIG_NAME: "xdai", CHAIN_ID: 100, ENTRY_POINT_CONTRACT: [b("0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789")], - MEMPOOL_IDS: [b("")], }; diff --git a/packages/params/src/types/index.ts b/packages/params/src/types/index.ts index 1741c899..3a146087 100644 --- a/packages/params/src/types/index.ts +++ b/packages/params/src/types/index.ts @@ -1,16 +1,11 @@ -import { NetworkName } from "types/lib"; - export type INetworkParams = { - CONFIG_NAME: NetworkName; - // chainId CHAIN_ID: number; // entrypoint contract address ENTRY_POINT_CONTRACT: Uint8Array[]; - // mempool ids - MEMPOOL_IDS: Uint8Array[]; + CANONICAL_MEMPOOL?: Uint8Array; }; export type IMempoolParams = { diff --git a/packages/params/src/utils/cursor.ts b/packages/params/src/utils/cursor.ts new file mode 100644 index 00000000..fc636d71 --- /dev/null +++ b/packages/params/src/utils/cursor.ts @@ -0,0 +1,11 @@ +import * as ts from "types/lib/primitive/types"; +import * as ssz from "types/lib/primitive/sszTypes"; +import { ethers } from "ethers"; + +export function bytes32ToNumber(bytes: ts.Bytes32): number { + return ethers.BigNumber.from(ssz.Bytes32.toJson(bytes)).toNumber() +} + +export function numberToBytes32(number: number): ts.Bytes32 { + return ssz.Bytes32.fromJson((number).toString(16).padStart(64, '0')); +} diff --git a/packages/params/src/utils/mempool.ts b/packages/params/src/utils/mempool.ts index c7924ed6..d2b42cf1 100644 --- a/packages/params/src/utils/mempool.ts +++ b/packages/params/src/utils/mempool.ts @@ -2,11 +2,26 @@ import { MempoolId } from "types/lib/sszTypes"; import { utils } from "ethers"; export function serializeMempoolId(mempoolId: string): Uint8Array { - const hex = utils.hexlify(utils.toUtf8Bytes(mempoolId)); - return MempoolId.fromJson(hex); + const id = utils.toUtf8Bytes(mempoolId); + const serialized = MempoolId.defaultValue(); + serialized.set(id); + return serialized; } export function deserializeMempoolId(byteArray: Uint8Array): string { - const json = MempoolId.toJson(byteArray) as string; - return utils.toUtf8String(json); + return utils.toUtf8String(byteArray); +} + +export function isMempoolIdEqual(a: Uint8Array | string, b: Uint8Array | string): boolean { + if (typeof a == 'string') { + a = serializeMempoolId(a); + } + if (typeof b == 'string') { + b = serializeMempoolId(b); + } + if (a.length != b.length) return false; + for (let i = 0; i < a.length; ++i) { + if (a[i] != b[i]) return false; + } + return true; } diff --git a/packages/params/src/utils/userOp.ts b/packages/params/src/utils/userOp.ts index 5a676f8a..349f6821 100644 --- a/packages/params/src/utils/userOp.ts +++ b/packages/params/src/utils/userOp.ts @@ -10,7 +10,7 @@ const bigintToBigNumber = (bn: bigint): BigNumberish => { }; const bigNumberishToBigint = (bn: BigNumberish): bigint => { - return UintBn256.fromJson(BigNumber.from(bn).toNumber()); + return UintBn256.fromJson(BigNumber.from(bn).toBigInt()); }; export const userOpHashToBytes = (hash: string): ts.Bytes32 => { @@ -26,35 +26,29 @@ export const deserializeUserOp = (userOp: ts.UserOp) => { const dUserOp = { sender: getAddress(toHex(userOp.sender)), nonce: bigintToBigNumber(userOp.nonce), - initCode: toHex(userOp.initCode), - callData: toHex(userOp.callData), - callGasLimit: bigintToBigNumber(userOp.callGasLimit), - verificationGasLimit: bigintToBigNumber(userOp.verificationGasLimit), - preVerificationGas: bigintToBigNumber(userOp.preVerificationGas), - maxFeePerGas: bigintToBigNumber(userOp.maxFeePerGas), - maxPriorityFeePerGas: bigintToBigNumber(userOp.maxPriorityFeePerGas), - paymasterAndData: toHex(userOp.paymasterAndData), + initCode: toHex(userOp.init_code), + callData: toHex(userOp.call_data), + callGasLimit: bigintToBigNumber(userOp.call_gas_limit), + verificationGasLimit: bigintToBigNumber(userOp.verification_gas_limit), + preVerificationGas: bigintToBigNumber(userOp.pre_verification_gas), + maxFeePerGas: bigintToBigNumber(userOp.max_fee_per_gas), + maxPriorityFeePerGas: bigintToBigNumber(userOp.max_priority_fee_per_gas), + paymasterAndData: toHex(userOp.paymaster_and_data), signature: toHex(userOp.signature), }; return dUserOp; }; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type -export const deserializeUserOpsWithEP = ( - userOpsWithEP: ts.UserOpsWithEntryPoint +export const deserializeVerifiedUserOperation = ( + verifiedUserOp: ts.VerifiedUserOperation ) => { - const du = ssz.UserOpsWithEntryPoint.toViewDU(userOpsWithEP); - const dEntryPoint = toHex(du.entry_point_contract); - const dChainId = Number(UintBn256.toJson(du.chain_id)); - const dUserOps = []; - for (let i = 0; i < du.user_operations.length; ++i) { - const userOp = du.user_operations.get(i); - dUserOps.push(deserializeUserOp(userOp)); - } + const du = ssz.VerifiedUserOperation.toViewDU(verifiedUserOp); + const dEntryPoint = toHex(du.entry_point); + const dUserOp = deserializeUserOp(du.user_operation); return { entryPoint: dEntryPoint, - chainId: dChainId, - userOps: dUserOps, + userOp: dUserOp, }; }; @@ -62,28 +56,26 @@ export const serializeUserOp = (userOp: UserOperationStruct): ts.UserOp => { return { sender: fromHex(getAddress(userOp.sender)), nonce: bigNumberishToBigint(userOp.nonce), - initCode: fromHex(userOp.initCode.toString()), - callData: fromHex(userOp.callData.toString()), - callGasLimit: bigNumberishToBigint(userOp.callGasLimit), - verificationGasLimit: bigNumberishToBigint(userOp.verificationGasLimit), - preVerificationGas: bigNumberishToBigint(userOp.preVerificationGas), - maxFeePerGas: bigNumberishToBigint(userOp.maxFeePerGas), - maxPriorityFeePerGas: bigNumberishToBigint(userOp.maxPriorityFeePerGas), - paymasterAndData: fromHex(userOp.paymasterAndData.toString()), + init_code: fromHex(userOp.initCode.toString()), + call_data: fromHex(userOp.callData.toString()), + call_gas_limit: bigNumberishToBigint(userOp.callGasLimit), + verification_gas_limit: bigNumberishToBigint(userOp.verificationGasLimit), + pre_verification_gas: bigNumberishToBigint(userOp.preVerificationGas), + max_fee_per_gas: bigNumberishToBigint(userOp.maxFeePerGas), + max_priority_fee_per_gas: bigNumberishToBigint(userOp.maxPriorityFeePerGas), + paymaster_and_data: fromHex(userOp.paymasterAndData.toString()), signature: fromHex(userOp.signature.toString()), }; }; -export const toUserOpsWithEP = ( +export const toVerifiedUserOperation = ( entryPoint: string, - chainId: number, - userOps: UserOperationStruct[], + userOp: UserOperationStruct, blockHash: string -): ts.UserOpsWithEntryPoint => { +): ts.VerifiedUserOperation => { return { - entry_point_contract: fromHex(getAddress(entryPoint)), - chain_id: bigNumberishToBigint(chainId), - user_operations: userOps.map((userOp) => serializeUserOp(userOp)), + entry_point: fromHex(getAddress(entryPoint)), + user_operation: serializeUserOp(userOp), verified_at_block_hash: bigNumberishToBigint(blockHash), }; }; diff --git a/packages/types/package.json b/packages/types/package.json index 2adf32ab..dc6c97d0 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "types", - "version": "1.0.49-alpha", + "version": "1.5.4", "description": "The types of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -25,9 +25,6 @@ "build": "tsc -p tsconfig.build.json", "lint": "eslint --color --ext .ts src/ test/", "lint:fix": "yarn run lint --fix", - "pretest": "yarn run check-types", - "test": "yarn test:unit", - "test:unit": "mocha 'test/unit/**/*.test.ts'", "check-readme": "typescript-docs-verifier" }, "dependencies": { diff --git a/packages/types/src/api/interfaces.ts b/packages/types/src/api/interfaces.ts index cb2e437b..4ef3752d 100644 --- a/packages/types/src/api/interfaces.ts +++ b/packages/types/src/api/interfaces.ts @@ -57,9 +57,9 @@ export type GetConfigResponse = { minInclusionDenominator: number; throttlingSlack: number; banSlack: number; - minStake: BigNumberish | undefined; minUnstakeDelay: number; minSignerBalance: string; + minStake: string; multicall: string; validationGasLimit: number; receiptLookupRange: number; @@ -77,10 +77,15 @@ export type GetConfigResponse = { bundleInterval: number; bundleSize: number; pvgMarkup: number; + canonicalMempoolId: string; + canonicalEntryPoint: string; cglMarkup: number; vglMarkup: number; skipBundleValidation: boolean; entryPointForwarder: string; + gasFeeInSimulation: boolean; + userOpGasLimit: number; + bundleGasLimit: number; }; export type SupportedEntryPoints = string[]; diff --git a/packages/types/src/executor/contracts/SimpleAccount.ts b/packages/types/src/executor/contracts/SimpleAccount.ts new file mode 100644 index 00000000..d71bcbb5 --- /dev/null +++ b/packages/types/src/executor/contracts/SimpleAccount.ts @@ -0,0 +1,877 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "./common"; + +export type UserOperationStruct = { + sender: string; + nonce: BigNumberish; + initCode: BytesLike; + callData: BytesLike; + callGasLimit: BigNumberish; + verificationGasLimit: BigNumberish; + preVerificationGas: BigNumberish; + maxFeePerGas: BigNumberish; + maxPriorityFeePerGas: BigNumberish; + paymasterAndData: BytesLike; + signature: BytesLike; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface SimpleAccountInterface extends utils.Interface { + functions: { + "addDeposit()": FunctionFragment; + "entryPoint()": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; + "executeBatch(address[],bytes[])": FunctionFragment; + "getDeposit()": FunctionFragment; + "getNonce()": FunctionFragment; + "initialize(address)": FunctionFragment; + "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": FunctionFragment; + "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; + "onERC721Received(address,address,uint256,bytes)": FunctionFragment; + "owner()": FunctionFragment; + "proxiableUUID()": FunctionFragment; + "supportsInterface(bytes4)": FunctionFragment; + "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; + "upgradeTo(address)": FunctionFragment; + "upgradeToAndCall(address,bytes)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "addDeposit" + | "entryPoint" + | "execute" + | "executeBatch" + | "getDeposit" + | "getNonce" + | "initialize" + | "onERC1155BatchReceived" + | "onERC1155Received" + | "onERC721Received" + | "owner" + | "proxiableUUID" + | "supportsInterface" + | "tokensReceived" + | "upgradeTo" + | "upgradeToAndCall" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ + string, + BigNumberish, + BytesLike + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch", + values: [string[], BytesLike[]] + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "getNonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "initialize", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "onERC1155BatchReceived", + values: [ + string, + string, + BigNumberish[], + BigNumberish[], + BytesLike + ] + ): string; + encodeFunctionData( + functionFragment: "onERC1155Received", + values: [ + string, + string, + BigNumberish, + BigNumberish, + BytesLike + ] + ): string; + encodeFunctionData( + functionFragment: "onERC721Received", + values: [ + string, + string, + BigNumberish, + BytesLike + ] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "proxiableUUID", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "tokensReceived", + values: [ + string, + string, + string, + BigNumberish, + BytesLike, + BytesLike + ] + ): string; + encodeFunctionData( + functionFragment: "upgradeTo", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "upgradeToAndCall", + values: [string, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + BytesLike, + BigNumberish + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [string, BigNumberish] + ): string; + + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeBatch", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "onERC1155BatchReceived", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC1155Received", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "onERC721Received", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "proxiableUUID", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "tokensReceived", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "upgradeToAndCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "AdminChanged(address,address)": EventFragment; + "BeaconUpgraded(address)": EventFragment; + "Initialized(uint8)": EventFragment; + "SimpleAccountInitialized(address,address)": EventFragment; + "Upgraded(address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeaconUpgraded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SimpleAccountInitialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; +} + +export interface AdminChangedEventObject { + previousAdmin: string; + newAdmin: string; +} +export type AdminChangedEvent = TypedEvent< + [string, string], + AdminChangedEventObject +>; + +export type AdminChangedEventFilter = TypedEventFilter; + +export interface BeaconUpgradedEventObject { + beacon: string; +} +export type BeaconUpgradedEvent = TypedEvent< + [string], + BeaconUpgradedEventObject +>; + +export type BeaconUpgradedEventFilter = TypedEventFilter; + +export interface InitializedEventObject { + version: number; +} +export type InitializedEvent = TypedEvent<[number], InitializedEventObject>; + +export type InitializedEventFilter = TypedEventFilter; + +export interface SimpleAccountInitializedEventObject { + entryPoint: string; + owner: string; +} +export type SimpleAccountInitializedEvent = TypedEvent< + [string, string], + SimpleAccountInitializedEventObject +>; + +export type SimpleAccountInitializedEventFilter = + TypedEventFilter; + +export interface UpgradedEventObject { + implementation: string; +} +export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>; + +export type UpgradedEventFilter = TypedEventFilter; + +export interface SimpleAccount extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: SimpleAccountInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addDeposit( + overrides?: PayableOverrides & { from?: string } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execute( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string } + ): Promise; + + executeBatch( + dest: string[], + func: BytesLike[], + overrides?: Overrides & { from?: string } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + getNonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + initialize( + anOwner: string, + overrides?: Overrides & { from?: string } + ): Promise; + + onERC1155BatchReceived( + arg0: string, + arg1: string, + arg2: BigNumberish[], + arg3: BigNumberish[], + arg4: BytesLike, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC1155Received( + arg0: string, + arg1: string, + arg2: BigNumberish, + arg3: BigNumberish, + arg4: BytesLike, + overrides?: CallOverrides + ): Promise<[string]>; + + onERC721Received( + arg0: string, + arg1: string, + arg2: BigNumberish, + arg3: BytesLike, + overrides?: CallOverrides + ): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + proxiableUUID(overrides?: CallOverrides): Promise<[string]>; + + supportsInterface( + interfaceId: BytesLike, + overrides?: CallOverrides + ): Promise<[boolean]>; + + tokensReceived( + arg0: string, + arg1: string, + arg2: string, + arg3: BigNumberish, + arg4: BytesLike, + arg5: BytesLike, + overrides?: CallOverrides + ): Promise<[void]>; + + upgradeTo( + newImplementation: string, + overrides?: Overrides & { from?: string } + ): Promise; + + upgradeToAndCall( + newImplementation: string, + data: BytesLike, + overrides?: PayableOverrides & { from?: string } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: BytesLike, + missingAccountFunds: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + + withdrawDepositTo( + withdrawAddress: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + }; + + addDeposit( + overrides?: PayableOverrides & { from?: string } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string } + ): Promise; + + executeBatch( + dest: string[], + func: BytesLike[], + overrides?: Overrides & { from?: string } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getNonce(overrides?: CallOverrides): Promise; + + initialize( + anOwner: string, + overrides?: Overrides & { from?: string } + ): Promise; + + onERC1155BatchReceived( + arg0: string, + arg1: string, + arg2: BigNumberish[], + arg3: BigNumberish[], + arg4: BytesLike, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: string, + arg1: string, + arg2: BigNumberish, + arg3: BigNumberish, + arg4: BytesLike, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: string, + arg1: string, + arg2: BigNumberish, + arg3: BytesLike, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + supportsInterface( + interfaceId: BytesLike, + overrides?: CallOverrides + ): Promise; + + tokensReceived( + arg0: string, + arg1: string, + arg2: string, + arg3: BigNumberish, + arg4: BytesLike, + arg5: BytesLike, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: string, + overrides?: Overrides & { from?: string } + ): Promise; + + upgradeToAndCall( + newImplementation: string, + data: BytesLike, + overrides?: PayableOverrides & { from?: string } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: BytesLike, + missingAccountFunds: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + + withdrawDepositTo( + withdrawAddress: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + + callStatic: { + addDeposit(overrides?: CallOverrides): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: CallOverrides + ): Promise; + + executeBatch( + dest: string[], + func: BytesLike[], + overrides?: CallOverrides + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getNonce(overrides?: CallOverrides): Promise; + + initialize( + anOwner: string, + overrides?: CallOverrides + ): Promise; + + onERC1155BatchReceived( + arg0: string, + arg1: string, + arg2: BigNumberish[], + arg3: BigNumberish[], + arg4: BytesLike, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: string, + arg1: string, + arg2: BigNumberish, + arg3: BigNumberish, + arg4: BytesLike, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: string, + arg1: string, + arg2: BigNumberish, + arg3: BytesLike, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + supportsInterface( + interfaceId: BytesLike, + overrides?: CallOverrides + ): Promise; + + tokensReceived( + arg0: string, + arg1: string, + arg2: string, + arg3: BigNumberish, + arg4: BytesLike, + arg5: BytesLike, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: string, + overrides?: CallOverrides + ): Promise; + + upgradeToAndCall( + newImplementation: string, + data: BytesLike, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: BytesLike, + missingAccountFunds: BigNumberish, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: string, + amount: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AdminChanged(address,address)"( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + AdminChanged( + previousAdmin?: null, + newAdmin?: null + ): AdminChangedEventFilter; + + "BeaconUpgraded(address)"( + beacon?: string | null + ): BeaconUpgradedEventFilter; + BeaconUpgraded( + beacon?: string | null + ): BeaconUpgradedEventFilter; + + "Initialized(uint8)"(version?: null): InitializedEventFilter; + Initialized(version?: null): InitializedEventFilter; + + "SimpleAccountInitialized(address,address)"( + entryPoint?: string | null, + owner?: string | null + ): SimpleAccountInitializedEventFilter; + SimpleAccountInitialized( + entryPoint?: string | null, + owner?: string | null + ): SimpleAccountInitializedEventFilter; + + "Upgraded(address)"( + implementation?: string | null + ): UpgradedEventFilter; + Upgraded( + implementation?: string | null + ): UpgradedEventFilter; + }; + + estimateGas: { + addDeposit( + overrides?: PayableOverrides & { from?: string } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string } + ): Promise; + + executeBatch( + dest: string[], + func: BytesLike[], + overrides?: Overrides & { from?: string } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getNonce(overrides?: CallOverrides): Promise; + + initialize( + anOwner: string, + overrides?: Overrides & { from?: string } + ): Promise; + + onERC1155BatchReceived( + arg0: string, + arg1: string, + arg2: BigNumberish[], + arg3: BigNumberish[], + arg4: BytesLike, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: string, + arg1: string, + arg2: BigNumberish, + arg3: BigNumberish, + arg4: BytesLike, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: string, + arg1: string, + arg2: BigNumberish, + arg3: BytesLike, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + supportsInterface( + interfaceId: BytesLike, + overrides?: CallOverrides + ): Promise; + + tokensReceived( + arg0: string, + arg1: string, + arg2: string, + arg3: BigNumberish, + arg4: BytesLike, + arg5: BytesLike, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: string, + overrides?: Overrides & { from?: string } + ): Promise; + + upgradeToAndCall( + newImplementation: string, + data: BytesLike, + overrides?: PayableOverrides & { from?: string } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: BytesLike, + missingAccountFunds: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + + withdrawDepositTo( + withdrawAddress: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + }; + + populateTransaction: { + addDeposit( + overrides?: PayableOverrides & { from?: string } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execute( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string } + ): Promise; + + executeBatch( + dest: string[], + func: BytesLike[], + overrides?: Overrides & { from?: string } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getNonce(overrides?: CallOverrides): Promise; + + initialize( + anOwner: string, + overrides?: Overrides & { from?: string } + ): Promise; + + onERC1155BatchReceived( + arg0: string, + arg1: string, + arg2: BigNumberish[], + arg3: BigNumberish[], + arg4: BytesLike, + overrides?: CallOverrides + ): Promise; + + onERC1155Received( + arg0: string, + arg1: string, + arg2: BigNumberish, + arg3: BigNumberish, + arg4: BytesLike, + overrides?: CallOverrides + ): Promise; + + onERC721Received( + arg0: string, + arg1: string, + arg2: BigNumberish, + arg3: BytesLike, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + proxiableUUID(overrides?: CallOverrides): Promise; + + supportsInterface( + interfaceId: BytesLike, + overrides?: CallOverrides + ): Promise; + + tokensReceived( + arg0: string, + arg1: string, + arg2: string, + arg3: BigNumberish, + arg4: BytesLike, + arg5: BytesLike, + overrides?: CallOverrides + ): Promise; + + upgradeTo( + newImplementation: string, + overrides?: Overrides & { from?: string } + ): Promise; + + upgradeToAndCall( + newImplementation: string, + data: BytesLike, + overrides?: PayableOverrides & { from?: string } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: BytesLike, + missingAccountFunds: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + + withdrawDepositTo( + withdrawAddress: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + }; +} diff --git a/packages/types/src/executor/contracts/SimpleAccountFactory.ts b/packages/types/src/executor/contracts/SimpleAccountFactory.ts new file mode 100644 index 00000000..7783cadd --- /dev/null +++ b/packages/types/src/executor/contracts/SimpleAccountFactory.ts @@ -0,0 +1,172 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent +} from "./common"; + +export interface SimpleAccountFactoryInterface extends utils.Interface { + functions: { + "accountImplementation()": FunctionFragment; + "createAccount(address,uint256)": FunctionFragment; + "getAddress(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "accountImplementation" + | "createAccount" + | "getAddress" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "accountImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "createAccount", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "getAddress", + values: [string, BigNumberish] + ): string; + + decodeFunctionResult( + functionFragment: "accountImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "createAccount", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result; + + events: {}; +} + +export interface SimpleAccountFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: SimpleAccountFactoryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + accountImplementation(overrides?: CallOverrides): Promise<[string]>; + + createAccount( + owner: string, + salt: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + + getAddress( + owner: string, + salt: BigNumberish, + overrides?: CallOverrides + ): Promise<[string]>; + }; + + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + owner: string, + salt: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + + getAddress( + owner: string, + salt: BigNumberish, + overrides?: CallOverrides + ): Promise; + + callStatic: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + owner: string, + salt: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getAddress( + owner: string, + salt: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + accountImplementation(overrides?: CallOverrides): Promise; + + createAccount( + owner: string, + salt: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + + getAddress( + owner: string, + salt: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + accountImplementation( + overrides?: CallOverrides + ): Promise; + + createAccount( + owner: string, + salt: BigNumberish, + overrides?: Overrides & { from?: string } + ): Promise; + + getAddress( + owner: string, + salt: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/packages/types/src/executor/contracts/factories/EntryPoint__factory.ts b/packages/types/src/executor/contracts/factories/EntryPoint__factory.ts index e9597bec..34f2867a 100644 --- a/packages/types/src/executor/contracts/factories/EntryPoint__factory.ts +++ b/packages/types/src/executor/contracts/factories/EntryPoint__factory.ts @@ -2,8 +2,8 @@ /* tslint:disable */ /* eslint-disable */ -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; +import { Contract, ContractFactory, Overrides, Signer, utils } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; import type { IEntryPoint, IEntryPointInterface, @@ -119,7 +119,7 @@ const _abi = [ type: "bytes", }, ], - internalType: "struct IEntryPoint.ReturnInfo", + internalType: "struct IIEntryPoint.ReturnInfo", name: "returnInfo", type: "tuple", }, @@ -213,7 +213,7 @@ const _abi = [ type: "bytes", }, ], - internalType: "struct IEntryPoint.ReturnInfo", + internalType: "struct IIEntryPoint.ReturnInfo", name: "returnInfo", type: "tuple", }, @@ -293,7 +293,7 @@ const _abi = [ type: "tuple", }, ], - internalType: "struct IEntryPoint.AggregatorStakeInfo", + internalType: "struct IIEntryPoint.AggregatorStakeInfo", name: "aggregatorInfo", type: "tuple", }, @@ -544,11 +544,47 @@ const _abi = [ name: "Withdrawn", type: "event", }, + { + inputs: [], + name: "SIG_VALIDATION_FAILED", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + ], + name: "_validateSenderAndPaymaster", + outputs: [], + stateMutability: "view", + type: "function", + }, { inputs: [ { internalType: "uint32", - name: "_unstakeDelaySec", + name: "unstakeDelaySec", type: "uint32", }, ], @@ -589,6 +625,45 @@ const _abi = [ stateMutability: "payable", type: "function", }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "deposits", + outputs: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112", + }, + { + internalType: "bool", + name: "staked", + type: "bool", + }, + { + internalType: "uint112", + name: "stake", + type: "uint112", + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + { + internalType: "uint48", + name: "withdrawTime", + type: "uint48", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -825,7 +900,7 @@ const _abi = [ type: "bytes", }, ], - internalType: "struct IEntryPoint.UserOpsPerAggregator[]", + internalType: "struct IIEntryPoint.UserOpsPerAggregator[]", name: "opsPerAggregator", type: "tuple[]", }, @@ -928,6 +1003,128 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + components: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "address", + name: "paymaster", + type: "address", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + ], + internalType: "struct IEntryPoint.MemoryUserOp", + name: "mUserOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "uint256", + name: "contextOffset", + type: "uint256", + }, + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + ], + internalType: "struct IEntryPoint.UserOpInfo", + name: "opInfo", + type: "tuple", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + ], + name: "innerHandleOp", + outputs: [ + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint192", + name: "", + type: "uint192", + }, + ], + name: "nonceSequenceNumber", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -1116,9 +1313,50 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + stateMutability: "payable", + type: "receive", + }, ] as const; -export class IEntryPoint__factory { +const _bytecode = + "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033"; + +type IEntryPointConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: IEntryPointConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class IEntryPoint__factory extends ContractFactory { + constructor(...args: IEntryPointConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: string } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: string } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): IEntryPoint { + return super.attach(address) as IEntryPoint; + } + override connect(signer: Signer): IEntryPoint__factory { + return super.connect(signer) as IEntryPoint__factory; + } + + static readonly bytecode = _bytecode; static readonly abi = _abi; static createInterface(): IEntryPointInterface { return new utils.Interface(_abi) as IEntryPointInterface; diff --git a/packages/types/src/executor/contracts/factories/SimpleAccountFactory__factory.ts b/packages/types/src/executor/contracts/factories/SimpleAccountFactory__factory.ts new file mode 100644 index 00000000..e14c7fa1 --- /dev/null +++ b/packages/types/src/executor/contracts/factories/SimpleAccountFactory__factory.ts @@ -0,0 +1,143 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + SimpleAccountFactory, + SimpleAccountFactoryInterface, +} from "../SimpleAccountFactory"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "_entryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "accountImplementation", + outputs: [ + { + internalType: "contract SimpleAccount", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "createAccount", + outputs: [ + { + internalType: "contract SimpleAccount", + name: "ret", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "uint256", + name: "salt", + type: "uint256", + }, + ], + name: "getAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60a060405234801561001057600080fd5b5060405161336238038061336283398101604081905261002f91610088565b8060405161003c9061007b565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b0316608052506100b8565b6125dc80610d8683390190565b60006020828403121561009a57600080fd5b81516001600160a01b03811681146100b157600080fd5b9392505050565b608051610ca66100e060003960008181604b0152818161011401526102580152610ca66000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806311464fbe146100465780635fbfb9cf146100965780638cb84e18146100a9575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006d6100a436600461039d565b6100bc565b61006d6100b736600461039d565b6101ee565b6000806100c984846101ee565b905073ffffffffffffffffffffffffffffffffffffffff81163b80156100f1575090506101e8565b60405173ffffffffffffffffffffffffffffffffffffffff8616602482015284907f000000000000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052516101b790610390565b6101c2929190610412565b8190604051809103906000f59050801580156101e2573d6000803e3d6000fd5b50925050505b92915050565b60006103578260001b6040518060200161020790610390565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081905273ffffffffffffffffffffffffffffffffffffffff871660248201527f000000000000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052905161030093929101610412565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261033c9291602001610480565b6040516020818303038152906040528051906020012061035e565b9392505050565b60006103578383306000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6107c1806104b083390190565b600080604083850312156103b057600080fd5b823573ffffffffffffffffffffffffffffffffffffffff811681146103d457600080fd5b946020939093013593505050565b60005b838110156103fd5781810151838201526020016103e5565b8381111561040c576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000825180604084015261044d8160608501602087016103e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b600083516104928184602088016103e2565b8351908301906104a68183602088016103e2565b0194935050505056fe60806040526040516107c13803806107c183398101604081905261002291610321565b61002e82826000610035565b505061043e565b61003e8361006b565b60008251118061004b5750805b156100665761006483836100ab60201b6100291760201c565b505b505050565b610074816100d7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100d0838360405180606001604052806027815260200161079a602791396101a9565b9392505050565b6100ea8161022260201b6100551760201c565b6101515760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61023160201b6100711760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101c691906103ef565b600060405180830381855af49150503d8060008114610201576040519150601f19603f3d011682016040523d82523d6000602084013e610206565b606091505b50909250905061021886838387610234565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102a357825160000361029c576001600160a01b0385163b61029c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610148565b50816102ad565b6102ad83836102b5565b949350505050565b8151156102c55781518083602001fd5b8060405162461bcd60e51b8152600401610148919061040b565b634e487b7160e01b600052604160045260246000fd5b60005b838110156103105781810151838201526020016102f8565b838111156100645750506000910152565b6000806040838503121561033457600080fd5b82516001600160a01b038116811461034b57600080fd5b60208401519092506001600160401b038082111561036857600080fd5b818501915085601f83011261037c57600080fd5b81518181111561038e5761038e6102df565b604051601f8201601f19908116603f011681019083821181831017156103b6576103b66102df565b816040528281528860208487010111156103cf57600080fd5b6103e08360208301602088016102f5565b80955050505050509250929050565b600082516104018184602087016102f5565b9190910192915050565b602081526000825180602084015261042a8160408501602087016102f5565b601f01601f19169190910160400192915050565b61034d8061044d6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102f1602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516101079190610283565b600060405180830381855af49150503d8060008114610142576040519150601f19603f3d011682016040523d82523d6000602084013e610147565b606091505b509150915061015886838387610162565b9695505050505050565b606083156101fd5782516000036101f65773ffffffffffffffffffffffffffffffffffffffff85163b6101f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610207565b610207838361020f565b949350505050565b81511561021f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed919061029f565b60005b8381101561026e578181015183820152602001610256565b8381111561027d576000848401525b50505050565b60008251610295818460208701610253565b9190910192915050565b60208152600082518060208401526102be816040850160208701610253565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201cd78ab6a31213989661cff2d7d05fc9b9c38b1a848e8249e2e398659a9eb7e364736f6c634300080f0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204d692c21abb4dc44c69a99ba9a402ca10b5592fe841621d33e6979cb6761fb6464736f6c634300080f003360c0604052306080523480156200001557600080fd5b50604051620025dc380380620025dc833981016040819052620000389162000118565b6001600160a01b03811660a0526200004f62000056565b506200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a05161241f620001bd6000396000818161032f015281816108810152818161092801528181610d4c01528181610f9d01528181610fe40152818161133601526115f501526000818161066b0152818161071b015281816109ec01528181610a9c0152610be5015261241f6000f3fe60806040526004361061012c5760003560e01c806352d1902d116100a5578063bc197c8111610074578063c4d66de811610059578063c4d66de8146103d0578063d087d288146103f0578063f23a6e611461040557600080fd5b8063bc197c8114610373578063c399ec88146103bb57600080fd5b806352d1902d146102b35780638da5cb5b146102c8578063b0d691fe14610320578063b61d27f61461035357600080fd5b80633659cfe6116100fc5780634a58db19116100e15780634a58db19146102785780634d44560d146102805780634f1ef286146102a057600080fd5b80633659cfe61461022a5780633a871cdd1461024a57600080fd5b806223de291461013857806301ffc9a71461015f578063150b7a021461019457806318dfb3c71461020a57600080fd5b3661013357005b600080fd5b34801561014457600080fd5b5061015d610153366004611cbf565b5050505050505050565b005b34801561016b57600080fd5b5061017f61017a366004611d70565b61044b565b60405190151581526020015b60405180910390f35b3480156101a057600080fd5b506101d96101af366004611db2565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161018b565b34801561021657600080fd5b5061015d610225366004611e6a565b610530565b34801561023657600080fd5b5061015d610245366004611ed6565b610654565b34801561025657600080fd5b5061026a610265366004611ef3565b610859565b60405190815260200161018b565b61015d61087f565b34801561028c57600080fd5b5061015d61029b366004611f47565b61091e565b61015d6102ae366004611fa2565b6109d5565b3480156102bf57600080fd5b5061026a610bcb565b3480156102d457600080fd5b506000546102fb9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018b565b34801561032c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102fb565b34801561035f57600080fd5b5061015d61036e366004612084565b610cb7565b34801561037f57600080fd5b506101d961038e3660046120d4565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b3480156103c757600080fd5b5061026a610d06565b3480156103dc57600080fd5b5061015d6103eb366004611ed6565b610dbd565b3480156103fc57600080fd5b5061026a610f50565b34801561041157600080fd5b506101d9610420366004612172565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a020000000000000000000000000000000000000000000000000000000014806104de57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061052a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b610538610fcc565b8281146105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206172726179206c656e677468730000000000000000000000000060448201526064015b60405180910390fd5b60005b8381101561064d5761063b8585838181106105c6576105c66121ee565b90506020020160208101906105db9190611ed6565b60008585858181106105ef576105ef6121ee565b9050602002810190610601919061221d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061109592505050565b8061064581612282565b9150506105a9565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161059d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661078e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f78790000000000000000000000000000000000000000606482015260840161059d565b61083a81611112565b604080516000808252602082019092526108569183919061111a565b50565b600061086361131e565b61086d84846113bd565b9050610878826114a3565b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff919091169063b760faf99034906024016000604051808303818588803b15801561090a57600080fd5b505af115801561064d573d6000803e3d6000fd5b61092661150e565b7f00000000000000000000000000000000000000000000000000000000000000006040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b1580156109b957600080fd5b505af11580156109cd573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161059d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610b0f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f78790000000000000000000000000000000000000000606482015260840161059d565b610bbb82611112565b610bc78282600161111a565b5050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161059d565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610cbf610fcc565b610d00848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061109592505050565b50505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015610d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db891906122e1565b905090565b600054610100900460ff1615808015610ddd5750600054600160ff909116105b80610df75750303b158015610df7575060005460ff166001145b610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161059d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610ee157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610eea8261159f565b8015610bc757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6040517f35567e1a0000000000000000000000000000000000000000000000000000000081523060048201526000602482018190529073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906335567e1a90604401610d77565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061102d575060005462010000900473ffffffffffffffffffffffffffffffffffffffff1633145b611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e74604482015260640161059d565b565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516110be9190612326565b60006040518083038185875af1925050503d80600081146110fb576040519150601f19603f3d011682016040523d82523d6000602084013e611100565b606091505b50915091508161064d57805160208201fd5b61085661150e565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156111525761114d8361163e565b505050565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156111d7575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526111d4918101906122e1565b60015b611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f742055555053000000000000000000000000000000000000606482015260840161059d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c65555549440000000000000000000000000000000000000000000000606482015260840161059d565b5061114d838383611748565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e7400000000604482015260640161059d565b600080611417836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905061146761142a61014086018661221d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859392505061176d9050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff90811691161461149957600191505061052a565b5060009392505050565b80156108565760405160009033907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90849084818181858888f193505050503d806000811461064d576040519150601f19603f3d011682016040523d82523d6000602084013e61064d565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633148061153957503330145b611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e657200000000000000000000000000000000000000000000604482015260640161059d565b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8481168202929092178084556040519190048216927f0000000000000000000000000000000000000000000000000000000000000000909216917f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de91a350565b73ffffffffffffffffffffffffffffffffffffffff81163b6116e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161059d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61175183611791565b60008251118061175e5750805b1561114d57610d0083836117de565b600080600061177c8585611803565b9150915061178981611848565b509392505050565b61179a8161163e565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061087883836040518060600160405280602781526020016123c3602791396119fb565b60008082516041036118395760208301516040840151606085015160001a61182d87828585611a80565b94509450505050611841565b506000905060025b9250929050565b600081600481111561185c5761185c612342565b036118645750565b600181600481111561187857611878612342565b036118df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161059d565b60028160048111156118f3576118f3612342565b0361195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161059d565b600381600481111561196e5761196e612342565b03610856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161059d565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611a259190612326565b600060405180830381855af49150503d8060008114611a60576040519150601f19603f3d011682016040523d82523d6000602084013e611a65565b606091505b5091509150611a7686838387611b6f565b9695505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611ab75750600090506003611b66565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611b0b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611b5f57600060019250925050611b66565b9150600090505b94509492505050565b60608315611c05578251600003611bfe5773ffffffffffffffffffffffffffffffffffffffff85163b611bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161059d565b5081611c0f565b611c0f8383611c17565b949350505050565b815115611c275781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059d9190612371565b73ffffffffffffffffffffffffffffffffffffffff8116811461085657600080fd5b60008083601f840112611c8f57600080fd5b50813567ffffffffffffffff811115611ca757600080fd5b60208301915083602082850101111561184157600080fd5b60008060008060008060008060c0898b031215611cdb57600080fd5b8835611ce681611c5b565b97506020890135611cf681611c5b565b96506040890135611d0681611c5b565b955060608901359450608089013567ffffffffffffffff80821115611d2a57600080fd5b611d368c838d01611c7d565b909650945060a08b0135915080821115611d4f57600080fd5b50611d5c8b828c01611c7d565b999c989b5096995094979396929594505050565b600060208284031215611d8257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461087857600080fd5b600080600080600060808688031215611dca57600080fd5b8535611dd581611c5b565b94506020860135611de581611c5b565b935060408601359250606086013567ffffffffffffffff811115611e0857600080fd5b611e1488828901611c7d565b969995985093965092949392505050565b60008083601f840112611e3757600080fd5b50813567ffffffffffffffff811115611e4f57600080fd5b6020830191508360208260051b850101111561184157600080fd5b60008060008060408587031215611e8057600080fd5b843567ffffffffffffffff80821115611e9857600080fd5b611ea488838901611e25565b90965094506020870135915080821115611ebd57600080fd5b50611eca87828801611e25565b95989497509550505050565b600060208284031215611ee857600080fd5b813561087881611c5b565b600080600060608486031215611f0857600080fd5b833567ffffffffffffffff811115611f1f57600080fd5b84016101608187031215611f3257600080fd5b95602085013595506040909401359392505050565b60008060408385031215611f5a57600080fd5b8235611f6581611c5b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611fb557600080fd5b8235611fc081611c5b565b9150602083013567ffffffffffffffff80821115611fdd57600080fd5b818501915085601f830112611ff157600080fd5b81358181111561200357612003611f73565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561204957612049611f73565b8160405282815288602084870101111561206257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806000806060858703121561209a57600080fd5b84356120a581611c5b565b935060208501359250604085013567ffffffffffffffff8111156120c857600080fd5b611eca87828801611c7d565b60008060008060008060008060a0898b0312156120f057600080fd5b88356120fb81611c5b565b9750602089013561210b81611c5b565b9650604089013567ffffffffffffffff8082111561212857600080fd5b6121348c838d01611e25565b909850965060608b013591508082111561214d57600080fd5b6121598c838d01611e25565b909650945060808b0135915080821115611d4f57600080fd5b60008060008060008060a0878903121561218b57600080fd5b863561219681611c5b565b955060208701356121a681611c5b565b94506040870135935060608701359250608087013567ffffffffffffffff8111156121d057600080fd5b6121dc89828a01611c7d565b979a9699509497509295939492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261225257600080fd5b83018035915067ffffffffffffffff82111561226d57600080fd5b60200191503681900382131561184157600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036122da577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b6000602082840312156122f357600080fd5b5051919050565b60005b838110156123155781810151838201526020016122fd565b83811115610d005750506000910152565b600082516123388184602087016122fa565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208152600082518060208401526123908160408501602087016122fa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122036dab09ea41cc52b1bf3841563b218784efacb5ce2519c851004ab14f026a5ba64736f6c634300080f0033"; + +type SimpleAccountFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SimpleAccountFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SimpleAccountFactory__factory extends ContractFactory { + constructor(...args: SimpleAccountFactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _entryPoint: string, + overrides?: Overrides & { from?: string } + ): Promise { + return super.deploy( + _entryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _entryPoint: string, + overrides?: Overrides & { from?: string } + ): TransactionRequest { + return super.getDeployTransaction(_entryPoint, overrides || {}); + } + override attach(address: string): SimpleAccountFactory { + return super.attach(address) as SimpleAccountFactory; + } + override connect(signer: Signer): SimpleAccountFactory__factory { + return super.connect(signer) as SimpleAccountFactory__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SimpleAccountFactoryInterface { + return new utils.Interface(_abi) as SimpleAccountFactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SimpleAccountFactory { + return new Contract( + address, + _abi, + signerOrProvider + ) as SimpleAccountFactory; + } +} diff --git a/packages/types/src/executor/contracts/factories/SimpleAccount__factory.ts b/packages/types/src/executor/contracts/factories/SimpleAccount__factory.ts new file mode 100644 index 00000000..a56cc271 --- /dev/null +++ b/packages/types/src/executor/contracts/factories/SimpleAccount__factory.ts @@ -0,0 +1,589 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + SimpleAccount, + SimpleAccountInterface, +} from "../SimpleAccount"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "previousAdmin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "newAdmin", + type: "address", + }, + ], + name: "AdminChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "beacon", + type: "address", + }, + ], + name: "BeaconUpgraded", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint8", + name: "version", + type: "uint8", + }, + ], + name: "Initialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IEntryPoint", + name: "entryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "SimpleAccountInitialized", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "implementation", + type: "address", + }, + ], + name: "Upgraded", + type: "event", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getNonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "anOwner", + type: "address", + }, + ], + name: "initialize", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + { + internalType: "uint256[]", + name: "", + type: "uint256[]", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155BatchReceived", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC1155Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "onERC721Received", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "proxiableUUID", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "tokensReceived", + outputs: [], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "upgradeTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newImplementation", + type: "address", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60c0346200016857601f6200229938819003918201601f19168301916001600160401b038311848410176200016d578084926020946040528339810103126200016857516001600160a01b038116810362000168573060805260a05260005460ff8160081c16620001135760ff80821610620000d7575b60405161211590816200018482396080518181816105e301528181610c290152610e06015260a051818181610802015281816108fb015281816109e401528181610f7d01528181611174015281816113c001528181611c040152611c630152f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a13862000076565b60405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806223de291461018257806301ffc9a714610179578063150b7a021461017057806318dfb3c7146101675780633659cfe61461015e5780633a871cdd146101555780634a58db191461014c5780634d44560d146101435780634f1ef2861461013a57806352d1902d146101315780638da5cb5b14610128578063b0d691fe1461011f578063b61d27f614610116578063bc197c811461010d578063c399ec8814610104578063c4d66de8146100fb578063d087d288146100f25763f23a6e610361000e576100ed61142e565b61000e565b506100ed61133d565b506100ed6111d9565b506100ed6110fa565b506100ed611032565b506100ed610fa1565b506100ed610f31565b506100ed610edb565b506100ed610dbf565b506100ed610ba7565b506100ed610985565b506100ed6108b8565b506100ed61079a565b506100ed61058e565b506100ed61041c565b506100ed610359565b506100ed610268565b506100ed6101dc565b73ffffffffffffffffffffffffffffffffffffffff8116036101a957565b600080fd5b9181601f840112156101a95782359167ffffffffffffffff83116101a957602083818601950101116101a957565b50346101a95760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95761021760043561018b565b61022260243561018b565b61022d60443561018b565b67ffffffffffffffff6084358181116101a95761024e9036906004016101ae565b505060a4359081116101a9576100199036906004016101ae565b50346101a95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a9576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036101a957807f150b7a02000000000000000000000000000000000000000000000000000000006020921490811561032f575b8115610305575b506040519015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014386102fa565b7f4e2312e000000000000000000000000000000000000000000000000000000000811491506102f3565b50346101a95760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95761039460043561018b565b61039f60243561018b565b60643567ffffffffffffffff81116101a9576103bf9036906004016101ae565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b9181601f840112156101a95782359167ffffffffffffffff83116101a9576020808501948460051b0101116101a957565b50346101a95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95767ffffffffffffffff600480358281116101a95761046d90369083016103eb565b60249291929384359081116101a95761048990369084016103eb565b610491611c4b565b8083036105315760005b8381106104a457005b6104d56104ba6104b583878a611a71565b611a8f565b6104cf6104c8848688611aea565b3691610b70565b9061202c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105045760010161049b565b866011867f4e487b7100000000000000000000000000000000000000000000000000000000600052526000fd5b6064846013886020604051937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f77726f6e67206172726179206c656e67746873000000000000000000000000006044820152fd5b50346101a95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a9576004356105ca8161018b565b73ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001691610610833014156114c0565b61063f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc93828554161461154b565b61064761204c565b6040519061065482610aae565b600082527f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561068e575050610019915061167d565b6020600491604094939451928380927f52d1902d00000000000000000000000000000000000000000000000000000000825286165afa6000918161076a575b50610757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608490fd5b6100199361076591146115f2565b611769565b61078c91925060203d8111610793575b6107848183610ae6565b8101906115d6565b90386106cd565b503d61077a565b50346101a9577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6060813601126101a9576004359067ffffffffffffffff82116101a9576101609082360301126101a95773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361085a5761083b6108569160243590600401611d04565b610846604435611a07565b6040519081529081906020820190565b0390f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152fd5b506000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109825773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681813b1561098257602491604051928380927fb760faf900000000000000000000000000000000000000000000000000000000825230600483015234905af18015610975575b610969575080f35b61097290610a8d565b80f35b61097d6115e5565b610961565b80fd5b50346101a957600060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610982576004356109c38161018b565b6109cb61204c565b8173ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001692833b15610a59576044908360405195869485937f205c287800000000000000000000000000000000000000000000000000000000855216600484015260243560248401525af1801561097557610969575080f35b8280fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111610aa157604052565b610aa9610a5d565b604052565b6020810190811067ffffffffffffffff821117610aa157604052565b6060810190811067ffffffffffffffff821117610aa157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610aa157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610b63575b01160190565b610b6b610a5d565b610b5d565b929192610b7c82610b27565b91610b8a6040519384610ae6565b8294818452818301116101a9578281602093846000960137010152565b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a957600435610bde8161018b565b60243567ffffffffffffffff81116101a957366023820112156101a957610c0f903690602481600401359101610b70565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001692610c56843014156114c0565b610c857f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc94828654161461154b565b610c8d61204c565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610cc3575050610019915061167d565b6020600491604094939451928380927f52d1902d00000000000000000000000000000000000000000000000000000000825286165afa60009181610d9f575b50610d8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608490fd5b61001993610d9a91146115f2565b611848565b610db891925060203d8111610793576107848183610ae6565b9038610d02565b50346101a95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610e57576040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152602090f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152fd5b50346101a95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a957602073ffffffffffffffffffffffffffffffffffffffff60005460101c16604051908152f35b50346101a95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101a95760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a957600435610fdd8161018b565b60443567ffffffffffffffff81116101a95760009161100c611004849336906004016101ae565b6104c8611c4b565b9060208251920190602435905af16110226118a8565b901561102a57005b602081519101fd5b50346101a95760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95761106d60043561018b565b61107860243561018b565b67ffffffffffffffff6044358181116101a9576110999036906004016103eb565b50506064358181116101a9576110b39036906004016103eb565b50506084359081116101a9576110cd9036906004016101ae565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b50346101a95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95760206040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111cc575b6000916111af575b50604051908152f35b6111c69150823d8111610793576107848183610ae6565b386111a6565b6111d46115e5565b61119e565b50346101a95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a9576004356112158161018b565b6112776000549161123d60ff8460081c16158094819561132f575b811561130f575b50611b14565b8261126e60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000541617600055565b6112d957611b9f565b61127d57005b6112aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff60005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1005b61130a6101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff6000541617600055565b611b9f565b303b15915081611321575b5038611237565b6001915060ff16143861131a565b600160ff8216109150611230565b50346101a95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a9576108566040517f35567e1a0000000000000000000000000000000000000000000000000000000081523060048201526000602482015260208160448173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611421575b600091611403575b506040519081529081906020820190565b61141b915060203d8111610793576107848183610ae6565b386113f2565b6114296115e5565b6113ea565b50346101a95760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a95761146960043561018b565b61147460243561018b565b60843567ffffffffffffffff81116101a9576114949036906004016101ae565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b156114c757565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152fd5b1561155257565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152fd5b908160209103126101a9575190565b506040513d6000823e3d90fd5b156115f957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152fd5b803b156116e55773ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b906117738261167d565b73ffffffffffffffffffffffffffffffffffffffff82167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2805115801590611840575b6117c2575050565b61183d91600080604051936117d685610aca565b602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208601527f206661696c6564000000000000000000000000000000000000000000000000006040860152602081519101845af46118376118a8565b9161193d565b50565b5060006117ba565b906118528261167d565b73ffffffffffffffffffffffffffffffffffffffff82167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28051158015906118a0576117c2575050565b5060016117ba565b3d156118d3573d906118b982610b27565b916118c76040519384610ae6565b82523d6000602084013e565b606090565b156118df57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b919290156119605750815115611951575090565b61195d903b15156118d8565b90565b8251909150156119735750805190602001fd5b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b8481106119f0575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b8181018301518682016044015285935082016119af565b80611a0f5750565b600080808093337ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff15061183d6118a8565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190811015611a82575b60051b0190565b611a8a611a41565b611a7b565b3561195d8161018b565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101a9570180359067ffffffffffffffff82116101a9576020019181360383136101a957565b9091611b0392811015611b07575b60051b810190611a99565b9091565b611b0f611a41565b611af8565b15611b1b57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b7fffffffffffffffffffff0000000000000000000000000000000000000000ffff75ffffffffffffffffffffffffffffffffffffffff00006000549260101b169116178060005573ffffffffffffffffffffffffffffffffffffffff809160101c16907f0000000000000000000000000000000000000000000000000000000000000000167f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de600080a3565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000163314908115611cf3575b5015611c9557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e746044820152fd5b905060005460101c16331438611c8d565b9060405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c8152611d4281610aca565b519020611d89611d8173ffffffffffffffffffffffffffffffffffffffff92611d7b6104c88560005460101c1696610140810190611a99565b90611f5b565b919091611dd2565b1603611d9457600090565b600190565b60051115611da357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b611ddb81611d99565b80611de35750565b611dec81611d99565b60018103611e53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b611e5c81611d99565b60028103611ec3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b80611ecf600392611d99565b14611ed657565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608490fd5b906041815114600014611f8557611b03916020820151906060604084015193015160001a90611f8f565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116120205791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15612013575b815173ffffffffffffffffffffffffffffffffffffffff81161561200d579190565b50600190565b61201b6115e5565b611feb565b50505050600090600390565b600091829182602083519301915af16120436118a8565b901561102a5750565b73ffffffffffffffffffffffffffffffffffffffff60005460101c16331480156120d6575b1561207857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e6572000000000000000000000000000000000000000000006044820152fd5b5030331461207156fea264697066735822122008a8c74148066b0620f57220aaa6d5bf15f1907ea8b217757444f5c7dca19e9864736f6c63430008110033"; + +type SimpleAccountConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SimpleAccountConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SimpleAccount__factory extends ContractFactory { + constructor(...args: SimpleAccountConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + anEntryPoint: string, + overrides?: Overrides & { from?: string } + ): Promise { + return super.deploy( + anEntryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + anEntryPoint: string, + overrides?: Overrides & { from?: string } + ): TransactionRequest { + return super.getDeployTransaction(anEntryPoint, overrides || {}); + } + override attach(address: string): SimpleAccount { + return super.attach(address) as SimpleAccount; + } + override connect(signer: Signer): SimpleAccount__factory { + return super.connect(signer) as SimpleAccount__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SimpleAccountInterface { + return new utils.Interface(_abi) as SimpleAccountInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SimpleAccount { + return new Contract(address, _abi, signerOrProvider) as SimpleAccount; + } +} diff --git a/packages/types/src/executor/contracts/factories/index.ts b/packages/types/src/executor/contracts/factories/index.ts index a88788f9..a558496c 100644 --- a/packages/types/src/executor/contracts/factories/index.ts +++ b/packages/types/src/executor/contracts/factories/index.ts @@ -8,3 +8,5 @@ export { IAggregator__factory } from "./IAggregator__factory"; export { IPaymaster__factory } from "./IPaymaster__factory"; export { SenderCreator__factory } from "./SenderCreator__factory"; export { StakeManager__factory } from "./StakeManager__factory"; +export { SimpleAccountFactory__factory } from "./SimpleAccountFactory__factory"; +export { SimpleAccount__factory } from "./SimpleAccount__factory"; diff --git a/packages/types/src/executor/contracts/index.ts b/packages/types/src/executor/contracts/index.ts index b2855f28..8b0492f2 100644 --- a/packages/types/src/executor/contracts/index.ts +++ b/packages/types/src/executor/contracts/index.ts @@ -6,4 +6,6 @@ export { IAggregator } from "./IAggregator"; export { IPaymaster } from "./IPaymaster"; export { SenderCreator } from "./SenderCreator"; export { StakeManager } from "./StakeManager"; +export { SimpleAccount } from "./SimpleAccount"; +export { SimpleAccountFactory } from "./SimpleAccountFactory"; export * from "./factories"; diff --git a/packages/types/src/executor/index.ts b/packages/types/src/executor/index.ts index a29e79ba..8a1fabf1 100644 --- a/packages/types/src/executor/index.ts +++ b/packages/types/src/executor/index.ts @@ -1,3 +1,9 @@ +export type SkandhaVersion = { + /** "0.28.2" */ + version: string; + commit: string; +}; + export type RelayingMode = | "merkle" | "flashbots" diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index b1a08bac..ca08e504 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -2,4 +2,3 @@ export * as ts from "./types"; export * as ssz from "./sszTypes"; export * from "./db"; export * from "./logger"; -export type NetworkName = string; diff --git a/packages/types/src/node/api.ts b/packages/types/src/node/api.ts index 54f6898c..85cb2601 100644 --- a/packages/types/src/node/api.ts +++ b/packages/types/src/node/api.ts @@ -1,14 +1,23 @@ import { ts } from ".."; import { UserOperationStruct } from "../executor/contracts/EntryPoint"; +type PeerInfo = { + cid: string; + str: string; + type: string; +} + export interface INodeAPI { - publishUserOpsWithEntryPoint( - userOpWithEP: ts.UserOpsWithEntryPoint + publishVerifiedUserOperation( + userOpWithEP: ts.VerifiedUserOperation, + mempool: string ): Promise; - publishUserOpsWithEntryPointJSON( + publishVerifiedUserOperationJSON( entryPoint: string, - chainId: number, - userOps: UserOperationStruct[], - blockHash: string + userOp: UserOperationStruct, + blockHash: string, + mempool: string ): Promise; + + getPeers(): PeerInfo[]; } diff --git a/packages/types/src/sszTypes.ts b/packages/types/src/sszTypes.ts index 72077ddb..decf1706 100644 --- a/packages/types/src/sszTypes.ts +++ b/packages/types/src/sszTypes.ts @@ -1,9 +1,8 @@ import { - BitVectorType, ByteListType, ContainerType, ListCompositeType, - ByteVectorType, + ByteVectorType } from "@chainsafe/ssz"; import * as primitiveSsz from "./primitive/sszTypes"; const { Address, Bytes32, UintBn256 } = primitiveSsz; @@ -13,27 +12,30 @@ const { Address, Bytes32, UintBn256 } = primitiveSsz; export const MAX_CONTRACT_SIZE = 24576; export const MAX_BYTE_ARRAY_SIZE = 64000; -export const MEMPOOLS_SUBNET_COUNT = 64; -export const MAX_OPS_PER_REQUEST = 256; +export const MAX_OPS_PER_REQUEST = 4096; export const MAX_MEMPOOLS_PER_BUNDLER = 20; export const GOSSIP_MAX_SIZE = 1048576; export const TTFB_TIMEOUT = 5; export const RESP_TIMEOUT = 10; +export const MAX_SUPPORTED_MEMPOOLS = 1024; // Mempool // ======== -export const MempoolId = new ByteVectorType(46); -export const MEMPOOL_ID_SUBNET_COUNT = 64; -export const MempoolSubnets = new BitVectorType(MEMPOOL_ID_SUBNET_COUNT); +export const MempoolId = new ByteVectorType(256); +export const ChainId = primitiveSsz.UintBn64; +export const SupportedMempools = new ListCompositeType( + MempoolId, + MAX_SUPPORTED_MEMPOOLS +); // Types used by main gossip topics // ================================= export const Metadata = new ContainerType( { - seqNumber: primitiveSsz.UintBn64, - mempoolSubnets: new BitVectorType(MEMPOOLS_SUBNET_COUNT), + seq_number: primitiveSsz.UintBn64, + supported_mempools: SupportedMempools, }, { typeName: "Metadata", jsonCase: "eth2" } ); @@ -42,28 +44,27 @@ export const UserOp = new ContainerType( { sender: Address, nonce: primitiveSsz.UintBn256, - initCode: new ByteListType(MAX_CONTRACT_SIZE), - callData: new ByteListType(MAX_BYTE_ARRAY_SIZE), - callGasLimit: UintBn256, - verificationGasLimit: UintBn256, - preVerificationGas: UintBn256, - maxFeePerGas: UintBn256, - maxPriorityFeePerGas: UintBn256, - paymasterAndData: new ByteListType(MAX_BYTE_ARRAY_SIZE), - signature: new ByteListType(MAX_CONTRACT_SIZE), + init_code: new ByteListType(MAX_BYTE_ARRAY_SIZE), + call_data: new ByteListType(MAX_BYTE_ARRAY_SIZE), + call_gas_limit: UintBn256, + verification_gas_limit: UintBn256, + pre_verification_gas: UintBn256, + max_fee_per_gas: UintBn256, + max_priority_fee_per_gas: UintBn256, + paymaster_and_data: new ByteListType(MAX_BYTE_ARRAY_SIZE), + signature: new ByteListType(MAX_BYTE_ARRAY_SIZE), }, { typeName: "UserOp", jsonCase: "eth2" } ); -export const UserOpsWithEntryPoint = new ContainerType( +export const VerifiedUserOperation = new ContainerType( { - entry_point_contract: Address, + user_operation: UserOp, + entry_point: Address, verified_at_block_hash: primitiveSsz.UintBn256, - chain_id: primitiveSsz.UintBn256, - user_operations: new ListCompositeType(UserOp, MAX_OPS_PER_REQUEST), }, { - typeName: "UserOpsWithEntryPoint", + typeName: "VerifiedUserOperation", jsonCase: "eth2", } ); @@ -82,9 +83,16 @@ export const PooledUserOps = new ContainerType( // ReqResp types // ============= -export const Status = new ListCompositeType( - MempoolId, - MAX_MEMPOOLS_PER_BUNDLER +export const Status = new ContainerType( + { + chain_id: primitiveSsz.UintBn64, + block_hash: Bytes32, + block_number: primitiveSsz.UintBn64, + }, + { + typeName: "Status", + jsonCase: "eth2", + } ); export const Goodbye = primitiveSsz.UintBn64; @@ -93,8 +101,7 @@ export const Ping = primitiveSsz.UintBn64; export const PooledUserOpHashesRequest = new ContainerType( { - mempool: MempoolId, - offset: primitiveSsz.UintBn64, + cursor: primitiveSsz.Bytes32, }, { typeName: "PooledUserOpHashesRequest", @@ -104,7 +111,7 @@ export const PooledUserOpHashesRequest = new ContainerType( export const PooledUserOpHashes = new ContainerType( { - more_flag: primitiveSsz.UintBn64, + next_cursor: primitiveSsz.Bytes32, hashes: new ListCompositeType(Bytes32, MAX_OPS_PER_REQUEST), }, { diff --git a/packages/types/src/types.ts b/packages/types/src/types.ts index 3c727f3b..19b98895 100644 --- a/packages/types/src/types.ts +++ b/packages/types/src/types.ts @@ -4,7 +4,7 @@ import * as ssz from "./sszTypes"; export type Metadata = ValueOf; export type UserOp = ValueOf; -export type UserOpsWithEntryPoint = ValueOf; +export type VerifiedUserOperation = ValueOf; export type PooledUserOps = ValueOf; export type Goodbye = ValueOf; export type Ping = ValueOf; @@ -24,8 +24,3 @@ export type addPrefix = TKey extends string export type addSuffix = TKey extends string ? `${TKey}${TSuffix}` : never; - -// Network -// ======== - -export type MempoolSubnets = ValueOf; diff --git a/packages/utils/package.json b/packages/utils/package.json index 78e59c6d..8f70feee 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "utils", - "version": "1.0.49-alpha", + "version": "1.5.4", "description": "utils of Etherspot bundler client", "author": "Etherspot", "homepage": "https://https://github.com/etherspot/skandha#readme", @@ -25,9 +25,6 @@ "build": "tsc -p tsconfig.build.json", "lint": "eslint --color --ext .ts src/ test/", "lint:fix": "yarn run lint --fix", - "pretest": "yarn run check-types", - "test": "yarn test:unit", - "test:unit": "mocha 'test/unit/**/*.test.ts'", "check-readme": "typescript-docs-verifier" }, "dependencies": { @@ -37,6 +34,6 @@ "case": "^1.6.3", "pino": "8.11.0", "pino-pretty": "10.0.0", - "types": "^1.0.49-alpha" + "types": "^1.5.4" } } diff --git a/tsconfig.build.json b/tsconfig.build.json index 43e66a65..d0e38040 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "ES2019", - "lib": ["es2020", "esnext.bigint", "es2020.string", "es2020.symbol.wellknown", "dom"], + "lib": ["es2020", "esnext.bigint", "es2020.string", "es2020.symbol.wellknown", "dom", "ES2022", "ES2022.Error"], "module": "esnext", "moduleResolution": "node", diff --git a/vitest.base.config.ts b/vitest.base.config.ts new file mode 100644 index 00000000..05b2d908 --- /dev/null +++ b/vitest.base.config.ts @@ -0,0 +1,28 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + maxConcurrency: 1, + threads: false, + reporters: ["default", "hanging-process"], + coverage: { + clean: true, + all: false, + extension: [".ts"], + provider: "v8", + reporter: [["lcovonly", { file: "lcov.info" }], ["text"]], + reportsDirectory: "./coverage", + exclude: [ + "**/*.d.ts", + "**/*.js", + "**/lib/**", + "**/coverage/**", + "**/scripts/**", + "**/test/**", + "**/types/**", + "**/bin/**", + "**/node_modules/**", + ], + }, + }, +}); diff --git a/yarn.lock b/yarn.lock index e99b50e0..8b3a1525 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,12 +16,12 @@ sprintf-js "1.1.2" "@achingbrain/nat-port-mapper@^1.0.3": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@achingbrain/nat-port-mapper/-/nat-port-mapper-1.0.11.tgz#226bad068404609cb483f00b104e45a4f34d1c9d" - integrity sha512-Y2lwx0zmrwEl+IGu+V/QiVBdcdsWscYq1PMMEjvyuuaXnmnppbLWilO8LK1yoLdncxwJBuS0zZtHbpFeWBusRg== + version "1.0.13" + resolved "https://registry.yarnpkg.com/@achingbrain/nat-port-mapper/-/nat-port-mapper-1.0.13.tgz#22519833c2d70d48addd551b5cccbf84010ccda5" + integrity sha512-B5GL6ILDek72OjoEyFGEuuNYaEOYxO06Ulhcaf/5iQ4EO8uaZWS+OkolYST7L+ecJrkjfaSNmSAsWRRuh+1Z5A== dependencies: "@achingbrain/ssdp" "^4.0.1" - "@libp2p/logger" "^3.0.0" + "@libp2p/logger" "^4.0.1" default-gateway "^7.2.2" err-code "^3.0.1" it-first "^3.0.1" @@ -30,22 +30,22 @@ xml2js "^0.6.0" "@achingbrain/ssdp@^4.0.1": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@achingbrain/ssdp/-/ssdp-4.0.4.tgz#681c59664f9e05ea65d66b23f96f0dbf71f0e293" - integrity sha512-fY/ShiYJmhLdr45Vn2+f88xTqZjBSH3X3F+EJu/89cjB1JIkMCVtD5CQaaS38YknIL8cEcNhjMZM4cdE3ckSSQ== + version "4.0.6" + resolved "https://registry.yarnpkg.com/@achingbrain/ssdp/-/ssdp-4.0.6.tgz#eca66ac260dcfcfcb237d7a58e63c3c8e87591b4" + integrity sha512-Y4JE2L9150i50V6lg/Y8+ilhxRpUZKKv+PKo68Aj7MjPfaUAar6ZHilF9h4/Zb3q0fqGMXNc9o11cQLNI8J8bA== dependencies: event-iterator "^2.0.0" freeport-promise "^2.0.0" merge-options "^3.0.4" - xml2js "^0.5.0" + xml2js "^0.6.2" -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== +"@ampproject/remapping@^2.2.1": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@arbitrum/sdk@3.1.4": version "3.1.4" @@ -57,287 +57,28 @@ "@ethersproject/bytes" "^5.0.8" ethers "^5.1.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== +"@babel/code-frame@^7.0.0": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" + picocolors "^1.0.0" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -526,6 +267,135 @@ solc-typed-ast "17.0.3" yargs "17.7.2" +"@emnapi/core@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.1.1.tgz#3246a11db5b20b2fdf90e9b55fc7db4f3f88d947" + integrity sha512-eu4KjHfXg3I+UUR7vSuwZXpRo4c8h4Rtb5Lu2F7Z4JqJFl/eidquONEBiRs6viXKpWBC3BaJBy68xGJ2j56idw== + dependencies: + tslib "^2.4.0" + +"@emnapi/runtime@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.1.1.tgz#697d02276ca6f49bafe6fd01c9df0034818afa98" + integrity sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ== + dependencies: + tslib "^2.4.0" + +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + "@eslint/eslintrc@^1.3.3": version "1.4.1" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" @@ -984,6 +854,11 @@ ajv-formats "^2.1.1" fast-uri "^2.0.0" +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + "@fastify/cors@8.2.1": version "8.2.1" resolved "https://registry.yarnpkg.com/@fastify/cors/-/cors-8.2.1.tgz#dd348162bcbfb87dff4b492e2bef32d41244006a" @@ -992,15 +867,10 @@ fastify-plugin "^4.0.0" mnemonist "0.39.5" -"@fastify/deepmerge@^1.0.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@fastify/deepmerge/-/deepmerge-1.3.0.tgz#8116858108f0c7d9fd460d05a7d637a13fe3239a" - integrity sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A== - -"@fastify/error@^3.0.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@fastify/error/-/error-3.3.0.tgz#eba790082e1144bfc8def0c2c8ef350064bc537b" - integrity sha512-dj7vjIn1Ar8sVXj2yAXiMNCJDmS9MQ9XMlIecX2dIzzhjSHCyKo4DdXjXMs7wKW2kj6yvVRSpuQjOZ3YLrh56w== +"@fastify/error@^3.0.0", "@fastify/error@^3.3.0": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@fastify/error/-/error-3.4.1.tgz#b14bb4cac3dd4ec614becbc643d1511331a6425c" + integrity sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ== "@fastify/fast-json-stringify-compiler@^4.1.0": version "4.3.0" @@ -1009,6 +879,13 @@ dependencies: fast-json-stringify "^5.7.0" +"@fastify/merge-json-schemas@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz#3551857b8a17a24e8c799e9f51795edb07baa0bc" + integrity sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA== + dependencies: + fast-deep-equal "^3.1.3" + "@flashbots/ethers-provider-bundle@0.6.2": version "0.6.2" resolved "https://registry.yarnpkg.com/@flashbots/ethers-provider-bundle/-/ethers-provider-bundle-0.6.2.tgz#b1c9bf74f29f2715075b60bf7db0557c01692001" @@ -1020,12 +897,12 @@ integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@humanwhocodes/config-array@^0.11.6": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -1033,172 +910,26 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@hutson/parse-repository-url@^3.0.0": version "3.0.2" resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - "@istanbuljs/schema@^0.1.2": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.3.1", "@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - "@jest/schemas@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" @@ -1206,88 +937,26 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^29.3.1", "@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -1300,18 +969,18 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.24": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== "@lerna/add@6.4.1": version "6.4.1" @@ -2307,18 +1976,17 @@ "@multiformats/multiaddr" "^12.0.0" it-stream-types "^1.0.4" -"@libp2p/interface@^0.1.1", "@libp2p/interface@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@libp2p/interface/-/interface-0.1.2.tgz#4ea5a4fa8bbd46c3fe4c945ff6b8c6d5d41f10b0" - integrity sha512-Q5t27434Mvn+R6AUJlRH+q/jSXarDpP+KXVkyGY7S1fKPI2berqoFPqT61bRRBYsCH2OPZiKBB53VUzxL9uEvg== +"@libp2p/interface@^1.0.0", "@libp2p/interface@^1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@libp2p/interface/-/interface-1.1.6.tgz#379e3201f776ca13482ea60d31c4c5d40d88f7de" + integrity sha512-CLz6TAZf+Mw1PCIU8pjMIct1uh3A1fIene2/t+E57Tw4uJLCBJE9CLed/Opxliy5RH0e32Aa6bi4QSXtkJTK7A== dependencies: - "@multiformats/multiaddr" "^12.1.5" - abortable-iterator "^5.0.1" - it-pushable "^3.2.0" + "@multiformats/multiaddr" "^12.2.1" + it-pushable "^3.2.3" it-stream-types "^2.0.1" - multiformats "^12.0.1" - p-defer "^4.0.0" - uint8arraylist "^2.4.3" + multiformats "^13.1.0" + progress-events "^1.0.0" + uint8arraylist "^2.4.8" "@libp2p/interfaces@^3.0.0", "@libp2p/interfaces@^3.0.2", "@libp2p/interfaces@^3.0.3", "@libp2p/interfaces@^3.2.0", "@libp2p/interfaces@^3.3.1": version "3.3.2" @@ -2336,16 +2004,16 @@ interface-datastore "^8.2.0" multiformats "^11.0.2" -"@libp2p/logger@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@libp2p/logger/-/logger-3.0.2.tgz#aa507db233c6905692ffaf9f4daba1e6326992c4" - integrity sha512-2JtRGBXiGfm1t5XneUIXQ2JusW7QwyYmxsW7hSAYS5J73RQJUicpt5le5obVRt7+OM39ei+nWEuC6Xvm1ugHkw== +"@libp2p/logger@^4.0.1": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@libp2p/logger/-/logger-4.0.9.tgz#30905a37f02d52488d990d8c2318c9aa8e5ea733" + integrity sha512-eGjFvMGA2FtNrnQuI6YwYY5jviA00lTMAKi8pF3eH0TCnEokSYJ9LxBLwZNgIzrWuwZwO+sf4SsY1YBEisFf5Q== dependencies: - "@libp2p/interface" "^0.1.2" - "@multiformats/multiaddr" "^12.1.5" + "@libp2p/interface" "^1.1.6" + "@multiformats/multiaddr" "^12.2.1" debug "^4.3.4" - interface-datastore "^8.2.0" - multiformats "^12.0.1" + interface-datastore "^8.2.11" + multiformats "^13.1.0" "@libp2p/mdns@6.0.0": version "6.0.0" @@ -2606,6 +2274,19 @@ merkletreejs "^0.2.27" rlp "^2.2.7" +"@multiformats/dns@^1.0.3": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@multiformats/dns/-/dns-1.0.6.tgz#b8c7de11459a02a5f4e609d35d3cdb95cb6ad152" + integrity sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw== + dependencies: + "@types/dns-packet" "^5.6.5" + buffer "^6.0.3" + dns-packet "^5.6.1" + hashlru "^2.3.0" + p-queue "^8.0.1" + progress-events "^1.0.0" + uint8arrays "^5.0.2" + "@multiformats/mafmt@^11.0.2", "@multiformats/mafmt@^11.0.3": version "11.1.2" resolved "https://registry.yarnpkg.com/@multiformats/mafmt/-/mafmt-11.1.2.tgz#c03ef4022c795b7f230b136f2f974fc263eac4f1" @@ -2657,18 +2338,18 @@ uint8arrays "^4.0.2" varint "^6.0.0" -"@multiformats/multiaddr@^12.0.0", "@multiformats/multiaddr@^12.1.3", "@multiformats/multiaddr@^12.1.5": - version "12.1.7" - resolved "https://registry.yarnpkg.com/@multiformats/multiaddr/-/multiaddr-12.1.7.tgz#eb71733be20dd9f0ac0ff4c3ffe4bae422726beb" - integrity sha512-MZRj+uUrtF2WqgByrsPolrdyPDSFstw7Fe0ewabWgWl27fcOmfDOSrEt2aUVkSzapXbyCG7JQh0QvimmTF4aMA== +"@multiformats/multiaddr@^12.0.0", "@multiformats/multiaddr@^12.1.3", "@multiformats/multiaddr@^12.2.1": + version "12.2.1" + resolved "https://registry.yarnpkg.com/@multiformats/multiaddr/-/multiaddr-12.2.1.tgz#d95d1590b17dbe39dcefbb4d832d14434d3fe075" + integrity sha512-UwjoArBbv64FlaetV4DDwh+PUMfzXUBltxQwdh+uTYnGFzVa8ZfJsn1vt1RJlJ6+Xtrm3RMekF/B+K338i2L5Q== dependencies: "@chainsafe/is-ip" "^2.0.1" "@chainsafe/netmask" "^2.0.0" - "@libp2p/interface" "^0.1.1" - dns-over-http-resolver "^2.1.0" - multiformats "^12.0.1" + "@libp2p/interface" "^1.0.0" + "@multiformats/dns" "^1.0.3" + multiformats "^13.0.0" uint8-varint "^2.0.1" - uint8arrays "^4.0.2" + uint8arrays "^5.0.0" "@napi-rs/snappy-android-arm-eabi@7.2.2": version "7.2.2" @@ -2735,116 +2416,133 @@ resolved "https://registry.yarnpkg.com/@napi-rs/snappy-win32-x64-msvc/-/snappy-win32-x64-msvc-7.2.2.tgz#4f598d3a5d50904d9f72433819f68b21eaec4f7d" integrity sha512-a43cyx1nK0daw6BZxVcvDEXxKMFLSBSDTAhsFD0VqSKcC7MGUBMaqyoWUcMiI7LBSz4bxUmxDWKfCYzpEmeb3w== -"@noble/curves@1.1.0", "@noble/curves@~1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" - integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== +"@napi-rs/wasm-runtime@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.1.2.tgz#cff8330e3728ab4447af82b67277f067132d341f" + integrity sha512-8JuczewTFIZ/XIjHQ+YlQUydHvlKx2hkcxtuGwh+t/t5zWyZct6YG4+xjHcq8xyc/e7FmFwf42Zj2YgICwmlvA== + dependencies: + "@emnapi/core" "^1.1.0" + "@emnapi/runtime" "^1.1.0" + "@tybys/wasm-util" "^0.8.1" + +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== dependencies: - "@noble/hashes" "1.3.1" + "@noble/hashes" "1.3.3" "@noble/ed25519@^1.6.0": version "1.7.3" resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123" integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== -"@noble/hashes@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" - integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== -"@noble/hashes@^1.0.0", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== +"@noble/hashes@^1.0.0", "@noble/hashes@^1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== "@noble/secp256k1@^1.5.4": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== -"@node-rs/crc32-android-arm-eabi@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-android-arm-eabi/-/crc32-android-arm-eabi-1.7.2.tgz#a52426050c90d3062b6ba0c980cd70a59ad9448d" - integrity sha512-6IoXQTHt9U/1Ejz/MPbAk3mtcAGcS1WUvg2YfEtezLCmzbDpQO3OTA9fZpu3z2AhBuLHiKMKDVcfrWybRiWBJw== +"@node-rs/crc32-android-arm-eabi@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-android-arm-eabi/-/crc32-android-arm-eabi-1.10.0.tgz#7beace1e2755bdd444d67233e8448afa8d184192" + integrity sha512-IRas7ylc8nB3988nnaT4PC5ZuaK3VOrLbTyg1Y/5ZHlxsYpqLpCb7VMf/oRrHxkSzSTlluD+inv3J8UE3i5Ojg== -"@node-rs/crc32-android-arm64@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.7.2.tgz#40bbbb54289fe47abf67558d22d87abace78d7d3" - integrity sha512-SMEd6cN+034LTv9kFmCGMZjBNTf39xXIcgqq05JM9A55ywUvXdoXnFOttrQ9x/iZgqANNU6Ms5uZCAJbNA2dZA== +"@node-rs/crc32-android-arm64@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.10.0.tgz#8a926ad4ba8609c026b52d9b7dfa97e7591bfaa5" + integrity sha512-4vX1gB+rf3sYma/LLycmYsuFKolWdZX7tQOwLQ6PDwE7dAoN3mWAgS3RBw2G6PerGD9r90vSXWXPLJnF3OAhlw== -"@node-rs/crc32-darwin-arm64@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.7.2.tgz#3fa11b1176a1d463accf95deb046896487e0d374" - integrity sha512-sPJisK5pyZ+iBs9KuGsvu0Z+Qshw4GvOgaHjPktQ+suz0p00Yts3zl5D6PpGaaW4EAKTo8zCUIlVEArV0vglvw== +"@node-rs/crc32-darwin-arm64@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.10.0.tgz#fba0b3cf8f17c6f5768604d6d84decb44f332396" + integrity sha512-nAAdxZqxFBxqhI3ZMEGi7QDwg44N4laYO4iGIGhjLvsUDqJlYeIlqZ39Lh2gOK3D2uF/TaT4b0bU5EPHWnKMOQ== -"@node-rs/crc32-darwin-x64@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.7.2.tgz#bf5b1b3e471da1c84e5af19c8a4f667cb0e31540" - integrity sha512-+/lgHYJaZdXU+7fhGYTnXvGkeSqZE3UwPyKAUO5YSL0nIpFHMybZMnvqjcoxrfx0QfMFOwVEbd7vfVh+1GpwhA== +"@node-rs/crc32-darwin-x64@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.10.0.tgz#3301fba789c59e75fcae1563c1bc635b57ee8325" + integrity sha512-0YhLJFDY7VAKlJ4+SdfZFY+u0X18tkuD3NCtPp1SYh1o9pWpFVBbTKWvdjjx/Ihqw0ozkfc3iewFJU7vlrDQJg== -"@node-rs/crc32-freebsd-x64@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-freebsd-x64/-/crc32-freebsd-x64-1.7.2.tgz#25ae223f69920141f81b5b611f763be6cc9ece42" - integrity sha512-OgkxnkiGdztcBilm7m31Sb6zx89ghK4WpZz9WVVU86PIHQH0sfrZEebdomw6R7mMnQuqbnRwjTS5r1nchVMPzQ== +"@node-rs/crc32-freebsd-x64@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-freebsd-x64/-/crc32-freebsd-x64-1.10.0.tgz#f6d5065905a9179e1b3f289ff305e1d02b42bf6b" + integrity sha512-BE0IeHn59GzaebTM85Dpe+ErPV8E+WuXd/sNyLLS8jZUuNoOJwFUKotm8CUFG+MI40N0U9PzvZjQSwaeMsyMsQ== -"@node-rs/crc32-linux-arm-gnueabihf@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.7.2.tgz#b26c60564a85cd92de5961050aaa9b5e62dda97c" - integrity sha512-hTY83MQML8WrMnD3dmzjrcCn0Sqgw0w2wRc1Ji2dCaE0fDqra47W5KBQXx4hKZYFwNr5KreTqdvD3Ejf/mKzEA== +"@node-rs/crc32-linux-arm-gnueabihf@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.10.0.tgz#42c12d5aebd398409b28e84623e645002d13aaac" + integrity sha512-R3mN3uSZaslJtXW3NXdropB9tHCnOgbrvq7MtmCRpHi2Ie3E46Ohi8cW0HgHjihptafTf8NWsoYzErm39BTY0Q== -"@node-rs/crc32-linux-arm64-gnu@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.7.2.tgz#076e43f3592496a1cbea69e0e8fb3031d7711569" - integrity sha512-4p6DZ9YT+CBSi+72OclzI5hBin15brqrbLLHFePPl4AhAazg6+ReTv3C4DnyJqyL0ZHZamiA9zDtOlvHo0nk0Q== +"@node-rs/crc32-linux-arm64-gnu@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.10.0.tgz#4a1849b882737c73541cf7141557ea12269161ee" + integrity sha512-2zZ2RQLVhjCWRWiLvz/CoP5BFld/zE/uD2Z9Nk+Y5zmJ11CD1RC3lqKG1M3MgEiQq9CnWJxwyy5kM2q4jDeXkg== -"@node-rs/crc32-linux-arm64-musl@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-linux-arm64-musl/-/crc32-linux-arm64-musl-1.7.2.tgz#e0e6860aee2364bb7289b4966406820794a921c6" - integrity sha512-/shZkkNyDyDjaxU5rYFY4aoajLjBqdfKQYZCcA6XS27FiGzHQ3petgP0I5Zjm+Jf75G7gLT8NQXiQWIzkgo2xw== +"@node-rs/crc32-linux-arm64-musl@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-linux-arm64-musl/-/crc32-linux-arm64-musl-1.10.0.tgz#0847466e4bc812abf9de31e509eceec90d29c45f" + integrity sha512-WEIavGFHMAFe8NIKhbYnM6k2x7y6M/NQewXE8cqeV03Q8mLzCDBr34i/MzpW+M42NvEYgcM8c3Ayn2FijHb64Q== -"@node-rs/crc32-linux-x64-gnu@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.7.2.tgz#f17f2d570823ae9195296960af2045d9f76108eb" - integrity sha512-rzoqXqPLjx5sx8jzEg/xRAdBDkjnaM+D3Nrm9xJckHWzeeUB0FC0E4QGrdtqFo15lQ1GDVV/q6n93mLSK5vCkQ== +"@node-rs/crc32-linux-x64-gnu@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.10.0.tgz#02c5bc402d783cce8d922240ebaba58c4ed07052" + integrity sha512-K/7aY/h8QngsLk0KsalQ3AlZ8ljXRisZgc20RcbB4UZkjl5AN6TeHQlVbx9U2MSBE5f6ViiZEr8c8CcID3W2Mg== -"@node-rs/crc32-linux-x64-musl@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.7.2.tgz#3a3406486db63ffcdb6e4c08681d91dba8585640" - integrity sha512-Hwim1Wc8LoNqG53qX8Dm3VY32ClbKWpdi9pkbJU4/aG5RFUfd3k/x9WSeATlBx+K36Tc1XsrWvbsf1eWwryEYA== +"@node-rs/crc32-linux-x64-musl@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.10.0.tgz#07d0a1914652a3cf058e7cde5bc85f75a4106bbf" + integrity sha512-GyCSm+Dp96qUvqrsxKgfd3TFrE8v5sRUYiMgNKK6G1m7nQb/VXvab9UoBSKeFw131odt3LlIuBAuhMnbb4za5w== -"@node-rs/crc32-win32-arm64-msvc@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-win32-arm64-msvc/-/crc32-win32-arm64-msvc-1.7.2.tgz#501cc0dfe7e0f9eb3af2ec1432f5f3bfa3d3ee6b" - integrity sha512-vj+HWzwy86wNBY+1vW+QPje/MrJppufGCYIisFwvghBzk6WtClNGEjbQqotieIxDNohcmHREQEeg8wY8PMCvew== +"@node-rs/crc32-wasm32-wasi@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-wasm32-wasi/-/crc32-wasm32-wasi-1.10.0.tgz#6718e4b3a7f9e207b400abf3968e008ec804808c" + integrity sha512-C+2IK5HwNUz2aiMGiN0RTijb80X5V1jo/o8bsHqi8ukoRyO6HLMhVn+xptqY+RRSf4VUzzNR5eHqD+WLcLId0g== + dependencies: + "@napi-rs/wasm-runtime" "^0.1.1" -"@node-rs/crc32-win32-ia32-msvc@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.7.2.tgz#abc5e96fe941af5b736b82187ebb562d34646207" - integrity sha512-YQQtPkHvqbMEJmaMzEH3diYHk0q9zWb+Tkzij9d4OZZzpt4HM6j8FuiIB37BJ0CQmgMiDZEBYsX3KOfYxxO0VA== +"@node-rs/crc32-win32-arm64-msvc@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-win32-arm64-msvc/-/crc32-win32-arm64-msvc-1.10.0.tgz#8641440a45511fdc04eac13338c9cf8336092c29" + integrity sha512-RaVo4edbEM3DyQkvXGKdPizUmr2A4NjLMk/1x9b/tz/k2rdd+QaPAauDwWAzs7SKoDBV9H4qc3hNFuKGjjRhjA== -"@node-rs/crc32-win32-x64-msvc@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.7.2.tgz#7e509ea3969a0190324beb8c829f7845c547e4cf" - integrity sha512-DnluAFM6X8qsYVI1VaFQtI6ukigIQ2P4eVcEuNQ3d1lF5fs0RYAKY7Ajqrdk298TSGZ2joMiqfJksTHBsQoxtA== +"@node-rs/crc32-win32-ia32-msvc@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.10.0.tgz#236ffc75ced7a29e2b732fe1050cdaa17d3e4cca" + integrity sha512-5KqJFdzRXELpXcdNgahafjkc9MxZJfKDVkFPBMkQIjjkv8PQ49DVw15/7yuhAN0pyYccNaUil4vtVoo7WTIVgQ== + +"@node-rs/crc32-win32-x64-msvc@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.10.0.tgz#9fe9a4f4020a330dc500421d7c8da805bab08fdd" + integrity sha512-6b99QpwNCQube1xleD+9IcF6foEWHYQYjuZrHAR5diuP/uqM7i+KCgMU9fbCFLs5zmssYHO3CQSZ8G+V0eC59g== "@node-rs/crc32@^1.6.0": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@node-rs/crc32/-/crc32-1.7.2.tgz#97070a68e6e40adb4414fbb881bb990b56e4527a" - integrity sha512-SmWxRftq+zYSv4qfhdFHM8ruBqY8eVTnIs43dFUWAyD0x6a7LpzNd8KHWqKxlaly8QGpGxBv2Dol/3gs5DeknA== + version "1.10.0" + resolved "https://registry.yarnpkg.com/@node-rs/crc32/-/crc32-1.10.0.tgz#31d3562b1bc615bd784e8dc07f690482686bb91f" + integrity sha512-SFvU8PGZexRMRPUhi+4a9LW4oqFuK5CLEElysrKoRtNkJ+LcRFL+b3wfuzbcDq/ea0rS0nzRLFZwVsNVyWaGew== optionalDependencies: - "@node-rs/crc32-android-arm-eabi" "1.7.2" - "@node-rs/crc32-android-arm64" "1.7.2" - "@node-rs/crc32-darwin-arm64" "1.7.2" - "@node-rs/crc32-darwin-x64" "1.7.2" - "@node-rs/crc32-freebsd-x64" "1.7.2" - "@node-rs/crc32-linux-arm-gnueabihf" "1.7.2" - "@node-rs/crc32-linux-arm64-gnu" "1.7.2" - "@node-rs/crc32-linux-arm64-musl" "1.7.2" - "@node-rs/crc32-linux-x64-gnu" "1.7.2" - "@node-rs/crc32-linux-x64-musl" "1.7.2" - "@node-rs/crc32-win32-arm64-msvc" "1.7.2" - "@node-rs/crc32-win32-ia32-msvc" "1.7.2" - "@node-rs/crc32-win32-x64-msvc" "1.7.2" + "@node-rs/crc32-android-arm-eabi" "1.10.0" + "@node-rs/crc32-android-arm64" "1.10.0" + "@node-rs/crc32-darwin-arm64" "1.10.0" + "@node-rs/crc32-darwin-x64" "1.10.0" + "@node-rs/crc32-freebsd-x64" "1.10.0" + "@node-rs/crc32-linux-arm-gnueabihf" "1.10.0" + "@node-rs/crc32-linux-arm64-gnu" "1.10.0" + "@node-rs/crc32-linux-arm64-musl" "1.10.0" + "@node-rs/crc32-linux-x64-gnu" "1.10.0" + "@node-rs/crc32-linux-x64-musl" "1.10.0" + "@node-rs/crc32-wasm32-wasi" "1.10.0" + "@node-rs/crc32-win32-arm64-msvc" "1.10.0" + "@node-rs/crc32-win32-ia32-msvc" "1.10.0" + "@node-rs/crc32-win32-x64-msvc" "1.10.0" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -2915,13 +2613,6 @@ "@gar/promisify" "^1.1.3" semver "^7.3.5" -"@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== - dependencies: - semver "^7.3.5" - "@npmcli/git@^3.0.0": version "3.0.2" resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" @@ -3194,11 +2885,6 @@ dependencies: "@octokit/openapi-types" "^18.0.0" -"@opentelemetry/api@^1.4.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.7.0.tgz#b139c81999c23e3c8d3c0a7234480e945920fc40" - integrity sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw== - "@parcel/watcher@2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" @@ -3207,11 +2893,6 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -3265,27 +2946,110 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@scure/base@~1.1.0": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" - integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== +"@rollup/rollup-android-arm-eabi@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.1.tgz#ca0501dd836894216cb9572848c5dde4bfca3bec" + integrity sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA== -"@scure/bip32@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" - integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== +"@rollup/rollup-android-arm64@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.1.tgz#154ca7e4f815d2e442ffc62ee7f64aee8b2547b0" + integrity sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ== + +"@rollup/rollup-darwin-arm64@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.1.tgz#02b522ab6ccc2c504634651985ff8e657b42c055" + integrity sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q== + +"@rollup/rollup-darwin-x64@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.1.tgz#217737f9f73de729fdfd7d529afebb6c8283f554" + integrity sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA== + +"@rollup/rollup-linux-arm-gnueabihf@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.1.tgz#a87e478ab3f697c7f4e74c8b1cac1e0667f8f4be" + integrity sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g== + +"@rollup/rollup-linux-arm64-gnu@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.1.tgz#4da6830eca27e5f4ca15f9197e5660952ca185c6" + integrity sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w== + +"@rollup/rollup-linux-arm64-musl@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.1.tgz#0b0ed35720aebc8f5e501d370a9ea0f686ead1e0" + integrity sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw== + +"@rollup/rollup-linux-powerpc64le-gnu@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.1.tgz#024ad04d162726f25e62915851f7df69a9677c17" + integrity sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw== + +"@rollup/rollup-linux-riscv64-gnu@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.1.tgz#180694d1cd069ddbe22022bb5b1bead3b7de581c" + integrity sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw== + +"@rollup/rollup-linux-s390x-gnu@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.1.tgz#f7b4e2b0ca49be4e34f9ef0b548c926d94edee87" + integrity sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA== + +"@rollup/rollup-linux-x64-gnu@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.1.tgz#0aaf79e5b9ccf7db3084fe6c3f2d2873a27d5af4" + integrity sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA== + +"@rollup/rollup-linux-x64-musl@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.1.tgz#38f0a37ca5015eb07dff86a1b6f94279c179f4ed" + integrity sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g== + +"@rollup/rollup-win32-arm64-msvc@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.1.tgz#84d48c55740ede42c77373f76e85f368633a0cc3" + integrity sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA== + +"@rollup/rollup-win32-ia32-msvc@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.1.tgz#c1e0bc39e20e760f0a526ddf14ae0543af796605" + integrity sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg== + +"@rollup/rollup-win32-x64-msvc@4.14.1": + version "4.14.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.1.tgz#299eee74b7d87e116083ac5b1ce8dd9434668294" + integrity sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew== + +"@scure/base@~1.1.4", "@scure/base@~1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== + +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== dependencies: - "@noble/curves" "~1.1.0" - "@noble/hashes" "~1.3.1" - "@scure/base" "~1.1.0" + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" -"@scure/bip39@1.2.1", "@scure/bip39@^1.0.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" - integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@scure/bip39@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== dependencies: - "@noble/hashes" "~1.3.0" - "@scure/base" "~1.1.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -3297,20 +3061,48 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== + dependencies: + type-detect "4.0.8" + "@sinonjs/commons@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" - integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^10.0.2": +"@sinonjs/fake-timers@^10.3.0": version "10.3.0" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: "@sinonjs/commons" "^3.0.0" +"@sinonjs/fake-timers@^11.2.2": + version "11.2.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz#50063cc3574f4a27bd8453180a04171c85cc9699" + integrity sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@sinonjs/samsam@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.0.tgz#0d488c91efb3fa1442e26abea81759dfc8b5ac60" + integrity sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew== + dependencies: + "@sinonjs/commons" "^2.0.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" + +"@sinonjs/text-encoding@^0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" + integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== + "@stablelib/aead@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" @@ -3440,9 +3232,9 @@ integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -3459,56 +3251,54 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@tybys/wasm-util@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.8.1.tgz#10360976b7f679497ea8526791006417ff304abb" + integrity sha512-GSsTwyBl4pIzsxAY5wroZdyQKyhXk0d8PCRZtrSZ2WEB1cBdrp2EgGBwHOGCZtIIPun/DL3+AykCv+J6fyRH4Q== + dependencies: + tslib "^2.4.0" + "@types/abstract-leveldown@*": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.3.tgz#c5c57b76c16d10ddf1a693bbadb62d0f8cdff8ad" - integrity sha512-YAdL8tIYbiKoFjAf/0Ir3mvRJ/iFvBP/FK0I8Xa5rGWgVcq0xWOEInzlJfs6TIPWFweEOTKgNSBdxneUcHRvaw== + version "7.2.5" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.5.tgz#db2cf364c159fb1f12be6cd3549f56387eaf8d73" + integrity sha512-/2B0nQF4UdupuxeKTJA2+Rj1D+uDemo6P4kMwKCpbfpnzeVaWSELTsAw4Lxn3VJD6APtRrZOCuYo+4nHUQfTfg== "@types/abstract-leveldown@7.2.1": version "7.2.1" resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.1.tgz#bb16403c17754b0c4d5772d71d03b924a03d4c80" integrity sha512-YK8irIC+eMrrmtGx0H4ISn9GgzLd9dojZWJaMbjp1YHLl2VqqNFBNrL5Q3KjGf4VE3sf/4hmq6EhQZ7kZp1NoQ== -"@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" + "@types/connect" "*" + "@types/node" "*" -"@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== +"@types/chai-as-promised@7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.6.tgz#3b08cbe1e7206567a480dc6538bade374b19e4e1" + integrity sha512-cQLhk8fFarRVZAXUQV1xEnZgMoPxqKojBvRkqPCKPQCzEhpbbSKl1Uu75kDng7k5Ln6LQLUmNBjLlFthCgm1NA== dependencies: - "@babel/types" "^7.0.0" + "@types/chai" "*" -"@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== +"@types/chai-subset@^1.3.3": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.5.tgz#3fc044451f26985f45625230a7f22284808b0a9a" + integrity sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@types/chai" "*" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== - dependencies: - "@babel/types" "^7.20.7" +"@types/chai@*", "@types/chai@^4.3.5": + version "4.3.14" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.14.tgz#ae3055ea2be43c91c9fd700a36d67820026d96e6" + integrity sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w== -"@types/body-parser@*": - version "1.19.3" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.3.tgz#fb558014374f7d9e56c8f34bab2042a3a07d25cd" - integrity sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ== - dependencies: - "@types/connect" "*" - "@types/node" "*" +"@types/chai@4.3.6": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" + integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== "@types/compression@1.7.2": version "1.7.2" @@ -3518,9 +3308,9 @@ "@types/express" "*" "@types/connect@*": - version "3.4.36" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" - integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" @@ -3531,17 +3321,22 @@ dependencies: "@types/node" "*" -"@types/dns-packet@*": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@types/dns-packet/-/dns-packet-5.6.1.tgz#87df594b65b076d5ce61becbeb3f9afa0962a09a" - integrity sha512-F8X3srlDYXQSVGfjAWl0lxd9mGfYtkneMA0QFQ3BFBw/BUmBlhlAbpRjmvE7LbW3wIxf01KHi20/bPstYK6ssA== +"@types/dns-packet@*", "@types/dns-packet@^5.6.5": + version "5.6.5" + resolved "https://registry.yarnpkg.com/@types/dns-packet/-/dns-packet-5.6.5.tgz#49fc29a40f5d30227ed028fa1ee82601d3745e15" + integrity sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q== dependencies: "@types/node" "*" +"@types/estree@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + "@types/express-serve-static-core@^4.17.33": - version "4.17.37" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz#7e4b7b59da9142138a2aaa7621f5abedce8c7320" - integrity sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg== + version "4.19.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz#3ae8ab3767d98d0b682cda063c3339e1e86ccfaa" + integrity sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ== dependencies: "@types/node" "*" "@types/qs" "*" @@ -3549,58 +3344,29 @@ "@types/send" "*" "@types/express@*": - version "4.17.18" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.18.tgz#efabf5c4495c1880df1bdffee604b143b29c4a95" - integrity sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ== + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" "@types/serve-static" "*" -"@types/graceful-fs@^4.1.3": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== - dependencies: - "@types/node" "*" - -"@types/http-cache-semantics@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz#abe102d06ccda1efdf0ed98c10ccf7f36a785a41" - integrity sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw== +"@types/http-cache-semantics@^4.0.2": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== "@types/http-errors@*": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.2.tgz#a86e00bbde8950364f8e7846687259ffcd96e8c2" - integrity sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== - dependencies: - "@types/istanbul-lib-report" "*" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== -"@types/jest@29.2.3": - version "29.2.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.3.tgz#f5fd88e43e5a9e4221ca361e23790d48fcf0a211" - integrity sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" +"@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/js-yaml@4.0.5": version "4.0.5" @@ -3608,9 +3374,9 @@ integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA== "@types/json-schema@^7.0.9": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" - integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" @@ -3622,15 +3388,10 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== -"@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - "@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/minimatch@^3.0.3": version "3.0.5" @@ -3638,22 +3399,29 @@ integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/mocha@10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" + integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== "@types/multicast-dns@^7.2.1": - version "7.2.1" - resolved "https://registry.yarnpkg.com/@types/multicast-dns/-/multicast-dns-7.2.1.tgz#6527b28ce62bcdc08a38f6a329a3d23145c99d95" - integrity sha512-A2PmB8MRcNVEkw6wzGT5rtBHqyHOVjiRMkJH+zpJKXipSi+GGkHg6JjNFApDiYK9WefJqkVG0taln1VMl4TGfw== + version "7.2.4" + resolved "https://registry.yarnpkg.com/@types/multicast-dns/-/multicast-dns-7.2.4.tgz#50bc357f832c884ad8540e372169108855bceb05" + integrity sha512-ib5K4cIDR4Ro5SR3Sx/LROkMDa0BHz0OPaCBL/OSPDsAXEGZ3/KQeS6poBKYVN7BfjXDL9lWNwzyHVgt/wkyCw== dependencies: "@types/dns-packet" "*" "@types/node" "*" "@types/node@*", "@types/node@>=13.7.0": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + dependencies: + undici-types "~5.26.4" "@types/node@18.11.9": version "18.11.9" @@ -3661,24 +3429,24 @@ integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== "@types/normalize-package-data@^2.4.0": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz#9b0e3e8533fe5024ad32d6637eb9589988b6fdca" - integrity sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/qs@*": - version "6.9.8" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== + version "6.9.14" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b" + integrity sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA== "@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/retry@0.12.1": version "0.12.1" @@ -3694,36 +3462,58 @@ "@types/node" "*" "@types/semver@^7.3.12": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04" - integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/send@*": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.2.tgz#af78a4495e3c2b79bfbdac3955fdd50e03cc98f2" - integrity sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw== + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-static@*": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.3.tgz#2cfacfd1fd4520bbc3e292cca432d5e8e2e3ee61" - integrity sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg== + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: "@types/http-errors" "*" - "@types/mime" "*" "@types/node" "*" + "@types/send" "*" -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@types/sinon-chai@3.2.9": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.9.tgz#71feb938574bbadcb176c68e5ff1a6014c5e69d4" + integrity sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ== + dependencies: + "@types/chai" "*" + "@types/sinon" "*" + +"@types/sinon@*": + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-17.0.3.tgz#9aa7e62f0a323b9ead177ed23a36ea757141a5fa" + integrity sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw== + dependencies: + "@types/sinonjs__fake-timers" "*" -"@types/validator@^13.7.10": - version "13.11.2" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.2.tgz#a2502325a3c0bd29f36dbac3b763223edd801e17" - integrity sha512-nIKVVQKT6kGKysnNt+xLobr+pFJNssJRi2s034wgWeFBUx01fI8BeHTW2TcRp7VcFu9QCYG8IlChTuovcm0oKQ== +"@types/sinon@10.0.16": + version "10.0.16" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.16.tgz#4bf10313bd9aa8eef1e50ec9f4decd3dd455b4d3" + integrity sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ== + dependencies: + "@types/sinonjs__fake-timers" "*" + +"@types/sinonjs__fake-timers@*": + version "8.1.5" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz#5fd3592ff10c1e9695d377020c033116cc2889f2" + integrity sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ== + +"@types/validator@^13.11.8": + version "13.11.9" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" + integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== "@types/varint@6.0.1": version "6.0.1" @@ -3733,9 +3523,9 @@ "@types/node" "*" "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@17.0.2": version "17.0.2" @@ -3744,13 +3534,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/yargs@^17.0.8": - version "17.0.25" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.25.tgz#3edd102803c97356fb4c805b2bbaf7dfc9ab6abc" - integrity sha512-gy7iPgwnzNvxgAEi2bXOHWCVOG6f7xsprVJH4MjlAWeBmJ7vh/Y1kwMtUrs64ztf24zVIRCpr3n/z6gm9QIkgg== - dependencies: - "@types/yargs-parser" "*" - "@typescript-eslint/eslint-plugin@5.43.0": version "5.43.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz#4a5248eb31b454715ddfbf8cfbf497529a0a78bc" @@ -3834,6 +3617,66 @@ "@typescript-eslint/types" "5.43.0" eslint-visitor-keys "^3.3.0" +"@vitest/coverage-v8@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-0.34.6.tgz#931d9223fa738474e00c08f52b84e0f39cedb6d1" + integrity sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw== + dependencies: + "@ampproject/remapping" "^2.2.1" + "@bcoe/v8-coverage" "^0.2.3" + istanbul-lib-coverage "^3.2.0" + istanbul-lib-report "^3.0.1" + istanbul-lib-source-maps "^4.0.1" + istanbul-reports "^3.1.5" + magic-string "^0.30.1" + picocolors "^1.0.0" + std-env "^3.3.3" + test-exclude "^6.0.0" + v8-to-istanbul "^9.1.0" + +"@vitest/expect@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.34.6.tgz#608a7b7a9aa3de0919db99b4cc087340a03ea77e" + integrity sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw== + dependencies: + "@vitest/spy" "0.34.6" + "@vitest/utils" "0.34.6" + chai "^4.3.10" + +"@vitest/runner@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.34.6.tgz#6f43ca241fc96b2edf230db58bcde5b974b8dcaf" + integrity sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ== + dependencies: + "@vitest/utils" "0.34.6" + p-limit "^4.0.0" + pathe "^1.1.1" + +"@vitest/snapshot@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.34.6.tgz#b4528cf683b60a3e8071cacbcb97d18b9d5e1d8b" + integrity sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w== + dependencies: + magic-string "^0.30.1" + pathe "^1.1.1" + pretty-format "^29.5.0" + +"@vitest/spy@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.34.6.tgz#b5e8642a84aad12896c915bce9b3cc8cdaf821df" + integrity sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ== + dependencies: + tinyspy "^2.1.1" + +"@vitest/utils@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.34.6.tgz#38a0a7eedddb8e7291af09a2409cb8a189516968" + integrity sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A== + dependencies: + diff-sequences "^29.4.3" + loupe "^2.3.6" + pretty-format "^29.5.0" + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -3887,7 +3730,7 @@ abortable-iterator@^4.0.2: get-iterator "^2.0.0" it-stream-types "^1.0.3" -abortable-iterator@^5.0.0, abortable-iterator@^5.0.1: +abortable-iterator@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/abortable-iterator/-/abortable-iterator-5.0.1.tgz#5d93eba6fa8287a973a9ea090c64ca08b3777780" integrity sha512-hlZ5Z8UwqrKsJcelVPEqDduZowJPBQJ9ZhBC2FXpja3lXy8X6MoI5uMzIgmrA8+3jcVnp8TF/tx+IBBqYJNUrg== @@ -3917,15 +3760,15 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== +acorn-walk@^8.1.1, acorn-walk@^8.2.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== -acorn@^8.4.1, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +acorn@^8.10.0, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== add-stream@^1.0.0: version "1.0.0" @@ -3966,6 +3809,13 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -3986,6 +3836,11 @@ ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -4003,11 +3858,6 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -4027,17 +3877,12 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - any-signal@3.0.1, any-signal@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-3.0.1.tgz#49cae34368187a3472e31de28fb5cb1430caa9a6" integrity sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg== -anymatch@^3.0.3: +anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -4080,13 +3925,13 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" array-differ@^3.0.0: version "3.0.0" @@ -4099,14 +3944,15 @@ array-ify@^1.0.0: integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== array-includes@^3.1.4: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-union@^2.1.0: @@ -4124,17 +3970,18 @@ array.prototype.flat@^1.2.5: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" arrify@^1.0.1: @@ -4165,9 +4012,9 @@ async-mutex@0.4.0: tslib "^2.4.0" async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" @@ -4184,11 +4031,6 @@ atomic-sleep@^1.0.0: resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" @@ -4197,24 +4039,16 @@ available-typed-arrays@^1.0.7: possible-typed-array-names "^1.0.0" avvio@^8.2.0: - version "8.2.1" - resolved "https://registry.yarnpkg.com/avvio/-/avvio-8.2.1.tgz#b5a482729847abb84d5aadce06511c04a0a62f82" - integrity sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw== + version "8.3.0" + resolved "https://registry.yarnpkg.com/avvio/-/avvio-8.3.0.tgz#1e019433d935730b814978a583eefac41a65082f" + integrity sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q== dependencies: + "@fastify/error" "^3.3.0" archy "^1.0.0" debug "^4.0.0" - fastq "^1.6.1" - -axios@^1.0.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" - integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" + fastq "^1.17.1" -axios@^1.6.1: +axios@^1.0.0, axios@^1.6.1: version "1.6.8" resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== @@ -4223,66 +4057,6 @@ axios@^1.6.1: form-data "^4.0.0" proxy-from-env "^1.1.0" -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -4299,9 +4073,9 @@ base64url@^3.0.1: integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== bcrypto@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/bcrypto/-/bcrypto-5.4.0.tgz#4046f0c44a4b301eff84de593b4f86fce8d91db2" - integrity sha512-KDX2CR29o6ZoqpQndcCxFZAtYA1jDMnXU3jmCfzP44g++Cu7AHHtZN/JbrN/MXAg9SLvtQ8XISG+eVD9zH1+Jg== + version "5.5.2" + resolved "https://registry.yarnpkg.com/bcrypto/-/bcrypto-5.5.2.tgz#7568186b31a1cfb142df50b22a87309287708e96" + integrity sha512-k3PF755oJM0+25iOVuraNedF5XneykxRwl+oBoMeQPfYee4qX8hHQhKCsNZWLthNYgi41GH2ysopd/8sDQDhEw== dependencies: bufio "~1.0.7" loady "~0.0.5" @@ -4348,6 +4122,11 @@ bin-links@^3.0.0: rimraf "^3.0.0" write-file-atomic "^4.0.0" +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + bindings@^1.3.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -4404,7 +4183,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -4416,29 +4195,10 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browserslist@^4.21.9: - version "4.21.11" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.11.tgz#35f74a3e51adc4d193dcd76ea13858de7b8fecb8" - integrity sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ== - dependencies: - caniuse-lite "^1.0.30001538" - electron-to-chromium "^1.4.526" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== buffer-from@^1.0.0: version "1.1.2" @@ -4482,19 +4242,12 @@ builtins@^1.0.3: integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8" + integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== dependencies: semver "^7.0.0" -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - byte-access@^1.0.0, byte-access@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/byte-access/-/byte-access-1.0.1.tgz#84badd99be3671c03f0dd6a039a9c963983724af" @@ -4507,6 +4260,11 @@ byte-size@^7.0.0: resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: version "16.1.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" @@ -4531,35 +4289,17 @@ cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: tar "^6.1.11" unique-filename "^2.0.0" -cacache@^17.0.0: - version "17.1.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" - integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^7.7.1" - minipass "^7.0.3" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - cacheable-lookup@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== cacheable-request@^10.2.1: - version "10.2.13" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.13.tgz#b7012bb4a2acdb18cb54d2dff751d766b3500842" - integrity sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA== + version "10.2.14" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" + integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== dependencies: - "@types/http-cache-semantics" "^4.0.1" + "@types/http-cache-semantics" "^4.0.2" get-stream "^6.0.1" http-cache-semantics "^4.1.1" keyv "^4.5.3" @@ -4567,15 +4307,7 @@ cacheable-request@^10.2.1: normalize-url "^8.0.0" responselike "^3.0.0" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-bind@^1.0.7: +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== @@ -4605,16 +4337,11 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.2.0: +camelcase@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001538: - version "1.0.30001539" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001539.tgz#325a387ab1ed236df2c12dc6cd43a4fff9903a44" - integrity sha512-hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA== - case@1.6.3, case@^1.6.3: version "1.6.3" resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" @@ -4625,7 +4352,14 @@ catering@^2.0.0, catering@^2.1.0: resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== -chai@^4.3.4: +chai-as-promised@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai@4.3.8: version "4.3.8" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== @@ -4638,7 +4372,7 @@ chai@^4.3.4: pathval "^1.1.1" type-detect "^4.0.5" -chai@^4.3.9: +chai@^4.3.10, chai@^4.3.4, chai@^4.3.9: version "4.4.1" resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== @@ -4668,28 +4402,33 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: ansi-styles "^4.1.0" supports-color "^7.1.0" -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== - -check-error@^1.0.3: +check-error@^1.0.2, check-error@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== dependencies: get-func-name "^2.0.2" +chokidar@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -4700,29 +4439,19 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - class-transformer@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.5.1.tgz#24147d5dffd2a6cea930a3250a677addf96ab336" integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== -class-validator@0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.14.0.tgz#40ed0ecf3c83b2a8a6a320f4edb607be0f0df159" - integrity sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A== +class-validator@0.14.1: + version "0.14.1" + resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.14.1.tgz#ff2411ed8134e9d76acfeb14872884448be98110" + integrity sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ== dependencies: - "@types/validator" "^13.7.10" - libphonenumber-js "^1.10.14" - validator "^13.7.0" + "@types/validator" "^13.11.8" + libphonenumber-js "^1.10.53" + validator "^13.9.0" clean-stack@^2.0.0: version "2.2.0" @@ -4742,9 +4471,9 @@ cli-spinners@2.6.1: integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== cli-spinners@^2.5.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" - integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-width@^3.0.0: version "3.0.0" @@ -4790,16 +4519,6 @@ cmd-shim@^5.0.0: dependencies: mkdirp-infer-owner "^2.0.0" -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -4992,20 +4711,15 @@ conventional-recommended-bump@^6.1.0: meow "^8.0.0" q "^1.5.1" -convert-source-map@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== core-util-is@~1.0.0: version "1.0.3" @@ -5023,25 +4737,12 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -5065,6 +4766,33 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + datastore-core@8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/datastore-core/-/datastore-core-8.0.1.tgz#13dc8496b1cc756a481fa77031715b8b50b19860" @@ -5111,7 +4839,7 @@ dateformat@^4.6.3: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -5150,6 +4878,11 @@ decamelize@^1.1.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + decimal.js@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" @@ -5167,11 +4900,6 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - deep-eql@^4.1.2, deep-eql@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" @@ -5184,11 +4912,6 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - default-gateway@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-7.2.2.tgz#85e6d88fde0f58703bab7744ed9d5330fa6b3f6c" @@ -5208,16 +4931,7 @@ defer-to-connect@^2.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-data-property@^1.1.4: +define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -5231,7 +4945,7 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -5275,11 +4989,6 @@ detect-indent@^6.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - dezalgo@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" @@ -5293,16 +5002,26 @@ dgram@^1.0.1: resolved "https://registry.yarnpkg.com/dgram/-/dgram-1.0.1.tgz#37f3b200f8033a5ff759303089c81ce361b651c3" integrity sha512-zJVFL1EWfKtE0z2VN6qfpn/a+qG1viEzcwJA0EjtzS76ONSE3sEyWBwEbo32hS4IFw/EWVuWN+8b89aPW6It2A== -diff-sequences@^29.6.3: +diff-sequences@^29.4.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -5311,16 +5030,16 @@ dir-glob@^3.0.1: path-type "^4.0.0" dns-over-http-resolver@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-2.1.2.tgz#fb478af244dd4fed5e0f798a3e6426d92730378c" - integrity sha512-Bjbf6aZjr3HMnwGslZnoW3MJVqgbTsh39EZWpikx2yLl9xEjw4eZhlOHCFhkOu89zoWaS4rqe2Go53TXW4Byiw== + version "2.1.3" + resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-2.1.3.tgz#bb7f2e10cc18d960339a6e30e21b8c1d99be7b38" + integrity sha512-zjRYFhq+CsxPAouQWzOsxNMvEN+SHisjzhX8EMxd2Y0EG3thvn6wXQgMJLnTDImkhe4jhLbOQpXtL10nALBOSA== dependencies: debug "^4.3.1" native-fetch "^4.0.2" receptacle "^1.3.2" undici "^5.12.0" -dns-packet@^5.2.2: +dns-packet@^5.2.2, dns-packet@^5.6.1: version "5.6.1" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== @@ -5369,11 +5088,6 @@ duplexer@^0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - ejs@^3.1.7: version "3.1.9" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" @@ -5381,11 +5095,6 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.526: - version "1.4.529" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.529.tgz#8c3377a05e5737f899770d14524dd8e2e4cb2351" - integrity sha512-6uyPyXTo8lkv8SWAmjKFbG42U073TXlzD4R8rW3EzuznhFS2olCIAfjjQtV2dV2ar/vRF55KUd3zQYnCB0dd3A== - elliptic@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -5399,21 +5108,11 @@ elliptic@6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -5441,9 +5140,9 @@ env-paths@^2.2.0: integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@^7.7.4: - version "7.10.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" - integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== + version "7.12.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.12.0.tgz#b56723b39c2053d67ea5714f026d05d4f5cc7acd" + integrity sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg== err-code@^2.0.2: version "2.0.3" @@ -5462,50 +5161,57 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" - object-inspect "^1.12.3" + 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" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.15" es-define-property@^1.0.0: version "1.0.0" @@ -5514,26 +5220,33 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.3.0: +es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: - has "^1.0.3" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -5544,26 +5257,50 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +esbuild@^0.20.1: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" + escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - eslint-config-airbnb-base@15.0.0: version "15.0.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" @@ -5584,9 +5321,9 @@ eslint-import-resolver-node@^0.3.6: resolve "^1.22.4" eslint-module-utils@^2.7.3: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" @@ -5609,6 +5346,14 @@ eslint-plugin-import@2.26.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" +eslint-plugin-mocha@10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-10.2.0.tgz#15b05ce5be4b332bb0d76826ec1c5ebf67102ad6" + integrity sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ== + dependencies: + eslint-utils "^3.0.0" + rambda "^7.4.0" + eslint-plugin-prettier@4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" @@ -5743,21 +5488,21 @@ esutils@^2.0.2: integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz#b3fc1eb789509ee30db0bf99a2988ccacb8d0397" + integrity sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw== dependencies: - js-sha3 "^0.8.0" + "@noble/hashes" "^1.4.0" ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" - integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== dependencies: - "@noble/curves" "1.1.0" - "@noble/hashes" "1.3.1" - "@scure/bip32" "1.3.1" - "@scure/bip39" "1.2.1" + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" ethers@5.7.2, ethers@^5.1.0, ethers@^5.6.8, ethers@^5.7.2: version "5.7.2" @@ -5858,11 +5603,6 @@ execa@^7.1.1: signal-exit "^3.0.7" strip-final-newline "^3.0.0" -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" @@ -5870,17 +5610,6 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - exponential-backoff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" @@ -5901,9 +5630,9 @@ fast-content-type-parse@^1.0.0: integrity sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ== fast-copy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.1.tgz#9e89ef498b8c04c1cd76b33b8e14271658a732aa" - integrity sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA== + version "3.0.2" + resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.2.tgz#59c68f59ccbcac82050ba992e0d5c389097c9d35" + integrity sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ== fast-decode-uri-component@^1.0.1: version "1.0.1" @@ -5936,7 +5665,7 @@ fast-glob@3.2.7: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@3.3.2: +fast-glob@3.3.2, fast-glob@^3.2.9: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -5947,32 +5676,22 @@ fast-glob@3.3.2: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-json-stringify@^5.7.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.8.0.tgz#b229ed01ac5f92f3b82001a916c31324652f46d7" - integrity sha512-VVwK8CFMSALIvt14U8AvrSzQAwN/0vaVRiFFUVlpnXSnDGrSkOAO5MtzyN8oQNjLd5AqTW5OZRgyjoNuAuR3jQ== + version "5.14.1" + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.14.1.tgz#3b1aa5a823e4dd5414ec079d32f51e33dd887766" + integrity sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw== dependencies: - "@fastify/deepmerge" "^1.0.0" + "@fastify/merge-json-schemas" "^0.1.0" ajv "^8.10.0" - ajv-formats "^2.1.1" + ajv-formats "^3.0.1" fast-deep-equal "^3.1.3" fast-uri "^2.1.0" + json-schema-ref-resolver "^1.0.1" rfdc "^1.2.0" fast-levenshtein@^2.0.6: @@ -5988,9 +5707,9 @@ fast-querystring@^1.0.0: fast-decode-uri-component "^1.0.1" fast-redact@^3.1.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== + version "3.5.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== fast-safe-stringify@^2.1.1: version "2.1.1" @@ -5998,9 +5717,9 @@ fast-safe-stringify@^2.1.1: integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== fast-uri@^2.0.0, fast-uri@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.2.0.tgz#519a0f849bef714aad10e9753d69d8f758f7445a" - integrity sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.3.0.tgz#bdae493942483d299e7285dcb4627767d42e2793" + integrity sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw== fastify-plugin@^4.0.0: version "4.5.1" @@ -6028,20 +5747,13 @@ fastify@4.14.1: semver "^7.3.7" tiny-lru "^10.0.0" -fastq@^1.6.0, fastq@^1.6.1: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== +fastq@^1.17.1, fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - figures@3.2.0, figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -6076,9 +5788,9 @@ fill-range@^7.0.1: to-regex-range "^5.0.1" find-my-way@^7.3.0: - version "7.6.2" - resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-7.6.2.tgz#4dd40200d3536aeef5c7342b10028e04cf79146c" - integrity sha512-0OjHn1b1nCX3eVbm9ByeEHiscPYiHLfhei1wOUU9qffQkk98wE0Lo8VrVYfSGMgnSnDh86DxedduAnBf4nwUEw== + version "7.7.0" + resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-7.7.0.tgz#d7b51ca6046782bcddd5a8435e99ad057e5a8876" + integrity sha512-+SrHpvQ52Q6W9f3wJoJBbAQULJuNEEQwBvlvYwACDhBTLOTMiQ0HYWh4+vC3OivGP2ENcTI1oKlFA2OepJNjhQ== dependencies: fast-deep-equal "^3.1.3" fast-querystring "^1.0.0" @@ -6118,11 +5830,11 @@ findup-sync@^5.0.0: resolve-dir "^1.0.1" flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.2.7" + flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" @@ -6131,21 +5843,16 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.2.7: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== follow-redirects@^1.12.1, follow-redirects@^1.15.6: version "1.15.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== -follow-redirects@^1.15.0: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== - for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -6153,14 +5860,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - "forge-std@git+https://github.com/foundry-rs/forge-std#4513bc2": version "1.7.6" resolved "git+https://github.com/foundry-rs/forge-std#4513bc2063f23c57bee6558799584b518d387a39" @@ -6194,16 +5893,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^11.1.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.1.1: +fs-extra@^11.1.0, fs-extra@^11.1.1: version "11.2.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== @@ -6229,28 +5919,16 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0: dependencies: minipass "^3.0.0" -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2: +fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -6285,11 +5963,6 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -6300,17 +5973,7 @@ get-func-name@^2.0.0, get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -6331,11 +5994,6 @@ get-iterator@^2.0.0: resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-2.0.1.tgz#a904829f61bace789e0d64bd1a504c511a015c3f" integrity sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg== -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - get-pkg-repo@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" @@ -6356,13 +6014,14 @@ get-stream@^6.0.0, get-stream@^6.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" git-raw-commits@^2.0.8: version "2.0.11" @@ -6400,9 +6059,9 @@ git-up@^7.0.0: parse-url "^8.1.0" git-url-parse@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" - integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== + version "13.1.1" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.1.tgz#664bddf0857c6a75b3c1f0ae6239abb08a1486d4" + integrity sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ== dependencies: git-up "^7.0.0" @@ -6413,7 +6072,7 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -glob-parent@^5.1.1, glob-parent@^5.1.2: +glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -6439,16 +6098,17 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.2.2: - version "10.3.9" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.9.tgz#181ae87640ecce9b2fc5b96e4e2d70b7c3629ab8" - integrity sha512-2tU/LKevAQvDVuVJ9pg9Yv9xcbSh+TqHuTaXTNbQwf+0kDl9Fm6bMovi4Nm5c8TVvfxo2LLcqCGtmO9KoJaGWg== +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" glob@^7.1.3, glob@^7.1.4: version "7.2.3" @@ -6493,15 +6153,10 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.15.0, globals@^13.19.0: - version "13.22.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.22.0.tgz#0c9fcb9c48a2494fbb5edbfee644285543eba9d8" - integrity sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -6548,7 +6203,7 @@ got@12.5.3: p-cancelable "^3.0.0" responselike "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -6590,38 +6245,24 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-property-descriptors@^1.0.2: +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-tostringtag@^1.0.2: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -6634,11 +6275,9 @@ has-unicode@^2.0.1: integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -6653,13 +6292,18 @@ hashlru@^2.3.0: resolved "https://registry.yarnpkg.com/hashlru/-/hashlru-2.3.0.tgz#5dc15928b3f6961a2056416bb3a4910216fdfb51" integrity sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A== -hasown@^2.0.0: +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + help-me@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/help-me/-/help-me-4.2.0.tgz#50712bfd799ff1854ae1d312c36eafcea85b0563" @@ -6730,9 +6374,9 @@ http-proxy-agent@^5.0.0: debug "4" http2-wrapper@^2.1.10: - version "2.2.0" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" - integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== + version "2.2.1" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== dependencies: quick-lru "^5.1.1" resolve-alpn "^1.2.0" @@ -6789,9 +6433,9 @@ ignore-walk@^5.0.1: minimatch "^5.0.1" ignore@^5.0.4, ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -6885,14 +6529,13 @@ interface-datastore@^7.0.0: nanoid "^4.0.0" uint8arrays "^4.0.2" -interface-datastore@^8.2.0: - version "8.2.5" - resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-8.2.5.tgz#d6959a7a89b22652791397b94a5a3367a1533742" - integrity sha512-kvLGJMz3RPoJF/g5DbEvfWWempIiSBLVMf63b0PBsziVcSkj0ofzHYI86v8vqpGedkQ81DtPCUKyvX9W7zWvrQ== +interface-datastore@^8.2.0, interface-datastore@^8.2.11: + version "8.2.11" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-8.2.11.tgz#1d555ce6218ab6cba6291fc361debe9713590207" + integrity sha512-9E0iXehfp/j0UbZ2mvlYB4K9pP7uQBCppfuy8WHs1EHF6wLQrM9+zwyX+8Qt6HnH4GKZRyXX/CNXm6oD4+QYgA== dependencies: interface-store "^5.0.0" - nanoid "^4.0.0" - uint8arrays "^4.0.2" + uint8arrays "^5.0.2" interface-store@^3.0.0: version "3.0.4" @@ -6900,29 +6543,32 @@ interface-store@^3.0.0: integrity sha512-OjHUuGXbH4eXSBx1TF1tTySvjLldPLzRSYYXJwrEQI+XfH5JWYZofr0gVMV4F8XTwC+4V7jomDYkvGRmDSRKqQ== interface-store@^5.0.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-5.1.4.tgz#4e9e759964f76750640872db02cc90b04c4c8cf9" - integrity sha512-SI2co5IAxAybBc9egRM2bXvHOa1RPh5SQQkO6di6t/aX92RbtzP4t8raB0l3GTzQmJADaBbzz8Tfa1QLgfMdGQ== + version "5.1.8" + resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-5.1.8.tgz#94bf867d165b5c904cccf09adeba215a5b0f459e" + integrity sha512-7na81Uxkl0vqk0CBPO5PvyTkdaJBaezwUJGsMOz7riPOq0rJt+7W31iaopaMICWea/iykUsvNlPx/Tc+MxC3/w== -internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + es-errors "^1.3.0" + hasown "^2.0.0" side-channel "^1.0.4" +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + ip-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632" integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -6941,14 +6587,13 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" @@ -6962,6 +6607,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" @@ -6988,11 +6640,18 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" is-date-object@^1.0.1: version "1.0.5" @@ -7021,11 +6680,6 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" @@ -7033,7 +6687,7 @@ is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -7060,10 +6714,10 @@ is-loopback-addr@^2.0.1: resolved "https://registry.yarnpkg.com/is-loopback-addr/-/is-loopback-addr-2.0.2.tgz#70a6668fa3555d47caebdcee045745ab80adf5e4" integrity sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" @@ -7122,12 +6776,12 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-ssh@^1.4.0: version "1.4.0" @@ -7167,14 +6821,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-typed-array@^1.1.3: +is-typed-array@^1.1.13, is-typed-array@^1.1.3: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -7231,33 +6878,11 @@ isobject@^3.0.1: integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz#7a8af094cbfff1d5bb280f62ce043695ae8dd5b8" - integrity sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-report@^3.0.0: +istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== @@ -7266,7 +6891,7 @@ istanbul-lib-report@^3.0.0: make-dir "^4.0.0" supports-color "^7.1.0" -istanbul-lib-source-maps@^4.0.0: +istanbul-lib-source-maps@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== @@ -7275,10 +6900,10 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== +istanbul-reports@^3.1.5: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -7333,9 +6958,9 @@ it-first@^2.0.0: integrity sha512-noC1oEQcWZZMUwq7VWxHNLML43dM+5bviZpfmkxkXlvBe60z7AFRqpZSga9uQBo792jKv9otnn1IjA4zwgNARw== it-first@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/it-first/-/it-first-3.0.3.tgz#76d4b7b0c761114690dd46d730333ac55ee4e350" - integrity sha512-RC8tplctsDpoBUljwsp1viiyaR5fPvMe+FgbbcU0sFjKkJa7iwbB4CCPhHtVYSdjsrREfr0QEotfQrBoGyt7Dw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/it-first/-/it-first-3.0.4.tgz#d68c8ae646ea402cd5e650c352da69988a310342" + integrity sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg== it-foreach@^1.0.0: version "1.0.1" @@ -7365,16 +6990,16 @@ it-length-prefixed@^8.0.2: uint8arrays "^4.0.2" it-length-prefixed@^9.0.0: - version "9.0.3" - resolved "https://registry.yarnpkg.com/it-length-prefixed/-/it-length-prefixed-9.0.3.tgz#73af16f786cab60a0a9bfc2997e88eb26d3a72ca" - integrity sha512-YAu424ceYpXctxtjcLOqn7vJq082CaoP8J646ZusYISfQc3bpzQErgTUqMFj81V262KG2W9/YMBHsy6A/4yvmg== + version "9.0.4" + resolved "https://registry.yarnpkg.com/it-length-prefixed/-/it-length-prefixed-9.0.4.tgz#8096c3270420fe8abaa920c7b4d5e5895144008e" + integrity sha512-lz28fykbG0jq7s5XtvlzGxO5BeSOw6ikymkRllxjL21V5VKLcvB4pHr9wPvEnsAJ2et1xpOk3BRTMq9XrhgKsg== dependencies: err-code "^3.0.1" it-reader "^6.0.1" it-stream-types "^2.0.1" uint8-varint "^2.0.1" uint8arraylist "^2.0.0" - uint8arrays "^4.0.2" + uint8arrays "^5.0.1" it-map@1.0.5: version "1.0.5" @@ -7406,9 +7031,9 @@ it-merge@^2.0.0: it-pushable "^3.1.0" it-merge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/it-merge/-/it-merge-3.0.2.tgz#9070c85fda022cd210811960c2153e16a5978356" - integrity sha512-bMk2km8lTz+Rwv30hzDUdGIcqQkOemFJqmGT2wqQZ6/zHKCsYqdRunPrteCqHLV/nIVhUK8nZZkDA2eJ4MJZiA== + version "3.0.3" + resolved "https://registry.yarnpkg.com/it-merge/-/it-merge-3.0.3.tgz#c7d407c8e0473accf7f9958ce2e0f60276002e84" + integrity sha512-FYVU15KC5pb/GQX1Ims+lee8d4pdqGVCpWr0lkNj8o4xuNo7jY71k6GuEiWdP+T7W1bJqewSxX5yoTy5yZpRVA== dependencies: it-pushable "^3.2.0" @@ -7458,10 +7083,10 @@ it-pushable@^1.4.0: dependencies: fast-fifo "^1.0.0" -it-pushable@^3.0.0, it-pushable@^3.1.0, it-pushable@^3.1.2, it-pushable@^3.1.3, it-pushable@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/it-pushable/-/it-pushable-3.2.1.tgz#72d7ccf7e7c0ccecf8cbaf74064f7be56e775c59" - integrity sha512-sLFz2Q0oyDCJpTciZog7ipP4vSftfPy3e6JnH6YyztRa1XqkpGQaafK3Jw/JlfEBtCXfnX9uVfcpu3xpSAqCVQ== +it-pushable@^3.0.0, it-pushable@^3.1.0, it-pushable@^3.1.2, it-pushable@^3.1.3, it-pushable@^3.2.0, it-pushable@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/it-pushable/-/it-pushable-3.2.3.tgz#e2b80aed90cfbcd54b620c0a0785e546d4e5f334" + integrity sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg== dependencies: p-defer "^4.0.0" @@ -7512,15 +7137,6 @@ it-take@^2.0.0: resolved "https://registry.yarnpkg.com/it-take/-/it-take-2.0.1.tgz#f9e5ddf0b73a18ba00e62fb532d9d3cde3fe4ce6" integrity sha512-DL7kpZNjuoeSTnB9dMAJ0Z3m2T29LRRAU+HIgkiQM+1jH3m8l9e/1xpWs8JHTlbKivbqSFrQMTc8KVcaQNmsaA== -jackspeak@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.5.tgz#443f237f9eeeb0d7c6ec34835ef5289bb4acb068" - integrity sha512-Ratx+B8WeXLAtRJn26hrhY8S1+Jz6pxPMrkrdkgb/NstTNiqMhX0/oFVu5wX+g5n6JlEu2LPsDJmY8nRP4+alw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - jake@^10.8.5: version "10.8.7" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" @@ -7531,390 +7147,20 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" +joycon@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" + integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== -jest-cli@^29.3.1: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-express@1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/jest-express/-/jest-express-1.12.0.tgz#d193b4011b67a01ab4b62206d6e28e759cc8bf85" - integrity sha512-HVpmEtVLHgT/Wh2bGy3Fy6mXdoS0Clj7d4/cFnptw2JkCVepC3FOiboavqLYZv4x2oytpWgOqikhVr84f9CwZw== - dependencies: - jest-node-http "1.0.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-node-http@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jest-node-http/-/jest-node-http-1.0.0.tgz#f692b0e3abfafd49b74a1953369478b59c9973b1" - integrity sha512-WcO1nqqkgwZ4sHAJ90YGqOiFYFkDm9eP8HsBwadedlJaF2T5JHM1BmnpskHDDlB3B4JzRl6CJgOpSOAOwoRfhQ== - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^29.0.0, jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.3.1.tgz#c130c0d551ae6b5459b8963747fed392ddbde122" - integrity sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA== - dependencies: - "@jest/core" "^29.3.1" - "@jest/types" "^29.3.1" - import-local "^3.0.2" - jest-cli "^29.3.1" - -joycon@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" - integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== - -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== js-tokens@^4.0.0: version "4.0.0" @@ -7928,7 +7174,7 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -js-yaml@^3.10.0, js-yaml@^3.13.1: +js-yaml@^3.10.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -7946,11 +7192,6 @@ jsel@^1.1.6: resolved "https://registry.yarnpkg.com/jsel/-/jsel-1.1.6.tgz#9257fee6c6e8ad8e75d5706503fe84f376035896" integrity sha512-7E6r8kVzjmKhwXR/82Z+43edfOJGRvLvx6cJZ+SS2MGAPPtYZGnaIsFHpQMA1IbIPA9twDProkob4IIAJ0ZqSw== -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -7966,6 +7207,13 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-schema-ref-resolver@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz#6586f483b76254784fc1d2120f717bdc9f0a99bf" + integrity sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw== + dependencies: + fast-deep-equal "^3.1.3" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -7998,7 +7246,7 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.2.1, json5@^2.2.2, json5@^2.2.3: +json5@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -8008,6 +7256,11 @@ jsonc-parser@3.2.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== +jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -8032,10 +7285,15 @@ just-diff@^5.0.1: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== +just-extend@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-6.2.0.tgz#b816abfb3d67ee860482e7401564672558163947" + integrity sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw== + keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -8044,11 +7302,6 @@ kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - lerna@6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/lerna/-/lerna-6.4.1.tgz#a1e5abcb6c00de3367f50d75eca449e382525e0f" @@ -8092,11 +7345,6 @@ level-supports@^2.0.1: resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -8200,18 +7448,18 @@ libp2p@0.42.2: wherearewe "^2.0.0" xsalsa20 "^1.1.0" -libphonenumber-js@^1.10.14: - version "1.10.44" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.44.tgz#6709722461173e744190494aaaec9c1c690d8ca8" - integrity sha512-svlRdNBI5WgBjRC20GrCfbFiclbF0Cx+sCcQob/C1r57nsoq0xg8r65QbTyVyweQIlB33P+Uahyho6EMYgcOyQ== +libphonenumber-js@^1.10.53: + version "1.10.60" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.60.tgz#1160ec5b390d46345032aa52be7ffa7a1950214b" + integrity sha512-Ctgq2lXUpEJo5j1762NOzl2xo7z7pqmVWYai0p07LvAkQ32tbPv3wb+tcUeHEiXhKU5buM4H9MXsXo6OlM6C2g== light-my-request@^5.6.1: - version "5.11.0" - resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.11.0.tgz#90e446c303b3a47b59df38406d5f5c2cf224f2d1" - integrity sha512-qkFCeloXCOMpmEdZ/MV91P8AT4fjwFXWaAFz3lUeStM8RcoM1ks4J/F8r1b3r6y/H4u3ACEJ1T+Gv5bopj7oDA== + version "5.13.0" + resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.13.0.tgz#b29905e55e8605b77fee2a946e17b219bca35113" + integrity sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ== dependencies: - cookie "^0.5.0" - process-warning "^2.0.0" + cookie "^0.6.0" + process-warning "^3.0.0" set-cookie-parser "^2.4.1" lines-and-columns@^1.1.6: @@ -8220,9 +7468,9 @@ lines-and-columns@^1.1.6: integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lines-and-columns@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" - integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== + version "2.0.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== load-json-file@^4.0.0: version "4.0.0" @@ -8249,6 +7497,11 @@ loady@~0.0.5: resolved "https://registry.yarnpkg.com/loady/-/loady-0.0.5.tgz#b17adb52d2fb7e743f107b0928ba0b591da5d881" integrity sha512-uxKD2HIj042/HBx77NBcmEPsD+hxCgAtjEWlYNScuUjIsh/62Uyu39GOR68TBR68v+jqDL9zfftCWoUo4y03sQ== +local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -8271,16 +7524,16 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -8291,7 +7544,7 @@ lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.1.0: +log-symbols@4.1.0, log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -8317,14 +7570,7 @@ longbits@^1.1.0: byte-access "^1.0.1" uint8arraylist "^2.0.0" -loupe@^2.3.1: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== - dependencies: - get-func-name "^2.0.0" - -loupe@^2.3.6: +loupe@^2.3.1, loupe@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== @@ -8336,13 +7582,6 @@ lowercase-keys@^3.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -8355,10 +7594,12 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" - integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== +magic-string@^0.30.1: + version "0.30.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.9.tgz#8927ae21bfdd856310e07a1bc8dd5e73cb6c251d" + integrity sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" make-dir@^2.1.0: version "2.1.0" @@ -8382,12 +7623,12 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@1.x, make-error@^1.1.1: +make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^10.0.6: +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: version "10.2.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== @@ -8409,34 +7650,6 @@ make-fetch-happen@^10.0.6: socks-proxy-agent "^7.0.0" ssri "^9.0.0" -make-fetch-happen@^11.0.3: - version "11.1.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" - integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" - http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^10.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" @@ -8575,6 +7788,13 @@ minimatch@3.0.5: dependencies: brace-expansion "^1.1.7" +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -8589,13 +7809,6 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -8628,17 +7841,6 @@ minipass-fetch@^2.0.3: optionalDependencies: encoding "^0.1.13" -minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -8680,11 +7882,6 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" - integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== - minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -8707,6 +7904,16 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mlly@^1.2.0, mlly@^1.4.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f" + integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.0.3" + ufo "^1.3.2" + mnemonist@0.39.5: version "0.39.5" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.39.5.tgz#5850d9b30d1b2bc57cc8787e5caa40f6c3420477" @@ -8714,19 +7921,45 @@ mnemonist@0.39.5: dependencies: obliterator "^2.0.1" +mocha@10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== mortice@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mortice/-/mortice-3.0.1.tgz#27c1943b1841502c7b27a9c8fea789f87c124515" - integrity sha512-eyDUsl1nCR9+JtNksKnaESLP9MgAXCA4w1LTtsmOSQNsThnv++f36rrBu5fC/fdGIwTJZmbiaR/QewptH93pYA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/mortice/-/mortice-3.0.4.tgz#34aadef768161e9dc49a7f73637b7858bcb7c6fa" + integrity sha512-MUHRCAztSl4v/dAmK8vbYi5u1n9NZtQu4H3FsqS7qgMFQIAFw9lTpHiErd9kJpapqmvEdD1L3dUmiikifAvLsQ== dependencies: - nanoid "^4.0.0" observable-webworkers "^2.0.1" - p-queue "^7.2.0" + p-queue "^8.0.1" p-timeout "^6.0.0" ms@2.0.0: @@ -8739,7 +7972,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -8763,9 +7996,14 @@ multiformats@^11.0.0, multiformats@^11.0.2: integrity sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg== multiformats@^12.0.1: - version "12.1.1" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-12.1.1.tgz#bebd4e121ccdb7e9b2f2db407f839fc9e963a3b7" - integrity sha512-GBSToTmri2vJYs8wqcZQ8kB21dCaeTOzHTIAlr8J06C1eL6UbzqURXFZ5Fl0EYm9GAFz1IlYY8SxGOs9G9NJRg== + version "12.1.3" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-12.1.3.tgz#cbf7a9861e11e74f8228b21376088cb43ba8754e" + integrity sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw== + +multiformats@^13.0.0, multiformats@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.1.0.tgz#5aa9d2175108a448fc3bdb54ba8a3d0b6cab3ac3" + integrity sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ== multiformats@^9.4.2: version "9.9.0" @@ -8788,6 +8026,16 @@ mute-stream@0.0.8, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + nanoid@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-4.0.2.tgz#140b3c5003959adbebf521c170f282c5e7f9fb9e" @@ -8828,6 +8076,17 @@ netmask@^2.0.2: resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== +nise@^5.1.4: + version "5.1.9" + resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.9.tgz#0cb73b5e4499d738231a473cd89bd8afbb618139" + integrity sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers" "^11.2.2" + "@sinonjs/text-encoding" "^0.7.2" + just-extend "^6.2.0" + path-to-regexp "^6.2.1" + node-addon-api@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" @@ -8846,20 +8105,20 @@ node-forge@^1.1.0, node-forge@^1.3.1: integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-gyp-build@^4.3.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" - integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== node-gyp@^9.0.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" - integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== + version "9.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== dependencies: env-paths "^2.2.0" exponential-backoff "^3.1.1" glob "^7.1.4" graceful-fs "^4.2.6" - make-fetch-happen "^11.0.3" + make-fetch-happen "^10.0.3" nopt "^6.0.0" npmlog "^6.0.0" rimraf "^3.0.2" @@ -8867,16 +8126,6 @@ node-gyp@^9.0.0: tar "^6.1.2" which "^2.0.2" -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" @@ -8921,15 +8170,15 @@ normalize-package-data@^4.0.0: semver "^7.3.5" validate-npm-package-license "^3.0.4" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" - integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== npm-bundled@^1.1.1: version "1.1.2" @@ -9022,9 +8271,9 @@ npm-run-path@^4.0.1: path-key "^3.0.0" npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== dependencies: path-key "^4.0.0" @@ -9097,43 +8346,43 @@ nx@15.9.7, "nx@>=15.4.2 < 16": "@nrwl/nx-win32-arm64-msvc" "15.9.7" "@nrwl/nx-win32-x64-msvc" "15.9.7" -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +object.assign@^4.1.2, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" object.entries@^1.1.5: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" object.values@^1.1.5: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" obliterator@^2.0.1: version "2.0.4" @@ -9151,9 +8400,9 @@ observable-webworkers@^2.0.1: integrity sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw== on-exit-leak-free@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" - integrity sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w== + version "2.1.2" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" + integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -9228,9 +8477,9 @@ p-defer@^3.0.0: integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== p-defer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-4.0.0.tgz#8082770aeeb10eb6b408abe91866738741ddd5d2" - integrity sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-4.0.1.tgz#d12c6d41420785ed0d162dbd86b71ba490f7f99e" + integrity sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A== p-fifo@^1.0.0: version "1.0.0" @@ -9259,7 +8508,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2, p-limit@^3.1.0: +p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -9327,6 +8576,14 @@ p-queue@^7.2.0: eventemitter3 "^5.0.1" p-timeout "^5.0.2" +p-queue@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-8.0.1.tgz#718b7f83836922ef213ddec263ff4223ce70bef8" + integrity sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA== + dependencies: + eventemitter3 "^5.0.1" + p-timeout "^6.1.2" + p-reduce@^2.0.0, p-reduce@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" @@ -9346,9 +8603,9 @@ p-retry@^5.0.0: retry "^0.13.1" p-settle@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/p-settle/-/p-settle-5.1.0.tgz#6abf85e073d6b137b48ed70f8a8d94660454bd17" - integrity sha512-ujR6UFfh09ziOKyC5aaJak5ZclsjlLw57SYtFZg6yllMofyygnaibQRZ4jf6QPWqoOCGUXyb1cxUKELeAyKO7g== + version "5.1.1" + resolved "https://registry.yarnpkg.com/p-settle/-/p-settle-5.1.1.tgz#9300778f896d5c01e4361b8ab45d003548574c3e" + integrity sha512-VLgSBpA71aMncPVP5Es4nhQYxcxN0lit8hGlobJke8YTAhtwdRDu/s4KePP5gCT5LFfZty3qosBFYMgD5rFpCg== dependencies: p-limit "^4.0.0" p-reflect "^3.1.0" @@ -9365,7 +8622,7 @@ p-timeout@^5.0.2: resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== -p-timeout@^6.0.0, p-timeout@^6.1.1: +p-timeout@^6.0.0, p-timeout@^6.1.1, p-timeout@^6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.2.tgz#22b8d8a78abf5e103030211c5fc6dee1166a6aa5" integrity sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ== @@ -9438,7 +8695,7 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0, parse-json@^5.2.0: +parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -9497,13 +8754,10 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-to-regexp@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.2.tgz#324377a83e5049cbecadc5554d6a63a9a4866b36" + integrity sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw== path-type@^3.0.0: version "3.0.0" @@ -9517,6 +8771,11 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" @@ -9527,7 +8786,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -9552,7 +8811,7 @@ pify@^5.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== -pino-abstract-transport@^1.0.0, pino-abstract-transport@v1.1.0: +pino-abstract-transport@^1.0.0, pino-abstract-transport@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz#083d98f966262164504afb989bccd05f665937a8" integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== @@ -9611,27 +8870,22 @@ pino@8.11.0: thread-stream "^2.0.0" pino@^8.5.0: - version "8.15.1" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.15.1.tgz#04b815ff7aa4e46b1bbab88d8010aaa2b17eaba4" - integrity sha512-Cp4QzUQrvWCRJaQ8Lzv0mJzXVk4z2jlq8JNKMGaixC2Pz5L4l2p95TkuRvYbrEbe85NQsDKrAd4zalf7Ml6WiA== + version "8.20.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-8.20.0.tgz#ccfc6fef37b165e006b923834131632a8c4f036b" + integrity sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ== dependencies: atomic-sleep "^1.0.0" fast-redact "^3.1.1" on-exit-leak-free "^2.1.0" - pino-abstract-transport v1.1.0 + pino-abstract-transport "^1.1.0" pino-std-serializers "^6.0.0" - process-warning "^2.0.0" + process-warning "^3.0.0" quick-format-unescaped "^4.0.3" real-require "^0.2.0" safe-stable-stringify "^2.3.1" - sonic-boom "^3.1.0" + sonic-boom "^3.7.0" thread-stream "^2.0.0" -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -9639,6 +8893,15 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + platform@^1.3.3: version "1.3.6" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" @@ -9649,6 +8912,15 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== +postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -9671,7 +8943,7 @@ prettier@^2.8.4: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -pretty-format@^29.0.0, pretty-format@^29.7.0: +pretty-format@^29.5.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== @@ -9681,9 +8953,9 @@ pretty-format@^29.0.0, pretty-format@^29.7.0: react-is "^18.0.0" private-ip@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/private-ip/-/private-ip-3.0.1.tgz#1fa8108f53512c6b82f79d4d2ac665140dee5da5" - integrity sha512-Ezc16ANuhSHmWAE6lbXUKburNzGpR0J5X0Zh5Um/PZ/s57Fp+HYqYe6BYPH2QbqKr/5WebfzJQ1jq6Kj5dbRmA== + version "3.0.2" + resolved "https://registry.yarnpkg.com/private-ip/-/private-ip-3.0.2.tgz#1daf6052ee5cee53238616a377d6be180e9490ef" + integrity sha512-2pkOVPGYD/4QyAg95c6E/4bLYXPthT5Xw4ocXYzIIsMBhskOMn6IwkWXmg6ZiA6K58+O6VD/n02r1hDhk7vDPw== dependencies: "@chainsafe/is-ip" "^2.0.1" ip-regex "^5.0.0" @@ -9701,21 +8973,30 @@ process-nextick-args@~2.0.0: integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process-warning@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.2.0.tgz#008ec76b579820a8e5c35d81960525ca64feb626" - integrity sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg== + version "2.3.2" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.3.2.tgz#70d8a3251aab0eafe3a595d8ae2c5d2277f096a5" + integrity sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA== + +process-warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-3.0.0.tgz#96e5b88884187a1dce6f5c3166d611132058710b" + integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -prom-client@15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-15.1.0.tgz#816a4a2128da169d0471093baeccc6d2f17a4613" - integrity sha512-cCD7jLTqyPdjEPBo/Xk4Iu8jxjuZgZJ3e/oET3L+ZwOuap/7Cw3dH/TJSsZKs1TQLZ2IHpIlRAKw82ef06kmMw== +progress-events@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/progress-events/-/progress-events-1.0.0.tgz#34f5e8fdb5dae3561837b22672d1e02277bb2109" + integrity sha512-zIB6QDrSbPfRg+33FZalluFIowkbV5Xh1xSuetjG+rlC5he6u2dc6VQJ0TbMdlN3R1RHdpOqxEFMKTnQ+itUwA== + +prom-client@^14.2.0: + version "14.2.0" + resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-14.2.0.tgz#ca94504e64156f6506574c25fb1c34df7812cf11" + integrity sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA== dependencies: - "@opentelemetry/api" "^1.4.0" tdigest "^0.1.1" promise-all-reject-late@^1.0.0: @@ -9741,14 +9022,6 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" @@ -9781,9 +9054,9 @@ protobufjs@^6.11.2: long "^4.0.0" protobufjs@^7.0.0: - version "7.2.5" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.5.tgz#45d5c57387a6d29a17aab6846dcc283f9b8e7f2d" - integrity sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A== + version "7.2.6" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.6.tgz#4a0ccd79eb292717aacf07530a07e0ed20278215" + integrity sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -9812,12 +9085,13 @@ protons-runtime@^4.0.1: uint8arraylist "^2.4.3" protons-runtime@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/protons-runtime/-/protons-runtime-5.0.2.tgz#a262f69f962dc8709555f3282748de008c2934e9" - integrity sha512-eKppVrIS5dDh+Y61Yj4bDEOs2sQLQbQGIhr7EBiybPQhIMGBynzVXlYILPWl3Td1GDadobc8qevh5D+JwfG9bw== + version "5.4.0" + resolved "https://registry.yarnpkg.com/protons-runtime/-/protons-runtime-5.4.0.tgz#2751ce22cae6c35eebba89acfd9d783419ae3726" + integrity sha512-XfA++W/WlQOSyjUyuF5lgYBfXZUEMP01Oh1C2dSwZAlF2e/ZrMRPfWonXj6BGM+o8Xciv7w0tsRMKYwYEuQvaw== dependencies: - protobufjs "^7.0.0" + uint8-varint "^2.0.2" uint8arraylist "^2.4.3" + uint8arrays "^5.0.1" proxy-addr@^2.0.7: version "2.0.7" @@ -9841,14 +9115,9 @@ pump@^3.0.0: once "^1.3.1" punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -pure-rand@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.3.tgz#3c9e6b53c09e52ac3cedffc85ab7c1c7094b38cb" - integrity sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== q@^1.5.1: version "1.5.1" @@ -9875,6 +9144,11 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +rambda@^7.4.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/rambda/-/rambda-7.5.0.tgz#1865044c59bc0b16f63026c6e5a97e4b1bbe98fe" + integrity sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -9968,9 +9242,9 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stre util-deprecate "^1.0.1" readable-stream@^4.0.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" - integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== + version "4.5.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== dependencies: abort-controller "^3.0.0" buffer "^6.0.3" @@ -10001,6 +9275,13 @@ readdir-scoped-modules@^1.1.0: graceful-fs "^4.1.2" once "^1.3.0" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + real-require@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" @@ -10026,14 +9307,15 @@ reflect-metadata@0.1.13: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== -regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" regexpp@^3.2.0: version "3.2.0" @@ -10080,15 +9362,10 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.4: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== +resolve@^1.10.0, resolve@^1.22.0, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -10135,9 +9412,9 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.2.0, rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" @@ -10153,6 +9430,30 @@ rlp@^2.2.6, rlp@^2.2.7: dependencies: bn.js "^5.2.0" +rollup@^4.13.0: + version "4.14.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.14.1.tgz#228d5159c3f4d8745bd24819d734bc6c6ca87c09" + integrity sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.14.1" + "@rollup/rollup-android-arm64" "4.14.1" + "@rollup/rollup-darwin-arm64" "4.14.1" + "@rollup/rollup-darwin-x64" "4.14.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.14.1" + "@rollup/rollup-linux-arm64-gnu" "4.14.1" + "@rollup/rollup-linux-arm64-musl" "4.14.1" + "@rollup/rollup-linux-powerpc64le-gnu" "4.14.1" + "@rollup/rollup-linux-riscv64-gnu" "4.14.1" + "@rollup/rollup-linux-s390x-gnu" "4.14.1" + "@rollup/rollup-linux-x64-gnu" "4.14.1" + "@rollup/rollup-linux-x64-musl" "4.14.1" + "@rollup/rollup-win32-arm64-msvc" "4.14.1" + "@rollup/rollup-win32-ia32-msvc" "4.14.1" + "@rollup/rollup-win32-x64-msvc" "4.14.1" + fsevents "~2.3.2" + run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -10172,13 +9473,13 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" has-symbols "^1.0.3" isarray "^2.0.5" @@ -10192,13 +9493,13 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" safe-regex2@^2.0.0: @@ -10226,9 +9527,9 @@ sanitize-filename@^1.6.3: truncate-utf8-bytes "^1.0.0" sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + version "1.3.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== scrypt-js@3.0.1: version "3.0.1" @@ -10245,25 +9546,32 @@ secure-json-parse@^2.4.0, secure-json-parse@^2.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.5.4, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: +semver@7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.3.0: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.6.0: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -10291,14 +9599,15 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== +set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" shallow-clone@^3.0.0: version "3.0.1" @@ -10320,28 +9629,41 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +sinon-chai@3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.7.0.tgz#cfb7dec1c50990ed18c153f1840721cf13139783" + integrity sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g== -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +sinon@16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-16.0.0.tgz#06da4e63624b946c9d7e67cce21c2f67f40f23a9" + integrity sha512-B8AaZZm9CT5pqe4l4uWJztfD/mOTa7dL8Qo0W4+s+t74xECOgSZDDQCBjNgIK3+n4kyxQrSTv2V5ul8K25qkiQ== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers" "^10.3.0" + "@sinonjs/samsam" "^8.0.0" + diff "^5.1.0" + nise "^5.1.4" + supports-color "^7.2.0" slash@^3.0.0: version "3.0.0" @@ -10387,11 +9709,11 @@ socks-proxy-agent@^7.0.0: socks "^2.6.2" socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== dependencies: - ip "^2.0.0" + ip-address "^9.0.5" smart-buffer "^4.2.0" solc-typed-ast@17.0.3: @@ -10423,10 +9745,10 @@ solc@0.8.23-fixed: semver "^5.5.0" tmp "0.0.33" -sonic-boom@^3.0.0, sonic-boom@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.4.0.tgz#8582d1385ea3bf79ca953329043bfbdbabe58eb9" - integrity sha512-zSe9QQW30nPzjkSJ0glFQO5T9lHsk39tz+2bAAwCj8CNgEG8ItZiX7Wb2ZgA8I04dwRGCcf1m3ABJa8AYm12Fw== +sonic-boom@^3.0.0, sonic-boom@^3.1.0, sonic-boom@^3.7.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.8.1.tgz#d5ba8c4e26d6176c9a1d14d549d9ff579a163422" + integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== dependencies: atomic-sleep "^1.0.0" @@ -10444,15 +9766,12 @@ sort-keys@^4.0.0: dependencies: is-plain-obj "^2.0.0" -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== -source-map@^0.6.0, source-map@^0.6.1: +source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -10466,9 +9785,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -10479,9 +9798,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.15" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz#142460aabaca062bc7cd4cc87b7d50725ed6a4ba" - integrity sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== split2@^3.0.0: version "3.2.2" @@ -10507,6 +9826,11 @@ sprintf-js@1.1.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -10517,13 +9841,6 @@ src-location@^1.1.0: resolved "https://registry.yarnpkg.com/src-location/-/src-location-1.1.0.tgz#3f50eeb0c7169432e55b426be6e3a68ebba16218" integrity sha512-idBVZgLZGzB3B2Et317AFDQto7yRgp1tOuFd+VKIH2dw1jO1b6p07zNjtQoVhkW+CY6oGTp9Y5UIfbJoZRsoFQ== -ssri@^10.0.0: - version "10.0.5" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" - integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== - dependencies: - minipass "^7.0.3" - ssri@^9.0.0, ssri@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" @@ -10531,12 +9848,15 @@ ssri@^9.0.0, ssri@^9.0.1: dependencies: minipass "^3.1.1" -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + +std-env@^3.3.3: + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== stream-to-it@0.2.4, stream-to-it@^0.2.2: version "0.2.4" @@ -10545,25 +9865,12 @@ stream-to-it@0.2.4, stream-to-it@^0.2.2: dependencies: get-iterator "^1.0.2" -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - strict-event-emitter-types@2.0.0, strict-event-emitter-types@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz#05e15549cb4da1694478a53543e4e2f4abcf277f" integrity sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA== -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -10572,41 +9879,33 @@ string-length@^4.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" @@ -10622,20 +9921,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -10670,11 +9962,18 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-literal@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" + integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== + dependencies: + acorn "^8.10.0" + strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -10684,6 +9983,13 @@ strong-log-transformer@^2.1.0: minimist "^1.2.0" through "^2.3.4" +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -10691,20 +9997,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.1.0, supports-color@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -10722,9 +10021,9 @@ tar-stream@~2.2.0: readable-stream "^3.1.1" tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -10765,9 +10064,9 @@ text-table@^0.2.0: integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thread-stream@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.0.tgz#5def29598d1d4171ba3bace7e023a71d87d99c07" - integrity sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw== + version "2.4.1" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.1.tgz#6d588b14f0546e59d3f306614f044bc01ce43351" + integrity sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg== dependencies: real-require "^0.2.0" @@ -10815,6 +10114,21 @@ tiny-lru@^10.0.0: dependencies: esm "^3.2.25" +tinybench@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" + integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== + +tinypool@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.7.0.tgz#88053cc99b4a594382af23190c609d93fddf8021" + integrity sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww== + +tinyspy@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" + integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== + tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -10823,21 +10137,9 @@ tmp@0.0.33, tmp@^0.0.33: os-tmpdir "~1.0.2" tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== to-regex-range@^5.0.1: version "5.0.1" @@ -10873,20 +10175,6 @@ truncate-utf8-bytes@^1.0.0: dependencies: utf8-byte-length "^1.0.1" -ts-jest@29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.0.3.tgz#63ea93c5401ab73595440733cefdba31fcf9cb77" - integrity sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^29.0.0" - json5 "^2.2.1" - lodash.memoize "4.x" - make-error "1.x" - semver "7.x" - yargs-parser "^21.0.1" - ts-node@10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" @@ -10916,9 +10204,9 @@ tsconfig-paths@4.1.2: strip-bom "^3.0.0" tsconfig-paths@^3.14.1: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.2" @@ -10993,44 +10281,49 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -11054,6 +10347,11 @@ typescript@4.8.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +ufo@^1.3.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== + uglify-js@^3.1.4: version "3.17.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" @@ -11069,20 +10367,20 @@ uint8-varint@^1.0.1, uint8-varint@^1.0.2, uint8-varint@^1.0.6: uint8arraylist "^2.0.0" uint8arrays "^4.0.2" -uint8-varint@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/uint8-varint/-/uint8-varint-2.0.1.tgz#e8f73c24974b384f6f0e1cd73c884c5a19e32f53" - integrity sha512-euvmpuulJstK5+xNuI4S1KfnxJnbI5QP52RXIR3GZ3/ZMkOsEK2AgCtFpNvEQLXMxMx2o0qcyevK1fJwOZJagQ== +uint8-varint@^2.0.1, uint8-varint@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/uint8-varint/-/uint8-varint-2.0.4.tgz#85be52b3849eb30f2c3640a2df8a14364180affb" + integrity sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw== dependencies: uint8arraylist "^2.0.0" - uint8arrays "^4.0.2" + uint8arrays "^5.0.0" -uint8arraylist@^2.0.0, uint8arraylist@^2.1.0, uint8arraylist@^2.1.1, uint8arraylist@^2.1.2, uint8arraylist@^2.3.1, uint8arraylist@^2.3.2, uint8arraylist@^2.4.1, uint8arraylist@^2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/uint8arraylist/-/uint8arraylist-2.4.3.tgz#1148aa979b407d382e4eb8d9c8f2b4bf3f5910d5" - integrity sha512-oEVZr4/GrH87K0kjNce6z8pSCzLEPqHNLNR5sj8cJOySrTP8Vb/pMIbZKLJGhQKxm1TiZ31atNrpn820Pyqpow== +uint8arraylist@^2.0.0, uint8arraylist@^2.1.0, uint8arraylist@^2.1.1, uint8arraylist@^2.1.2, uint8arraylist@^2.3.1, uint8arraylist@^2.3.2, uint8arraylist@^2.4.1, uint8arraylist@^2.4.3, uint8arraylist@^2.4.8: + version "2.4.8" + resolved "https://registry.yarnpkg.com/uint8arraylist/-/uint8arraylist-2.4.8.tgz#5a4d17f4defd77799cb38e93fd5db0f0dceddc12" + integrity sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ== dependencies: - uint8arrays "^4.0.2" + uint8arrays "^5.0.1" uint8arrays@^3.0.0: version "3.1.1" @@ -11092,12 +10390,19 @@ uint8arrays@^3.0.0: multiformats "^9.4.2" uint8arrays@^4.0.2: - version "4.0.6" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-4.0.6.tgz#bae68b536c2e87147045b95d73d29e503e45ecab" - integrity sha512-4ZesjQhqOU2Ip6GPReIwN60wRxIupavL8T0Iy36BBHr2qyMrNxsPJvr7vpS4eFt8F8kSguWUPad6ZM9izs/vyw== + version "4.0.10" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-4.0.10.tgz#3ec5cde3348903c140e87532fc53f46b8f2e921f" + integrity sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA== dependencies: multiformats "^12.0.1" +uint8arrays@^5.0.0, uint8arrays@^5.0.1, uint8arrays@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-5.0.3.tgz#92b894d9c4269ba97c51544d6e1f279fe6f80d1f" + integrity sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ== + dependencies: + multiformats "^13.0.0" + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -11108,12 +10413,17 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + undici@^5.12.0: - version "5.25.2" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.25.2.tgz#17ddc3e8ab3c77e473ae1547f3f2917a05da2820" - integrity sha512-tch8RbCfn1UUH1PeVCXva4V8gDpGAud/w0WubD6sHC46vYQ3KDxL+xv1A2UxK0N6jrVedutuPHxe1XIoqerwMw== + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== dependencies: - busboy "^1.6.0" + "@fastify/busboy" "^2.0.0" unique-filename@^2.0.0: version "2.0.1" @@ -11122,13 +10432,6 @@ unique-filename@^2.0.0: dependencies: unique-slug "^3.0.0" -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - unique-slug@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" @@ -11136,36 +10439,21 @@ unique-slug@^3.0.0: dependencies: imurmurhash "^0.1.4" -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== upath@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -11214,14 +10502,14 @@ v8-compile-cache@2.3.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" - integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== +v8-to-istanbul@^9.1.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" + convert-source-map "^2.0.0" validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" @@ -11245,7 +10533,7 @@ validate-npm-package-name@^4.0.0: dependencies: builtins "^5.0.0" -validator@^13.7.0: +validator@^13.9.0: version "13.11.0" resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== @@ -11255,18 +10543,69 @@ varint@6.0.0, varint@^6.0.0: resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== +vite-node@0.34.6: + version "0.34.6" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.34.6.tgz#34d19795de1498562bf21541a58edcd106328a17" + integrity sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.4.0" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^3.0.0 || ^4.0.0 || ^5.0.0-0" + +"vite@^3.0.0 || ^4.0.0 || ^5.0.0-0", "vite@^3.1.0 || ^4.0.0 || ^5.0.0-0": + version "5.2.8" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.8.tgz#a99e09939f1a502992381395ce93efa40a2844aa" + integrity sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA== + dependencies: + esbuild "^0.20.1" + postcss "^8.4.38" + rollup "^4.13.0" + optionalDependencies: + fsevents "~2.3.3" + +vitest-when@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/vitest-when/-/vitest-when-0.2.0.tgz#3b3234efa6be0f976616f54e35357b56ed5e5f5f" + integrity sha512-BS1+L6HPwV3cMQB+pGa1Zr7gFkKX1TG8GbdgzpTlyW19nvWBmqDZW5GucS79K/lEu0ULWOUceHM56dnr8P/ajg== + +vitest@0.34.6: + version "0.34.6" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.34.6.tgz#44880feeeef493c04b7f795ed268f24a543250d7" + integrity sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q== + dependencies: + "@types/chai" "^4.3.5" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.34.6" + "@vitest/runner" "0.34.6" + "@vitest/snapshot" "0.34.6" + "@vitest/spy" "0.34.6" + "@vitest/utils" "0.34.6" + acorn "^8.9.0" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.10" + debug "^4.3.4" + local-pkg "^0.4.3" + magic-string "^0.30.1" + pathe "^1.1.1" + picocolors "^1.0.0" + std-env "^3.3.3" + strip-literal "^1.0.1" + tinybench "^2.5.0" + tinypool "^0.7.0" + vite "^3.1.0 || ^4.0.0 || ^5.0.0-0" + vite-node "0.34.6" + why-is-node-running "^2.2.2" + walk-up-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -11298,9 +10637,9 @@ web3-types@^1.3.1, web3-types@^1.5.0: integrity sha512-geWuMIeegQ8AedKAO6wO4G4j1gyQ1F/AyKLMw2vud4bsfZayyzWJgCMDZtjYMm5uo2a7i8j1W3/4QFmzlSy5cw== web3-utils@^1.3.4: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.2.tgz#361103d28a94d5e2a87ba15d776a62c33303eb44" - integrity sha512-TdApdzdse5YR+5GCX/b/vQnhhbj1KSAtfrDtRW7YS0kcWp1gkJsN62gw6GzCaNTeXookB7UrLtmDUuMv65qgow== + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== dependencies: "@ethereumjs/util" "^8.1.0" bn.js "^5.2.1" @@ -11312,25 +10651,25 @@ web3-utils@^1.3.4: utf8 "3.0.0" web3-utils@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-4.2.1.tgz#326bc6e9e4d047f7b38ba68bee1399c4f9f621e3" - integrity sha512-Fk29BlEqD9Q9Cnw4pBkKw7czcXiRpsSco/BzEUl4ye0ZTSHANQFfjsfQmNm4t7uY11u6Ah+8F3tNjBeU4CA80A== + version "4.2.2" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-4.2.2.tgz#8fb7c58cfc02d681f17d7806732ce9fb1170c338" + integrity sha512-z+4owWcnoB4EH8yWIL1FBeyqe+sXwaGxUDtVTNPTMf2oB5C+paCToZUdCV5Bi+M543zZEzlzNTabOD+OWNc7NA== dependencies: ethereum-cryptography "^2.0.0" eventemitter3 "^5.0.1" web3-errors "^1.1.4" web3-types "^1.5.0" - web3-validator "^2.0.4" + web3-validator "^2.0.5" -web3-validator@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/web3-validator/-/web3-validator-2.0.4.tgz#66f34c94f21a3c94d0dc2a2d30deb8a379825d38" - integrity sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA== +web3-validator@^2.0.4, web3-validator@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/web3-validator/-/web3-validator-2.0.5.tgz#de1984bdb34f292251b86400dba7169700db0849" + integrity sha512-2gLOSW8XqEN5pw5jVUm20EB7A8SbQiekpAtiI0JBmCIV0a2rp97v8FgWY5E3UEqnw5WFfEqvcDVW92EyynDTyQ== dependencies: ethereum-cryptography "^2.0.0" util "^0.12.5" web3-errors "^1.1.4" - web3-types "^1.3.1" + web3-types "^1.5.0" zod "^3.21.4" webidl-conversions@^3.0.0: @@ -11364,18 +10703,7 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which-typed-array@^1.1.14, which-typed-array@^1.1.2: +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -11400,6 +10728,14 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -11412,14 +10748,10 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== wrap-ansi@^6.0.1: version "6.2.0" @@ -11430,14 +10762,14 @@ wrap-ansi@^6.0.1: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" @@ -11463,7 +10795,7 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-file-atomic@^4.0.0, write-file-atomic@^4.0.1, write-file-atomic@^4.0.2: +write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== @@ -11509,15 +10841,7 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -xml2js@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" - integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xml2js@^0.6.0: +xml2js@^0.6.0, xml2js@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== @@ -11550,11 +10874,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -11570,7 +10889,7 @@ yargs-parser@20.2.4: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@21.1.1, yargs-parser@^21.0.1, yargs-parser@^21.1.1: +yargs-parser@21.1.1, yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== @@ -11580,6 +10899,29 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@17.6.2: version "17.6.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" @@ -11593,7 +10935,7 @@ yargs@17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yargs@17.7.2, yargs@^17.3.1, yargs@^17.6.2: +yargs@17.7.2, yargs@^17.6.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -11606,19 +10948,6 @@ yargs@17.7.2, yargs@^17.3.1, yargs@^17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"