From 9dc51d1326950a71c545a54d3f542724c0039fad Mon Sep 17 00:00:00 2001 From: Gerhard Steenkamp Date: Tue, 9 Sep 2025 18:26:04 +0200 Subject: [PATCH] feat: custom liveness, custom bond. add tests Signed-off-by: Gerhard Steenkamp --- .github/workflows/test.yaml | 27 + .gitignore | 9 +- README.md | 288 +++-- package.json | 16 +- packages/financial-contracts/package.json | 1 + packages/long-short-pair/package.json | 1 + packages/managed-oracle-v2/.gitignore | 4 + packages/managed-oracle-v2/README.md | 6 + .../abis/ManagedOracleV2.json | 406 ++++++ .../managed-oracle-v2/manifest/data/amoy.json | 10 + .../manifest/data/polygon.json | 10 + .../templates/ManagedOracleV2.template.yaml | 40 + .../manifest/templates/subgraph.template.yaml | 9 + packages/managed-oracle-v2/matchstick.yaml | 2 + packages/managed-oracle-v2/package.json | 41 + packages/managed-oracle-v2/schema.graphql | 110 ++ .../scripts/build-manifest.sh | 15 + packages/managed-oracle-v2/scripts/deploy.sh | 5 + .../scripts/remove-call-handlers.js | 8 + packages/managed-oracle-v2/src/index.ts | 10 + .../src/mappings/managedOracleV2.ts | 38 + .../src/mappings/optimisticOracleV2.ts | 347 ++++++ .../managed-oracle-v2/src/utils/constants.ts | 9 + .../managed-oracle-v2/src/utils/decimals.ts | 25 + .../src/utils/helpers/index.ts | 2 + .../src/utils/helpers/managedOracleV2.ts | 6 + .../src/utils/helpers/optimisticOracle.ts | 23 + .../managed-oracle-v2/managedOracle.test.ts | 215 ++++ .../tests/managed-oracle-v2/utils.ts | 151 +++ packages/managed-oracle-v2/tsconfig.json | 3 + packages/optimistic-governor/package.json | 1 + .../manifest/data/amoy-managed.json | 10 + .../manifest/data/polygon-managed.json | 10 + .../templates/ManagedOracleV2.template.yaml | 38 + packages/optimistic-oracle-v2/package.json | 7 +- .../optimistic-oracle-v2/scripts/deploy.sh | 35 +- packages/optimistic-oracle-v3/package.json | 1 + packages/optimistic-oracle/package.json | 1 + .../skinny-optimistic-oracle/package.json | 5 +- packages/token/package.json | 1 + packages/voting/package.json | 1 + packages/votingV2/package.json | 4 +- packages/votingV2/src/mappings/votingV2.ts | 33 +- yarn.lock | 1083 ++++++++++++----- 44 files changed, 2669 insertions(+), 398 deletions(-) create mode 100644 .github/workflows/test.yaml create mode 100644 packages/managed-oracle-v2/.gitignore create mode 100644 packages/managed-oracle-v2/README.md create mode 100644 packages/managed-oracle-v2/abis/ManagedOracleV2.json create mode 100644 packages/managed-oracle-v2/manifest/data/amoy.json create mode 100644 packages/managed-oracle-v2/manifest/data/polygon.json create mode 100644 packages/managed-oracle-v2/manifest/templates/ManagedOracleV2.template.yaml create mode 100644 packages/managed-oracle-v2/manifest/templates/subgraph.template.yaml create mode 100644 packages/managed-oracle-v2/matchstick.yaml create mode 100644 packages/managed-oracle-v2/package.json create mode 100644 packages/managed-oracle-v2/schema.graphql create mode 100755 packages/managed-oracle-v2/scripts/build-manifest.sh create mode 100755 packages/managed-oracle-v2/scripts/deploy.sh create mode 100644 packages/managed-oracle-v2/scripts/remove-call-handlers.js create mode 100644 packages/managed-oracle-v2/src/index.ts create mode 100644 packages/managed-oracle-v2/src/mappings/managedOracleV2.ts create mode 100644 packages/managed-oracle-v2/src/mappings/optimisticOracleV2.ts create mode 100644 packages/managed-oracle-v2/src/utils/constants.ts create mode 100644 packages/managed-oracle-v2/src/utils/decimals.ts create mode 100644 packages/managed-oracle-v2/src/utils/helpers/index.ts create mode 100644 packages/managed-oracle-v2/src/utils/helpers/managedOracleV2.ts create mode 100644 packages/managed-oracle-v2/src/utils/helpers/optimisticOracle.ts create mode 100644 packages/managed-oracle-v2/tests/managed-oracle-v2/managedOracle.test.ts create mode 100644 packages/managed-oracle-v2/tests/managed-oracle-v2/utils.ts create mode 100644 packages/managed-oracle-v2/tsconfig.json create mode 100644 packages/optimistic-oracle-v2/manifest/data/amoy-managed.json create mode 100644 packages/optimistic-oracle-v2/manifest/data/polygon-managed.json create mode 100644 packages/optimistic-oracle-v2/manifest/templates/ManagedOracleV2.template.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..0f3c432 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,27 @@ +# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: build-and-test + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + workflow_dispatch: + +jobs: + build_test: + + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22.x + registry-url: https://registry.npmjs.org + - name: Install Yarn + run: npm install -g yarn + - run: yarn install + - run: yarn ci diff --git a/.gitignore b/.gitignore index 242e2d3..e90cbd9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,11 @@ node_modules build generated -.env \ No newline at end of file +.env +.DS_Store +tests/.* +matchstick + +# Matchstick test runner generated files +**/tests/.* +**/matchstick/* \ No newline at end of file diff --git a/README.md b/README.md index 731802e..0dd8d47 100644 --- a/README.md +++ b/README.md @@ -4,38 +4,100 @@ `yarn` -## Voting Events +## Running Tests + +This repository uses [Matchstick](https://github.com/LimeChain/matchstick) for subgraph testing. + +### Prerequisites + +- **PostgreSQL 14** must be installed and running on your machine. Matchstick requires this for its testing environment. + +### Running the tests + +Tests are available for select packages and can be run using the following commands: + +```bash +# Run tests for all packages with test suites +yarn test + +# Run tests in parallel (faster) +yarn test:parallel + +# Run full CI pipeline (prepare and test) +yarn ci +``` + +The `yarn test` command runs tests for the following packages (when available): + +- `managed-optimistic-oracle-v2-subgraph` +- `optimistic-oracle-subgraph` +- `optimistic-oracle-v2-subgraph` +- `optimistic-oracle-v3-subgraph` +- `skinny-optimistic-oracle-subgraph` +- `votingV2-subgraph` + +To run tests for a specific package, navigate to the package directory and run `yarn test` or `graph test` directly. + +## Voting V1 Events This subgraph indexes events emitted by the core Oracle contracts. The code can be found in `packages/voting` -- Kovan: -- Mainnet: -- (staging) Kovan: -- (staging) Mainnet: +- Mainnet + - TheGraph: +- (testnet) Sepolia + - TheGraph: ## Skinny Optimistic Oracle Events This subgraph indexes events emitted by the "Skinny Optimistic Oracle" contracts. The code can be found in `packages/skinny-optimistic-oracle` -- Mainnet: -- (testnet) Sepolia: +- Mainnet + - TheGraph: + - Goldsky: +- (testnet) Sepolia + - TheGraph: + - Goldsky: ## Optimistic Oracle Events This subgraph indexes events emitted by the "Optimistic Oracle" contracts. The code can be found in `packages/optimistic-oracle` -- Mainnet: -- Polygon: -- Arbitrum: -- Optimism: -- Boba: -- (staging) Goerli: -- (staging) Core Testnet: -- Core: -- (testnet) Sepolia: -- Base: -- Blast: -- Story Goldsky: +- Mainnet + - TheGraph: + - Goldsky: +- Polygon + - TheGraph: + - Goldsky: +- Arbitrum + - TheGraph: + - Goldsky: +- Optimism + - TheGraph: + - Goldsky: +- Boba + - TheGraph: + - Goldsky: +- (staging) Goerli + - TheGraph: + - Goldsky: +- (staging) Core Testnet + - TheGraph: + - Goldsky: +- Core + - TheGraph: + - Goldsky: +- (testnet) Sepolia + - TheGraph: + - Goldsky: +- Base + - TheGraph: + - Goldsky: +- Blast + - TheGraph: + - Goldsky: +- Story + - TheGraph: + - Goldsky: ## Optimistic Oracle V2 Events and Calls @@ -43,92 +105,158 @@ This subgraph indexes events and function calls by the "Optimistic Oracle V2" co **Note:** L2 chains does not support `callHandlers`. This means we cannot use callHandlers to index the `setBond`, `setCustomLiveness`, and `setEventBased` function calls. These properties are also not available via events. Our compromise here is that in the case of L2 chains, we read this data from the contract state in the event handler instead. **This workaround works when `setCustomLiveness` and `setEventBased` are called in the same transaction as `requestPrice`. So it doesn't work for all cases. Ideally we should have `callHandlers` in the chains that support this.** We therefore must also remove the call handlers from the subgraph.yaml file for Polygon. See `scripts/remove-call-handlers.js` for implementation. -- Mainnet: -- Polygon TheGraph: -- Polygon Goldsky: -- Arbitrum TheGraph: -- Arbitrum Goldsky: -- Optimism TheGraph: -- Optimism Goldsky: -- Boba: -- (staging) Goerli: -- (staging) Core Testnet: -- Core: -- (testnet) Sepolia: -- Base TheGraph: -- Base Goldsky: -- (staging) Base Sepolia: -- Blast TheGraph: -- Blast Goldsky: -- Story Goldsky: +- Mainnet + - TheGraph: + - Goldsky: <> +- Polygon + - TheGraph: + - Goldsky: +- Arbitrum + - TheGraph: + - Goldsky: +- Optimism + - TheGraph: + - Goldsky: +- Boba + - TheGraph: + - Goldsky: +- (staging) Core Testnet + - TheGraph: +- Core + - TheGraph: +- (testnet) Sepolia + - TheGraph: + - Goldsky: +- Base + - TheGraph: + - Goldsky: +- (staging) Base Sepolia + - TheGraph: + - Goldsky: +- Blast + - TheGraph: + - Goldsky: +- Story + - TheGraph: + - Goldsky: + +## Managed Optimistic Oracle V2 Events and Calls + +This subgraph indexes events and function calls by the "Managed Optimistic Oracle V2" contracts. We reuse the code from `packages/optimistic-oracle-v2` because the events emitted are the same. + +- Amoy + - TheGraph: + - Goldsky: +- Polygon + - TheGraph: + - Goldsky: ## Financial Contract Events This subgraph indexes events emitted by the ExpiringMultiParty and Perpetual contracts. The code can be found in `packages/financial-contracts` -- Kovan: -- Mainnet: -- (staging) Kovan: -- (staging) Mainnet: +- Mainnet + - TheGraph: + - Goldsky: +- (staging) Mainnet + - TheGraph: + - Goldsky: ## Token Events This subgraph indexes events emitted by the UMA voting token contracts. The code can be found in `packages/token` -- Kovan: -- Mainnet: -- (staging) Kovan: -- (staging) Mainnet: +- Mainnet + - TheGraph: + - Goldsky: +- (staging) Mainnet + - TheGraph: + - Goldsky: ## Voting V2 Events This subgraph indexes events emitted by the core Oracle contracts. The code can be found in `packages/votingV2` -- Mainnet: -- Goerli: -- (testnet) Sepolia: +- Mainnet + - TheGraph: + - Goldsky: +- (testnet) Sepolia + - TheGraph: + - Goldsky: ## Optimistic Oracle V3 Events This subgraph indexes events emitted by the "Optimistic Oracle V3" contracts. The code can be found in `packages/optimistic-oracle-v3` -- Mainnet TheGraph: -- Mainnet Goldsky: -- Polygon TheGraph: -- Polygon Goldsky: -- Arbitrum TheGraph: -- Arbitrum Goldsky: -- Optimism TheGraph: -- Optimism Goldsky: -- Boba: -- Avalanche: -- Gnosis: -- (staging) Goerli: -- (staging) Core Testnet: -- Core: -- (testnet) Sepolia: -- Base TheGraph: -- Base Goldsky: -- (staging) Base Sepolia: -- Blast TheGraph: -- Blast Goldsky: -- Story Goldsky: +- Mainnet + - TheGraph: + - Goldsky: +- Polygon + - TheGraph: + - Goldsky: +- Arbitrum + - TheGraph: + - Goldsky: +- Optimism + - TheGraph: + - Goldsky: +- Boba + - TheGraph: + - Goldsky: +- Avalanche + - TheGraph: + - Goldsky: +- Gnosis + - TheGraph: + - Goldsky: +- (staging) Core Testnet + - TheGraph: + - Goldsky: +- Core + - TheGraph: + - Goldsky: +- (testnet) Sepolia + - TheGraph: + - Goldsky: +- Base + - TheGraph: + - Goldsky: +- (testnet) Base Sepolia + - TheGraph: + - Goldsky: +- Blast + - TheGraph: + - Goldsky: +- Story + - TheGraph: + - Goldsky: ## Optimistic Governor Events This subgraph indexes events emitted by all the Optimistic Governor deployments. -- Mainnet: -- Polygon: -- Arbitrum: -- Optimism: -- Avalanche: -- Gnosis: -- (testnet) Goerli: -- (staging) Core Testnet: -- Core: -- Base: -- (testnet) Sepolia: +- Mainnet + - TheGraph: +- Polygon + - TheGraph: +- Arbitrum + - TheGraph: +- Optimism + - TheGraph: +- Avalanche + - TheGraph: +- Gnosis + - TheGraph: +- (testnet) Goerli + - TheGraph: +- (staging) Core Testnet + - TheGraph: +- Core + - TheGraph: +- Base + - TheGraph: +- (testnet) Sepolia + - TheGraph: ## Resources diff --git a/package.json b/package.json index 0c64a7b..1f47a46 100644 --- a/package.json +++ b/package.json @@ -11,23 +11,27 @@ }, "scripts": { "lint": "prettier ./**", - "lint-fix": "prettier ./** --write" + "lint-fix": "prettier ./** --write", + "codegen": "lerna run codegen ", + "build": "lerna run build --scope='managed-optimistic-oracle-v2-subgraph' --scope='optimistic-oracle-subgraph' --scope='optimistic-oracle-v2-subgraph' --scope='optimistic-oracle-v3-subgraph' --scope='skinny-optimistic-oracle-subgraph' --scope='votingV2-subgraph'", + "test": "lerna run test --scope='managed-optimistic-oracle-v2-subgraph' --scope='optimistic-oracle-subgraph' --scope='optimistic-oracle-v2-subgraph' --scope='optimistic-oracle-v3-subgraph' --scope='skinny-optimistic-oracle-subgraph' --scope='votingV2-subgraph'", + "test:parallel": "lerna run test --parallel --scope='managed-optimistic-oracle-v2-subgraph' --scope='optimistic-oracle-subgraph' --scope='optimistic-oracle-v2-subgraph' --scope='optimistic-oracle-v3-subgraph' --scope='skinny-optimistic-oracle-subgraph' --scope='votingV2-subgraph'", + "prepare-ci": "lerna run --parallel prepare-ci --scope='managed-optimistic-oracle-v2-subgraph' --scope='optimistic-oracle-subgraph' --scope='optimistic-oracle-v2-subgraph' --scope='optimistic-oracle-v3-subgraph' --scope='skinny-optimistic-oracle-subgraph' --scope='votingV2-subgraph'", + "ci": "yarn prepare-ci && yarn test" }, "bugs": { "url": "https://github.com/UMAprotocol/subgraphs/issues" }, "workspaces": { "packages": [ - "packages/financial-contracts/**", - "packages/long-short-pair/**", - "packages/token/**", - "packages/voting/**" + "packages/*" ], "nohoist": [ "packages/votingV2/**", "packages/optimistic-oracle/**", "packages/optimistic-oracle-v3/**", - "packages/optimistic-governor/**" + "packages/optimistic-governor/**", + "packages/managed-oracle-v2/**" ] }, "devDependencies": { diff --git a/packages/financial-contracts/package.json b/packages/financial-contracts/package.json index 3e3fe91..04644f8 100644 --- a/packages/financial-contracts/package.json +++ b/packages/financial-contracts/package.json @@ -6,6 +6,7 @@ "codegen": "graph codegen", "build": "graph build", "prepare:mainnet": "mustache config/mainnet.json subgraph.template.yaml > subgraph.yaml && yarn codegen && yarn build", + "prepare-ci": "mustache config/mainnet.json subgraph.template.yaml > subgraph.yaml && yarn codegen && yarn build", "prepare:kovan": "mustache config/kovan.json subgraph.template.yaml > subgraph.yaml && yarn codegen && yarn build", "deploy:kovan": "env STAGING=true scripts/deploy.sh kovan", "deploy:mainnet": "env STAGING=true scripts/deploy.sh mainnet", diff --git a/packages/long-short-pair/package.json b/packages/long-short-pair/package.json index 441c578..74f0dd2 100644 --- a/packages/long-short-pair/package.json +++ b/packages/long-short-pair/package.json @@ -7,6 +7,7 @@ "codegen": "graph codegen", "build": "graph build", "prepare:mainnet": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", + "prepare-ci": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", "prepare:kovan": "scripts/build-manifest.sh kovan && yarn codegen && yarn build", "prepare:polygon": "scripts/build-manifest.sh polygon && yarn codegen && yarn build", "deploy:kovan": "env STAGING=true scripts/deploy.sh kovan", diff --git a/packages/managed-oracle-v2/.gitignore b/packages/managed-oracle-v2/.gitignore new file mode 100644 index 0000000..91d9547 --- /dev/null +++ b/packages/managed-oracle-v2/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +/generated +/build +subgraph.yaml \ No newline at end of file diff --git a/packages/managed-oracle-v2/README.md b/packages/managed-oracle-v2/README.md new file mode 100644 index 0000000..6fa5be4 --- /dev/null +++ b/packages/managed-oracle-v2/README.md @@ -0,0 +1,6 @@ +# Managed Optimistic Oracle V2 Subgraph + +## Deploying the subgraph + +- Polygon: +- (staging) Amoy: diff --git a/packages/managed-oracle-v2/abis/ManagedOracleV2.json b/packages/managed-oracle-v2/abis/ManagedOracleV2.json new file mode 100644 index 0000000..3b07fd9 --- /dev/null +++ b/packages/managed-oracle-v2/abis/ManagedOracleV2.json @@ -0,0 +1,406 @@ +[ + { + "inputs": [ + { "internalType": "uint256", "name": "_liveness", "type": "uint256" }, + { "internalType": "address", "name": "_finderAddress", "type": "address" }, + { "internalType": "address", "name": "_timerAddress", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "requester", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "proposer", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "disputer", "type": "address" }, + { "indexed": false, "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "indexed": false, "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "indexed": false, "internalType": "int256", "name": "proposedPrice", "type": "int256" } + ], + "name": "DisputePrice", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "requester", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "proposer", "type": "address" }, + { "indexed": false, "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "indexed": false, "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "indexed": false, "internalType": "int256", "name": "proposedPrice", "type": "int256" }, + { "indexed": false, "internalType": "uint256", "name": "expirationTimestamp", "type": "uint256" }, + { "indexed": false, "internalType": "address", "name": "currency", "type": "address" } + ], + "name": "ProposePrice", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "requester", "type": "address" }, + { "indexed": false, "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "indexed": false, "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "indexed": false, "internalType": "address", "name": "currency", "type": "address" }, + { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" }, + { "indexed": false, "internalType": "uint256", "name": "finalFee", "type": "uint256" } + ], + "name": "RequestPrice", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "requester", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "proposer", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "disputer", "type": "address" }, + { "indexed": false, "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "indexed": false, "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "indexed": false, "internalType": "int256", "name": "price", "type": "int256" }, + { "indexed": false, "internalType": "uint256", "name": "payout", "type": "uint256" } + ], + "name": "Settle", + "type": "event" + }, + { + "inputs": [], + "name": "OO_ANCILLARY_DATA_LIMIT", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TOO_EARLY_RESPONSE", + "outputs": [{ "internalType": "int256", "name": "", "type": "int256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ancillaryBytesLimit", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultLiveness", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "requester", "type": "address" }, + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" } + ], + "name": "disputePrice", + "outputs": [{ "internalType": "uint256", "name": "totalBond", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "disputer", "type": "address" }, + { "internalType": "address", "name": "requester", "type": "address" }, + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" } + ], + "name": "disputePriceFor", + "outputs": [{ "internalType": "uint256", "name": "totalBond", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "finder", + "outputs": [{ "internalType": "contract FinderInterface", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentTime", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "requester", "type": "address" }, + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" } + ], + "name": "getRequest", + "outputs": [ + { + "components": [ + { "internalType": "address", "name": "proposer", "type": "address" }, + { "internalType": "address", "name": "disputer", "type": "address" }, + { "internalType": "contract IERC20", "name": "currency", "type": "address" }, + { "internalType": "bool", "name": "settled", "type": "bool" }, + { + "components": [ + { "internalType": "bool", "name": "eventBased", "type": "bool" }, + { "internalType": "bool", "name": "refundOnDispute", "type": "bool" }, + { "internalType": "bool", "name": "callbackOnPriceProposed", "type": "bool" }, + { "internalType": "bool", "name": "callbackOnPriceDisputed", "type": "bool" }, + { "internalType": "bool", "name": "callbackOnPriceSettled", "type": "bool" }, + { "internalType": "uint256", "name": "bond", "type": "uint256" }, + { "internalType": "uint256", "name": "customLiveness", "type": "uint256" } + ], + "internalType": "struct OptimisticOracleV2Interface.RequestSettings", + "name": "requestSettings", + "type": "tuple" + }, + { "internalType": "int256", "name": "proposedPrice", "type": "int256" }, + { "internalType": "int256", "name": "resolvedPrice", "type": "int256" }, + { "internalType": "uint256", "name": "expirationTime", "type": "uint256" }, + { "internalType": "uint256", "name": "reward", "type": "uint256" }, + { "internalType": "uint256", "name": "finalFee", "type": "uint256" } + ], + "internalType": "struct OptimisticOracleV2Interface.Request", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "requester", "type": "address" }, + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" } + ], + "name": "getState", + "outputs": [{ "internalType": "enum OptimisticOracleV2Interface.State", "name": "", "type": "uint8" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "requester", "type": "address" }, + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" } + ], + "name": "hasPrice", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "requester", "type": "address" }, + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "internalType": "int256", "name": "proposedPrice", "type": "int256" } + ], + "name": "proposePrice", + "outputs": [{ "internalType": "uint256", "name": "totalBond", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "proposer", "type": "address" }, + { "internalType": "address", "name": "requester", "type": "address" }, + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "internalType": "int256", "name": "proposedPrice", "type": "int256" } + ], + "name": "proposePriceFor", + "outputs": [{ "internalType": "uint256", "name": "totalBond", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "internalType": "contract IERC20", "name": "currency", "type": "address" }, + { "internalType": "uint256", "name": "reward", "type": "uint256" } + ], + "name": "requestPrice", + "outputs": [{ "internalType": "uint256", "name": "totalBond", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "requests", + "outputs": [ + { "internalType": "address", "name": "proposer", "type": "address" }, + { "internalType": "address", "name": "disputer", "type": "address" }, + { "internalType": "contract IERC20", "name": "currency", "type": "address" }, + { "internalType": "bool", "name": "settled", "type": "bool" }, + { + "components": [ + { "internalType": "bool", "name": "eventBased", "type": "bool" }, + { "internalType": "bool", "name": "refundOnDispute", "type": "bool" }, + { "internalType": "bool", "name": "callbackOnPriceProposed", "type": "bool" }, + { "internalType": "bool", "name": "callbackOnPriceDisputed", "type": "bool" }, + { "internalType": "bool", "name": "callbackOnPriceSettled", "type": "bool" }, + { "internalType": "uint256", "name": "bond", "type": "uint256" }, + { "internalType": "uint256", "name": "customLiveness", "type": "uint256" } + ], + "internalType": "struct OptimisticOracleV2Interface.RequestSettings", + "name": "requestSettings", + "type": "tuple" + }, + { "internalType": "int256", "name": "proposedPrice", "type": "int256" }, + { "internalType": "int256", "name": "resolvedPrice", "type": "int256" }, + { "internalType": "uint256", "name": "expirationTime", "type": "uint256" }, + { "internalType": "uint256", "name": "reward", "type": "uint256" }, + { "internalType": "uint256", "name": "finalFee", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "internalType": "uint256", "name": "bond", "type": "uint256" } + ], + "name": "setBond", + "outputs": [{ "internalType": "uint256", "name": "totalBond", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "internalType": "bool", "name": "callbackOnPriceProposed", "type": "bool" }, + { "internalType": "bool", "name": "callbackOnPriceDisputed", "type": "bool" }, + { "internalType": "bool", "name": "callbackOnPriceSettled", "type": "bool" } + ], + "name": "setCallbacks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "time", "type": "uint256" }], + "name": "setCurrentTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "internalType": "uint256", "name": "customLiveness", "type": "uint256" } + ], + "name": "setCustomLiveness", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" } + ], + "name": "setEventBased", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" } + ], + "name": "setRefundOnDispute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "requester", "type": "address" }, + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" } + ], + "name": "settle", + "outputs": [{ "internalType": "uint256", "name": "payout", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" } + ], + "name": "settleAndGetPrice", + "outputs": [{ "internalType": "int256", "name": "", "type": "int256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "internalType": "address", "name": "requester", "type": "address" } + ], + "name": "stampAncillaryData", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "timerAddress", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "managedRequestId", "type": "bytes32" }, + { "indexed": false, "internalType": "address", "name": "requester", "type": "address" }, + { "indexed": true, "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "indexed": false, "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "indexed": true, "internalType": "contract IERC20", "name": "currency", "type": "address" }, + { "indexed": false, "internalType": "uint256", "name": "bond", "type": "uint256" } + ], + "name": "CustomBondSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "managedRequestId", "type": "bytes32" }, + { "indexed": true, "internalType": "address", "name": "requester", "type": "address" }, + { "indexed": true, "internalType": "bytes32", "name": "identifier", "type": "bytes32" }, + { "indexed": false, "internalType": "bytes", "name": "ancillaryData", "type": "bytes" }, + { "indexed": false, "internalType": "uint256", "name": "customLiveness", "type": "uint256" } + ], + "name": "CustomLivenessSet", + "type": "event" + } +] diff --git a/packages/managed-oracle-v2/manifest/data/amoy.json b/packages/managed-oracle-v2/manifest/data/amoy.json new file mode 100644 index 0000000..d59902e --- /dev/null +++ b/packages/managed-oracle-v2/manifest/data/amoy.json @@ -0,0 +1,10 @@ +{ + "network": "polygon-amoy", + "ManagedOracleV2DataSources": [ + { + "name": "ManagedOracleV2", + "address": "0xa3dE5F042EFD4C732498883100A2d319BbB3c1A1", + "startBlock": 24737019 + } + ] +} diff --git a/packages/managed-oracle-v2/manifest/data/polygon.json b/packages/managed-oracle-v2/manifest/data/polygon.json new file mode 100644 index 0000000..df9800e --- /dev/null +++ b/packages/managed-oracle-v2/manifest/data/polygon.json @@ -0,0 +1,10 @@ +{ + "network": "matic", + "ManagedOracleV2DataSources": [ + { + "name": "ManagedOracleV2", + "address": "0x2C0367a9DB231dDeBd88a94b4f6461a6e47C58B1", + "startBlock": 74677419 + } + ] +} diff --git a/packages/managed-oracle-v2/manifest/templates/ManagedOracleV2.template.yaml b/packages/managed-oracle-v2/manifest/templates/ManagedOracleV2.template.yaml new file mode 100644 index 0000000..3939e25 --- /dev/null +++ b/packages/managed-oracle-v2/manifest/templates/ManagedOracleV2.template.yaml @@ -0,0 +1,40 @@ +- kind: ethereum/contract + name: {{name}} + network: {{network}} + source: + address: "{{address}}" + abi: ManagedOracleV2 + startBlock: {{startBlock}} + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + file: ./src/index.ts + entities: + - OptimisticPriceRequest + - PriceIdentifier + - CustomLiveness + - CustomBond + abis: + - name: ManagedOracleV2 + file: ./abis/ManagedOracleV2.json + eventHandlers: + - event: RequestPrice(indexed address,bytes32,uint256,bytes,address,uint256,uint256) + handler: handleOptimisticRequestPrice + - event: ProposePrice(indexed address,indexed address,bytes32,uint256,bytes,int256,uint256,address) + handler: handleOptimisticProposePrice + - event: DisputePrice(indexed address,indexed address,indexed address,bytes32,uint256,bytes,int256) + handler: handleOptimisticDisputePrice + - event: Settle(indexed address,indexed address,indexed address,bytes32,uint256,bytes,int256,uint256) + handler: handleOptimisticSettle + - event: CustomLivenessSet(indexed bytes32,indexed address,indexed bytes32,bytes,uint256) + handler: handleCustomLivenessSet + - event: CustomBondSet(indexed bytes32,address,indexed bytes32,bytes,indexed address,uint256) + handler: handleCustomBondSet + callHandlers: + - function: setCustomLiveness(bytes32,uint256,bytes,uint256) + handler: handleSetCustomLiveness + - function: setBond(bytes32,uint256,bytes,uint256) + handler: handleSetBond + - function: setEventBased(bytes32,uint256,bytes) + handler: handleSetEventBased \ No newline at end of file diff --git a/packages/managed-oracle-v2/manifest/templates/subgraph.template.yaml b/packages/managed-oracle-v2/manifest/templates/subgraph.template.yaml new file mode 100644 index 0000000..2efe509 --- /dev/null +++ b/packages/managed-oracle-v2/manifest/templates/subgraph.template.yaml @@ -0,0 +1,9 @@ +specVersion: 0.0.2 +description: Subgraph with support for the UMA Managed Optimistic Oracle V2 contract data +repository: https://github.com/UMAprotocol/subgraphs +schema: + file: ./schema.graphql +dataSources: +{{#ManagedOracleV2DataSources}} + {{> ManagedOracleV2.template.yaml}} +{{/ManagedOracleV2DataSources}} diff --git a/packages/managed-oracle-v2/matchstick.yaml b/packages/managed-oracle-v2/matchstick.yaml new file mode 100644 index 0000000..01fb91d --- /dev/null +++ b/packages/managed-oracle-v2/matchstick.yaml @@ -0,0 +1,2 @@ +testsFolder: tests +libsFolder: ../../node_modules # binaries istalled in root of monorepo diff --git a/packages/managed-oracle-v2/package.json b/packages/managed-oracle-v2/package.json new file mode 100644 index 0000000..be7c193 --- /dev/null +++ b/packages/managed-oracle-v2/package.json @@ -0,0 +1,41 @@ +{ + "name": "managed-optimistic-oracle-v2-subgraph", + "version": "0.1.0", + "description": "Managed Optimistic Oracle V2 Contract Events Subgraph", + "scripts": { + "ganache": "ganache-cli -h 0.0.0.0", + "codegen": "graph codegen", + "build": "graph build", + "remove-call-handlers": "node ./scripts/remove-call-handlers.js", + "prepare:polygon": "scripts/build-manifest.sh polygon && yarn remove-call-handlers && yarn codegen && yarn build", + "prepare-ci": "scripts/build-manifest.sh polygon && yarn remove-call-handlers && yarn codegen && yarn build", + "prepare:amoy": "scripts/build-manifest.sh amoy && yarn remove-call-handlers && yarn codegen && yarn build", + "deploy:polygon": "env STAGING=true scripts/deploy.sh polygon", + "deploy-prod:polygon": "env STUDIO=true scripts/deploy.sh polygon", + "deploy:amoy": "env STAGING=true scripts/deploy.sh amoy", + "deploy-prod:amoy": "env STUDIO=true scripts/deploy.sh amoy", + "deploy:goldsky:amoy": "env GOLDSKY=true scripts/deploy.sh amoy", + "deploy-prod:goldsky:polygon": "env GOLDSKY=true scripts/deploy.sh polygon", + "test": "graph test" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/UMAprotocol/subgraphs.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/UMAprotocol/subgraphs/issues" + }, + "homepage": "https://github.com/UMAprotocol/subgraphs#readme", + "dependencies": { + "@graphprotocol/graph-cli": "^0.67.3", + "@graphprotocol/graph-ts": "^0.32.0", + "mustache": "^4.2.0", + "yaml": "^2.2.1" + }, + "devDependencies": { + "matchstick-as": "0.6.0" + } +} diff --git a/packages/managed-oracle-v2/schema.graphql b/packages/managed-oracle-v2/schema.graphql new file mode 100644 index 0000000..8f9cd42 --- /dev/null +++ b/packages/managed-oracle-v2/schema.graphql @@ -0,0 +1,110 @@ +enum OptimisticPriceRequestState { + Invalid + Requested + Proposed + Expired + Disputed + Resolved + Settled +} + +type OptimisticPriceRequest @entity { + "ID is the PriceIdentifier ID + the timestamp + ancillaryData (if available)" + id: ID! + + identifier: String! + + ancillaryData: String! + + time: BigInt! + + requester: Bytes! + + currency: Bytes! + + reward: BigInt! + + finalFee: BigInt! + + proposer: Bytes + + proposedPrice: BigInt + + proposalExpirationTimestamp: BigInt + + disputer: Bytes + + settlementPrice: BigInt + + settlementPayout: BigInt + + settlementRecipient: Bytes + + state: OptimisticPriceRequestState + + requestTimestamp: BigInt + + requestBlockNumber: BigInt + + requestHash: Bytes + + requestLogIndex: BigInt + + proposalTimestamp: BigInt + + proposalBlockNumber: BigInt + + proposalHash: Bytes + + proposalLogIndex: BigInt + + disputeTimestamp: BigInt + + disputeBlockNumber: BigInt + + disputeHash: Bytes + + disputeLogIndex: BigInt + + settlementTimestamp: BigInt + + settlementBlockNumber: BigInt + + settlementHash: Bytes + + settlementLogIndex: BigInt + + customLiveness: BigInt + + bond: BigInt + + eventBased: Boolean +} + +type CustomBond @entity { + "ID is managedRequestId, ie. the hash of requester, identifier, ancillaryData" + id: ID! + + currency: Bytes! + + requester: Bytes! + + identifier: String! + + ancillaryData: String! + + customBond: BigInt! +} + +type CustomLiveness @entity { + "ID is managedRequestId, ie. the hash of requester, identifier, ancillaryData" + id: ID! + + requester: Bytes! + + identifier: String! + + ancillaryData: String! + + customLiveness: BigInt! +} diff --git a/packages/managed-oracle-v2/scripts/build-manifest.sh b/packages/managed-oracle-v2/scripts/build-manifest.sh new file mode 100755 index 0000000..3b6dc85 --- /dev/null +++ b/packages/managed-oracle-v2/scripts/build-manifest.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +NETWORK=$1 + +FILE=$NETWORK'.json' + +DATA=manifest/data/$FILE + +echo 'Generating manifest from data file: '$DATA +cat $DATA + +mustache \ + -p manifest/templates/ManagedOracleV2.template.yaml \ + $DATA \ + manifest/templates/subgraph.template.yaml > subgraph.yaml \ No newline at end of file diff --git a/packages/managed-oracle-v2/scripts/deploy.sh b/packages/managed-oracle-v2/scripts/deploy.sh new file mode 100755 index 0000000..a38b6bc --- /dev/null +++ b/packages/managed-oracle-v2/scripts/deploy.sh @@ -0,0 +1,5 @@ +#!/bin/bash +NETWORK=$1 +SUBGRAPH_NAME=$NETWORK'-managed-optimistic-oracle-v2' + +SUBGRAPH_NAME=$SUBGRAPH_NAME /bin/bash ../../scripts/deploy.sh diff --git a/packages/managed-oracle-v2/scripts/remove-call-handlers.js b/packages/managed-oracle-v2/scripts/remove-call-handlers.js new file mode 100644 index 0000000..fd437ee --- /dev/null +++ b/packages/managed-oracle-v2/scripts/remove-call-handlers.js @@ -0,0 +1,8 @@ +const fs = require("fs"); +const yaml = require("yaml"); + +const subgraphYaml = fs.readFileSync("subgraph.yaml", "utf8"); +const parsed = yaml.parse(subgraphYaml); +delete parsed.dataSources[0].mapping.callHandlers; +const stringified = yaml.stringify(parsed); +fs.writeFileSync("subgraph.yaml", stringified); diff --git a/packages/managed-oracle-v2/src/index.ts b/packages/managed-oracle-v2/src/index.ts new file mode 100644 index 0000000..8f3ff26 --- /dev/null +++ b/packages/managed-oracle-v2/src/index.ts @@ -0,0 +1,10 @@ +export { + handleOptimisticDisputePrice, + handleOptimisticProposePrice, + handleOptimisticRequestPrice, + handleOptimisticSettle, + handleSetBond, + handleSetCustomLiveness, + handleSetEventBased, +} from "./mappings/optimisticOracleV2"; +export { handleCustomBondSet, handleCustomLivenessSet } from "./mappings/managedOracleV2"; diff --git a/packages/managed-oracle-v2/src/mappings/managedOracleV2.ts b/packages/managed-oracle-v2/src/mappings/managedOracleV2.ts new file mode 100644 index 0000000..f820b76 --- /dev/null +++ b/packages/managed-oracle-v2/src/mappings/managedOracleV2.ts @@ -0,0 +1,38 @@ +import { log } from "@graphprotocol/graph-ts"; +import { CustomBond, CustomLiveness } from "../../generated/schema"; +import { CustomBondSet, CustomLivenessSet } from "../../generated/ManagedOracleV2/ManagedOracleV2"; + +export function handleCustomBondSet(event: CustomBondSet): void { + const managedRequestId = event.params.managedRequestId.toHexString(); + log.debug("Custom Bond set event. Loading entity with managedRequestId, {}", [managedRequestId]); + + let entity = CustomBond.load(managedRequestId); + + if (entity == null) { + entity = new CustomBond(managedRequestId); + entity.requester = event.params.requester; + entity.identifier = event.params.identifier.toString(); + entity.ancillaryData = event.params.ancillaryData.toHex(); + entity.currency = event.params.currency; + } + + entity.customBond = event.params.bond; + entity.save(); +} + +export function handleCustomLivenessSet(event: CustomLivenessSet): void { + const managedRequestId = event.params.managedRequestId.toHexString(); + log.debug("Custom Liveness set event. Loading entity with managedRequestId, {}", [managedRequestId]); + + let entity = CustomLiveness.load(managedRequestId); + + if (entity == null) { + entity = new CustomLiveness(managedRequestId); + entity.requester = event.params.requester; + entity.identifier = event.params.identifier.toString(); + entity.ancillaryData = event.params.ancillaryData.toHex(); + } + + entity.customLiveness = event.params.customLiveness; + entity.save(); +} diff --git a/packages/managed-oracle-v2/src/mappings/optimisticOracleV2.ts b/packages/managed-oracle-v2/src/mappings/optimisticOracleV2.ts new file mode 100644 index 0000000..a4526ef --- /dev/null +++ b/packages/managed-oracle-v2/src/mappings/optimisticOracleV2.ts @@ -0,0 +1,347 @@ +import { + DisputePrice, + ManagedOracleV2, + ProposePrice, + RequestPrice, + SetBondCall, + SetCustomLivenessCall, + SetEventBasedCall, + Settle, +} from "../../generated/ManagedOracleV2/ManagedOracleV2"; +import { getManagedRequestId, getOrCreateOptimisticPriceRequest } from "../utils/helpers"; +import { CustomBond, CustomLiveness } from "../../generated/schema"; + +import { Address, BigInt, Bytes, dataSource, log } from "@graphprotocol/graph-ts"; + +let network = dataSource.network(); + +let isMainnet = network == "mainnet"; +let isGoerli = network == "goerli"; + +function getCustomBond(requester: Address, identifier: Bytes, ancillaryData: Bytes): CustomBond | null { + const managedRequestId = getManagedRequestId(requester, identifier, ancillaryData).toHexString(); + let customBondEntity = CustomBond.load(managedRequestId); + return customBondEntity ? customBondEntity : null; +} + +function getCustomLiveness(requester: Address, identifier: Bytes, ancillaryData: Bytes): CustomLiveness | null { + const managedRequestId = getManagedRequestId(requester, identifier, ancillaryData).toHexString(); + let customLivenessEntity = CustomLiveness.load(managedRequestId); + return customLivenessEntity ? customLivenessEntity : null; +} + +function getState( + ooAddress: Address, + requester: Address, + identifier: Bytes, + timestamp: BigInt, + ancillaryData: Bytes +): string { + const states = [ + "Invalid", // Never requested. + "Requested", // Requested, no other actions taken. + "Proposed", // Proposed, but not expired or disputed yet. + "Expired", // Proposed, not disputed, past liveness. + "Disputed", // Disputed, but no DVM price returned yet. + "Resolved", // Disputed and DVM price is available. + "Settled", // Final price has been set in the contract (can get here from Expired or Resolved). + ]; + let oov2 = ManagedOracleV2.bind(ooAddress); + let state = oov2.try_getState(requester, identifier, timestamp, ancillaryData); + if (state.reverted) { + log.warning("getState call reverted, returning Invalid state", []); + return states[0]; // Return "Invalid" if the call fails + } + return states[state.value]; +} + +// - event: RequestPrice(indexed address,bytes32,uint256,bytes,address,uint256,uint256) +// handler: handleOptimisticRequestPrice +// - event RequestPrice( +// address indexed requester, +// bytes32 identifier, +// uint256 timestamp, +// bytes ancillaryData, +// address currency, +// uint256 reward, +// uint256 finalFee +// ); + +export function handleOptimisticRequestPrice(event: RequestPrice): void { + log.warning(`(ancillary) OOV2 PriceRequest params: {},{},{}`, [ + event.params.timestamp.toString(), + event.params.identifier.toString(), + event.params.ancillaryData.toHex(), + ]); + let requestId = event.params.identifier + .toString() + .concat("-") + .concat(event.params.timestamp.toString()) + .concat("-") + .concat(event.params.ancillaryData.toHex()); + + let request = getOrCreateOptimisticPriceRequest(requestId); + + request.identifier = event.params.identifier.toString(); + request.time = event.params.timestamp; + request.ancillaryData = event.params.ancillaryData.toHex(); + request.requester = event.params.requester; + request.currency = event.params.currency; + request.reward = event.params.reward; + request.finalFee = event.params.finalFee; + request.requestTimestamp = event.block.timestamp; + request.requestBlockNumber = event.block.number; + request.requestLogIndex = event.logIndex; + request.requestHash = event.transaction.hash; + + request.state = getState( + event.address, + event.params.requester, + event.params.identifier, + event.params.timestamp, + event.params.ancillaryData + ); + + // workaround for L2 chains that don't support `callHandlers` + // see readme for more info + if (!isMainnet && !isGoerli) { + let oov2 = ManagedOracleV2.bind(event.address); + let requestSettings = oov2.try_getRequest( + event.params.requester, + event.params.identifier, + event.params.timestamp, + event.params.ancillaryData + ).value.requestSettings; + request.bond = requestSettings.bond; + request.eventBased = requestSettings.eventBased; + request.customLiveness = requestSettings.customLiveness; + } + + // Look up custom bond and liveness values that may have been set before the request + let customBond = getCustomBond(event.params.requester, event.params.identifier, event.params.ancillaryData); + if (customBond !== null) { + const bond = customBond.customBond; + const currency = customBond.currency; + log.debug("custom bond of {} of currency {} was set for request Id: {}", [ + bond.toString(), + currency.toHexString(), + requestId, + ]); + request.bond = bond; + request.currency = currency; + } + + let customLiveness = getCustomLiveness(event.params.requester, event.params.identifier, event.params.ancillaryData); + if (customLiveness !== null) { + const liveness = customLiveness.customLiveness; + log.debug("custom liveness of {} was set for request Id: {}", [liveness.toString(), requestId]); + request.customLiveness = customLiveness.customLiveness; + } + + request.save(); +} + +// - event: ProposePrice(indexed address,indexed address,bytes32,uint256,bytes,int256,uint256,address) +// handler: handleOptimisticProposePrice +// - event ProposePrice( +// address indexed requester, +// address indexed proposer, +// bytes32 identifier, +// uint256 timestamp, +// bytes ancillaryData, +// int256 proposedPrice, +// uint256 expirationTimestamp, +// address currency +// ); + +export function handleOptimisticProposePrice(event: ProposePrice): void { + log.warning(`(ancillary) OOV2 PriceProposed params: {},{},{}`, [ + event.params.timestamp.toString(), + event.params.identifier.toString(), + event.params.ancillaryData.toHex(), + ]); + let requestId = event.params.identifier + .toString() + .concat("-") + .concat(event.params.timestamp.toString()) + .concat("-") + .concat(event.params.ancillaryData.toHex()); + + let request = getOrCreateOptimisticPriceRequest(requestId); + + request.proposer = event.params.proposer; + request.proposedPrice = event.params.proposedPrice; + request.proposalExpirationTimestamp = event.params.expirationTimestamp; + + request.proposalTimestamp = event.block.timestamp; + request.proposalBlockNumber = event.block.number; + request.proposalLogIndex = event.logIndex; + request.proposalHash = event.transaction.hash; + + request.state = getState( + event.address, + event.params.requester, + event.params.identifier, + event.params.timestamp, + event.params.ancillaryData + ); + + request.save(); +} + +// - event: DisputePrice(indexed address,indexed address,indexed address,bytes32,uint256,bytes,int256) +// handler: handleOptimisticDisputePrice +// - event DisputePrice( +// address indexed requester, +// address indexed proposer, +// address indexed disputer, +// bytes32 identifier, +// uint256 timestamp, +// bytes ancillaryData, +// int256 proposedPrice +// ); + +export function handleOptimisticDisputePrice(event: DisputePrice): void { + log.warning(`(ancillary) OOV2 PriceDisputed params: {},{},{}`, [ + event.params.timestamp.toString(), + event.params.identifier.toString(), + event.params.ancillaryData.toHex(), + ]); + let requestId = event.params.identifier + .toString() + .concat("-") + .concat(event.params.timestamp.toString()) + .concat("-") + .concat(event.params.ancillaryData.toHex()); + + let request = getOrCreateOptimisticPriceRequest(requestId); + + request.disputer = event.params.disputer; + + request.disputeTimestamp = event.block.timestamp; + request.disputeBlockNumber = event.block.number; + request.disputeLogIndex = event.logIndex; + request.disputeHash = event.transaction.hash; + + request.state = getState( + event.address, + event.params.requester, + event.params.identifier, + event.params.timestamp, + event.params.ancillaryData + ); + + request.save(); +} + +// - event: Settle(indexed address,indexed address,indexed address,bytes32,uint256,bytes,int256,uint256) +// handler: handleOptimisticSettle +// - event Settle( +// address indexed requester, +// address indexed proposer, +// address indexed disputer, +// bytes32 identifier, +// uint256 timestamp, +// bytes ancillaryData, +// int256 price, +// uint256 payout +// ); + +export function handleOptimisticSettle(event: Settle): void { + log.warning(`(ancillary) OOV2 Settled params: {},{},{}`, [ + event.params.timestamp.toString(), + event.params.identifier.toString(), + event.params.ancillaryData.toHex(), + ]); + let requestId = event.params.identifier + .toString() + .concat("-") + .concat(event.params.timestamp.toString()) + .concat("-") + .concat(event.params.ancillaryData.toHex()); + + let request = getOrCreateOptimisticPriceRequest(requestId); + + request.settlementPrice = event.params.price; + request.settlementPayout = event.params.payout; + + if (!request.disputer || request.proposedPrice!.equals(event.params.price)) { + request.settlementRecipient = request.proposer; + } else { + request.settlementRecipient = request.disputer; + } + + request.settlementTimestamp = event.block.timestamp; + request.settlementBlockNumber = event.block.number; + request.settlementLogIndex = event.logIndex; + request.settlementHash = event.transaction.hash; + + request.state = getState( + event.address, + event.params.requester, + event.params.identifier, + event.params.timestamp, + event.params.ancillaryData + ); + + request.save(); +} + +export function handleSetCustomLiveness(call: SetCustomLivenessCall): void { + log.warning(`OOV2 set custom liveness inputs: {},{},{},{}`, [ + call.inputs.timestamp.toString(), + call.inputs.identifier.toString(), + call.inputs.ancillaryData.toHex(), + call.inputs.customLiveness.toString(), + ]); + let requestId = call.inputs.identifier + .toString() + .concat("-") + .concat(call.inputs.timestamp.toString()) + .concat("-") + .concat(call.inputs.ancillaryData.toHex()); + + let request = getOrCreateOptimisticPriceRequest(requestId); + request.customLiveness = call.inputs.customLiveness; + + request.save(); +} + +export function handleSetBond(call: SetBondCall): void { + log.warning(`OOV2 set bond inputs: {},{},{},{}`, [ + call.inputs.timestamp.toString(), + call.inputs.identifier.toString(), + call.inputs.ancillaryData.toHex(), + call.inputs.bond.toString(), + ]); + let requestId = call.inputs.identifier + .toString() + .concat("-") + .concat(call.inputs.timestamp.toString()) + .concat("-") + .concat(call.inputs.ancillaryData.toHex()); + + let request = getOrCreateOptimisticPriceRequest(requestId); + request.bond = call.inputs.bond; + + request.save(); +} + +export function handleSetEventBased(call: SetEventBasedCall): void { + log.warning(`OOV2 set event based inputs: {},{},{}`, [ + call.inputs.timestamp.toString(), + call.inputs.identifier.toString(), + call.inputs.ancillaryData.toHex(), + ]); + let requestId = call.inputs.identifier + .toString() + .concat("-") + .concat(call.inputs.timestamp.toString()) + .concat("-") + .concat(call.inputs.ancillaryData.toHex()); + + let request = getOrCreateOptimisticPriceRequest(requestId); + request.eventBased = true; + + request.save(); +} diff --git a/packages/managed-oracle-v2/src/utils/constants.ts b/packages/managed-oracle-v2/src/utils/constants.ts new file mode 100644 index 0000000..aefbdc1 --- /dev/null +++ b/packages/managed-oracle-v2/src/utils/constants.ts @@ -0,0 +1,9 @@ +import { BigDecimal, BigInt } from "@graphprotocol/graph-ts"; +import { toDecimal } from "./decimals"; + +export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; +export let BIGINT_ZERO = BigInt.fromI32(0); +export let BIGINT_ONE = BigInt.fromI32(1); +export let BIGDECIMAL_ZERO = new BigDecimal(BIGINT_ZERO); +export let BIGDECIMAL_ONE = toDecimal(BigInt.fromI32(10).pow(18)); +export let BIGDECIMAL_HUNDRED = toDecimal(BigInt.fromI32(10).pow(20)); diff --git a/packages/managed-oracle-v2/src/utils/decimals.ts b/packages/managed-oracle-v2/src/utils/decimals.ts new file mode 100644 index 0000000..38ca7d6 --- /dev/null +++ b/packages/managed-oracle-v2/src/utils/decimals.ts @@ -0,0 +1,25 @@ +import { BigDecimal, BigInt } from "@graphprotocol/graph-ts"; + +export const DEFAULT_DECIMALS = 18; + +export function pow(base: BigDecimal, exponent: number): BigDecimal { + let result = base; + + if (exponent == 0) { + return BigDecimal.fromString("1"); + } + + for (let i = 2; i <= exponent; i++) { + result = result.times(base); + } + + return result; +} + +export function toDecimal(value: BigInt, decimals: number = DEFAULT_DECIMALS): BigDecimal { + let precision = BigInt.fromI32(10) + .pow(decimals) + .toBigDecimal(); + + return value.divDecimal(precision); +} diff --git a/packages/managed-oracle-v2/src/utils/helpers/index.ts b/packages/managed-oracle-v2/src/utils/helpers/index.ts new file mode 100644 index 0000000..76b46bd --- /dev/null +++ b/packages/managed-oracle-v2/src/utils/helpers/index.ts @@ -0,0 +1,2 @@ +export { getOrCreateOptimisticPriceRequest } from "./optimisticOracle"; +export { getManagedRequestId } from "./managedOracleV2"; diff --git a/packages/managed-oracle-v2/src/utils/helpers/managedOracleV2.ts b/packages/managed-oracle-v2/src/utils/helpers/managedOracleV2.ts new file mode 100644 index 0000000..f352971 --- /dev/null +++ b/packages/managed-oracle-v2/src/utils/helpers/managedOracleV2.ts @@ -0,0 +1,6 @@ +import { Address, ByteArray, Bytes, crypto } from "@graphprotocol/graph-ts"; + +export function getManagedRequestId(requester: Address, identifier: Bytes, ancillaryData: Bytes): ByteArray { + let packed = requester.concat(identifier).concat(ancillaryData); + return crypto.keccak256(packed); +} diff --git a/packages/managed-oracle-v2/src/utils/helpers/optimisticOracle.ts b/packages/managed-oracle-v2/src/utils/helpers/optimisticOracle.ts new file mode 100644 index 0000000..f4f9058 --- /dev/null +++ b/packages/managed-oracle-v2/src/utils/helpers/optimisticOracle.ts @@ -0,0 +1,23 @@ +import { Bytes } from "@graphprotocol/graph-ts"; +import { OptimisticPriceRequest } from "../../../generated/schema"; +import { BIGINT_ZERO } from "../constants"; + +export function getOrCreateOptimisticPriceRequest( + id: String, + createIfNotFound: boolean = true +): OptimisticPriceRequest { + let request = OptimisticPriceRequest.load(id); + + if (request == null && createIfNotFound) { + request = new OptimisticPriceRequest(id); + request.identifier = ""; + request.ancillaryData = ""; + request.time = BIGINT_ZERO; + request.requester = Bytes.fromI32(0); + request.currency = Bytes.fromI32(0); + request.reward = BIGINT_ZERO; + request.finalFee = BIGINT_ZERO; + } + + return request as OptimisticPriceRequest; +} diff --git a/packages/managed-oracle-v2/tests/managed-oracle-v2/managedOracle.test.ts b/packages/managed-oracle-v2/tests/managed-oracle-v2/managedOracle.test.ts new file mode 100644 index 0000000..0809cc5 --- /dev/null +++ b/packages/managed-oracle-v2/tests/managed-oracle-v2/managedOracle.test.ts @@ -0,0 +1,215 @@ +import { describe, test, clearStore, afterAll, assert, log, afterEach } from "matchstick-as/assembly/index"; +import { handleCustomLivenessSet, handleCustomBondSet } from "../../src/mappings/managedOracleV2"; +import { handleOptimisticRequestPrice } from "../../src/mappings/optimisticOracleV2"; +import { + createCustomLivenessSetEvent, + createCustomBondSetEvent, + createRequestPriceEvent, + mockGetState, + State, +} from "./utils"; +import { CustomLiveness, CustomBond, OptimisticPriceRequest } from "../../generated/schema"; +import { BigInt, Bytes, Address } from "@graphprotocol/graph-ts"; + +// Tests structure (matchstick-as >=0.5.0) +// https://thegraph.com/docs/en/developer/matchstick/#tests-structure-0-5-0 + +namespace Constants { + export const managedRequestId = "0x8aed060a05dfbb279705824d8b544fc58a63ebc4a1c26380cbd90297c0a7e33c"; + export const requester = "0x9A8f92a830A5cB89a3816e3D267CB7791c16b04D"; + export const identifierHex = "0x00000000000000000000000000000000005945535f4f525f4e4f5f5155455259"; // "YES_OR_NO_QUERY" + export const identifierString = "YES_OR_NO_QUERY"; + export const ancillaryData = "0x5945535f4f525f4e4f5f5155455259"; + export const currency = "0x9b4A302A548c7e313c2b74C461db7b84d3074A84"; + export const customBond = 2000000; + export const customLiveness = 1757286231; + export const reward = 1000000; + export const finalFee = 500000; + export const timestamp = 1757284669; +} + +describe("Managed OOv2", () => { + afterEach(() => { + clearStore(); + }); + + test("handleCustomLivenessSet creates CustomLiveness entity correctly", () => { + const customLivenessEvent = createCustomLivenessSetEvent( + Constants.managedRequestId, + Constants.requester, + Constants.identifierHex, + Constants.ancillaryData, + Constants.customLiveness + ); + + handleCustomLivenessSet(customLivenessEvent); + + const managedRequestIdActual = customLivenessEvent.params.managedRequestId.toHexString(); + + const customLivenessEntity = CustomLiveness.load(managedRequestIdActual); + + assert.assertTrue(customLivenessEntity !== null, "CustomLiveness entity should be created"); + + if (customLivenessEntity === null) { + return; + } + + assert.addressEquals( + Address.fromBytes(customLivenessEntity.requester), + Address.fromString(Constants.requester), + "Requester should match" + ); + assert.stringEquals(customLivenessEntity.identifier, "YES_OR_NO_QUERY", "Identifier should match"); + assert.bytesEquals( + Bytes.fromHexString(customLivenessEntity.ancillaryData), + Bytes.fromHexString(Constants.ancillaryData), + "Ancillary data should match" + ); + assert.bigIntEquals( + customLivenessEntity.customLiveness, + BigInt.fromI32(Constants.customLiveness), + "Custom liveness should match" + ); + + log.info("Created CustomLiveness entity: {}", [customLivenessEntity.id]); + log.info("Requester: {}", [customLivenessEntity.requester.toHexString()]); + log.info("Identifier: {}", [customLivenessEntity.identifier]); + log.info("Ancillary Data: {}", [customLivenessEntity.ancillaryData]); + log.info("Custom Liveness: {}", [customLivenessEntity.customLiveness.toString()]); + }); + + test("handleCustomBondSet creates CustomBond entity correctly", () => { + const customBondEvent = createCustomBondSetEvent( + Constants.managedRequestId, + Constants.requester, + Constants.identifierHex, + Constants.ancillaryData, + Constants.currency, + Constants.customBond + ); + + handleCustomBondSet(customBondEvent); + + const managedRequestIdActual = customBondEvent.params.managedRequestId.toHexString(); + + const customBondEntity = CustomBond.load(managedRequestIdActual); + + assert.assertTrue(customBondEntity !== null, "CustomBond entity should be created"); + + if (customBondEntity === null) { + return; + } + + assert.addressEquals( + Address.fromBytes(customBondEntity.requester), + Address.fromString(Constants.requester), + "Requester should match" + ); + assert.stringEquals(customBondEntity.identifier, Constants.identifierString, "Identifier should match"); + assert.bytesEquals( + Bytes.fromHexString(customBondEntity.ancillaryData), + Bytes.fromHexString(Constants.ancillaryData), + "Ancillary data should match" + ); + assert.bigIntEquals(customBondEntity.customBond, BigInt.fromI32(Constants.customBond), "Custom bond should match"); + + log.info("Created CustomBond entity: {}", [customBondEntity.id]); + log.info("Requester: {}", [customBondEntity.requester.toHexString()]); + log.info("Identifier: {}", [customBondEntity.identifier]); + log.info("Ancillary Data: {}", [customBondEntity.ancillaryData]); + log.info("Custom Bond: {}", [customBondEntity.customBond.toString()]); + }); + + test("Custom bond and liveness are applied to RequestPrice entity", () => { + mockGetState( + Constants.requester, + Constants.identifierHex, + Constants.timestamp, + Constants.ancillaryData, + State.Requested + ); + // Step 1: Set custom liveness + const customLivenessEvent = createCustomLivenessSetEvent( + Constants.managedRequestId, + Constants.requester, + Constants.identifierHex, + Constants.ancillaryData, + Constants.customLiveness + ); + handleCustomLivenessSet(customLivenessEvent); + + // Step 2: Set custom bond + const customBondEvent = createCustomBondSetEvent( + Constants.managedRequestId, + Constants.requester, + Constants.identifierHex, + Constants.ancillaryData, + Constants.currency, + Constants.customBond + ); + handleCustomBondSet(customBondEvent); + + // Step 3: Create RequestPrice event + const requestPriceEvent = createRequestPriceEvent( + Constants.requester, + Constants.identifierHex, + Constants.timestamp, + Constants.ancillaryData, + Constants.currency, + Constants.reward, + Constants.finalFee + ); + handleOptimisticRequestPrice(requestPriceEvent); + + const requestId = Constants.identifierString + .concat("-") + .concat(Constants.timestamp.toString()) + .concat("-") + .concat(Constants.ancillaryData); + + const priceRequestEntity = OptimisticPriceRequest.load(requestId); + + assert.assertTrue(priceRequestEntity !== null, "OptimisticPriceRequest entity should be created"); + + if (priceRequestEntity === null) { + return; + } + + assert.stringEquals(priceRequestEntity.identifier, Constants.identifierString, "Identifier should match"); + assert.bigIntEquals(priceRequestEntity.time, BigInt.fromI32(Constants.timestamp), "Timestamp should match"); + assert.bytesEquals( + Bytes.fromHexString(priceRequestEntity.ancillaryData), + Bytes.fromHexString(Constants.ancillaryData), + "Ancillary data should match" + ); + assert.addressEquals( + Address.fromBytes(priceRequestEntity.requester), + Address.fromString(Constants.requester), + "Requester should match" + ); + assert.addressEquals( + Address.fromBytes(priceRequestEntity.currency), + Address.fromString(Constants.currency), + "Currency should match" + ); + assert.bigIntEquals(priceRequestEntity.reward, BigInt.fromI32(Constants.reward), "Reward should match"); + assert.bigIntEquals(priceRequestEntity.finalFee, BigInt.fromI32(Constants.finalFee), "Final fee should match"); + + // Assert custom values are applied + assert.bigIntEquals( + priceRequestEntity.customLiveness!, + BigInt.fromI32(Constants.customLiveness), + "Custom liveness should be applied to RequestPrice" + ); + assert.bigIntEquals( + priceRequestEntity.bond!, + BigInt.fromI32(Constants.customBond), + "Custom bond should be applied to RequestPrice" + ); + + log.info("Created OptimisticPriceRequest entity: {}", [priceRequestEntity.id]); + log.info("Custom Liveness: {}", [priceRequestEntity.customLiveness!.toString()]); + log.info("Custom Bond: {}", [priceRequestEntity.bond!.toString()]); + log.info("State: {}", [priceRequestEntity.state!]); + }); +}); diff --git a/packages/managed-oracle-v2/tests/managed-oracle-v2/utils.ts b/packages/managed-oracle-v2/tests/managed-oracle-v2/utils.ts new file mode 100644 index 0000000..8945edd --- /dev/null +++ b/packages/managed-oracle-v2/tests/managed-oracle-v2/utils.ts @@ -0,0 +1,151 @@ +import { createMockedFunction, newMockEvent } from "matchstick-as"; +import { ethereum, BigInt, Address, Bytes } from "@graphprotocol/graph-ts"; +import { CustomBondSet, CustomLivenessSet, RequestPrice } from "../../generated/ManagedOracleV2/ManagedOracleV2"; + +export const contractAddress = Address.fromString("0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7"); // Default test contract address + +export function createCustomLivenessSetEvent( + managedRequestId: string, // Bytes, + requester: string, // Address, + identifier: string, // Bytes, + ancillaryData: string, // Bytes, + customLiveness: i32 // BigInt +): CustomLivenessSet { + let customLivenessEvent = changetype(newMockEvent()); + customLivenessEvent.address = contractAddress; + customLivenessEvent.parameters = new Array(); + // managedRequestId + customLivenessEvent.parameters.push( + new ethereum.EventParam("managedRequestId", ethereum.Value.fromBytes(Bytes.fromHexString(managedRequestId))) + ); + // requester + customLivenessEvent.parameters.push( + new ethereum.EventParam("requester", ethereum.Value.fromAddress(Address.fromString(requester))) + ); + // identifier + customLivenessEvent.parameters.push( + new ethereum.EventParam("identifier", ethereum.Value.fromBytes(Bytes.fromHexString(identifier))) + ); + // ancillaryData + customLivenessEvent.parameters.push( + new ethereum.EventParam("ancillaryData", ethereum.Value.fromBytes(Bytes.fromHexString(ancillaryData))) + ); + // customLiveness + customLivenessEvent.parameters.push( + new ethereum.EventParam("customLiveness", ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(customLiveness))) + ); + + return customLivenessEvent; +} + +export function createCustomBondSetEvent( + managedRequestId: string, // Bytes, + requester: string, // Address, + identifier: string, // Bytes, + ancillaryData: string, // Bytes, + currency: string, // Address, + bond: i32 // BigInt +): CustomBondSet { + let customBondEvent = changetype(newMockEvent()); + customBondEvent.address = contractAddress; + customBondEvent.parameters = new Array(); + // managedRequestId + customBondEvent.parameters.push( + new ethereum.EventParam("managedRequestId", ethereum.Value.fromBytes(Bytes.fromHexString(managedRequestId))) + ); + // requester + customBondEvent.parameters.push( + new ethereum.EventParam("requester", ethereum.Value.fromAddress(Address.fromString(requester))) + ); + // identifier + customBondEvent.parameters.push( + new ethereum.EventParam("identifier", ethereum.Value.fromBytes(Bytes.fromHexString(identifier))) + ); + // ancillaryData + customBondEvent.parameters.push( + new ethereum.EventParam("ancillaryData", ethereum.Value.fromBytes(Bytes.fromHexString(ancillaryData))) + ); + // currency + customBondEvent.parameters.push( + new ethereum.EventParam("currency", ethereum.Value.fromAddress(Address.fromString(currency))) + ); + // bond + customBondEvent.parameters.push( + new ethereum.EventParam("bond", ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(bond))) + ); + + return customBondEvent; +} + +export function createRequestPriceEvent( + requester: string, // Address, + identifier: string, // Bytes, + timestamp: i32, // BigInt, + ancillaryData: string, // Bytes, + currency: string, // Address, + reward: i32, // BigInt, + finalFee: i32 // BigInt +): RequestPrice { + let requestPriceEvent = changetype(newMockEvent()); + requestPriceEvent.address = contractAddress; + + requestPriceEvent.parameters = new Array(); + // requester + requestPriceEvent.parameters.push( + new ethereum.EventParam("requester", ethereum.Value.fromAddress(Address.fromString(requester))) + ); + // identifier + requestPriceEvent.parameters.push( + new ethereum.EventParam("identifier", ethereum.Value.fromBytes(Bytes.fromHexString(identifier))) + ); + // timestamp + requestPriceEvent.parameters.push( + new ethereum.EventParam("timestamp", ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(timestamp))) + ); + // ancillaryData + requestPriceEvent.parameters.push( + new ethereum.EventParam("ancillaryData", ethereum.Value.fromBytes(Bytes.fromHexString(ancillaryData))) + ); + // currency + requestPriceEvent.parameters.push( + new ethereum.EventParam("currency", ethereum.Value.fromAddress(Address.fromString(currency))) + ); + // reward + requestPriceEvent.parameters.push( + new ethereum.EventParam("reward", ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(reward))) + ); + // finalFee + requestPriceEvent.parameters.push( + new ethereum.EventParam("finalFee", ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(finalFee))) + ); + + return requestPriceEvent; +} + +// https://github.com/UMAprotocol/protocol/blob/99b96247d27ec8a5ea9dbf3eef1dcd71beb0dc41/packages/core/contracts/optimistic-oracle-v2/interfaces/OptimisticOracleV2Interface.sol#L51 +export namespace State { + export const Invalid = 0; // Never requested + export const Requested = 1; // Requested, no other actions taken + export const Proposed = 2; // Proposed, but not expired or disputed yet + export const Expired = 3; // Proposed, not disputed, past liveness + export const Disputed = 4; // Disputed, but no DVM price returned yet + export const Resolved = 5; // Disputed and DVM price is available + export const Settled = 6; // Final price has been set in the contract (can get here from Expired or Resolved). +} + +export function mockGetState( + requester: string, // Address, + identifier: string, // Bytes, + timestamp: i32, // ethereum.Value, + ancillaryData: string, // Bytes + expectedState: i32 // i32 => State +): void { + createMockedFunction(contractAddress, "getState", "getState(address,bytes32,uint256,bytes):(uint8)") + .withArgs([ + ethereum.Value.fromAddress(Address.fromString(requester)), + ethereum.Value.fromFixedBytes(Bytes.fromHexString(identifier)), + ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(timestamp)), + ethereum.Value.fromBytes(Bytes.fromHexString(ancillaryData)), + ]) + .returns([ethereum.Value.fromI32(expectedState)]); +} diff --git a/packages/managed-oracle-v2/tsconfig.json b/packages/managed-oracle-v2/tsconfig.json new file mode 100644 index 0000000..a6d2ae8 --- /dev/null +++ b/packages/managed-oracle-v2/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@graphprotocol/graph-ts/types/tsconfig.base.json" +} diff --git a/packages/optimistic-governor/package.json b/packages/optimistic-governor/package.json index 0666d69..62d1cd9 100644 --- a/packages/optimistic-governor/package.json +++ b/packages/optimistic-governor/package.json @@ -7,6 +7,7 @@ "codegen": "graph codegen", "build": "graph build", "prepare:mainnet": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", + "prepare-ci": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", "prepare:goerli": "scripts/build-manifest.sh goerli && yarn codegen && yarn build", "prepare:polygon": "scripts/build-manifest.sh polygon && yarn codegen && yarn build", "prepare:optimism": "scripts/build-manifest.sh optimism && yarn codegen && yarn build", diff --git a/packages/optimistic-oracle-v2/manifest/data/amoy-managed.json b/packages/optimistic-oracle-v2/manifest/data/amoy-managed.json new file mode 100644 index 0000000..f928f2e --- /dev/null +++ b/packages/optimistic-oracle-v2/manifest/data/amoy-managed.json @@ -0,0 +1,10 @@ +{ + "network": "polygon-amoy", + "OptimisticOracleV2DataSources": [ + { + "name": "ManagedOptimisticOracleV2", + "address": "0xa3dE5F042EFD4C732498883100A2d319BbB3c1A1", + "startBlock": 24737019 + } + ] + } diff --git a/packages/optimistic-oracle-v2/manifest/data/polygon-managed.json b/packages/optimistic-oracle-v2/manifest/data/polygon-managed.json new file mode 100644 index 0000000..a8d7ee0 --- /dev/null +++ b/packages/optimistic-oracle-v2/manifest/data/polygon-managed.json @@ -0,0 +1,10 @@ +{ + "network": "matic", + "OptimisticOracleV2DataSources": [ + { + "name": "ManagedOptimisticOracleV2", + "address": "0x2C0367a9DB231dDeBd88a94b4f6461a6e47C58B1", + "startBlock": "74677419" + } + ] + } diff --git a/packages/optimistic-oracle-v2/manifest/templates/ManagedOracleV2.template.yaml b/packages/optimistic-oracle-v2/manifest/templates/ManagedOracleV2.template.yaml new file mode 100644 index 0000000..ca04a8c --- /dev/null +++ b/packages/optimistic-oracle-v2/manifest/templates/ManagedOracleV2.template.yaml @@ -0,0 +1,38 @@ +- kind: ethereum/contract + name: {{name}} + network: {{network}} + source: + address: "{{address}}" + abi: ManagedOracleV2 + startBlock: {{startBlock}} + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + file: ./src/managedOracleV2.ts + entities: + - OptimisticPriceRequest + - PriceIdentifier + abis: + - name: ManagedOracleV2 + file: ./abis/ManagedOracleV2.json + eventHandlers: + - event: RequestPrice(indexed address,bytes32,uint256,bytes,address,uint256,uint256) + handler: handleOptimisticRequestPrice + - event: ProposePrice(indexed address,indexed address,bytes32,uint256,bytes,int256,uint256,address) + handler: handleOptimisticProposePrice + - event: DisputePrice(indexed address,indexed address,indexed address,bytes32,uint256,bytes,int256) + handler: handleOptimisticDisputePrice + - event: Settle(indexed address,indexed address,indexed address,bytes32,uint256,bytes,int256,uint256) + handler: handleOptimisticSettle + - event: CustomLivenessSet(indexed bytes32,indexed address,indexed bytes32,bytes,uint256) + handler: handleCustomLivenessSet + - event: CustomBondSet(indexed bytes32,address,indexed bytes32,bytes,indexed address,uint256) + handler: handleCustomBondSet + callHandlers: + - function: setCustomLiveness(bytes32,uint256,bytes,uint256) + handler: handleSetCustomLiveness + - function: setBond(bytes32,uint256,bytes,uint256) + handler: handleSetBond + - function: setEventBased(bytes32,uint256,bytes) + handler: handleSetEventBased \ No newline at end of file diff --git a/packages/optimistic-oracle-v2/package.json b/packages/optimistic-oracle-v2/package.json index fc18f0d..4ada061 100644 --- a/packages/optimistic-oracle-v2/package.json +++ b/packages/optimistic-oracle-v2/package.json @@ -1,5 +1,5 @@ { - "name": "optimistic-oracle-subgraph", + "name": "optimistic-oracle-v2-subgraph", "version": "0.1.0", "description": "Optimistic Oracle Contract Events Subgraph", "scripts": { @@ -8,6 +8,7 @@ "build": "graph build", "remove-call-handlers": "node ./scripts/remove-call-handlers.js", "prepare:mainnet": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", + "prepare-ci": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", "prepare:goerli": "scripts/build-manifest.sh goerli && yarn codegen && yarn build", "prepare:polygon": "scripts/build-manifest.sh polygon && yarn remove-call-handlers && yarn codegen && yarn build", "prepare:optimism": "scripts/build-manifest.sh optimism && yarn remove-call-handlers && yarn codegen && yarn build", @@ -19,6 +20,8 @@ "prepare:base": "scripts/build-manifest.sh base && yarn remove-call-handlers && yarn codegen && yarn build", "prepare:base-sepolia": "scripts/build-manifest.sh base-sepolia && yarn remove-call-handlers && yarn codegen && yarn build", "prepare:amoy": "scripts/build-manifest.sh amoy && yarn remove-call-handlers && yarn codegen && yarn build", + "prepare:amoy-managed": "scripts/build-manifest.sh amoy-managed && yarn remove-call-handlers && yarn codegen && yarn build", + "prepare:polygon-managed": "scripts/build-manifest.sh polygon-managed && yarn remove-call-handlers && yarn codegen && yarn build", "prepare:blast": "scripts/build-manifest.sh blast && yarn remove-call-handlers && yarn codegen && yarn build", "prepare:blast-sepolia": "scripts/build-manifest.sh blast-sepolia && yarn remove-call-handlers && yarn codegen && yarn build", "prepare:goldsky:blast": "scripts/build-manifest.sh blast-goldsky && yarn remove-call-handlers && yarn codegen && yarn build", @@ -44,10 +47,12 @@ "deploy-prod:blast": "env STUDIO=true scripts/deploy.sh blast", "deploy:all-prod": "yarn prepare:mainnet && yarn deploy-prod:mainnet && yarn prepare:polygon && yarn deploy-prod:polygon && yarn prepare:optimism && yarn deploy-prod:optimism && yarn prepare:arbitrum && yarn deploy-prod:arbitrum && yarn prepare:boba && yarn deploy-prod:boba && yarn prepare:core && yarn deploy-prod:core && yarn prepare:base && yarn deploy-prod:base && yarn prepare:blast && yarn deploy-prod:blast && yarn prepare:goldsky:story && yarn deploy-prod:goldsky:story", "deploy:goldsky:amoy": "env GOLDSKY=true scripts/deploy.sh amoy", + "deploy:goldsky:amoy-managed": "env GOLDSKY=true scripts/deploy.sh amoy managed", "deploy:goldsky:base-sepolia": "env GOLDSKY=true scripts/deploy.sh base-sepolia", "deploy:goldsky:sepolia": "env GOLDSKY=true scripts/deploy.sh sepolia", "deploy-prod:goldsky:mainnet": "env GOLDSKY=true scripts/deploy.sh mainnet", "deploy-prod:goldsky:polygon": "env GOLDSKY=true scripts/deploy.sh polygon", + "deploy-prod:goldsky:polygon-managed": "env GOLDSKY=true scripts/deploy.sh polygon managed", "deploy-prod:goldsky:boba": "env GOLDSKY=true scripts/deploy.sh boba", "deploy-prod:goldsky:optimism": "env GOLDSKY=true scripts/deploy.sh optimism", "deploy-prod:goldsky:arbitrum": "env GOLDSKY=true scripts/deploy.sh arbitrum", diff --git a/packages/optimistic-oracle-v2/scripts/deploy.sh b/packages/optimistic-oracle-v2/scripts/deploy.sh index 1a8b49b..46aa3d6 100755 --- a/packages/optimistic-oracle-v2/scripts/deploy.sh +++ b/packages/optimistic-oracle-v2/scripts/deploy.sh @@ -1,5 +1,32 @@ -#!/bin/bash -NETWORK=$1 -SUBGRAPH_NAME=$NETWORK'-optimistic-oracle-v2' +#!/usr/bin/env bash +set -euo pipefail -SUBGRAPH_NAME=$SUBGRAPH_NAME /bin/bash ../../scripts/deploy.sh +if [[ $# -lt 1 || $# -gt 3 ]]; then + cat < [variant] [suffix] +Examples: + $0 mainnet -> mainnet-optimistic-oracle-v2 + $0 mainnet managed -> mainnet-managed-optimistic-oracle-v2 + $0 goerli staging custom -> goerli-staging-custom +If suffix is omitted it defaults to "optimistic-oracle-v2" +EOF + exit 1 +fi + +network=$1 +variant=${2:-} # optional +suffix=${3:-optimistic-oracle-v2} # default if not provided + +# Build subgraph name +if [[ -n "$variant" ]]; then + subgraph_name="${network}-${variant}-${suffix}" +else + subgraph_name="${network}-${suffix}" +fi + +# Normalize +subgraph_name=$(printf '%s' "$subgraph_name" | tr '[:upper:]' '[:lower:]' | tr ' ' '-') + +echo "Deploying subgraph: $subgraph_name" + +SUBGRAPH_NAME="$subgraph_name" /bin/bash ../../scripts/deploy.sh \ No newline at end of file diff --git a/packages/optimistic-oracle-v3/package.json b/packages/optimistic-oracle-v3/package.json index 82ee0dd..ed2bde3 100644 --- a/packages/optimistic-oracle-v3/package.json +++ b/packages/optimistic-oracle-v3/package.json @@ -8,6 +8,7 @@ "build": "graph build", "build-manifest": "scripts/build-manifest.sh", "prepare:mainnet": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", + "prepare-ci": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", "prepare:goerli": "scripts/build-manifest.sh goerli && yarn codegen && yarn build", "prepare:polygon": "scripts/build-manifest.sh polygon && yarn codegen && yarn build", "prepare:optimism": "scripts/build-manifest.sh optimism && yarn codegen && yarn build", diff --git a/packages/optimistic-oracle/package.json b/packages/optimistic-oracle/package.json index ce3a80e..2db0a83 100644 --- a/packages/optimistic-oracle/package.json +++ b/packages/optimistic-oracle/package.json @@ -8,6 +8,7 @@ "build": "graph build", "remove-call-handlers": "node ./scripts/remove-call-handlers.js", "prepare:mainnet": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", + "prepare-ci": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", "prepare:goerli": "scripts/build-manifest.sh goerli && yarn codegen && yarn build", "prepare:polygon": "scripts/build-manifest.sh polygon && yarn remove-call-handlers && yarn codegen && yarn build", "prepare:optimism": "scripts/build-manifest.sh optimism && yarn remove-call-handlers && yarn codegen && yarn build", diff --git a/packages/skinny-optimistic-oracle/package.json b/packages/skinny-optimistic-oracle/package.json index 8cdec32..0b54c25 100644 --- a/packages/skinny-optimistic-oracle/package.json +++ b/packages/skinny-optimistic-oracle/package.json @@ -1,12 +1,13 @@ { - "name": "optimistic-oracle-subgraph", + "name": "skinny-optimistic-oracle-subgraph", "version": "0.1.0", - "description": "Optimistic Oracle Contract Events Subgraph", + "description": "Skinny Optimistic Oracle Contract Events Subgraph", "scripts": { "ganache": "ganache-cli -h 0.0.0.0", "codegen": "graph codegen", "build": "graph build", "prepare:mainnet": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", + "prepare-ci": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", "prepare:goerli": "scripts/build-manifest.sh goerli && yarn codegen && yarn build", "prepare:kovan": "scripts/build-manifest.sh kovan && yarn codegen && yarn build", "prepare:polygon": "scripts/build-manifest.sh polygon && yarn codegen && yarn build", diff --git a/packages/token/package.json b/packages/token/package.json index 706bd1f..e2e978c 100644 --- a/packages/token/package.json +++ b/packages/token/package.json @@ -7,6 +7,7 @@ "codegen": "graph codegen", "build": "graph build", "prepare:mainnet": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", + "prepare-ci": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", "prepare:kovan": "scripts/build-manifest.sh kovan && yarn codegen && yarn build", "deploy:kovan": "env STAGING=true scripts/deploy.sh kovan", "deploy:mainnet": "env STAGING=true scripts/deploy.sh mainnet", diff --git a/packages/voting/package.json b/packages/voting/package.json index 72098fd..9c18381 100644 --- a/packages/voting/package.json +++ b/packages/voting/package.json @@ -7,6 +7,7 @@ "codegen": "graph codegen", "build": "graph build", "prepare:mainnet": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", + "prepare-ci": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", "prepare:kovan": "scripts/build-manifest.sh kovan && yarn codegen && yarn build", "prepare:polygon": "scripts/build-manifest.sh polygon && yarn codegen && yarn build", "deploy:kovan": "env STAGING=true scripts/deploy.sh kovan", diff --git a/packages/votingV2/package.json b/packages/votingV2/package.json index 55172b2..45f908a 100644 --- a/packages/votingV2/package.json +++ b/packages/votingV2/package.json @@ -9,6 +9,7 @@ "importAbi": "scripts/copy-contracts-abis.sh", "prepare:goerli": "scripts/build-manifest.sh goerli && yarn codegen && yarn build", "prepare:mainnet": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", + "prepare-ci": "scripts/build-manifest.sh mainnet && yarn codegen && yarn build", "prepare:kovan": "npm run importAbi && scripts/build-manifest.sh kovan && yarn codegen && yarn build", "prepare:polygon": "npm run importAbi && scripts/build-manifest.sh polygon && yarn codegen && yarn build", "prepare:sepolia": "scripts/build-manifest.sh sepolia && yarn codegen && yarn build", @@ -21,7 +22,8 @@ "deploy-prod:kovan": "scripts/deploy.sh kovan", "deploy-prod:mainnet": "env STUDIO=true scripts/deploy.sh mainnet", "deploy-prod:polygon": "scripts/deploy.sh polygon", - "deploy-prod:goldsky:mainnet": "env GOLDSKY=true scripts/deploy.sh mainnet" + "deploy-prod:goldsky:mainnet": "env GOLDSKY=true scripts/deploy.sh mainnet", + "deploy-prod:goldsky:sepolia": "env GOLDSKY=true scripts/deploy.sh sepolia" }, "repository": { "type": "git", diff --git a/packages/votingV2/src/mappings/votingV2.ts b/packages/votingV2/src/mappings/votingV2.ts index ac21f17..26d0534 100644 --- a/packages/votingV2/src/mappings/votingV2.ts +++ b/packages/votingV2/src/mappings/votingV2.ts @@ -1,4 +1,4 @@ -import { PriceRequestRound, RevealedVote } from "../../generated/schema"; +import { CommittedVote, PriceRequestRound, RevealedVote } from "../../generated/schema"; import { ExecutedUnstake, RequestAdded, @@ -187,7 +187,8 @@ export function handleVoteCommitted(event: VoteCommitted): void { let votingContract = VotingV2.bind(event.address); const voterStakeData = votingContract.try_voterStakes(event.params.voter); - // get voter's stake at time of commit + // Query the Voting contract for the stake snapshot recorded at commit time. If the call reverts (e.g. the voter wasn’t + // staked yet), fall back to 0. const voterTokensCommitted = voterStakeData.reverted ? BigInt.fromString("0") : voterStakeData.value.value0; @@ -209,13 +210,16 @@ export function handleVoteCommitted(event: VoteCommitted): void { vote.identifier = event.params.identifier.toString(); vote.time = event.params.time; vote.round = requestRound.id; - vote.numTokens = voterTokensCommitted; + vote.numTokens = voterTokensCommitted; // this is an estimate until reveal phase requestRound.request = requestId; requestRound.identifier = event.params.identifier.toString(); requestRound.time = event.params.time; requestRound.roundId = event.params.roundId; - // if user has voted previously, remove previous token amount, add new + // Update the round’s total committed tokens: first undo the voter’s **previous** commit (if any), then add the + // **new** stake snapshot. + // Remember this value is still **only an estimate** until the reveal phase, because the voter could increase their + // stake by claiming rewards before commit phase ends. This is why we need to update the value on reveal. requestRound.totalTokensCommitted = requestRound.totalTokensCommitted.minus(toDecimal(_previousNumTokens)).plus(toDecimal(voterTokensCommitted)); requestRound.save(); @@ -244,6 +248,9 @@ export function handleVoteRevealed(event: VoteRevealed): void { event.params.roundId.toString() ); let vote = getOrCreateRevealedVote(voteId); + + let committedVote = CommittedVote.load(voteId); + let voter = getOrCreateUser(event.params.voter); let requestId = getPriceRequestId( event.params.identifier.toString(), @@ -262,6 +269,13 @@ export function handleVoteRevealed(event: VoteRevealed): void { request.latestRound = requestRound.id; + // Amount of tokens estimated at commit time + const _previousCommittedTokens = committedVote != null ? committedVote.numTokens : event.params.numTokens; + if (committedVote != null) { + committedVote.numTokens = event.params.numTokens; + committedVote.save(); + } + vote.voter = voter.id; vote.round = requestRound.id; vote.request = requestId; @@ -282,6 +296,9 @@ export function handleVoteRevealed(event: VoteRevealed): void { requestRound.identifier = event.params.identifier.toString(); requestRound.time = event.params.time; requestRound.roundId = event.params.roundId; + // The amount stored at commit time was just an estimate—voters can still claim their rewards before the commit phase + // ends. On reveal we finally know the exact `numTokens`, so we replace the previous estimate with this precise value. + requestRound.totalTokensCommitted = requestRound.totalTokensCommitted.minus(toDecimal(_previousCommittedTokens)).plus(toDecimal(vote.numTokens)); requestRound.totalVotesRevealed = requestRound.totalVotesRevealed.plus(toDecimal(vote.numTokens)); requestRound.votersAmount = requestRound.votersAmount.plus(BIGDECIMAL_ONE); requestRound.lastRevealTime = event.block.timestamp; @@ -471,9 +488,9 @@ export function handleVoterSlashed(event: VoterSlashed): void { let votedCorrectly = false; let revealedVote = RevealedVote.load(revealVoteId); - if ( revealedVote != null) { + if (revealedVote != null) { votedCorrectly = revealedVote.price.equals(request.price!); - }else{ + } else { user.countNoVotes = user.countNoVotes.plus(BigInt.fromI32(1)); global.countNoVotes = global.countNoVotes.plus(BigInt.fromI32(1)); } @@ -484,7 +501,7 @@ export function handleVoterSlashed(event: VoterSlashed): void { ); // The non-null assertion operator '!' is safe here because the request has been resolved. - if ( revealedVote != null && votedCorrectly) { + if (revealedVote != null && votedCorrectly) { // User has voted correctly voteSlashed.correctness = true; user.countCorrectVotes = user.countCorrectVotes.plus(BigInt.fromI32(1)); @@ -493,7 +510,7 @@ export function handleVoterSlashed(event: VoterSlashed): void { voteSlashed.slashAmount ); global.countCorrectVotes = global.countCorrectVotes.plus(BigInt.fromI32(1)); - } else if ( revealedVote != null && !votedCorrectly) { + } else if (revealedVote != null && !votedCorrectly) { // User has voted incorrectly voteSlashed.correctness = false; // Only if not a governance vote we update the wrong votes counter diff --git a/yarn.lock b/yarn.lock index b5f74d7..05f97a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -819,6 +819,18 @@ dependencies: multiformats "^9.5.4" +"@isaacs/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== + +"@isaacs/brace-expansion@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3" + integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== + dependencies: + "@isaacs/balanced-match" "^4.0.1" + "@josephg/resolvable@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@josephg/resolvable/-/resolvable-1.0.1.tgz#69bc4db754d79e1a2f17a650d3466e038d94a5eb" @@ -2328,9 +2340,11 @@ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + version "6.0.0" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-6.0.0.tgz#4d207b1cc941367bdcd195a3a781a7e4fc3b1e03" + integrity sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA== + dependencies: + minimatch "*" "@types/minimatch@^3.0.4": version "3.0.5" @@ -2342,13 +2356,20 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== -"@types/node@*", "@types/node@>= 8", "@types/node@>=13.7.0": +"@types/node@*", "@types/node@>=13.7.0": version "20.11.16" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.16.tgz#4411f79411514eb8e2926f036c86c9f0e4ec6708" integrity sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ== dependencies: undici-types "~5.26.4" +"@types/node@>= 8": + version "24.3.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.1.tgz#b0a3fb2afed0ef98e8d7f06d46ef6349047709f3" + integrity sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g== + dependencies: + undici-types "~7.10.0" + "@types/node@^10.0.3", "@types/node@^10.1.0": version "10.17.60" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" @@ -2434,6 +2455,11 @@ dependencies: "@types/node" "*" +"@uma/contracts-node@^0.4.9": + version "0.4.26" + resolved "https://registry.yarnpkg.com/@uma/contracts-node/-/contracts-node-0.4.26.tgz#2c967e10c41292eeaafeb6b458525138e06ea0d8" + integrity sha512-o+wzScJB9xVavQwQWkAA8ZXBT9tCqyrhJOBdcyxaKmTTZmPPjAW52V5IVKwcmEOykFOliDjvRtFZIfWjwzUwcA== + "@whatwg-node/events@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.0.3.tgz#13a65dd4f5893f55280f766e29ae48074927acad" @@ -2595,9 +2621,9 @@ agent-base@~4.2.1: es6-promisify "^5.0.0" agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + version "3.5.3" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.3.tgz#c210afce942b4287e2df2fbfe6c0d57eda2ce634" + integrity sha512-yqXL+k5rr8+ZRpOAntkaaRgWgE5o8ESAj5DyRmVTCSoZxXmqemb9Dd7T4i5UzwuERdLAJUy6XzR9zFVuf0kzkw== dependencies: humanize-ms "^1.2.1" @@ -2833,9 +2859,9 @@ aproba@^1.0.3, aproba@^1.1.1: integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.1.0.tgz#75500a190313d95c64e871e7e4284c6ac219f0b1" + integrity sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew== are-we-there-yet@~1.1.2: version "1.1.7" @@ -2882,13 +2908,13 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" + call-bound "^1.0.3" + is-array-buffer "^3.0.5" array-differ@^2.0.3: version "2.1.0" @@ -2933,29 +2959,31 @@ array-unique@^0.3.2: integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== array.prototype.reduce@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" - integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== + version "1.0.8" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz#42f97f5078daedca687d4463fd3c05cbfd83da57" + integrity sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + is-string "^1.1.1" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" + call-bind "^1.0.8" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" arrify@^1.0.1: version "1.0.1" @@ -3022,6 +3050,11 @@ async-eventemitter@0.2.4: dependencies: async "^2.4.0" +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" @@ -3071,11 +3104,18 @@ atomically@^1.7.0: resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: +available-typed-arrays@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -3506,6 +3546,14 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" @@ -3516,6 +3564,24 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5: get-intrinsic "^1.2.3" set-function-length "^1.2.0" +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + call-me-maybe@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" @@ -4272,6 +4338,33 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + dataloader@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" @@ -4384,7 +4477,16 @@ deferred-leveldown@~5.3.0: abstract-leveldown "~6.2.1" inherits "^2.0.3" -define-data-property@^1.0.1, define-data-property@^1.1.1: +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-data-property@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== @@ -4394,7 +4496,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.1" -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: +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== @@ -4565,6 +4667,15 @@ double-ended-queue@2.1.0-0: resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" integrity sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ== +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexer@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -4696,9 +4807,9 @@ env-paths@^2.2.0, env-paths@^2.2.1: integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@^7.3.1: - version "7.11.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1" - integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg== + version "7.14.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" + integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== err-code@^1.0.0: version "1.1.2" @@ -4724,78 +4835,106 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" +es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9: + version "1.24.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" + integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.13.1" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== -es-errors@^1.2.1, es-errors@^1.3.0: +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + es-errors "^1.3.0" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" es5-ext@^0.10.35, es5-ext@^0.10.50: version "0.10.62" @@ -5396,6 +5535,13 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -5559,15 +5705,17 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" functional-red-black-tree@^1.0.1: version "1.0.1" @@ -5638,7 +5786,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -5649,6 +5797,22 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-iterator@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" @@ -5680,6 +5844,14 @@ get-port@^4.2.0: resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -5704,13 +5876,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.1" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.1.tgz#c0de911bfaa9ea8da52b5e702d2b3b51b8791ec4" - integrity sha512-KmuibvwbWaM4BHcBRYwJfZ1JxyJeBwB8ct9YYu67SvYdbEIlcQ2e56dHxfbobqW38GXo8/zDFqJeGtHiVbWyQw== +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: - call-bind "^1.0.5" + call-bound "^1.0.3" es-errors "^1.3.0" + get-intrinsic "^1.2.6" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" @@ -5835,12 +6008,13 @@ global@~4.4.0: min-document "^2.19.0" process "^0.11.10" -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^11.1.0: version "11.1.0" @@ -5911,6 +6085,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + got@12.1.0: version "12.1.0" resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" @@ -6009,10 +6188,10 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^3.0.0: version "3.0.0" @@ -6024,7 +6203,14 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: +has-property-descriptors@^1.0.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-property-descriptors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== @@ -6036,12 +6222,24 @@ has-proto@^1.0.1: resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== -has-symbols@^1.0.2, has-symbols@^1.0.3: +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -6116,6 +6314,13 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" +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" @@ -6425,14 +6630,14 @@ interface-store@^2.0.2: resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-2.0.2.tgz#83175fd2b0c501585ed96db54bb8ba9d55fce34c" integrity sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg== -internal-slot@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" + hasown "^2.0.2" + side-channel "^1.1.0" invert-kv@^1.0.0: version "1.0.0" @@ -6564,25 +6769,37 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== dependencies: - has-bigints "^1.0.1" + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" is-binary-path@~2.1.0: version "2.1.0" @@ -6591,13 +6808,13 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" is-buffer@^1.1.5: version "1.1.6" @@ -6609,7 +6826,7 @@ is-buffer@^2.0.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.1.3, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== @@ -6635,12 +6852,22 @@ is-data-descriptor@^1.0.1: dependencies: hasown "^2.0.0" -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" is-descriptor@^0.1.0: version "0.1.7" @@ -6690,6 +6917,13 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + is-finite@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" @@ -6717,6 +6951,16 @@ is-function@^1.0.1: resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== +is-generator-function@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + 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" @@ -6762,17 +7006,23 @@ is-lower-case@^1.1.0: dependencies: lower-case "^1.1.0" -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== +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.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" is-number@^3.0.0: version "3.0.0" @@ -6818,25 +7068,32 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" -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-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" is-ssh@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + version "1.4.1" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.1.tgz#76de1cdbe8f92a8b905d1a172b6bc09704c20396" + integrity sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg== dependencies: protocols "^2.0.1" @@ -6850,19 +7107,22 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: - has-symbols "^1.0.2" + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" is-text-path@^1.0.1: version "1.0.1" @@ -6871,7 +7131,14 @@ 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.3, is-typed-array@^1.1.9: +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +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== @@ -6900,12 +7167,25 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" @@ -7765,6 +8045,18 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +matchstick-as@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/matchstick-as/-/matchstick-as-0.6.0.tgz#c65296b1f51b1014d605c52067d9b5321ea630e8" + integrity sha512-E36fWsC1AbCkBFt05VsDDRoFvGSdcZg6oZJrtIe/YDBbuFh8SKbR5FcoqDhNWqSN+F7bN/iS2u8Md0SM+4pUpw== + dependencies: + wabt "1.0.24" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -7976,6 +8268,13 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== +minimatch@*: + version "10.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa" + integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" + minimatch@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" @@ -8595,7 +8894,12 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.13.1, object-inspect@^1.9.0: +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +object-inspect@^1.9.0: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== @@ -8617,26 +8921,30 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" - has-symbols "^1.0.3" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" object-keys "^1.1.1" object.getownpropertydescriptors@^2.0.3: - version "2.1.7" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" - integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== dependencies: array.prototype.reduce "^1.0.6" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - safe-array-concat "^1.0.0" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" object.pick@^1.3.0: version "1.3.0" @@ -8745,6 +9053,15 @@ osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + p-cancelable@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" @@ -9147,6 +9464,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + pouchdb-abstract-mapreduce@7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.1.tgz#96ff4a0f41cbe273f3f52fde003b719005a2093c" @@ -9521,13 +9843,20 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@^6.4.0, qs@^6.9.4: +qs@^6.4.0: version "6.11.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" +qs@^6.9.4: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + dependencies: + side-channel "^1.1.0" + qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" @@ -9821,6 +10150,20 @@ redux@^3.7.2: loose-envify "^1.1.0" symbol-observable "^1.0.3" +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" @@ -9834,14 +10177,17 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -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.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" repeat-element@^1.1.2: version "1.1.4" @@ -10074,14 +10420,15 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" - integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== +safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" - has-symbols "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" isarray "^2.0.5" safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: @@ -10094,14 +10441,22 @@ 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.2" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5" - integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" - is-regex "^1.1.4" + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" safe-regex@^1.1.0: version "1.1.0" @@ -10236,14 +10591,36 @@ set-function-length@^1.2.0: gopd "^1.0.1" has-property-descriptors "^1.0.1" -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -10321,6 +10698,35 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -10330,6 +10736,17 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" @@ -10600,6 +11017,14 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -10670,32 +11095,37 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -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.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" -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.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1: version "1.3.0" @@ -11268,44 +11698,50 @@ type@^2.7.2: resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" -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.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.8" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" -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.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" -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.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== 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" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -11365,21 +11801,26 @@ umask@^1.1.0: resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" integrity sha512-lE/rxOhmiScJu9L6RTNVgB/zZbF+vGC0/p6D3xnkAePI2o0sMyFG966iR5Ki50OI/0mNi2yaRnxfLsPmEZF/JA== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" 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-types@~7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" + integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -11629,6 +12070,11 @@ vuvuzela@1.0.3: resolved "https://registry.yarnpkg.com/vuvuzela/-/vuvuzela-1.0.3.tgz#3be145e58271c73ca55279dd851f12a682114b0b" integrity sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ== +wabt@1.0.24: + version "1.0.24" + resolved "https://registry.yarnpkg.com/wabt/-/wabt-1.0.24.tgz#c02e0b5b4503b94feaf4a30a426ef01c1bea7c6c" + integrity sha512-8l7sIOd3i5GWfTWciPL0+ff/FK/deVK2Q6FN+MPz4vfUcD78i2M/49XJTwF6aml91uIiuXJEsLKWMB2cw/mtKg== + wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -11960,16 +12406,45 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -which-boxed-primitive@^1.0.2: +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" which-module@^1.0.0: version "1.0.0" @@ -11981,7 +12456,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2: +which-typed-array@^1.1.14, which-typed-array@^1.1.2: version "1.1.14" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== @@ -11992,6 +12467,19 @@ which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2: gopd "^1.0.1" has-tostringtag "^1.0.1" +which-typed-array@^1.1.16, which-typed-array@^1.1.19: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@2.0.2, which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -12228,6 +12716,11 @@ yaml@1.10.2, yaml@^1.10.0, yaml@^1.10.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.2.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" + integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== + yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"