From ebc876ea91bbbf095e1cb0efd98ff1e8b77a1967 Mon Sep 17 00:00:00 2001 From: neeraj Date: Thu, 6 Jun 2024 11:05:37 +0530 Subject: [PATCH] Generate v3 watcher --- .husky/pre-commit | 2 + package.json | 6 +- packages/v3-watcher/.eslintignore | 2 + packages/v3-watcher/.eslintrc.json | 28 + packages/v3-watcher/.gitignore | 6 + packages/v3-watcher/.husky/pre-commit | 4 + packages/v3-watcher/.npmrc | 1 + packages/v3-watcher/LICENSE | 661 ++ packages/v3-watcher/README.md | 212 + packages/v3-watcher/environments/local.toml | 109 + packages/v3-watcher/package.json | 77 + .../v3-watcher/src/artifacts/Factory.json | 200 + .../artifacts/NonfungiblePositionManager.json | 1195 +++ packages/v3-watcher/src/artifacts/Pool.json | 990 +++ .../src/cli/checkpoint-cmds/create.ts | 44 + .../src/cli/checkpoint-cmds/verify.ts | 40 + packages/v3-watcher/src/cli/checkpoint.ts | 39 + packages/v3-watcher/src/cli/export-state.ts | 38 + packages/v3-watcher/src/cli/import-state.ts | 39 + packages/v3-watcher/src/cli/index-block.ts | 38 + packages/v3-watcher/src/cli/inspect-cid.ts | 38 + .../src/cli/reset-cmds/job-queue.ts | 22 + .../v3-watcher/src/cli/reset-cmds/state.ts | 24 + .../v3-watcher/src/cli/reset-cmds/watcher.ts | 37 + packages/v3-watcher/src/cli/reset.ts | 24 + packages/v3-watcher/src/cli/watch-contract.ts | 38 + packages/v3-watcher/src/client.ts | 55 + packages/v3-watcher/src/database.ts | 307 + .../v3-watcher/src/entity/BlockProgress.ts | 48 + packages/v3-watcher/src/entity/Bundle.ts | 29 + packages/v3-watcher/src/entity/Burn.ts | 68 + packages/v3-watcher/src/entity/Collect.ts | 56 + packages/v3-watcher/src/entity/Contract.ts | 27 + .../v3-watcher/src/entity/DecreaseEvent.ts | 52 + packages/v3-watcher/src/entity/Event.ts | 38 + packages/v3-watcher/src/entity/Factory.ts | 62 + packages/v3-watcher/src/entity/Flash.ts | 59 + .../v3-watcher/src/entity/FrothyEntity.ts | 21 + .../v3-watcher/src/entity/IncreaseEvent.ts | 52 + packages/v3-watcher/src/entity/Mint.ts | 71 + packages/v3-watcher/src/entity/Pool.ts | 113 + packages/v3-watcher/src/entity/PoolDayData.ts | 83 + .../v3-watcher/src/entity/PoolHourData.ts | 83 + packages/v3-watcher/src/entity/Position.ts | 89 + .../v3-watcher/src/entity/PositionSnapshot.ts | 71 + .../src/entity/SetProtocolFeeEvent.ts | 46 + packages/v3-watcher/src/entity/State.ts | 31 + .../v3-watcher/src/entity/StateSyncStatus.ts | 17 + packages/v3-watcher/src/entity/Subscriber.ts | 21 + packages/v3-watcher/src/entity/Swap.ts | 68 + packages/v3-watcher/src/entity/SyncStatus.ts | 45 + packages/v3-watcher/src/entity/Tick.ts | 86 + packages/v3-watcher/src/entity/TickDayData.ts | 59 + .../v3-watcher/src/entity/TickHourData.ts | 53 + packages/v3-watcher/src/entity/Token.ts | 71 + .../v3-watcher/src/entity/TokenDayData.ts | 65 + .../v3-watcher/src/entity/TokenHourData.ts | 65 + packages/v3-watcher/src/entity/Transaction.ts | 37 + .../v3-watcher/src/entity/UniswapDayData.ts | 47 + packages/v3-watcher/src/fill.ts | 48 + packages/v3-watcher/src/gql/index.ts | 3 + .../v3-watcher/src/gql/mutations/index.ts | 4 + .../src/gql/mutations/watchContract.gql | 3 + packages/v3-watcher/src/gql/queries/_meta.gql | 11 + .../v3-watcher/src/gql/queries/bundle.gql | 6 + .../v3-watcher/src/gql/queries/bundles.gql | 6 + packages/v3-watcher/src/gql/queries/burn.gql | 86 + packages/v3-watcher/src/gql/queries/burns.gql | 86 + .../v3-watcher/src/gql/queries/collect.gql | 50 + .../v3-watcher/src/gql/queries/collects.gql | 50 + .../src/gql/queries/decreaseEvent.gql | 98 + .../src/gql/queries/decreaseEvents.gql | 98 + .../v3-watcher/src/gql/queries/events.gql | 129 + .../src/gql/queries/eventsInRange.gql | 129 + .../v3-watcher/src/gql/queries/factories.gql | 17 + .../v3-watcher/src/gql/queries/factory.gql | 17 + packages/v3-watcher/src/gql/queries/flash.gql | 51 + .../v3-watcher/src/gql/queries/flashes.gql | 51 + .../v3-watcher/src/gql/queries/getState.gql | 15 + .../src/gql/queries/getStateByCID.gql | 15 + .../src/gql/queries/getSyncStatus.gql | 12 + .../src/gql/queries/increaseEvent.gql | 98 + .../src/gql/queries/increaseEvents.gql | 98 + packages/v3-watcher/src/gql/queries/index.ts | 55 + packages/v3-watcher/src/gql/queries/mint.gql | 87 + packages/v3-watcher/src/gql/queries/mints.gql | 87 + packages/v3-watcher/src/gql/queries/pool.gql | 181 + .../src/gql/queries/poolDayData.gql | 53 + .../src/gql/queries/poolDayDatas.gql | 53 + .../src/gql/queries/poolHourData.gql | 53 + .../src/gql/queries/poolHourDatas.gql | 53 + packages/v3-watcher/src/gql/queries/pools.gql | 181 + .../v3-watcher/src/gql/queries/position.gql | 149 + .../src/gql/queries/positionSnapshot.gql | 72 + .../src/gql/queries/positionSnapshots.gql | 72 + .../v3-watcher/src/gql/queries/positions.gql | 149 + .../src/gql/queries/setProtocolFeeEvent.gql | 41 + .../src/gql/queries/setProtocolFeeEvents.gql | 41 + packages/v3-watcher/src/gql/queries/swap.gql | 86 + packages/v3-watcher/src/gql/queries/swaps.gql | 86 + packages/v3-watcher/src/gql/queries/tick.gql | 54 + .../src/gql/queries/tickDayData.gql | 66 + .../src/gql/queries/tickDayDatas.gql | 66 + .../src/gql/queries/tickHourData.gql | 64 + .../src/gql/queries/tickHourDatas.gql | 64 + packages/v3-watcher/src/gql/queries/ticks.gql | 54 + packages/v3-watcher/src/gql/queries/token.gql | 64 + .../src/gql/queries/tokenDayData.gql | 34 + .../src/gql/queries/tokenDayDatas.gql | 34 + .../src/gql/queries/tokenHourData.gql | 34 + .../src/gql/queries/tokenHourDatas.gql | 34 + .../v3-watcher/src/gql/queries/tokens.gql | 64 + .../src/gql/queries/transaction.gql | 72 + .../src/gql/queries/transactions.gql | 72 + .../src/gql/queries/uniswapDayData.gql | 12 + .../src/gql/queries/uniswapDayDatas.gql | 12 + .../v3-watcher/src/gql/subscriptions/index.ts | 4 + .../src/gql/subscriptions/onEvent.gql | 129 + packages/v3-watcher/src/hooks.ts | 86 + packages/v3-watcher/src/indexer.ts | 1456 ++++ packages/v3-watcher/src/job-runner.ts | 48 + packages/v3-watcher/src/resolvers.ts | 1320 ++++ packages/v3-watcher/src/schema.gql | 5298 +++++++++++++ packages/v3-watcher/src/server.ts | 43 + packages/v3-watcher/src/types.ts | 3 + .../subgraph-build/Factory/Factory.wasm | Bin 0 -> 228196 bytes .../subgraph-build/Factory/abis/ERC20.json | 222 + .../Factory/abis/ERC20NameBytes.json | 17 + .../Factory/abis/ERC20SymbolBytes.json | 17 + .../subgraph-build/Factory/abis/factory.json | 198 + .../subgraph-build/Factory/abis/pool.json | 988 +++ .../NonfungiblePositionManager.wasm | Bin 0 -> 232579 bytes .../abis/ERC20.json | 222 + .../abis/NonfungiblePositionManager.json | 1193 +++ .../abis/factory.json | 198 + .../NonfungiblePositionManager/abis/pool.json | 988 +++ .../subgraph-build/Pool/abis/ERC20.json | 222 + .../subgraph-build/Pool/abis/factory.json | 198 + .../subgraph-build/Pool/abis/pool.json | 988 +++ .../v3-watcher/subgraph-build/schema.graphql | 707 ++ .../v3-watcher/subgraph-build/subgraph.yaml | 100 + .../subgraph-build/templates/Pool/Pool.wasm | Bin 0 -> 326908 bytes packages/v3-watcher/tsconfig.json | 74 + yarn.lock | 6791 ++++++++++++++++- 144 files changed, 30936 insertions(+), 63 deletions(-) create mode 100644 packages/v3-watcher/.eslintignore create mode 100644 packages/v3-watcher/.eslintrc.json create mode 100644 packages/v3-watcher/.gitignore create mode 100644 packages/v3-watcher/.husky/pre-commit create mode 100644 packages/v3-watcher/.npmrc create mode 100644 packages/v3-watcher/LICENSE create mode 100644 packages/v3-watcher/README.md create mode 100644 packages/v3-watcher/environments/local.toml create mode 100644 packages/v3-watcher/package.json create mode 100644 packages/v3-watcher/src/artifacts/Factory.json create mode 100644 packages/v3-watcher/src/artifacts/NonfungiblePositionManager.json create mode 100644 packages/v3-watcher/src/artifacts/Pool.json create mode 100644 packages/v3-watcher/src/cli/checkpoint-cmds/create.ts create mode 100644 packages/v3-watcher/src/cli/checkpoint-cmds/verify.ts create mode 100644 packages/v3-watcher/src/cli/checkpoint.ts create mode 100644 packages/v3-watcher/src/cli/export-state.ts create mode 100644 packages/v3-watcher/src/cli/import-state.ts create mode 100644 packages/v3-watcher/src/cli/index-block.ts create mode 100644 packages/v3-watcher/src/cli/inspect-cid.ts create mode 100644 packages/v3-watcher/src/cli/reset-cmds/job-queue.ts create mode 100644 packages/v3-watcher/src/cli/reset-cmds/state.ts create mode 100644 packages/v3-watcher/src/cli/reset-cmds/watcher.ts create mode 100644 packages/v3-watcher/src/cli/reset.ts create mode 100644 packages/v3-watcher/src/cli/watch-contract.ts create mode 100644 packages/v3-watcher/src/client.ts create mode 100644 packages/v3-watcher/src/database.ts create mode 100644 packages/v3-watcher/src/entity/BlockProgress.ts create mode 100644 packages/v3-watcher/src/entity/Bundle.ts create mode 100644 packages/v3-watcher/src/entity/Burn.ts create mode 100644 packages/v3-watcher/src/entity/Collect.ts create mode 100644 packages/v3-watcher/src/entity/Contract.ts create mode 100644 packages/v3-watcher/src/entity/DecreaseEvent.ts create mode 100644 packages/v3-watcher/src/entity/Event.ts create mode 100644 packages/v3-watcher/src/entity/Factory.ts create mode 100644 packages/v3-watcher/src/entity/Flash.ts create mode 100644 packages/v3-watcher/src/entity/FrothyEntity.ts create mode 100644 packages/v3-watcher/src/entity/IncreaseEvent.ts create mode 100644 packages/v3-watcher/src/entity/Mint.ts create mode 100644 packages/v3-watcher/src/entity/Pool.ts create mode 100644 packages/v3-watcher/src/entity/PoolDayData.ts create mode 100644 packages/v3-watcher/src/entity/PoolHourData.ts create mode 100644 packages/v3-watcher/src/entity/Position.ts create mode 100644 packages/v3-watcher/src/entity/PositionSnapshot.ts create mode 100644 packages/v3-watcher/src/entity/SetProtocolFeeEvent.ts create mode 100644 packages/v3-watcher/src/entity/State.ts create mode 100644 packages/v3-watcher/src/entity/StateSyncStatus.ts create mode 100644 packages/v3-watcher/src/entity/Subscriber.ts create mode 100644 packages/v3-watcher/src/entity/Swap.ts create mode 100644 packages/v3-watcher/src/entity/SyncStatus.ts create mode 100644 packages/v3-watcher/src/entity/Tick.ts create mode 100644 packages/v3-watcher/src/entity/TickDayData.ts create mode 100644 packages/v3-watcher/src/entity/TickHourData.ts create mode 100644 packages/v3-watcher/src/entity/Token.ts create mode 100644 packages/v3-watcher/src/entity/TokenDayData.ts create mode 100644 packages/v3-watcher/src/entity/TokenHourData.ts create mode 100644 packages/v3-watcher/src/entity/Transaction.ts create mode 100644 packages/v3-watcher/src/entity/UniswapDayData.ts create mode 100644 packages/v3-watcher/src/fill.ts create mode 100644 packages/v3-watcher/src/gql/index.ts create mode 100644 packages/v3-watcher/src/gql/mutations/index.ts create mode 100644 packages/v3-watcher/src/gql/mutations/watchContract.gql create mode 100644 packages/v3-watcher/src/gql/queries/_meta.gql create mode 100644 packages/v3-watcher/src/gql/queries/bundle.gql create mode 100644 packages/v3-watcher/src/gql/queries/bundles.gql create mode 100644 packages/v3-watcher/src/gql/queries/burn.gql create mode 100644 packages/v3-watcher/src/gql/queries/burns.gql create mode 100644 packages/v3-watcher/src/gql/queries/collect.gql create mode 100644 packages/v3-watcher/src/gql/queries/collects.gql create mode 100644 packages/v3-watcher/src/gql/queries/decreaseEvent.gql create mode 100644 packages/v3-watcher/src/gql/queries/decreaseEvents.gql create mode 100644 packages/v3-watcher/src/gql/queries/events.gql create mode 100644 packages/v3-watcher/src/gql/queries/eventsInRange.gql create mode 100644 packages/v3-watcher/src/gql/queries/factories.gql create mode 100644 packages/v3-watcher/src/gql/queries/factory.gql create mode 100644 packages/v3-watcher/src/gql/queries/flash.gql create mode 100644 packages/v3-watcher/src/gql/queries/flashes.gql create mode 100644 packages/v3-watcher/src/gql/queries/getState.gql create mode 100644 packages/v3-watcher/src/gql/queries/getStateByCID.gql create mode 100644 packages/v3-watcher/src/gql/queries/getSyncStatus.gql create mode 100644 packages/v3-watcher/src/gql/queries/increaseEvent.gql create mode 100644 packages/v3-watcher/src/gql/queries/increaseEvents.gql create mode 100644 packages/v3-watcher/src/gql/queries/index.ts create mode 100644 packages/v3-watcher/src/gql/queries/mint.gql create mode 100644 packages/v3-watcher/src/gql/queries/mints.gql create mode 100644 packages/v3-watcher/src/gql/queries/pool.gql create mode 100644 packages/v3-watcher/src/gql/queries/poolDayData.gql create mode 100644 packages/v3-watcher/src/gql/queries/poolDayDatas.gql create mode 100644 packages/v3-watcher/src/gql/queries/poolHourData.gql create mode 100644 packages/v3-watcher/src/gql/queries/poolHourDatas.gql create mode 100644 packages/v3-watcher/src/gql/queries/pools.gql create mode 100644 packages/v3-watcher/src/gql/queries/position.gql create mode 100644 packages/v3-watcher/src/gql/queries/positionSnapshot.gql create mode 100644 packages/v3-watcher/src/gql/queries/positionSnapshots.gql create mode 100644 packages/v3-watcher/src/gql/queries/positions.gql create mode 100644 packages/v3-watcher/src/gql/queries/setProtocolFeeEvent.gql create mode 100644 packages/v3-watcher/src/gql/queries/setProtocolFeeEvents.gql create mode 100644 packages/v3-watcher/src/gql/queries/swap.gql create mode 100644 packages/v3-watcher/src/gql/queries/swaps.gql create mode 100644 packages/v3-watcher/src/gql/queries/tick.gql create mode 100644 packages/v3-watcher/src/gql/queries/tickDayData.gql create mode 100644 packages/v3-watcher/src/gql/queries/tickDayDatas.gql create mode 100644 packages/v3-watcher/src/gql/queries/tickHourData.gql create mode 100644 packages/v3-watcher/src/gql/queries/tickHourDatas.gql create mode 100644 packages/v3-watcher/src/gql/queries/ticks.gql create mode 100644 packages/v3-watcher/src/gql/queries/token.gql create mode 100644 packages/v3-watcher/src/gql/queries/tokenDayData.gql create mode 100644 packages/v3-watcher/src/gql/queries/tokenDayDatas.gql create mode 100644 packages/v3-watcher/src/gql/queries/tokenHourData.gql create mode 100644 packages/v3-watcher/src/gql/queries/tokenHourDatas.gql create mode 100644 packages/v3-watcher/src/gql/queries/tokens.gql create mode 100644 packages/v3-watcher/src/gql/queries/transaction.gql create mode 100644 packages/v3-watcher/src/gql/queries/transactions.gql create mode 100644 packages/v3-watcher/src/gql/queries/uniswapDayData.gql create mode 100644 packages/v3-watcher/src/gql/queries/uniswapDayDatas.gql create mode 100644 packages/v3-watcher/src/gql/subscriptions/index.ts create mode 100644 packages/v3-watcher/src/gql/subscriptions/onEvent.gql create mode 100644 packages/v3-watcher/src/hooks.ts create mode 100644 packages/v3-watcher/src/indexer.ts create mode 100644 packages/v3-watcher/src/job-runner.ts create mode 100644 packages/v3-watcher/src/resolvers.ts create mode 100644 packages/v3-watcher/src/schema.gql create mode 100644 packages/v3-watcher/src/server.ts create mode 100644 packages/v3-watcher/src/types.ts create mode 100644 packages/v3-watcher/subgraph-build/Factory/Factory.wasm create mode 100644 packages/v3-watcher/subgraph-build/Factory/abis/ERC20.json create mode 100644 packages/v3-watcher/subgraph-build/Factory/abis/ERC20NameBytes.json create mode 100644 packages/v3-watcher/subgraph-build/Factory/abis/ERC20SymbolBytes.json create mode 100644 packages/v3-watcher/subgraph-build/Factory/abis/factory.json create mode 100644 packages/v3-watcher/subgraph-build/Factory/abis/pool.json create mode 100644 packages/v3-watcher/subgraph-build/NonfungiblePositionManager/NonfungiblePositionManager.wasm create mode 100644 packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/ERC20.json create mode 100644 packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/NonfungiblePositionManager.json create mode 100644 packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/factory.json create mode 100644 packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/pool.json create mode 100644 packages/v3-watcher/subgraph-build/Pool/abis/ERC20.json create mode 100644 packages/v3-watcher/subgraph-build/Pool/abis/factory.json create mode 100644 packages/v3-watcher/subgraph-build/Pool/abis/pool.json create mode 100644 packages/v3-watcher/subgraph-build/schema.graphql create mode 100644 packages/v3-watcher/subgraph-build/subgraph.yaml create mode 100644 packages/v3-watcher/subgraph-build/templates/Pool/Pool.wasm create mode 100644 packages/v3-watcher/tsconfig.json diff --git a/.husky/pre-commit b/.husky/pre-commit index 1525982..6cdaab7 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,2 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" + +yarn lint diff --git a/package.json b/package.json index f1280a9..bf5d4f5 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "sushiswap-watcher-ts", + "name": "azimuth-watcher-ts", "private": true, "license": "AGPL-3.0", "workspaces": { @@ -13,7 +13,9 @@ }, "scripts": { "build": "lerna run build --stream", - "prepare": "husky install" + "lint": "lerna run lint --stream -- --max-warnings=0", + "prepare": "husky install", + "version:set": "lerna version --no-git-tag-version" }, "devDependencies": { "husky": "^7.0.2", diff --git a/packages/v3-watcher/.eslintignore b/packages/v3-watcher/.eslintignore new file mode 100644 index 0000000..55cb522 --- /dev/null +++ b/packages/v3-watcher/.eslintignore @@ -0,0 +1,2 @@ +# Don't lint build output. +dist diff --git a/packages/v3-watcher/.eslintrc.json b/packages/v3-watcher/.eslintrc.json new file mode 100644 index 0000000..a2b842c --- /dev/null +++ b/packages/v3-watcher/.eslintrc.json @@ -0,0 +1,28 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": [ + "semistandard", + "plugin:@typescript-eslint/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 12, + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "indent": ["error", 2, { "SwitchCase": 1 }], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-module-boundary-types": [ + "warn", + { + "allowArgumentsExplicitlyTypedAsAny": true + } + ] + } +} diff --git a/packages/v3-watcher/.gitignore b/packages/v3-watcher/.gitignore new file mode 100644 index 0000000..0b4cc3f --- /dev/null +++ b/packages/v3-watcher/.gitignore @@ -0,0 +1,6 @@ +node_modules/ +dist/ +out/ + +.vscode +.idea diff --git a/packages/v3-watcher/.husky/pre-commit b/packages/v3-watcher/.husky/pre-commit new file mode 100644 index 0000000..9dcd433 --- /dev/null +++ b/packages/v3-watcher/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +yarn lint diff --git a/packages/v3-watcher/.npmrc b/packages/v3-watcher/.npmrc new file mode 100644 index 0000000..6b64c5b --- /dev/null +++ b/packages/v3-watcher/.npmrc @@ -0,0 +1 @@ +@cerc-io:registry=https://git.vdb.to/api/packages/cerc-io/npm/ diff --git a/packages/v3-watcher/LICENSE b/packages/v3-watcher/LICENSE new file mode 100644 index 0000000..331f7cf --- /dev/null +++ b/packages/v3-watcher/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for + software and other kinds of works, specifically designed to ensure + cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed + to take away your freedom to share and change the works. By contrast, + our General Public Licenses are intended to guarantee your freedom to + share and change all versions of a program--to make sure it remains free + software for all its users. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for + them if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights + with two steps: (1) assert copyright on the software, and (2) offer + you this License which gives you legal permission to copy, distribute + and/or modify the software. + + A secondary benefit of defending all users' freedom is that + improvements made in alternate versions of the program, if they + receive widespread use, become available for other developers to + incorporate. Many developers of free software are heartened and + encouraged by the resulting cooperation. However, in the case of + software used on network servers, this result may fail to come about. + The GNU General Public License permits making a modified version and + letting the public access it on a server without ever releasing its + source code to the public. + + The GNU Affero General Public License is designed specifically to + ensure that, in such cases, the modified source code becomes available + to the community. It requires the operator of a network server to + provide the source code of the modified version running there to the + users of that server. Therefore, public use of a modified version, on + a publicly accessible server, gives the public access to the source + code of the modified version. + + An older license, called the Affero General Public License and + published by Affero, was designed to accomplish similar goals. This is + a different license, not a version of the Affero GPL, but Affero has + released a new version of the Affero GPL which permits relicensing under + this license. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of + works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this + License. Each licensee is addressed as "you". "Licensees" and + "recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work + in a fashion requiring copyright permission, other than the making of an + exact copy. The resulting work is called a "modified version" of the + earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based + on the Program. + + To "propagate" a work means to do anything with it that, without + permission, would make you directly or secondarily liable for + infringement under applicable copyright law, except executing it on a + computer or modifying a private copy. Propagation includes copying, + distribution (with or without modification), making available to the + public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other + parties to make or receive copies. Mere interaction with a user through + a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" + to the extent that it includes a convenient and prominently visible + feature that (1) displays an appropriate copyright notice, and (2) + tells the user that there is no warranty for the work (except to the + extent that warranties are provided), that licensees may convey the + work under this License, and how to view a copy of this License. If + the interface presents a list of user commands or options, such as a + menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work + for making modifications to it. "Object code" means any non-source + form of a work. + + A "Standard Interface" means an interface that either is an official + standard defined by a recognized standards body, or, in the case of + interfaces specified for a particular programming language, one that + is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other + than the work as a whole, that (a) is included in the normal form of + packaging a Major Component, but which is not part of that Major + Component, and (b) serves only to enable use of the work with that + Major Component, or to implement a Standard Interface for which an + implementation is available to the public in source code form. A + "Major Component", in this context, means a major essential component + (kernel, window system, and so on) of the specific operating system + (if any) on which the executable work runs, or a compiler used to + produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all + the source code needed to generate, install, and (for an executable + work) run the object code and to modify the work, including scripts to + control those activities. However, it does not include the work's + System Libraries, or general-purpose tools or generally available free + programs which are used unmodified in performing those activities but + which are not part of the work. For example, Corresponding Source + includes interface definition files associated with source files for + the work, and the source code for shared libraries and dynamically + linked subprograms that the work is specifically designed to require, + such as by intimate data communication or control flow between those + subprograms and other parts of the work. + + The Corresponding Source need not include anything that users + can regenerate automatically from other parts of the Corresponding + Source. + + The Corresponding Source for a work in source code form is that + same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of + copyright on the Program, and are irrevocable provided the stated + conditions are met. This License explicitly affirms your unlimited + permission to run the unmodified Program. The output from running a + covered work is covered by this License only if the output, given its + content, constitutes a covered work. This License acknowledges your + rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not + convey, without conditions so long as your license otherwise remains + in force. You may convey covered works to others for the sole purpose + of having them make modifications exclusively for you, or provide you + with facilities for running those works, provided that you comply with + the terms of this License in conveying all material for which you do + not control copyright. Those thus making or running the covered works + for you must do so exclusively on your behalf, under your direction + and control, on terms that prohibit them from making any copies of + your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under + the conditions stated below. Sublicensing is not allowed; section 10 + makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological + measure under any applicable law fulfilling obligations under article + 11 of the WIPO copyright treaty adopted on 20 December 1996, or + similar laws prohibiting or restricting circumvention of such + measures. + + When you convey a covered work, you waive any legal power to forbid + circumvention of technological measures to the extent such circumvention + is effected by exercising rights under this License with respect to + the covered work, and you disclaim any intention to limit operation or + modification of the work as a means of enforcing, against the work's + users, your or third parties' legal rights to forbid circumvention of + technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you + receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice; + keep intact all notices stating that this License and any + non-permissive terms added in accord with section 7 apply to the code; + keep intact all notices of the absence of any warranty; and give all + recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, + and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to + produce it from the Program, in the form of source code under the + terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent + works, which are not by their nature extensions of the covered work, + and which are not combined with it such as to form a larger program, + in or on a volume of a storage or distribution medium, is called an + "aggregate" if the compilation and its resulting copyright are not + used to limit the access or legal rights of the compilation's users + beyond what the individual works permit. Inclusion of a covered work + in an aggregate does not cause this License to apply to the other + parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms + of sections 4 and 5, provided that you also convey the + machine-readable Corresponding Source under the terms of this License, + in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded + from the Corresponding Source as a System Library, need not be + included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any + tangible personal property which is normally used for personal, family, + or household purposes, or (2) anything designed or sold for incorporation + into a dwelling. In determining whether a product is a consumer product, + doubtful cases shall be resolved in favor of coverage. For a particular + product received by a particular user, "normally used" refers to a + typical or common use of that class of product, regardless of the status + of the particular user or of the way in which the particular user + actually uses, or expects or is expected to use, the product. A product + is a consumer product regardless of whether the product has substantial + commercial, industrial or non-consumer uses, unless such uses represent + the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, + procedures, authorization keys, or other information required to install + and execute modified versions of a covered work in that User Product from + a modified version of its Corresponding Source. The information must + suffice to ensure that the continued functioning of the modified object + code is in no case prevented or interfered with solely because + modification has been made. + + If you convey an object code work under this section in, or with, or + specifically for use in, a User Product, and the conveying occurs as + part of a transaction in which the right of possession and use of the + User Product is transferred to the recipient in perpetuity or for a + fixed term (regardless of how the transaction is characterized), the + Corresponding Source conveyed under this section must be accompanied + by the Installation Information. But this requirement does not apply + if neither you nor any third party retains the ability to install + modified object code on the User Product (for example, the work has + been installed in ROM). + + The requirement to provide Installation Information does not include a + requirement to continue to provide support service, warranty, or updates + for a work that has been modified or installed by the recipient, or for + the User Product in which it has been modified or installed. Access to a + network may be denied when the modification itself materially and + adversely affects the operation of the network or violates the rules and + protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, + in accord with this section must be in a format that is publicly + documented (and with an implementation available to the public in + source code form), and must require no special password or key for + unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this + License by making exceptions from one or more of its conditions. + Additional permissions that are applicable to the entire Program shall + be treated as though they were included in this License, to the extent + that they are valid under applicable law. If additional permissions + apply only to part of the Program, that part may be used separately + under those permissions, but the entire Program remains governed by + this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option + remove any additional permissions from that copy, or from any part of + it. (Additional permissions may be written to require their own + removal in certain cases when you modify the work.) You may place + additional permissions on material, added by you to a covered work, + for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you + add to a covered work, you may (if authorized by the copyright holders of + that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further + restrictions" within the meaning of section 10. If the Program as you + received it, or any part of it, contains a notice stating that it is + governed by this License along with a term that is a further + restriction, you may remove that term. If a license document contains + a further restriction but permits relicensing or conveying under this + License, you may add to a covered work material governed by the terms + of that license document, provided that the further restriction does + not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you + must place, in the relevant source files, a statement of the + additional terms that apply to those files, or a notice indicating + where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the + form of a separately written license, or stated as exceptions; + the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly + provided under this License. Any attempt otherwise to propagate or + modify it is void, and will automatically terminate your rights under + this License (including any patent licenses granted under the third + paragraph of section 11). + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the copyright + holder fails to notify you of the violation by some reasonable means + prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from that + copyright holder, and you cure the violation prior to 30 days after + your receipt of the notice. + + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under + this License. If your rights have been terminated and not permanently + reinstated, you do not qualify to receive new licenses for the same + material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or + run a copy of the Program. Ancillary propagation of a covered work + occurring solely as a consequence of using peer-to-peer transmission + to receive a copy likewise does not require acceptance. However, + nothing other than this License grants you permission to propagate or + modify any covered work. These actions infringe copyright if you do + not accept this License. Therefore, by modifying or propagating a + covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically + receives a license from the original licensors, to run, modify and + propagate that work, subject to this License. You are not responsible + for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an + organization, or substantially all assets of one, or subdividing an + organization, or merging organizations. If propagation of a covered + work results from an entity transaction, each party to that + transaction who receives a copy of the work also receives whatever + licenses to the work the party's predecessor in interest had or could + give under the previous paragraph, plus a right to possession of the + Corresponding Source of the work from the predecessor in interest, if + the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the + rights granted or affirmed under this License. For example, you may + not impose a license fee, royalty, or other charge for exercise of + rights granted under this License, and you may not initiate litigation + (including a cross-claim or counterclaim in a lawsuit) alleging that + any patent claim is infringed by making, using, selling, offering for + sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this + License of the Program or a work on which the Program is based. The + work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims + owned or controlled by the contributor, whether already acquired or + hereafter acquired, that would be infringed by some manner, permitted + by this License, of making, using, or selling its contributor version, + but do not include claims that would be infringed only as a + consequence of further modification of the contributor version. For + purposes of this definition, "control" includes the right to grant + patent sublicenses in a manner consistent with the requirements of + this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free + patent license under the contributor's essential patent claims, to + make, use, sell, offer for sale, import and otherwise run, modify and + propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express + agreement or commitment, however denominated, not to enforce a patent + (such as an express permission to practice a patent or covenant not to + sue for patent infringement). To "grant" such a patent license to a + party means to make such an agreement or commitment not to enforce a + patent against the party. + + If you convey a covered work, knowingly relying on a patent license, + and the Corresponding Source of the work is not available for anyone + to copy, free of charge and under the terms of this License, through a + publicly available network server or other readily accessible means, + then you must either (1) cause the Corresponding Source to be so + available, or (2) arrange to deprive yourself of the benefit of the + patent license for this particular work, or (3) arrange, in a manner + consistent with the requirements of this License, to extend the patent + license to downstream recipients. "Knowingly relying" means you have + actual knowledge that, but for the patent license, your conveying the + covered work in a country, or your recipient's use of the covered work + in a country, would infringe one or more identifiable patents in that + country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or + arrangement, you convey, or propagate by procuring conveyance of, a + covered work, and grant a patent license to some of the parties + receiving the covered work authorizing them to use, propagate, modify + or convey a specific copy of the covered work, then the patent license + you grant is automatically extended to all recipients of the covered + work and works based on it. + + A patent license is "discriminatory" if it does not include within + the scope of its coverage, prohibits the exercise of, or is + conditioned on the non-exercise of one or more of the rights that are + specifically granted under this License. You may not convey a covered + work if you are a party to an arrangement with a third party that is + in the business of distributing software, under which you make payment + to the third party based on the extent of your activity of conveying + the work, and under which the third party grants, to any of the + parties who would receive the covered work from you, a discriminatory + patent license (a) in connection with copies of the covered work + conveyed by you (or copies made from those copies), or (b) primarily + for and in connection with specific products or compilations that + contain the covered work, unless you entered into that arrangement, + or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting + any implied license or other defenses to infringement that may + otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot convey a + covered work so as to satisfy simultaneously your obligations under this + License and any other pertinent obligations, then as a consequence you may + not convey it at all. For example, if you agree to terms that obligate you + to collect a royalty for further conveying from those to whom you convey + the Program, the only way you could satisfy both those terms and this + License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the + Program, your modified version must prominently offer all users + interacting with it remotely through a computer network (if your version + supports such interaction) an opportunity to receive the Corresponding + Source of your version by providing access to the Corresponding Source + from a network server at no charge, through some standard or customary + means of facilitating copying of software. This Corresponding Source + shall include the Corresponding Source for any work covered by version 3 + of the GNU General Public License that is incorporated pursuant to the + following paragraph. + + Notwithstanding any other provision of this License, you have + permission to link or combine any covered work with a work licensed + under version 3 of the GNU General Public License into a single + combined work, and to convey the resulting work. The terms of this + License will continue to apply to the part which is the covered work, + but the work with which it is combined will remain governed by version + 3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of + the GNU Affero General Public License from time to time. Such new versions + will be similar in spirit to the present version, but may differ in detail to + address new problems or concerns. + + Each version is given a distinguishing version number. If the + Program specifies that a certain numbered version of the GNU Affero General + Public License "or any later version" applies to it, you have the + option of following the terms and conditions either of that numbered + version or of any later version published by the Free Software + Foundation. If the Program does not specify a version number of the + GNU Affero General Public License, you may choose any version ever published + by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future + versions of the GNU Affero General Public License can be used, that proxy's + public statement of acceptance of a version permanently authorizes you + to choose that version for the Program. + + Later license versions may give you additional or different + permissions. However, no additional obligations are imposed on any + author or copyright holder as a result of your choosing to follow a + later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT + HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY + OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM + IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF + ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS + THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY + GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE + USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF + DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), + EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF + SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided + above cannot be given local legal effect according to their terms, + reviewing courts shall apply local law that most closely approximates + an absolute waiver of all civil liability in connection with the + Program, unless a warranty or assumption of liability accompanies a + copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively + state the exclusion of warranty; and each file should have at least + the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer + network, you should also make sure that it provides a way for users to + get its source. For example, if your program is a web application, its + interface could display a "Source" link that leads users to an archive + of the code. There are many ways you could offer source, and different + solutions will be better for different programs; see section 13 for the + specific requirements. + + You should also get your employer (if you work as a programmer) or school, + if any, to sign a "copyright disclaimer" for the program, if necessary. + For more information on this, and how to apply and follow the GNU AGPL, see + . diff --git a/packages/v3-watcher/README.md b/packages/v3-watcher/README.md new file mode 100644 index 0000000..2a10ac8 --- /dev/null +++ b/packages/v3-watcher/README.md @@ -0,0 +1,212 @@ +# v3-watcher + +## Setup + +* Run the following command to install required packages: + + ```bash + yarn + ``` + +* Create a postgres12 database for the watcher: + + ```bash + sudo su - postgres + createdb v3-watcher + ``` + +* If the watcher is an `active` watcher: + + Create database for the job queue and enable the `pgcrypto` extension on them (https://github.com/timgit/pg-boss/blob/master/docs/usage.md#intro): + + ``` + createdb v3-watcher-job-queue + ``` + + ``` + postgres@tesla:~$ psql -U postgres -h localhost v3-watcher-job-queue + Password for user postgres: + psql (12.7 (Ubuntu 12.7-1.pgdg18.04+1)) + SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) + Type "help" for help. + + v3-watcher-job-queue=# CREATE EXTENSION pgcrypto; + CREATE EXTENSION + v3-watcher-job-queue=# exit + ``` + +* In the [config file](./environments/local.toml): + + * Update the database connection settings. + + * Update the `upstream` config and provide the `ipld-eth-server` GQL API endpoint. + + * Update the `server` config with state checkpoint settings. + +## Customize + +* Indexing on an event: + + * Edit the custom hook function `handleEvent` (triggered on an event) in [hooks.ts](./src/hooks.ts) to perform corresponding indexing using the `Indexer` object. + + * While using the indexer storage methods for indexing, pass `diff` as true if default state is desired to be generated using the state variables being indexed. + +* Generating state: + + * Edit the custom hook function `createInitialState` (triggered if the watcher passes the start block, checkpoint: `true`) in [hooks.ts](./src/hooks.ts) to save an initial `State` using the `Indexer` object. + + * Edit the custom hook function `createStateDiff` (triggered on a block) in [hooks.ts](./src/hooks.ts) to save the state in a `diff` `State` using the `Indexer` object. The default state (if exists) is updated. + + * Edit the custom hook function `createStateCheckpoint` (triggered just before default and CLI checkpoint) in [hooks.ts](./src/hooks.ts) to save the state in a `checkpoint` `State` using the `Indexer` object. + +### GQL Caching + +To enable GQL requests caching: + +* Update the `server.gql.cache` config with required settings. + +* In the GQL [schema file](./src/schema.gql), use the `cacheControl` directive to apply cache hints at schema level. + + * Eg. Set `inheritMaxAge` to true for non-scalar fields of a type. + +* In the GQL [resolvers file](./src/resolvers.ts), uncomment the `setGQLCacheHints()` calls in resolvers for required queries. + +## Run + +* If the watcher is a `lazy` watcher: + + * Run the server: + + ```bash + yarn server + ``` + + GQL console: http://localhost:3008/graphql + +* If the watcher is an `active` watcher: + + * Run the job-runner: + + ```bash + yarn job-runner + ``` + + * Run the server: + + ```bash + yarn server + ``` + + GQL console: http://localhost:3008/graphql + + * To watch a contract: + + ```bash + yarn watch:contract --address --kind --checkpoint --starting-block [block-number] + ``` + + * `address`: Address or identifier of the contract to be watched. + * `kind`: Kind of the contract. + * `checkpoint`: Turn checkpointing on (`true` | `false`). + * `starting-block`: Starting block for the contract (default: `1`). + + Examples: + + Watch a contract with its address and checkpointing on: + + ```bash + yarn watch:contract --address 0x1F78641644feB8b64642e833cE4AFE93DD6e7833 --kind ERC20 --checkpoint true + ``` + + Watch a contract with its identifier and checkpointing on: + + ```bash + yarn watch:contract --address MyProtocol --kind protocol --checkpoint true + ``` + + * To fill a block range: + + ```bash + yarn fill --start-block --end-block + ``` + + * `start-block`: Block number to start filling from. + * `end-block`: Block number till which to fill. + + * To create a checkpoint for a contract: + + ```bash + yarn checkpoint create --address --block-hash [block-hash] + ``` + + * `address`: Address or identifier of the contract for which to create a checkpoint. + * `block-hash`: Hash of a block (in the pruned region) at which to create the checkpoint (default: latest canonical block hash). + + * To verify a checkpoint: + + ```bash + yarn checkpoint verify --cid + ``` + + `cid`: CID of the checkpoint for which to verify. + + * To reset the watcher to a previous block number: + + * Reset watcher: + + ```bash + yarn reset watcher --block-number + ``` + + * Reset job-queue: + + ```bash + yarn reset job-queue + ``` + + * Reset state: + + ```bash + yarn reset state --block-number + ``` + + * `block-number`: Block number to which to reset the watcher. + + * To export and import the watcher state: + + * In source watcher, export watcher state: + + ```bash + yarn export-state --export-file [export-file-path] --block-number [snapshot-block-height] + ``` + + * `export-file`: Path of file to which to export the watcher data. + * `block-number`: Block height at which to take snapshot for export. + + * In target watcher, run job-runner: + + ```bash + yarn job-runner + ``` + + * Import watcher state: + + ```bash + yarn import-state --import-file + ``` + + * `import-file`: Path of file from which to import the watcher data. + + * Run server: + + ```bash + yarn server + ``` + + * To inspect a CID: + + ```bash + yarn inspect-cid --cid + ``` + + * `cid`: CID to be inspected. diff --git a/packages/v3-watcher/environments/local.toml b/packages/v3-watcher/environments/local.toml new file mode 100644 index 0000000..9b9b2d7 --- /dev/null +++ b/packages/v3-watcher/environments/local.toml @@ -0,0 +1,109 @@ +[server] + host = "127.0.0.1" + port = 3008 + kind = "active" + + # Checkpointing state. + checkpointing = true + + # Checkpoint interval in number of blocks. + checkpointInterval = 2000 + + # Enable state creation + # CAUTION: Disable only if state creation is not desired or can be filled subsequently + enableState = true + + subgraphPath = "./subgraph-build" + + # Interval to restart wasm instance periodically + wasmRestartBlocksInterval = 20 + + # Interval in number of blocks at which to clear entities cache. + clearEntitiesCacheInterval = 1000 + + # Flag to specify whether RPC endpoint supports block hash as block tag parameter + rpcSupportsBlockHashParam = true + + # Server GQL config + [server.gql] + path = "/graphql" + + # Max block range for which to return events in eventsInRange GQL query. + # Use -1 for skipping check on block range. + maxEventsBlockRange = 1000 + + # Log directory for GQL requests + logDir = "./gql-logs" + + # GQL cache settings + [server.gql.cache] + enabled = true + + # Max in-memory cache size (in bytes) (default 8 MB) + # maxCacheSize + + # GQL cache-control max-age settings (in seconds) + maxAge = 15 + timeTravelMaxAge = 86400 # 1 day + +[metrics] + host = "127.0.0.1" + port = 9000 + [metrics.gql] + port = 9001 + +[database] + type = "postgres" + host = "localhost" + port = 5432 + database = "v3-watcher" + username = "postgres" + password = "postgres" + synchronize = true + logging = false + +[upstream] + [upstream.ethServer] + gqlApiEndpoint = "http://127.0.0.1:8082/graphql" + rpcProviderEndpoints = [ + "http://127.0.0.1:8081" + ] + + # Boolean flag to specify if rpc-eth-client should be used for RPC endpoint instead of ipld-eth-client (ipld-eth-server GQL client) + rpcClient = false + + # Boolean flag to specify if rpcProviderEndpoint is an FEVM RPC endpoint + isFEVM = false + + # Boolean flag to filter event logs by contracts + filterLogsByAddresses = true + # Boolean flag to filter event logs by topics + filterLogsByTopics = true + + [upstream.cache] + name = "requests" + enabled = false + deleteOnStart = false + +[jobQueue] + dbConnectionString = "postgres://postgres:postgres@localhost/v3-watcher-job-queue" + maxCompletionLagInSecs = 300 + jobDelayInMilliSecs = 100 + eventsInBatch = 50 + subgraphEventsOrder = true + blockDelayInMilliSecs = 2000 + + # Boolean to switch between modes of processing events when starting the server. + # Setting to true will fetch filtered events and required blocks in a range of blocks and then process them. + # Setting to false will fetch blocks consecutively with its events and then process them (Behaviour is followed in realtime processing near head). + useBlockRanges = true + + # Block range in which logs are fetched during historical blocks processing + historicalLogsBlockRange = 2000 + + # Max block range of historical processing after which it waits for completion of events processing + # If set to -1 historical processing does not wait for events processing and completes till latest canonical block + historicalMaxFetchAhead = 10000 + + # Max number of retries to fetch new block after which watcher will failover to other RPC endpoints + maxNewBlockRetries = 3 diff --git a/packages/v3-watcher/package.json b/packages/v3-watcher/package.json new file mode 100644 index 0000000..eefd2b6 --- /dev/null +++ b/packages/v3-watcher/package.json @@ -0,0 +1,77 @@ +{ + "name": "@cerc-io/v3-watcher", + "version": "0.1.0", + "description": "v3-watcher", + "private": true, + "main": "dist/index.js", + "scripts": { + "lint": "eslint --max-warnings=0 .", + "build": "yarn clean && tsc && yarn copy-assets", + "clean": "rm -rf ./dist", + "prepare": "husky install", + "copy-assets": "copyfiles -u 1 src/**/*.gql dist/", + "server": "DEBUG=vulcanize:* YARN_CHILD_PROCESS=true node --enable-source-maps dist/server.js", + "server:dev": "DEBUG=vulcanize:* YARN_CHILD_PROCESS=true ts-node src/server.ts", + "job-runner": "DEBUG=vulcanize:* YARN_CHILD_PROCESS=true node --enable-source-maps dist/job-runner.js", + "job-runner:dev": "DEBUG=vulcanize:* YARN_CHILD_PROCESS=true ts-node src/job-runner.ts", + "watch:contract": "DEBUG=vulcanize:* ts-node src/cli/watch-contract.ts", + "fill": "DEBUG=vulcanize:* ts-node src/fill.ts", + "fill:state": "DEBUG=vulcanize:* ts-node src/fill.ts --state", + "reset": "DEBUG=vulcanize:* ts-node src/cli/reset.ts", + "checkpoint": "DEBUG=vulcanize:* node --enable-source-maps dist/cli/checkpoint.js", + "checkpoint:dev": "DEBUG=vulcanize:* ts-node src/cli/checkpoint.ts", + "export-state": "DEBUG=vulcanize:* node --enable-source-maps dist/cli/export-state.js", + "export-state:dev": "DEBUG=vulcanize:* ts-node src/cli/export-state.ts", + "import-state": "DEBUG=vulcanize:* node --enable-source-maps dist/cli/import-state.js", + "import-state:dev": "DEBUG=vulcanize:* ts-node src/cli/import-state.ts", + "inspect-cid": "DEBUG=vulcanize:* ts-node src/cli/inspect-cid.ts", + "index-block": "DEBUG=vulcanize:* ts-node src/cli/index-block.ts" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/cerc-io/watcher-ts.git" + }, + "author": "", + "license": "AGPL-3.0", + "bugs": { + "url": "https://github.com/cerc-io/watcher-ts/issues" + }, + "homepage": "https://github.com/cerc-io/watcher-ts#readme", + "dependencies": { + "@apollo/client": "^3.3.19", + "@cerc-io/cli": "^0.2.93", + "@cerc-io/ipld-eth-client": "^0.2.93", + "@cerc-io/solidity-mapper": "^0.2.93", + "@cerc-io/util": "^0.2.93", + "@cerc-io/graph-node": "^0.2.93", + "@ethersproject/providers": "^5.4.4", + "debug": "^4.3.1", + "decimal.js": "^10.3.1", + "ethers": "^5.4.4", + "graphql": "^15.5.0", + "json-bigint": "^1.0.0", + "reflect-metadata": "^0.1.13", + "typeorm": "0.2.37", + "yargs": "^17.0.1" + }, + "devDependencies": { + "@ethersproject/abi": "^5.3.0", + "@types/debug": "^4.1.5", + "@types/json-bigint": "^1.0.0", + "@types/yargs": "^17.0.0", + "@typescript-eslint/eslint-plugin": "^5.47.1", + "@typescript-eslint/parser": "^5.47.1", + "copyfiles": "^2.4.1", + "eslint": "^8.35.0", + "eslint-config-semistandard": "^15.0.1", + "eslint-config-standard": "^16.0.3", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^5.1.0", + "eslint-plugin-standard": "^5.0.0", + "husky": "^7.0.2", + "ts-node": "^10.2.1", + "typescript": "^5.0.2", + "winston": "^3.13.0" + } +} diff --git a/packages/v3-watcher/src/artifacts/Factory.json b/packages/v3-watcher/src/artifacts/Factory.json new file mode 100644 index 0000000..c712812 --- /dev/null +++ b/packages/v3-watcher/src/artifacts/Factory.json @@ -0,0 +1,200 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + } + ], + "name": "FeeAmountEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + }, + { + "indexed": false, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "createPool", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + } + ], + "name": "enableFeeAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "feeAmountTickSpacing", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "getPool", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/packages/v3-watcher/src/artifacts/NonfungiblePositionManager.json b/packages/v3-watcher/src/artifacts/NonfungiblePositionManager.json new file mode 100644 index 0000000..830b437 --- /dev/null +++ b/packages/v3-watcher/src/artifacts/NonfungiblePositionManager.json @@ -0,0 +1,1195 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_factory", + "type": "address" + }, + { + "internalType": "address", + "name": "_WETH9", + "type": "address" + }, + { + "internalType": "address", + "name": "_tokenDescriptor_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Collect", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "DecreaseLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "IncreaseLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WETH9", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Max", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Max", + "type": "uint128" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + } + ], + "name": "createAndInitializePoolIfNecessary", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "decreaseLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "increaseLiquidity", + "outputs": [ + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "internalType": "struct INonfungiblePositionManager.MintParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "positions", + "outputs": [ + { + "internalType": "uint96", + "name": "nonce", + "type": "uint96" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside0LastX128", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside1LastX128", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "tokensOwed0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "tokensOwed1", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowed", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowedIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "sweepToken", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Owed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Owed", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3MintCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "unwrapWETH9", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ] +} \ No newline at end of file diff --git a/packages/v3-watcher/src/artifacts/Pool.json b/packages/v3-watcher/src/artifacts/Pool.json new file mode 100644 index 0000000..cea0ad1 --- /dev/null +++ b/packages/v3-watcher/src/artifacts/Pool.json @@ -0,0 +1,990 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Burn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "name": "Collect", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "name": "CollectProtocol", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paid0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paid1", + "type": "uint256" + } + ], + "name": "Flash", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "observationCardinalityNextOld", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "observationCardinalityNextNew", + "type": "uint16" + } + ], + "name": "IncreaseObservationCardinalityNext", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "Initialize", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol0Old", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol1Old", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol0New", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol1New", + "type": "uint8" + } + ], + "name": "SetFeeProtocol", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount0", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount1", + "type": "int256" + }, + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "Swap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount0Requested", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Requested", + "type": "uint128" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Requested", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Requested", + "type": "uint128" + } + ], + "name": "collectProtocol", + "outputs": [ + { + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fee", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeGrowthGlobal0X128", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeGrowthGlobal1X128", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "flash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "observationCardinalityNext", + "type": "uint16" + } + ], + "name": "increaseObservationCardinalityNext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "liquidity", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxLiquidityPerTick", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "observations", + "outputs": [ + { + "internalType": "uint32", + "name": "blockTimestamp", + "type": "uint32" + }, + { + "internalType": "int56", + "name": "tickCumulative", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityCumulativeX128", + "type": "uint160" + }, + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32[]", + "name": "secondsAgos", + "type": "uint32[]" + } + ], + "name": "observe", + "outputs": [ + { + "internalType": "int56[]", + "name": "tickCumulatives", + "type": "int56[]" + }, + { + "internalType": "uint160[]", + "name": "secondsPerLiquidityCumulativeX128s", + "type": "uint160[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "positions", + "outputs": [ + { + "internalType": "uint128", + "name": "_liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside0LastX128", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside1LastX128", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "tokensOwed0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "tokensOwed1", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFees", + "outputs": [ + { + "internalType": "uint128", + "name": "token0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "token1", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "feeProtocol0", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "feeProtocol1", + "type": "uint8" + } + ], + "name": "setFeeProtocol", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slot0", + "outputs": [ + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "internalType": "int24", + "name": "tick", + "type": "int24" + }, + { + "internalType": "uint16", + "name": "observationIndex", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "observationCardinality", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "observationCardinalityNext", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "feeProtocol", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "unlocked", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + } + ], + "name": "snapshotCumulativesInside", + "outputs": [ + { + "internalType": "int56", + "name": "tickCumulativeInside", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityInsideX128", + "type": "uint160" + }, + { + "internalType": "uint32", + "name": "secondsInside", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bool", + "name": "zeroForOne", + "type": "bool" + }, + { + "internalType": "int256", + "name": "amountSpecified", + "type": "int256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "int256", + "name": "amount0", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int16", + "name": "wordPosition", + "type": "int16" + } + ], + "name": "tickBitmap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tickSpacing", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "ticks", + "outputs": [ + { + "internalType": "uint128", + "name": "liquidityGross", + "type": "uint128" + }, + { + "internalType": "int128", + "name": "liquidityNet", + "type": "int128" + }, + { + "internalType": "uint256", + "name": "feeGrowthOutside0X128", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeGrowthOutside1X128", + "type": "uint256" + }, + { + "internalType": "int56", + "name": "tickCumulativeOutside", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityOutsideX128", + "type": "uint160" + }, + { + "internalType": "uint32", + "name": "secondsOutside", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token0", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/packages/v3-watcher/src/cli/checkpoint-cmds/create.ts b/packages/v3-watcher/src/cli/checkpoint-cmds/create.ts new file mode 100644 index 0000000..e771c70 --- /dev/null +++ b/packages/v3-watcher/src/cli/checkpoint-cmds/create.ts @@ -0,0 +1,44 @@ +// +// Copyright 2022 Vulcanize, Inc. +// + +import { CreateCheckpointCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../../database'; +import { Indexer } from '../../indexer'; + +export const command = 'create'; + +export const desc = 'Create checkpoint'; + +export const builder = { + address: { + type: 'string', + require: true, + demandOption: true, + describe: 'Contract address to create the checkpoint for.' + }, + blockHash: { + type: 'string', + describe: 'Blockhash at which to create the checkpoint.' + } +}; + +export const handler = async (argv: any): Promise => { + const createCheckpointCmd = new CreateCheckpointCmd(); + await createCheckpointCmd.init(argv, Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + createCheckpointCmd.config.server, + createCheckpointCmd.clients.ethClient, + createCheckpointCmd.ethProvider, + createCheckpointCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await createCheckpointCmd.initIndexer(Indexer, graphWatcher); + + await createCheckpointCmd.exec(); +}; diff --git a/packages/v3-watcher/src/cli/checkpoint-cmds/verify.ts b/packages/v3-watcher/src/cli/checkpoint-cmds/verify.ts new file mode 100644 index 0000000..3709f54 --- /dev/null +++ b/packages/v3-watcher/src/cli/checkpoint-cmds/verify.ts @@ -0,0 +1,40 @@ +// +// Copyright 2022 Vulcanize, Inc. +// + +import { VerifyCheckpointCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../../database'; +import { Indexer } from '../../indexer'; + +export const command = 'verify'; + +export const desc = 'Verify checkpoint'; + +export const builder = { + cid: { + type: 'string', + alias: 'c', + demandOption: true, + describe: 'Checkpoint CID to be verified' + } +}; + +export const handler = async (argv: any): Promise => { + const verifyCheckpointCmd = new VerifyCheckpointCmd(); + await verifyCheckpointCmd.init(argv, Database); + + const { graphWatcher, graphDb } = await getGraphDbAndWatcher( + verifyCheckpointCmd.config.server, + verifyCheckpointCmd.clients.ethClient, + verifyCheckpointCmd.ethProvider, + verifyCheckpointCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await verifyCheckpointCmd.initIndexer(Indexer, graphWatcher); + + await verifyCheckpointCmd.exec(graphDb); +}; diff --git a/packages/v3-watcher/src/cli/checkpoint.ts b/packages/v3-watcher/src/cli/checkpoint.ts new file mode 100644 index 0000000..d05ad8a --- /dev/null +++ b/packages/v3-watcher/src/cli/checkpoint.ts @@ -0,0 +1,39 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import yargs from 'yargs'; +import 'reflect-metadata'; +import debug from 'debug'; + +import { DEFAULT_CONFIG_PATH } from '@cerc-io/util'; + +import { hideBin } from 'yargs/helpers'; + +const log = debug('vulcanize:checkpoint'); + +const main = async () => { + return yargs(hideBin(process.argv)) + .parserConfiguration({ + 'parse-numbers': false + }).options({ + configFile: { + alias: 'f', + type: 'string', + require: true, + demandOption: true, + describe: 'configuration file path (toml)', + default: DEFAULT_CONFIG_PATH + } + }) + .commandDir('checkpoint-cmds', { extensions: ['ts', 'js'], exclude: /([a-zA-Z0-9\s_\\.\-:])+(.d.ts)$/ }) + .demandCommand(1) + .help() + .argv; +}; + +main().then(() => { + process.exit(); +}).catch(err => { + log(err); +}); diff --git a/packages/v3-watcher/src/cli/export-state.ts b/packages/v3-watcher/src/cli/export-state.ts new file mode 100644 index 0000000..bcd1c8a --- /dev/null +++ b/packages/v3-watcher/src/cli/export-state.ts @@ -0,0 +1,38 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { ExportStateCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../database'; +import { Indexer } from '../indexer'; + +const log = debug('vulcanize:export-state'); + +const main = async (): Promise => { + const exportStateCmd = new ExportStateCmd(); + await exportStateCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + exportStateCmd.config.server, + exportStateCmd.clients.ethClient, + exportStateCmd.ethProvider, + exportStateCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await exportStateCmd.initIndexer(Indexer, graphWatcher); + + await exportStateCmd.exec(); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(0); +}); diff --git a/packages/v3-watcher/src/cli/import-state.ts b/packages/v3-watcher/src/cli/import-state.ts new file mode 100644 index 0000000..04ce0e8 --- /dev/null +++ b/packages/v3-watcher/src/cli/import-state.ts @@ -0,0 +1,39 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { ImportStateCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../database'; +import { Indexer } from '../indexer'; +import { State } from '../entity/State'; + +const log = debug('vulcanize:import-state'); + +export const main = async (): Promise => { + const importStateCmd = new ImportStateCmd(); + await importStateCmd.init(Database); + + const { graphWatcher, graphDb } = await getGraphDbAndWatcher( + importStateCmd.config.server, + importStateCmd.clients.ethClient, + importStateCmd.ethProvider, + importStateCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await importStateCmd.initIndexer(Indexer, graphWatcher); + + await importStateCmd.exec(State, graphDb); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(0); +}); diff --git a/packages/v3-watcher/src/cli/index-block.ts b/packages/v3-watcher/src/cli/index-block.ts new file mode 100644 index 0000000..19a302a --- /dev/null +++ b/packages/v3-watcher/src/cli/index-block.ts @@ -0,0 +1,38 @@ +// +// Copyright 2022 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { IndexBlockCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../database'; +import { Indexer } from '../indexer'; + +const log = debug('vulcanize:index-block'); + +const main = async (): Promise => { + const indexBlockCmd = new IndexBlockCmd(); + await indexBlockCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + indexBlockCmd.config.server, + indexBlockCmd.clients.ethClient, + indexBlockCmd.ethProvider, + indexBlockCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await indexBlockCmd.initIndexer(Indexer, graphWatcher); + + await indexBlockCmd.exec(); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(0); +}); diff --git a/packages/v3-watcher/src/cli/inspect-cid.ts b/packages/v3-watcher/src/cli/inspect-cid.ts new file mode 100644 index 0000000..4f5955e --- /dev/null +++ b/packages/v3-watcher/src/cli/inspect-cid.ts @@ -0,0 +1,38 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { InspectCIDCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../database'; +import { Indexer } from '../indexer'; + +const log = debug('vulcanize:inspect-cid'); + +const main = async (): Promise => { + const inspectCIDCmd = new InspectCIDCmd(); + await inspectCIDCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + inspectCIDCmd.config.server, + inspectCIDCmd.clients.ethClient, + inspectCIDCmd.ethProvider, + inspectCIDCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await inspectCIDCmd.initIndexer(Indexer, graphWatcher); + + await inspectCIDCmd.exec(); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(0); +}); diff --git a/packages/v3-watcher/src/cli/reset-cmds/job-queue.ts b/packages/v3-watcher/src/cli/reset-cmds/job-queue.ts new file mode 100644 index 0000000..c33cbfd --- /dev/null +++ b/packages/v3-watcher/src/cli/reset-cmds/job-queue.ts @@ -0,0 +1,22 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import debug from 'debug'; + +import { getConfig, resetJobs, Config } from '@cerc-io/util'; + +const log = debug('vulcanize:reset-job-queue'); + +export const command = 'job-queue'; + +export const desc = 'Reset job queue'; + +export const builder = {}; + +export const handler = async (argv: any): Promise => { + const config: Config = await getConfig(argv.configFile); + await resetJobs(config); + + log('Job queue reset successfully'); +}; diff --git a/packages/v3-watcher/src/cli/reset-cmds/state.ts b/packages/v3-watcher/src/cli/reset-cmds/state.ts new file mode 100644 index 0000000..33211d6 --- /dev/null +++ b/packages/v3-watcher/src/cli/reset-cmds/state.ts @@ -0,0 +1,24 @@ +// +// Copyright 2022 Vulcanize, Inc. +// + +import { ResetStateCmd } from '@cerc-io/cli'; + +import { Database } from '../../database'; + +export const command = 'state'; + +export const desc = 'Reset State to a given block number'; + +export const builder = { + blockNumber: { + type: 'number' + } +}; + +export const handler = async (argv: any): Promise => { + const resetStateCmd = new ResetStateCmd(); + await resetStateCmd.init(argv, Database); + + await resetStateCmd.exec(); +}; diff --git a/packages/v3-watcher/src/cli/reset-cmds/watcher.ts b/packages/v3-watcher/src/cli/reset-cmds/watcher.ts new file mode 100644 index 0000000..827fd28 --- /dev/null +++ b/packages/v3-watcher/src/cli/reset-cmds/watcher.ts @@ -0,0 +1,37 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { ResetWatcherCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../../database'; +import { Indexer } from '../../indexer'; + +export const command = 'watcher'; + +export const desc = 'Reset watcher to a block number'; + +export const builder = { + blockNumber: { + type: 'number' + } +}; + +export const handler = async (argv: any): Promise => { + const resetWatcherCmd = new ResetWatcherCmd(); + await resetWatcherCmd.init(argv, Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + resetWatcherCmd.config.server, + resetWatcherCmd.clients.ethClient, + resetWatcherCmd.ethProvider, + resetWatcherCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await resetWatcherCmd.initIndexer(Indexer, graphWatcher); + + await resetWatcherCmd.exec(); +}; diff --git a/packages/v3-watcher/src/cli/reset.ts b/packages/v3-watcher/src/cli/reset.ts new file mode 100644 index 0000000..95648c8 --- /dev/null +++ b/packages/v3-watcher/src/cli/reset.ts @@ -0,0 +1,24 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { getResetYargs } from '@cerc-io/util'; + +const log = debug('vulcanize:reset'); + +const main = async () => { + return getResetYargs() + .commandDir('reset-cmds', { extensions: ['ts', 'js'], exclude: /([a-zA-Z0-9\s_\\.\-:])+(.d.ts)$/ }) + .demandCommand(1) + .help() + .argv; +}; + +main().then(() => { + process.exit(); +}).catch(err => { + log(err); +}); diff --git a/packages/v3-watcher/src/cli/watch-contract.ts b/packages/v3-watcher/src/cli/watch-contract.ts new file mode 100644 index 0000000..7d6ce1a --- /dev/null +++ b/packages/v3-watcher/src/cli/watch-contract.ts @@ -0,0 +1,38 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { WatchContractCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../database'; +import { Indexer } from '../indexer'; + +const log = debug('vulcanize:watch-contract'); + +const main = async (): Promise => { + const watchContractCmd = new WatchContractCmd(); + await watchContractCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + watchContractCmd.config.server, + watchContractCmd.clients.ethClient, + watchContractCmd.ethProvider, + watchContractCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await watchContractCmd.initIndexer(Indexer, graphWatcher); + + await watchContractCmd.exec(); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(0); +}); diff --git a/packages/v3-watcher/src/client.ts b/packages/v3-watcher/src/client.ts new file mode 100644 index 0000000..8bb2bb0 --- /dev/null +++ b/packages/v3-watcher/src/client.ts @@ -0,0 +1,55 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { gql } from '@apollo/client/core'; +import { GraphQLClient, GraphQLConfig } from '@cerc-io/ipld-eth-client'; + +import { queries, mutations, subscriptions } from './gql'; + +export class Client { + _config: GraphQLConfig; + _client: GraphQLClient; + + constructor (config: GraphQLConfig) { + this._config = config; + + this._client = new GraphQLClient(config); + } + + async getEvents (blockHash: string, contractAddress: string, name: string): Promise { + const { events } = await this._client.query( + gql(queries.events), + { blockHash, contractAddress, name } + ); + + return events; + } + + async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise { + const { eventsInRange } = await this._client.query( + gql(queries.eventsInRange), + { fromBlockNumber, toBlockNumber } + ); + + return eventsInRange; + } + + async watchContract (contractAddress: string, startingBlock?: number): Promise { + const { watchContract } = await this._client.mutate( + gql(mutations.watchContract), + { contractAddress, startingBlock } + ); + + return watchContract; + } + + async watchEvents (onNext: (value: any) => void): Promise { + return this._client.subscribe( + gql(subscriptions.onEvent), + ({ data }) => { + onNext(data.onEvent); + } + ); + } +} diff --git a/packages/v3-watcher/src/database.ts b/packages/v3-watcher/src/database.ts new file mode 100644 index 0000000..6d893c8 --- /dev/null +++ b/packages/v3-watcher/src/database.ts @@ -0,0 +1,307 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import assert from 'assert'; +import { Connection, ConnectionOptions, DeepPartial, FindConditions, QueryRunner, FindManyOptions, EntityTarget } from 'typeorm'; +import path from 'path'; + +import { + ENTITY_QUERY_TYPE, + Database as BaseDatabase, + DatabaseInterface, + QueryOptions, + StateKind, + Where +} from '@cerc-io/util'; + +import { Contract } from './entity/Contract'; +import { Event } from './entity/Event'; +import { SyncStatus } from './entity/SyncStatus'; +import { StateSyncStatus } from './entity/StateSyncStatus'; +import { BlockProgress } from './entity/BlockProgress'; +import { State } from './entity/State'; +import { Factory } from './entity/Factory'; +import { Bundle } from './entity/Bundle'; +import { Token } from './entity/Token'; +import { Pool } from './entity/Pool'; +import { Tick } from './entity/Tick'; +import { Position } from './entity/Position'; +import { PositionSnapshot } from './entity/PositionSnapshot'; +import { Transaction } from './entity/Transaction'; +import { Mint } from './entity/Mint'; +import { Burn } from './entity/Burn'; +import { Swap } from './entity/Swap'; +import { Collect } from './entity/Collect'; +import { Flash } from './entity/Flash'; +import { UniswapDayData } from './entity/UniswapDayData'; +import { PoolDayData } from './entity/PoolDayData'; +import { PoolHourData } from './entity/PoolHourData'; +import { TickHourData } from './entity/TickHourData'; +import { TickDayData } from './entity/TickDayData'; +import { TokenDayData } from './entity/TokenDayData'; +import { TokenHourData } from './entity/TokenHourData'; +import { IncreaseEvent } from './entity/IncreaseEvent'; +import { DecreaseEvent } from './entity/DecreaseEvent'; +import { SetProtocolFeeEvent } from './entity/SetProtocolFeeEvent'; + +export const SUBGRAPH_ENTITIES = new Set([Factory, Bundle, Token, Pool, Tick, Position, PositionSnapshot, Transaction, Mint, Burn, Swap, Collect, Flash, UniswapDayData, PoolDayData, PoolHourData, TickHourData, TickDayData, TokenDayData, TokenHourData, IncreaseEvent, DecreaseEvent, SetProtocolFeeEvent]); +export const ENTITIES = [...SUBGRAPH_ENTITIES]; +// Map: Entity to suitable query type. +export const ENTITY_QUERY_TYPE_MAP = new Map any, ENTITY_QUERY_TYPE>([]); + +export const ENTITY_TO_LATEST_ENTITY_MAP: Map = new Map(); + +export class Database implements DatabaseInterface { + _config: ConnectionOptions; + _conn!: Connection; + _baseDatabase: BaseDatabase; + _propColMaps: { [key: string]: Map; }; + + constructor (config: ConnectionOptions) { + assert(config); + + this._config = { + ...config, + subscribers: [path.join(__dirname, 'entity/Subscriber.*')], + entities: [path.join(__dirname, 'entity/*')] + }; + + this._baseDatabase = new BaseDatabase(this._config); + this._propColMaps = {}; + } + + get baseDatabase (): BaseDatabase { + return this._baseDatabase; + } + + async init (): Promise { + this._conn = await this._baseDatabase.init(); + } + + async close (): Promise { + return this._baseDatabase.close(); + } + + getNewState (): State { + return new State(); + } + + async getStates (where: FindConditions): Promise { + const repo = this._conn.getRepository(State); + + return this._baseDatabase.getStates(repo, where); + } + + async getLatestState (contractAddress: string, kind: StateKind | null, blockNumber?: number): Promise { + const repo = this._conn.getRepository(State); + + return this._baseDatabase.getLatestState(repo, contractAddress, kind, blockNumber); + } + + async getPrevState (blockHash: string, contractAddress: string, kind?: string): Promise { + const repo = this._conn.getRepository(State); + + return this._baseDatabase.getPrevState(repo, blockHash, contractAddress, kind); + } + + // Fetch all diff States after the specified block number. + async getDiffStatesInRange (contractAddress: string, startblock: number, endBlock: number): Promise { + const repo = this._conn.getRepository(State); + + return this._baseDatabase.getDiffStatesInRange(repo, contractAddress, startblock, endBlock); + } + + async saveOrUpdateState (dbTx: QueryRunner, state: State): Promise { + const repo = dbTx.manager.getRepository(State); + + return this._baseDatabase.saveOrUpdateState(repo, state); + } + + async removeStates (dbTx: QueryRunner, blockNumber: number, kind: string): Promise { + const repo = dbTx.manager.getRepository(State); + + await this._baseDatabase.removeStates(repo, blockNumber, kind); + } + + async removeStatesAfterBlock (dbTx: QueryRunner, blockNumber: number): Promise { + const repo = dbTx.manager.getRepository(State); + + await this._baseDatabase.removeStatesAfterBlock(repo, blockNumber); + } + + async getStateSyncStatus (): Promise { + const repo = this._conn.getRepository(StateSyncStatus); + + return this._baseDatabase.getStateSyncStatus(repo); + } + + async updateStateSyncStatusIndexedBlock (queryRunner: QueryRunner, blockNumber: number, force?: boolean): Promise { + const repo = queryRunner.manager.getRepository(StateSyncStatus); + + return this._baseDatabase.updateStateSyncStatusIndexedBlock(repo, blockNumber, force); + } + + async updateStateSyncStatusCheckpointBlock (queryRunner: QueryRunner, blockNumber: number, force?: boolean): Promise { + const repo = queryRunner.manager.getRepository(StateSyncStatus); + + return this._baseDatabase.updateStateSyncStatusCheckpointBlock(repo, blockNumber, force); + } + + async getContracts (): Promise { + const repo = this._conn.getRepository(Contract); + + return this._baseDatabase.getContracts(repo); + } + + async createTransactionRunner (): Promise { + return this._baseDatabase.createTransactionRunner(); + } + + async getProcessedBlockCountForRange (fromBlockNumber: number, toBlockNumber: number): Promise<{ expected: number, actual: number }> { + const repo = this._conn.getRepository(BlockProgress); + + return this._baseDatabase.getProcessedBlockCountForRange(repo, fromBlockNumber, toBlockNumber); + } + + async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise> { + const repo = this._conn.getRepository(Event); + + return this._baseDatabase.getEventsInRange(repo, fromBlockNumber, toBlockNumber); + } + + async saveEventEntity (queryRunner: QueryRunner, entity: Event): Promise { + const repo = queryRunner.manager.getRepository(Event); + return this._baseDatabase.saveEventEntity(repo, entity); + } + + async getBlockEvents (blockHash: string, where: Where, queryOptions: QueryOptions): Promise { + const repo = this._conn.getRepository(Event); + + return this._baseDatabase.getBlockEvents(repo, blockHash, where, queryOptions); + } + + async saveBlockWithEvents (queryRunner: QueryRunner, block: DeepPartial, events: DeepPartial[]): Promise { + const blockRepo = queryRunner.manager.getRepository(BlockProgress); + const eventRepo = queryRunner.manager.getRepository(Event); + + return this._baseDatabase.saveBlockWithEvents(blockRepo, eventRepo, block, events); + } + + async saveEvents (queryRunner: QueryRunner, events: Event[]): Promise { + const eventRepo = queryRunner.manager.getRepository(Event); + + return this._baseDatabase.saveEvents(eventRepo, events); + } + + async saveBlockProgress (queryRunner: QueryRunner, block: DeepPartial): Promise { + const repo = queryRunner.manager.getRepository(BlockProgress); + + return this._baseDatabase.saveBlockProgress(repo, block); + } + + async saveContract (queryRunner: QueryRunner, address: string, kind: string, checkpoint: boolean, startingBlock: number, context?: any): Promise { + const repo = queryRunner.manager.getRepository(Contract); + + return this._baseDatabase.saveContract(repo, address, kind, checkpoint, startingBlock, context); + } + + async updateSyncStatusIndexedBlock (queryRunner: QueryRunner, blockHash: string, blockNumber: number, force = false): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatusIndexedBlock(repo, blockHash, blockNumber, force); + } + + async updateSyncStatusCanonicalBlock (queryRunner: QueryRunner, blockHash: string, blockNumber: number, force = false): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatusCanonicalBlock(repo, blockHash, blockNumber, force); + } + + async updateSyncStatusChainHead (queryRunner: QueryRunner, blockHash: string, blockNumber: number, force = false): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatusChainHead(repo, blockHash, blockNumber, force); + } + + async updateSyncStatusProcessedBlock (queryRunner: QueryRunner, blockHash: string, blockNumber: number, force = false): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatusProcessedBlock(repo, blockHash, blockNumber, force); + } + + async updateSyncStatusIndexingError (queryRunner: QueryRunner, hasIndexingError: boolean): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatusIndexingError(repo, hasIndexingError); + } + + async updateSyncStatus (queryRunner: QueryRunner, syncStatus: DeepPartial): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatus(repo, syncStatus); + } + + async getSyncStatus (queryRunner: QueryRunner): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.getSyncStatus(repo); + } + + async getEvent (id: string): Promise { + const repo = this._conn.getRepository(Event); + + return this._baseDatabase.getEvent(repo, id); + } + + async getBlocksAtHeight (height: number, isPruned: boolean): Promise { + const repo = this._conn.getRepository(BlockProgress); + + return this._baseDatabase.getBlocksAtHeight(repo, height, isPruned); + } + + async markBlocksAsPruned (queryRunner: QueryRunner, blocks: BlockProgress[]): Promise { + const repo = queryRunner.manager.getRepository(BlockProgress); + + return this._baseDatabase.markBlocksAsPruned(repo, blocks); + } + + async getBlockProgress (blockHash: string): Promise { + const repo = this._conn.getRepository(BlockProgress); + return this._baseDatabase.getBlockProgress(repo, blockHash); + } + + async getBlockProgressEntities (where: FindConditions, options: FindManyOptions): Promise { + const repo = this._conn.getRepository(BlockProgress); + + return this._baseDatabase.getBlockProgressEntities(repo, where, options); + } + + async getEntitiesForBlock (blockHash: string, tableName: string): Promise { + return this._baseDatabase.getEntitiesForBlock(blockHash, tableName); + } + + async updateBlockProgress (queryRunner: QueryRunner, block: BlockProgress, lastProcessedEventIndex: number): Promise { + const repo = queryRunner.manager.getRepository(BlockProgress); + + return this._baseDatabase.updateBlockProgress(repo, block, lastProcessedEventIndex); + } + + async removeEntities (queryRunner: QueryRunner, entity: new () => Entity, findConditions?: FindManyOptions | FindConditions): Promise { + return this._baseDatabase.removeEntities(queryRunner, entity, findConditions); + } + + async deleteEntitiesByConditions (queryRunner: QueryRunner, entity: EntityTarget, findConditions: FindConditions): Promise { + await this._baseDatabase.deleteEntitiesByConditions(queryRunner, entity, findConditions); + } + + async getAncestorAtHeight (blockHash: string, height: number): Promise { + return this._baseDatabase.getAncestorAtHeight(blockHash, height); + } + + _getPropertyColumnMapForEntity (entityName: string): Map { + return this._conn.getMetadata(entityName).ownColumns.reduce((acc, curr) => { + return acc.set(curr.propertyName, curr.databaseName); + }, new Map()); + } +} diff --git a/packages/v3-watcher/src/entity/BlockProgress.ts b/packages/v3-watcher/src/entity/BlockProgress.ts new file mode 100644 index 0000000..ded4a86 --- /dev/null +++ b/packages/v3-watcher/src/entity/BlockProgress.ts @@ -0,0 +1,48 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column, Index, CreateDateColumn } from 'typeorm'; +import { BlockProgressInterface } from '@cerc-io/util'; + +@Entity() +@Index(['blockHash'], { unique: true }) +@Index(['blockNumber']) +@Index(['parentHash']) +export class BlockProgress implements BlockProgressInterface { + @PrimaryGeneratedColumn() + id!: number; + + @Column('varchar', { nullable: true }) + cid!: string | null; + + @Column('varchar', { length: 66 }) + blockHash!: string; + + @Column('varchar', { length: 66 }) + parentHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('integer') + blockTimestamp!: number; + + @Column('integer') + numEvents!: number; + + @Column('integer') + numProcessedEvents!: number; + + @Column('integer') + lastProcessedEventIndex!: number; + + @Column('boolean') + isComplete!: boolean; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @CreateDateColumn() + createdAt!: Date; +} diff --git a/packages/v3-watcher/src/entity/Bundle.ts b/packages/v3-watcher/src/entity/Bundle.ts new file mode 100644 index 0000000..1d9c3b6 --- /dev/null +++ b/packages/v3-watcher/src/entity/Bundle.ts @@ -0,0 +1,29 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Bundle { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: decimalTransformer }) + ethPriceUSD!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Burn.ts b/packages/v3-watcher/src/entity/Burn.ts new file mode 100644 index 0000000..842a968 --- /dev/null +++ b/packages/v3-watcher/src/entity/Burn.ts @@ -0,0 +1,68 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Burn { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + transaction!: string; + + @Column('varchar') + pool!: string; + + @Column('varchar') + token0!: string; + + @Column('varchar') + token1!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar', { nullable: true }) + owner!: string | null; + + @Column('varchar') + origin!: string; + + @Column('numeric', { transformer: bigintTransformer }) + amount!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + amount0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amount1!: Decimal; + + @Column('numeric', { nullable: true, transformer: decimalTransformer }) + amountUSD!: Decimal | null; + + @Column('numeric', { transformer: bigintTransformer }) + tickLower!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + tickUpper!: bigint; + + @Column('numeric', { nullable: true, transformer: bigintTransformer }) + logIndex!: bigint | null; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Collect.ts b/packages/v3-watcher/src/entity/Collect.ts new file mode 100644 index 0000000..e926d7c --- /dev/null +++ b/packages/v3-watcher/src/entity/Collect.ts @@ -0,0 +1,56 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Collect { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + transaction!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + pool!: string; + + @Column('varchar', { nullable: true }) + owner!: string | null; + + @Column('numeric', { transformer: decimalTransformer }) + amount0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amount1!: Decimal; + + @Column('numeric', { nullable: true, transformer: decimalTransformer }) + amountUSD!: Decimal | null; + + @Column('numeric', { transformer: bigintTransformer }) + tickLower!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + tickUpper!: bigint; + + @Column('numeric', { nullable: true, transformer: bigintTransformer }) + logIndex!: bigint | null; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Contract.ts b/packages/v3-watcher/src/entity/Contract.ts new file mode 100644 index 0000000..e4defa8 --- /dev/null +++ b/packages/v3-watcher/src/entity/Contract.ts @@ -0,0 +1,27 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column, Index } from 'typeorm'; + +@Entity() +@Index(['address'], { unique: true }) +export class Contract { + @PrimaryGeneratedColumn() + id!: number; + + @Column('varchar', { length: 42 }) + address!: string; + + @Column('varchar') + kind!: string; + + @Column('boolean') + checkpoint!: boolean; + + @Column('integer') + startingBlock!: number; + + @Column('jsonb', { nullable: true }) + context!: Record; +} diff --git a/packages/v3-watcher/src/entity/DecreaseEvent.ts b/packages/v3-watcher/src/entity/DecreaseEvent.ts new file mode 100644 index 0000000..39bbcb3 --- /dev/null +++ b/packages/v3-watcher/src/entity/DecreaseEvent.ts @@ -0,0 +1,52 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class DecreaseEvent { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + pool!: string; + + @Column('numeric', { transformer: bigintTransformer }) + tokenID!: bigint; + + @Column('varchar') + position!: string; + + @Column('numeric', { transformer: bigintTransformer }) + amount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + amount1!: bigint; + + @Column('varchar') + token0!: string; + + @Column('varchar') + token1!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('varchar') + transaction!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Event.ts b/packages/v3-watcher/src/entity/Event.ts new file mode 100644 index 0000000..91f1e6d --- /dev/null +++ b/packages/v3-watcher/src/entity/Event.ts @@ -0,0 +1,38 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column, Index, ManyToOne } from 'typeorm'; +import { BlockProgress } from './BlockProgress'; + +@Entity() +@Index(['block', 'contract']) +@Index(['block', 'contract', 'eventName']) +export class Event { + @PrimaryGeneratedColumn() + id!: number; + + @ManyToOne(() => BlockProgress, { onDelete: 'CASCADE' }) + block!: BlockProgress; + + @Column('varchar', { length: 66 }) + txHash!: string; + + @Column('integer') + index!: number; + + @Column('varchar', { length: 42 }) + contract!: string; + + @Column('varchar', { length: 256 }) + eventName!: string; + + @Column('text') + eventInfo!: string; + + @Column('text') + extraInfo!: string; + + @Column('text') + proof!: string; +} diff --git a/packages/v3-watcher/src/entity/Factory.ts b/packages/v3-watcher/src/entity/Factory.ts new file mode 100644 index 0000000..97522b7 --- /dev/null +++ b/packages/v3-watcher/src/entity/Factory.ts @@ -0,0 +1,62 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Factory { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + poolCount!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + txCount!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + totalVolumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalVolumeETH!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalFeesUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalFeesETH!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + untrackedVolumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedETH!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedUSDUntracked!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedETHUntracked!: Decimal; + + @Column('varchar') + owner!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Flash.ts b/packages/v3-watcher/src/entity/Flash.ts new file mode 100644 index 0000000..c6b7b49 --- /dev/null +++ b/packages/v3-watcher/src/entity/Flash.ts @@ -0,0 +1,59 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Flash { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + transaction!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + pool!: string; + + @Column('varchar') + sender!: string; + + @Column('varchar') + recipient!: string; + + @Column('numeric', { transformer: decimalTransformer }) + amount0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amount1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amountUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amount0Paid!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amount1Paid!: Decimal; + + @Column('numeric', { nullable: true, transformer: bigintTransformer }) + logIndex!: bigint | null; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/FrothyEntity.ts b/packages/v3-watcher/src/entity/FrothyEntity.ts new file mode 100644 index 0000000..9898ce8 --- /dev/null +++ b/packages/v3-watcher/src/entity/FrothyEntity.ts @@ -0,0 +1,21 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; + +@Entity() +@Index(['blockNumber']) +export class FrothyEntity { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar') + name!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; +} diff --git a/packages/v3-watcher/src/entity/IncreaseEvent.ts b/packages/v3-watcher/src/entity/IncreaseEvent.ts new file mode 100644 index 0000000..613a867 --- /dev/null +++ b/packages/v3-watcher/src/entity/IncreaseEvent.ts @@ -0,0 +1,52 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class IncreaseEvent { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + pool!: string; + + @Column('numeric', { transformer: bigintTransformer }) + tokenID!: bigint; + + @Column('varchar') + position!: string; + + @Column('numeric', { transformer: bigintTransformer }) + amount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + amount1!: bigint; + + @Column('varchar') + token0!: string; + + @Column('varchar') + token1!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('varchar') + transaction!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Mint.ts b/packages/v3-watcher/src/entity/Mint.ts new file mode 100644 index 0000000..17d8c03 --- /dev/null +++ b/packages/v3-watcher/src/entity/Mint.ts @@ -0,0 +1,71 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Mint { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + transaction!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + pool!: string; + + @Column('varchar') + token0!: string; + + @Column('varchar') + token1!: string; + + @Column('varchar') + owner!: string; + + @Column('varchar', { nullable: true }) + sender!: string | null; + + @Column('varchar') + origin!: string; + + @Column('numeric', { transformer: bigintTransformer }) + amount!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + amount0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amount1!: Decimal; + + @Column('numeric', { nullable: true, transformer: decimalTransformer }) + amountUSD!: Decimal | null; + + @Column('numeric', { transformer: bigintTransformer }) + tickLower!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + tickUpper!: bigint; + + @Column('numeric', { nullable: true, transformer: bigintTransformer }) + logIndex!: bigint | null; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Pool.ts b/packages/v3-watcher/src/entity/Pool.ts new file mode 100644 index 0000000..9eed0c4 --- /dev/null +++ b/packages/v3-watcher/src/entity/Pool.ts @@ -0,0 +1,113 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Pool { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + createdAtTimestamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + createdAtBlockNumber!: bigint; + + @Column('varchar') + token0!: string; + + @Column('varchar') + token1!: string; + + @Column('numeric', { transformer: bigintTransformer }) + feeTier!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + liquidity!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + sqrtPrice!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthGlobal0X128!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthGlobal1X128!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + token0Price!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + token1Price!: Decimal; + + @Column('numeric', { nullable: true, transformer: bigintTransformer }) + tick!: bigint | null; + + @Column('numeric', { transformer: bigintTransformer }) + observationIndex!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + untrackedVolumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + feesUSD!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + txCount!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + collectedFeesToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedFeesToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedFeesUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedETH!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedUSDUntracked!: Decimal; + + @Column('boolean') + isProtocolFeeEnabled!: boolean; + + @Column('numeric', { transformer: bigintTransformer }) + liquidityProviderCount!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/PoolDayData.ts b/packages/v3-watcher/src/entity/PoolDayData.ts new file mode 100644 index 0000000..651775c --- /dev/null +++ b/packages/v3-watcher/src/entity/PoolDayData.ts @@ -0,0 +1,83 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class PoolDayData { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('integer') + date!: number; + + @Column('varchar') + pool!: string; + + @Column('numeric', { transformer: bigintTransformer }) + liquidity!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + sqrtPrice!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + token0Price!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + token1Price!: Decimal; + + @Column('numeric', { nullable: true, transformer: bigintTransformer }) + tick!: bigint | null; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthGlobal0X128!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthGlobal1X128!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + tvlUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + feesUSD!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + txCount!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + open!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + high!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + low!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + close!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/PoolHourData.ts b/packages/v3-watcher/src/entity/PoolHourData.ts new file mode 100644 index 0000000..9967bdf --- /dev/null +++ b/packages/v3-watcher/src/entity/PoolHourData.ts @@ -0,0 +1,83 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class PoolHourData { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('integer') + periodStartUnix!: number; + + @Column('varchar') + pool!: string; + + @Column('numeric', { transformer: bigintTransformer }) + liquidity!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + sqrtPrice!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + token0Price!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + token1Price!: Decimal; + + @Column('numeric', { nullable: true, transformer: bigintTransformer }) + tick!: bigint | null; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthGlobal0X128!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthGlobal1X128!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + tvlUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + feesUSD!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + txCount!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + open!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + high!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + low!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + close!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Position.ts b/packages/v3-watcher/src/entity/Position.ts new file mode 100644 index 0000000..216ffc1 --- /dev/null +++ b/packages/v3-watcher/src/entity/Position.ts @@ -0,0 +1,89 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Position { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + owner!: string; + + @Column('varchar') + pool!: string; + + @Column('varchar') + token0!: string; + + @Column('varchar') + token1!: string; + + @Column('varchar') + tickLower!: string; + + @Column('varchar') + tickUpper!: string; + + @Column('numeric', { transformer: bigintTransformer }) + liquidity!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + depositedToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + depositedToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + withdrawnToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + withdrawnToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedFeesToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedFeesToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amountDepositedUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amountWithdrawnUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amountCollectedUSD!: Decimal; + + @Column('varchar') + transaction!: string; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthInside0LastX128!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthInside1LastX128!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/PositionSnapshot.ts b/packages/v3-watcher/src/entity/PositionSnapshot.ts new file mode 100644 index 0000000..8fb7a19 --- /dev/null +++ b/packages/v3-watcher/src/entity/PositionSnapshot.ts @@ -0,0 +1,71 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class PositionSnapshot { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + owner!: string; + + @Column('varchar') + pool!: string; + + @Column('varchar') + position!: string; + + @Column('numeric', { transformer: bigintTransformer }) + _blockNumber!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + liquidity!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + depositedToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + depositedToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + withdrawnToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + withdrawnToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedFeesToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedFeesToken1!: Decimal; + + @Column('varchar') + transaction!: string; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthInside0LastX128!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthInside1LastX128!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/SetProtocolFeeEvent.ts b/packages/v3-watcher/src/entity/SetProtocolFeeEvent.ts new file mode 100644 index 0000000..1dbf728 --- /dev/null +++ b/packages/v3-watcher/src/entity/SetProtocolFeeEvent.ts @@ -0,0 +1,46 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class SetProtocolFeeEvent { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + pool!: string; + + @Column('numeric', { transformer: bigintTransformer }) + logIndex!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + new0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + new1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + old0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + old1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/State.ts b/packages/v3-watcher/src/entity/State.ts new file mode 100644 index 0000000..bc05bca --- /dev/null +++ b/packages/v3-watcher/src/entity/State.ts @@ -0,0 +1,31 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column, Index, ManyToOne } from 'typeorm'; +import { StateKind } from '@cerc-io/util'; +import { BlockProgress } from './BlockProgress'; + +@Entity() +@Index(['cid'], { unique: true }) +@Index(['block', 'contractAddress']) +@Index(['block', 'contractAddress', 'kind'], { unique: true }) +export class State { + @PrimaryGeneratedColumn() + id!: number; + + @ManyToOne(() => BlockProgress, { onDelete: 'CASCADE' }) + block!: BlockProgress; + + @Column('varchar', { length: 42 }) + contractAddress!: string; + + @Column('varchar') + cid!: string; + + @Column({ type: 'enum', enum: StateKind }) + kind!: StateKind; + + @Column('bytea') + data!: Buffer; +} diff --git a/packages/v3-watcher/src/entity/StateSyncStatus.ts b/packages/v3-watcher/src/entity/StateSyncStatus.ts new file mode 100644 index 0000000..1535eb4 --- /dev/null +++ b/packages/v3-watcher/src/entity/StateSyncStatus.ts @@ -0,0 +1,17 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; + +@Entity() +export class StateSyncStatus { + @PrimaryGeneratedColumn() + id!: number; + + @Column('integer') + latestIndexedBlockNumber!: number; + + @Column('integer') + latestCheckpointBlockNumber!: number; +} diff --git a/packages/v3-watcher/src/entity/Subscriber.ts b/packages/v3-watcher/src/entity/Subscriber.ts new file mode 100644 index 0000000..2cccb84 --- /dev/null +++ b/packages/v3-watcher/src/entity/Subscriber.ts @@ -0,0 +1,21 @@ +// +// Copyright 2022 Vulcanize, Inc. +// + +import { EventSubscriber, EntitySubscriberInterface, InsertEvent, UpdateEvent } from 'typeorm'; + +import { afterEntityInsertOrUpdate } from '@cerc-io/util'; + +import { FrothyEntity } from './FrothyEntity'; +import { ENTITY_TO_LATEST_ENTITY_MAP, SUBGRAPH_ENTITIES } from '../database'; + +@EventSubscriber() +export class EntitySubscriber implements EntitySubscriberInterface { + async afterInsert (event: InsertEvent): Promise { + await afterEntityInsertOrUpdate(FrothyEntity, SUBGRAPH_ENTITIES, event, ENTITY_TO_LATEST_ENTITY_MAP); + } + + async afterUpdate (event: UpdateEvent): Promise { + await afterEntityInsertOrUpdate(FrothyEntity, SUBGRAPH_ENTITIES, event, ENTITY_TO_LATEST_ENTITY_MAP); + } +} diff --git a/packages/v3-watcher/src/entity/Swap.ts b/packages/v3-watcher/src/entity/Swap.ts new file mode 100644 index 0000000..3e5a69e --- /dev/null +++ b/packages/v3-watcher/src/entity/Swap.ts @@ -0,0 +1,68 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Swap { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + transaction!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + pool!: string; + + @Column('varchar') + token0!: string; + + @Column('varchar') + token1!: string; + + @Column('varchar') + sender!: string; + + @Column('varchar') + recipient!: string; + + @Column('varchar') + origin!: string; + + @Column('numeric', { transformer: decimalTransformer }) + amount0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amount1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amountUSD!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + sqrtPriceX96!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + tick!: bigint; + + @Column('numeric', { nullable: true, transformer: bigintTransformer }) + logIndex!: bigint | null; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/SyncStatus.ts b/packages/v3-watcher/src/entity/SyncStatus.ts new file mode 100644 index 0000000..cc13c70 --- /dev/null +++ b/packages/v3-watcher/src/entity/SyncStatus.ts @@ -0,0 +1,45 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; +import { SyncStatusInterface } from '@cerc-io/util'; + +@Entity() +export class SyncStatus implements SyncStatusInterface { + @PrimaryGeneratedColumn() + id!: number; + + @Column('varchar', { length: 66 }) + chainHeadBlockHash!: string; + + @Column('integer') + chainHeadBlockNumber!: number; + + @Column('varchar', { length: 66 }) + latestIndexedBlockHash!: string; + + @Column('integer') + latestIndexedBlockNumber!: number; + + @Column('varchar', { length: 66 }) + latestProcessedBlockHash!: string; + + @Column('integer') + latestProcessedBlockNumber!: number; + + @Column('varchar', { length: 66 }) + latestCanonicalBlockHash!: string; + + @Column('integer') + latestCanonicalBlockNumber!: number; + + @Column('varchar', { length: 66 }) + initialIndexedBlockHash!: string; + + @Column('integer') + initialIndexedBlockNumber!: number; + + @Column('boolean', { default: false }) + hasIndexingError!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Tick.ts b/packages/v3-watcher/src/entity/Tick.ts new file mode 100644 index 0000000..f7404d6 --- /dev/null +++ b/packages/v3-watcher/src/entity/Tick.ts @@ -0,0 +1,86 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Tick { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar', { nullable: true }) + poolAddress!: string | null; + + @Column('numeric', { transformer: bigintTransformer }) + tickIdx!: bigint; + + @Column('varchar') + pool!: string; + + @Column('numeric', { transformer: bigintTransformer }) + liquidityGross!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + liquidityNet!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + price0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + price1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + untrackedVolumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + feesUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedFeesToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedFeesToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + collectedFeesUSD!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + createdAtTimestamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + createdAtBlockNumber!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + liquidityProviderCount!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthOutside0X128!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthOutside1X128!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/TickDayData.ts b/packages/v3-watcher/src/entity/TickDayData.ts new file mode 100644 index 0000000..50b95f5 --- /dev/null +++ b/packages/v3-watcher/src/entity/TickDayData.ts @@ -0,0 +1,59 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class TickDayData { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('integer') + date!: number; + + @Column('varchar') + pool!: string; + + @Column('varchar') + tick!: string; + + @Column('numeric', { transformer: bigintTransformer }) + liquidityGross!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + liquidityNet!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + feesUSD!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthOutside0X128!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + feeGrowthOutside1X128!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/TickHourData.ts b/packages/v3-watcher/src/entity/TickHourData.ts new file mode 100644 index 0000000..427c98b --- /dev/null +++ b/packages/v3-watcher/src/entity/TickHourData.ts @@ -0,0 +1,53 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class TickHourData { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('integer') + periodStartUnix!: number; + + @Column('varchar') + pool!: string; + + @Column('varchar') + tick!: string; + + @Column('numeric', { transformer: bigintTransformer }) + liquidityGross!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + liquidityNet!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeToken1!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + feesUSD!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Token.ts b/packages/v3-watcher/src/entity/Token.ts new file mode 100644 index 0000000..97db063 --- /dev/null +++ b/packages/v3-watcher/src/entity/Token.ts @@ -0,0 +1,71 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Token { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + symbol!: string; + + @Column('varchar') + name!: string; + + @Column('numeric', { transformer: bigintTransformer }) + decimals!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalSupply!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + volume!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + untrackedVolumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + feesUSD!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + txCount!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + poolCount!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLocked!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedUSDUntracked!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + derivedETH!: Decimal; + + @Column('varchar', { array: true }) + whitelistPools!: string[]; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/TokenDayData.ts b/packages/v3-watcher/src/entity/TokenDayData.ts new file mode 100644 index 0000000..a39398a --- /dev/null +++ b/packages/v3-watcher/src/entity/TokenDayData.ts @@ -0,0 +1,65 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class TokenDayData { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('integer') + date!: number; + + @Column('varchar') + token!: string; + + @Column('numeric', { transformer: decimalTransformer }) + volume!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + untrackedVolumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLocked!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + priceUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + feesUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + open!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + high!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + low!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + close!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/TokenHourData.ts b/packages/v3-watcher/src/entity/TokenHourData.ts new file mode 100644 index 0000000..d3fe63f --- /dev/null +++ b/packages/v3-watcher/src/entity/TokenHourData.ts @@ -0,0 +1,65 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class TokenHourData { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('integer') + periodStartUnix!: number; + + @Column('varchar') + token!: string; + + @Column('numeric', { transformer: decimalTransformer }) + volume!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + untrackedVolumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLocked!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + priceUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + feesUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + open!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + high!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + low!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + close!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/Transaction.ts b/packages/v3-watcher/src/entity/Transaction.ts new file mode 100644 index 0000000..fe9c164 --- /dev/null +++ b/packages/v3-watcher/src/entity/Transaction.ts @@ -0,0 +1,37 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class Transaction { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + _blockNumber!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + gasUsed!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + gasPrice!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/entity/UniswapDayData.ts b/packages/v3-watcher/src/entity/UniswapDayData.ts new file mode 100644 index 0000000..e088a4f --- /dev/null +++ b/packages/v3-watcher/src/entity/UniswapDayData.ts @@ -0,0 +1,47 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class UniswapDayData { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('integer') + date!: number; + + @Column('numeric', { transformer: decimalTransformer }) + volumeETH!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSD!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + volumeUSDUntracked!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + feesUSD!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + txCount!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + tvlUSD!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/packages/v3-watcher/src/fill.ts b/packages/v3-watcher/src/fill.ts new file mode 100644 index 0000000..210341e --- /dev/null +++ b/packages/v3-watcher/src/fill.ts @@ -0,0 +1,48 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { FillCmd } from '@cerc-io/cli'; +import { getContractEntitiesMap } from '@cerc-io/util'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from './database'; +import { Indexer } from './indexer'; + +const log = debug('vulcanize:fill'); + +export const main = async (): Promise => { + const fillCmd = new FillCmd(); + await fillCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + fillCmd.config.server, + fillCmd.clients.ethClient, + fillCmd.ethProvider, + fillCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await fillCmd.initIndexer(Indexer, graphWatcher); + + // Get contractEntitiesMap required for fill-state + // NOTE: Assuming each entity type is only mapped to a single contract + const contractEntitiesMap = getContractEntitiesMap(graphWatcher.dataSources); + + await fillCmd.exec(contractEntitiesMap); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(); +}); + +process.on('SIGINT', () => { + log(`Exiting process ${process.pid} with code 0`); + process.exit(0); +}); diff --git a/packages/v3-watcher/src/gql/index.ts b/packages/v3-watcher/src/gql/index.ts new file mode 100644 index 0000000..4732f68 --- /dev/null +++ b/packages/v3-watcher/src/gql/index.ts @@ -0,0 +1,3 @@ +export * as mutations from './mutations'; +export * as queries from './queries'; +export * as subscriptions from './subscriptions'; diff --git a/packages/v3-watcher/src/gql/mutations/index.ts b/packages/v3-watcher/src/gql/mutations/index.ts new file mode 100644 index 0000000..0c3bd85 --- /dev/null +++ b/packages/v3-watcher/src/gql/mutations/index.ts @@ -0,0 +1,4 @@ +import fs from 'fs'; +import path from 'path'; + +export const watchContract = fs.readFileSync(path.join(__dirname, 'watchContract.gql'), 'utf8'); diff --git a/packages/v3-watcher/src/gql/mutations/watchContract.gql b/packages/v3-watcher/src/gql/mutations/watchContract.gql new file mode 100644 index 0000000..2ecc74f --- /dev/null +++ b/packages/v3-watcher/src/gql/mutations/watchContract.gql @@ -0,0 +1,3 @@ +mutation watchContract($address: String!, $kind: String!, $checkpoint: Boolean!, $startingBlock: Int){ + watchContract(address: $address, kind: $kind, checkpoint: $checkpoint, startingBlock: $startingBlock) +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/_meta.gql b/packages/v3-watcher/src/gql/queries/_meta.gql new file mode 100644 index 0000000..d686e04 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/_meta.gql @@ -0,0 +1,11 @@ +query _meta($block: Block_height){ + _meta(block: $block){ + block{ + hash + number + timestamp + } + deployment + hasIndexingErrors + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/bundle.gql b/packages/v3-watcher/src/gql/queries/bundle.gql new file mode 100644 index 0000000..d0ac6c5 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/bundle.gql @@ -0,0 +1,6 @@ +query bundle($id: ID!, $block: Block_height){ + bundle(id: $id, block: $block){ + id + ethPriceUSD + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/bundles.gql b/packages/v3-watcher/src/gql/queries/bundles.gql new file mode 100644 index 0000000..8fc597d --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/bundles.gql @@ -0,0 +1,6 @@ +query bundles($block: Block_height, $where: Bundle_filter, $orderBy: Bundle_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + bundles(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + ethPriceUSD + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/burn.gql b/packages/v3-watcher/src/gql/queries/burn.gql new file mode 100644 index 0000000..a19a079 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/burn.gql @@ -0,0 +1,86 @@ +query burn($id: ID!, $block: Block_height){ + burn(id: $id, block: $block){ + id + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + timestamp + owner + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/burns.gql b/packages/v3-watcher/src/gql/queries/burns.gql new file mode 100644 index 0000000..6aac19a --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/burns.gql @@ -0,0 +1,86 @@ +query burns($block: Block_height, $where: Burn_filter, $orderBy: Burn_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + burns(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + timestamp + owner + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/collect.gql b/packages/v3-watcher/src/gql/queries/collect.gql new file mode 100644 index 0000000..c4a38e0 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/collect.gql @@ -0,0 +1,50 @@ +query collect($id: ID!, $block: Block_height){ + collect(id: $id, block: $block){ + id + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + timestamp + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + owner + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/collects.gql b/packages/v3-watcher/src/gql/queries/collects.gql new file mode 100644 index 0000000..cd2d362 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/collects.gql @@ -0,0 +1,50 @@ +query collects($block: Block_height, $where: Collect_filter, $orderBy: Collect_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + collects(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + timestamp + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + owner + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/decreaseEvent.gql b/packages/v3-watcher/src/gql/queries/decreaseEvent.gql new file mode 100644 index 0000000..d37a02f --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/decreaseEvent.gql @@ -0,0 +1,98 @@ +query decreaseEvent($id: ID!, $block: Block_height){ + decreaseEvent(id: $id, block: $block){ + id + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + tokenID + position{ + id + owner + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedToken0 + collectedToken1 + collectedFeesToken0 + collectedFeesToken1 + amountDepositedUSD + amountWithdrawnUSD + amountCollectedUSD + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + } + amount0 + amount1 + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + timeStamp + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/decreaseEvents.gql b/packages/v3-watcher/src/gql/queries/decreaseEvents.gql new file mode 100644 index 0000000..640d71e --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/decreaseEvents.gql @@ -0,0 +1,98 @@ +query decreaseEvents($block: Block_height, $where: DecreaseEvent_filter, $orderBy: DecreaseEvent_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + decreaseEvents(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + tokenID + position{ + id + owner + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedToken0 + collectedToken1 + collectedFeesToken0 + collectedFeesToken1 + amountDepositedUSD + amountWithdrawnUSD + amountCollectedUSD + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + } + amount0 + amount1 + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + timeStamp + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/events.gql b/packages/v3-watcher/src/gql/queries/events.gql new file mode 100644 index 0000000..bad0d46 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/events.gql @@ -0,0 +1,129 @@ +query events($blockHash: String!, $contractAddress: String!, $name: String){ + events(blockHash: $blockHash, contractAddress: $contractAddress, name: $name){ + block{ + cid + hash + number + timestamp + parentHash + } + tx{ + hash + index + from + to + } + contract + eventIndex + event{ + ... on FeeAmountEnabledEvent { + fee + tickSpacing + } + ... on OwnerChangedEvent { + oldOwner + newOwner + } + ... on PoolCreatedEvent { + token0 + token1 + fee + tickSpacing + pool + } + ... on ApprovalEvent { + owner + approved + tokenId + } + ... on ApprovalForAllEvent { + owner + operator + approved + } + ... on CollectEvent { + tokenId + recipient + amount0 + amount1 + owner + tickLower + tickUpper + } + ... on DecreaseLiquidityEvent { + tokenId + liquidity + amount0 + amount1 + } + ... on IncreaseLiquidityEvent { + tokenId + liquidity + amount0 + amount1 + } + ... on TransferEvent { + from + to + tokenId + } + ... on BurnEvent { + owner + tickLower + tickUpper + amount + amount0 + amount1 + } + ... on CollectProtocolEvent { + sender + recipient + amount0 + amount1 + } + ... on FlashEvent { + sender + recipient + amount0 + amount1 + paid0 + paid1 + } + ... on IncreaseObservationCardinalityNextEvent { + observationCardinalityNextOld + observationCardinalityNextNew + } + ... on InitializeEvent { + sqrtPriceX96 + tick + } + ... on MintEvent { + sender + owner + tickLower + tickUpper + amount + amount0 + amount1 + } + ... on SetFeeProtocolEvent { + feeProtocol0Old + feeProtocol1Old + feeProtocol0New + feeProtocol1New + } + ... on SwapEvent { + sender + recipient + amount0 + amount1 + sqrtPriceX96 + liquidity + tick + } + } + proof{ + data + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/eventsInRange.gql b/packages/v3-watcher/src/gql/queries/eventsInRange.gql new file mode 100644 index 0000000..5ddab05 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/eventsInRange.gql @@ -0,0 +1,129 @@ +query eventsInRange($fromBlockNumber: Int!, $toBlockNumber: Int!){ + eventsInRange(fromBlockNumber: $fromBlockNumber, toBlockNumber: $toBlockNumber){ + block{ + cid + hash + number + timestamp + parentHash + } + tx{ + hash + index + from + to + } + contract + eventIndex + event{ + ... on FeeAmountEnabledEvent { + fee + tickSpacing + } + ... on OwnerChangedEvent { + oldOwner + newOwner + } + ... on PoolCreatedEvent { + token0 + token1 + fee + tickSpacing + pool + } + ... on ApprovalEvent { + owner + approved + tokenId + } + ... on ApprovalForAllEvent { + owner + operator + approved + } + ... on CollectEvent { + tokenId + recipient + amount0 + amount1 + owner + tickLower + tickUpper + } + ... on DecreaseLiquidityEvent { + tokenId + liquidity + amount0 + amount1 + } + ... on IncreaseLiquidityEvent { + tokenId + liquidity + amount0 + amount1 + } + ... on TransferEvent { + from + to + tokenId + } + ... on BurnEvent { + owner + tickLower + tickUpper + amount + amount0 + amount1 + } + ... on CollectProtocolEvent { + sender + recipient + amount0 + amount1 + } + ... on FlashEvent { + sender + recipient + amount0 + amount1 + paid0 + paid1 + } + ... on IncreaseObservationCardinalityNextEvent { + observationCardinalityNextOld + observationCardinalityNextNew + } + ... on InitializeEvent { + sqrtPriceX96 + tick + } + ... on MintEvent { + sender + owner + tickLower + tickUpper + amount + amount0 + amount1 + } + ... on SetFeeProtocolEvent { + feeProtocol0Old + feeProtocol1Old + feeProtocol0New + feeProtocol1New + } + ... on SwapEvent { + sender + recipient + amount0 + amount1 + sqrtPriceX96 + liquidity + tick + } + } + proof{ + data + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/factories.gql b/packages/v3-watcher/src/gql/queries/factories.gql new file mode 100644 index 0000000..a3c00cb --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/factories.gql @@ -0,0 +1,17 @@ +query factories($block: Block_height, $where: Factory_filter, $orderBy: Factory_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + factories(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + poolCount + txCount + totalVolumeUSD + totalVolumeETH + totalFeesUSD + totalFeesETH + untrackedVolumeUSD + totalValueLockedUSD + totalValueLockedETH + totalValueLockedUSDUntracked + totalValueLockedETHUntracked + owner + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/factory.gql b/packages/v3-watcher/src/gql/queries/factory.gql new file mode 100644 index 0000000..a50af18 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/factory.gql @@ -0,0 +1,17 @@ +query factory($id: ID!, $block: Block_height){ + factory(id: $id, block: $block){ + id + poolCount + txCount + totalVolumeUSD + totalVolumeETH + totalFeesUSD + totalFeesETH + untrackedVolumeUSD + totalValueLockedUSD + totalValueLockedETH + totalValueLockedUSDUntracked + totalValueLockedETHUntracked + owner + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/flash.gql b/packages/v3-watcher/src/gql/queries/flash.gql new file mode 100644 index 0000000..a1bb57d --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/flash.gql @@ -0,0 +1,51 @@ +query flash($id: ID!, $block: Block_height){ + flash(id: $id, block: $block){ + id + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + timestamp + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + sender + recipient + amount0 + amount1 + amountUSD + amount0Paid + amount1Paid + logIndex + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/flashes.gql b/packages/v3-watcher/src/gql/queries/flashes.gql new file mode 100644 index 0000000..3d3b494 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/flashes.gql @@ -0,0 +1,51 @@ +query flashes($block: Block_height, $where: Flash_filter, $orderBy: Flash_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + flashes(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + timestamp + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + sender + recipient + amount0 + amount1 + amountUSD + amount0Paid + amount1Paid + logIndex + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/getState.gql b/packages/v3-watcher/src/gql/queries/getState.gql new file mode 100644 index 0000000..3b8f605 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/getState.gql @@ -0,0 +1,15 @@ +query getState($blockHash: String!, $contractAddress: String!, $kind: String){ + getState(blockHash: $blockHash, contractAddress: $contractAddress, kind: $kind){ + block{ + cid + hash + number + timestamp + parentHash + } + contractAddress + cid + kind + data + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/getStateByCID.gql b/packages/v3-watcher/src/gql/queries/getStateByCID.gql new file mode 100644 index 0000000..6c3c4fd --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/getStateByCID.gql @@ -0,0 +1,15 @@ +query getStateByCID($cid: String!){ + getStateByCID(cid: $cid){ + block{ + cid + hash + number + timestamp + parentHash + } + contractAddress + cid + kind + data + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/getSyncStatus.gql b/packages/v3-watcher/src/gql/queries/getSyncStatus.gql new file mode 100644 index 0000000..48175b4 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/getSyncStatus.gql @@ -0,0 +1,12 @@ +query getSyncStatus{ + getSyncStatus{ + latestIndexedBlockHash + latestIndexedBlockNumber + latestCanonicalBlockHash + latestCanonicalBlockNumber + initialIndexedBlockHash + initialIndexedBlockNumber + latestProcessedBlockHash + latestProcessedBlockNumber + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/increaseEvent.gql b/packages/v3-watcher/src/gql/queries/increaseEvent.gql new file mode 100644 index 0000000..fd1d1c7 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/increaseEvent.gql @@ -0,0 +1,98 @@ +query increaseEvent($id: ID!, $block: Block_height){ + increaseEvent(id: $id, block: $block){ + id + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + tokenID + position{ + id + owner + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedToken0 + collectedToken1 + collectedFeesToken0 + collectedFeesToken1 + amountDepositedUSD + amountWithdrawnUSD + amountCollectedUSD + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + } + amount0 + amount1 + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + timeStamp + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/increaseEvents.gql b/packages/v3-watcher/src/gql/queries/increaseEvents.gql new file mode 100644 index 0000000..71858f0 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/increaseEvents.gql @@ -0,0 +1,98 @@ +query increaseEvents($block: Block_height, $where: IncreaseEvent_filter, $orderBy: IncreaseEvent_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + increaseEvents(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + tokenID + position{ + id + owner + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedToken0 + collectedToken1 + collectedFeesToken0 + collectedFeesToken1 + amountDepositedUSD + amountWithdrawnUSD + amountCollectedUSD + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + } + amount0 + amount1 + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + timeStamp + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/index.ts b/packages/v3-watcher/src/gql/queries/index.ts new file mode 100644 index 0000000..54d079b --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/index.ts @@ -0,0 +1,55 @@ +import fs from 'fs'; +import path from 'path'; + +export const events = fs.readFileSync(path.join(__dirname, 'events.gql'), 'utf8'); +export const eventsInRange = fs.readFileSync(path.join(__dirname, 'eventsInRange.gql'), 'utf8'); +export const factory = fs.readFileSync(path.join(__dirname, 'factory.gql'), 'utf8'); +export const factories = fs.readFileSync(path.join(__dirname, 'factories.gql'), 'utf8'); +export const bundle = fs.readFileSync(path.join(__dirname, 'bundle.gql'), 'utf8'); +export const bundles = fs.readFileSync(path.join(__dirname, 'bundles.gql'), 'utf8'); +export const token = fs.readFileSync(path.join(__dirname, 'token.gql'), 'utf8'); +export const tokens = fs.readFileSync(path.join(__dirname, 'tokens.gql'), 'utf8'); +export const pool = fs.readFileSync(path.join(__dirname, 'pool.gql'), 'utf8'); +export const pools = fs.readFileSync(path.join(__dirname, 'pools.gql'), 'utf8'); +export const tick = fs.readFileSync(path.join(__dirname, 'tick.gql'), 'utf8'); +export const ticks = fs.readFileSync(path.join(__dirname, 'ticks.gql'), 'utf8'); +export const position = fs.readFileSync(path.join(__dirname, 'position.gql'), 'utf8'); +export const positions = fs.readFileSync(path.join(__dirname, 'positions.gql'), 'utf8'); +export const positionSnapshot = fs.readFileSync(path.join(__dirname, 'positionSnapshot.gql'), 'utf8'); +export const positionSnapshots = fs.readFileSync(path.join(__dirname, 'positionSnapshots.gql'), 'utf8'); +export const transaction = fs.readFileSync(path.join(__dirname, 'transaction.gql'), 'utf8'); +export const transactions = fs.readFileSync(path.join(__dirname, 'transactions.gql'), 'utf8'); +export const mint = fs.readFileSync(path.join(__dirname, 'mint.gql'), 'utf8'); +export const mints = fs.readFileSync(path.join(__dirname, 'mints.gql'), 'utf8'); +export const burn = fs.readFileSync(path.join(__dirname, 'burn.gql'), 'utf8'); +export const burns = fs.readFileSync(path.join(__dirname, 'burns.gql'), 'utf8'); +export const swap = fs.readFileSync(path.join(__dirname, 'swap.gql'), 'utf8'); +export const swaps = fs.readFileSync(path.join(__dirname, 'swaps.gql'), 'utf8'); +export const collect = fs.readFileSync(path.join(__dirname, 'collect.gql'), 'utf8'); +export const collects = fs.readFileSync(path.join(__dirname, 'collects.gql'), 'utf8'); +export const flash = fs.readFileSync(path.join(__dirname, 'flash.gql'), 'utf8'); +export const flashes = fs.readFileSync(path.join(__dirname, 'flashes.gql'), 'utf8'); +export const uniswapDayData = fs.readFileSync(path.join(__dirname, 'uniswapDayData.gql'), 'utf8'); +export const uniswapDayDatas = fs.readFileSync(path.join(__dirname, 'uniswapDayDatas.gql'), 'utf8'); +export const poolDayData = fs.readFileSync(path.join(__dirname, 'poolDayData.gql'), 'utf8'); +export const poolDayDatas = fs.readFileSync(path.join(__dirname, 'poolDayDatas.gql'), 'utf8'); +export const poolHourData = fs.readFileSync(path.join(__dirname, 'poolHourData.gql'), 'utf8'); +export const poolHourDatas = fs.readFileSync(path.join(__dirname, 'poolHourDatas.gql'), 'utf8'); +export const tickHourData = fs.readFileSync(path.join(__dirname, 'tickHourData.gql'), 'utf8'); +export const tickHourDatas = fs.readFileSync(path.join(__dirname, 'tickHourDatas.gql'), 'utf8'); +export const tickDayData = fs.readFileSync(path.join(__dirname, 'tickDayData.gql'), 'utf8'); +export const tickDayDatas = fs.readFileSync(path.join(__dirname, 'tickDayDatas.gql'), 'utf8'); +export const tokenDayData = fs.readFileSync(path.join(__dirname, 'tokenDayData.gql'), 'utf8'); +export const tokenDayDatas = fs.readFileSync(path.join(__dirname, 'tokenDayDatas.gql'), 'utf8'); +export const tokenHourData = fs.readFileSync(path.join(__dirname, 'tokenHourData.gql'), 'utf8'); +export const tokenHourDatas = fs.readFileSync(path.join(__dirname, 'tokenHourDatas.gql'), 'utf8'); +export const increaseEvent = fs.readFileSync(path.join(__dirname, 'increaseEvent.gql'), 'utf8'); +export const increaseEvents = fs.readFileSync(path.join(__dirname, 'increaseEvents.gql'), 'utf8'); +export const decreaseEvent = fs.readFileSync(path.join(__dirname, 'decreaseEvent.gql'), 'utf8'); +export const decreaseEvents = fs.readFileSync(path.join(__dirname, 'decreaseEvents.gql'), 'utf8'); +export const setProtocolFeeEvent = fs.readFileSync(path.join(__dirname, 'setProtocolFeeEvent.gql'), 'utf8'); +export const setProtocolFeeEvents = fs.readFileSync(path.join(__dirname, 'setProtocolFeeEvents.gql'), 'utf8'); +export const _meta = fs.readFileSync(path.join(__dirname, '_meta.gql'), 'utf8'); +export const getStateByCID = fs.readFileSync(path.join(__dirname, 'getStateByCID.gql'), 'utf8'); +export const getState = fs.readFileSync(path.join(__dirname, 'getState.gql'), 'utf8'); +export const getSyncStatus = fs.readFileSync(path.join(__dirname, 'getSyncStatus.gql'), 'utf8'); diff --git a/packages/v3-watcher/src/gql/queries/mint.gql b/packages/v3-watcher/src/gql/queries/mint.gql new file mode 100644 index 0000000..cb32aea --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/mint.gql @@ -0,0 +1,87 @@ +query mint($id: ID!, $block: Block_height){ + mint(id: $id, block: $block){ + id + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + timestamp + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + owner + sender + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/mints.gql b/packages/v3-watcher/src/gql/queries/mints.gql new file mode 100644 index 0000000..430dbd1 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/mints.gql @@ -0,0 +1,87 @@ +query mints($block: Block_height, $where: Mint_filter, $orderBy: Mint_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + mints(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + timestamp + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + owner + sender + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/pool.gql b/packages/v3-watcher/src/gql/queries/pool.gql new file mode 100644 index 0000000..b4e5020 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/pool.gql @@ -0,0 +1,181 @@ +query pool($id: ID!, $block: Block_height){ + pool(id: $id, block: $block){ + id + createdAtTimestamp + createdAtBlockNumber + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + poolHourData{ + id + periodStartUnix + liquidity + sqrtPrice + token0Price + token1Price + tick + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + tvlUSD + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + txCount + open + high + low + close + } + poolDayData{ + id + date + liquidity + sqrtPrice + token0Price + token1Price + tick + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + tvlUSD + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + txCount + open + high + low + close + } + mints{ + id + timestamp + owner + sender + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + burns{ + id + timestamp + owner + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + swaps{ + id + timestamp + sender + recipient + origin + amount0 + amount1 + amountUSD + sqrtPriceX96 + tick + logIndex + } + collects{ + id + timestamp + owner + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + ticks{ + id + poolAddress + tickIdx + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/poolDayData.gql b/packages/v3-watcher/src/gql/queries/poolDayData.gql new file mode 100644 index 0000000..f0dcecc --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/poolDayData.gql @@ -0,0 +1,53 @@ +query poolDayData($id: ID!, $block: Block_height){ + poolDayData(id: $id, block: $block){ + id + date + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + liquidity + sqrtPrice + token0Price + token1Price + tick + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + tvlUSD + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + txCount + open + high + low + close + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/poolDayDatas.gql b/packages/v3-watcher/src/gql/queries/poolDayDatas.gql new file mode 100644 index 0000000..5a73bc6 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/poolDayDatas.gql @@ -0,0 +1,53 @@ +query poolDayDatas($block: Block_height, $where: PoolDayData_filter, $orderBy: PoolDayData_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + poolDayDatas(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + date + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + liquidity + sqrtPrice + token0Price + token1Price + tick + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + tvlUSD + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + txCount + open + high + low + close + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/poolHourData.gql b/packages/v3-watcher/src/gql/queries/poolHourData.gql new file mode 100644 index 0000000..d024398 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/poolHourData.gql @@ -0,0 +1,53 @@ +query poolHourData($id: ID!, $block: Block_height){ + poolHourData(id: $id, block: $block){ + id + periodStartUnix + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + liquidity + sqrtPrice + token0Price + token1Price + tick + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + tvlUSD + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + txCount + open + high + low + close + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/poolHourDatas.gql b/packages/v3-watcher/src/gql/queries/poolHourDatas.gql new file mode 100644 index 0000000..753b97a --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/poolHourDatas.gql @@ -0,0 +1,53 @@ +query poolHourDatas($block: Block_height, $where: PoolHourData_filter, $orderBy: PoolHourData_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + poolHourDatas(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + periodStartUnix + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + liquidity + sqrtPrice + token0Price + token1Price + tick + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + tvlUSD + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + txCount + open + high + low + close + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/pools.gql b/packages/v3-watcher/src/gql/queries/pools.gql new file mode 100644 index 0000000..2b14f4c --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/pools.gql @@ -0,0 +1,181 @@ +query pools($block: Block_height, $where: Pool_filter, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + pools(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + createdAtTimestamp + createdAtBlockNumber + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + poolHourData{ + id + periodStartUnix + liquidity + sqrtPrice + token0Price + token1Price + tick + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + tvlUSD + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + txCount + open + high + low + close + } + poolDayData{ + id + date + liquidity + sqrtPrice + token0Price + token1Price + tick + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + tvlUSD + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + txCount + open + high + low + close + } + mints{ + id + timestamp + owner + sender + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + burns{ + id + timestamp + owner + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + swaps{ + id + timestamp + sender + recipient + origin + amount0 + amount1 + amountUSD + sqrtPriceX96 + tick + logIndex + } + collects{ + id + timestamp + owner + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + ticks{ + id + poolAddress + tickIdx + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/position.gql b/packages/v3-watcher/src/gql/queries/position.gql new file mode 100644 index 0000000..004e058 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/position.gql @@ -0,0 +1,149 @@ +query position($id: ID!, $block: Block_height){ + position(id: $id, block: $block){ + id + owner + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + tickLower{ + id + poolAddress + tickIdx + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } + tickUpper{ + id + poolAddress + tickIdx + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedToken0 + collectedToken1 + collectedFeesToken0 + collectedFeesToken1 + amountDepositedUSD + amountWithdrawnUSD + amountCollectedUSD + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + increaseEvents{ + id + tokenID + amount0 + amount1 + timeStamp + } + decreaseEvents{ + id + tokenID + amount0 + amount1 + timeStamp + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/positionSnapshot.gql b/packages/v3-watcher/src/gql/queries/positionSnapshot.gql new file mode 100644 index 0000000..41fa2fe --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/positionSnapshot.gql @@ -0,0 +1,72 @@ +query positionSnapshot($id: ID!, $block: Block_height){ + positionSnapshot(id: $id, block: $block){ + id + owner + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + position{ + id + owner + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedToken0 + collectedToken1 + collectedFeesToken0 + collectedFeesToken1 + amountDepositedUSD + amountWithdrawnUSD + amountCollectedUSD + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + } + blockNumber + timestamp + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedFeesToken0 + collectedFeesToken1 + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/positionSnapshots.gql b/packages/v3-watcher/src/gql/queries/positionSnapshots.gql new file mode 100644 index 0000000..1337e48 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/positionSnapshots.gql @@ -0,0 +1,72 @@ +query positionSnapshots($block: Block_height, $where: PositionSnapshot_filter, $orderBy: PositionSnapshot_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + positionSnapshots(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + owner + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + position{ + id + owner + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedToken0 + collectedToken1 + collectedFeesToken0 + collectedFeesToken1 + amountDepositedUSD + amountWithdrawnUSD + amountCollectedUSD + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + } + blockNumber + timestamp + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedFeesToken0 + collectedFeesToken1 + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/positions.gql b/packages/v3-watcher/src/gql/queries/positions.gql new file mode 100644 index 0000000..4091d54 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/positions.gql @@ -0,0 +1,149 @@ +query positions($block: Block_height, $where: Position_filter, $orderBy: Position_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + positions(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + owner + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + tickLower{ + id + poolAddress + tickIdx + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } + tickUpper{ + id + poolAddress + tickIdx + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedToken0 + collectedToken1 + collectedFeesToken0 + collectedFeesToken1 + amountDepositedUSD + amountWithdrawnUSD + amountCollectedUSD + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + increaseEvents{ + id + tokenID + amount0 + amount1 + timeStamp + } + decreaseEvents{ + id + tokenID + amount0 + amount1 + timeStamp + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/setProtocolFeeEvent.gql b/packages/v3-watcher/src/gql/queries/setProtocolFeeEvent.gql new file mode 100644 index 0000000..259706e --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/setProtocolFeeEvent.gql @@ -0,0 +1,41 @@ +query setProtocolFeeEvent($id: ID!, $block: Block_height){ + setProtocolFeeEvent(id: $id, block: $block){ + id + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + logIndex + new0 + new1 + old0 + old1 + timestamp + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/setProtocolFeeEvents.gql b/packages/v3-watcher/src/gql/queries/setProtocolFeeEvents.gql new file mode 100644 index 0000000..7d25a07 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/setProtocolFeeEvents.gql @@ -0,0 +1,41 @@ +query setProtocolFeeEvents($block: Block_height, $where: SetProtocolFeeEvent_filter, $orderBy: SetProtocolFeeEvent_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + setProtocolFeeEvents(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + logIndex + new0 + new1 + old0 + old1 + timestamp + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/swap.gql b/packages/v3-watcher/src/gql/queries/swap.gql new file mode 100644 index 0000000..d508c73 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/swap.gql @@ -0,0 +1,86 @@ +query swap($id: ID!, $block: Block_height){ + swap(id: $id, block: $block){ + id + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + timestamp + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + sender + recipient + origin + amount0 + amount1 + amountUSD + sqrtPriceX96 + tick + logIndex + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/swaps.gql b/packages/v3-watcher/src/gql/queries/swaps.gql new file mode 100644 index 0000000..883156d --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/swaps.gql @@ -0,0 +1,86 @@ +query swaps($block: Block_height, $where: Swap_filter, $orderBy: Swap_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + swaps(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + transaction{ + id + blockNumber + timestamp + gasUsed + gasPrice + } + timestamp + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + token0{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + token1{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + sender + recipient + origin + amount0 + amount1 + amountUSD + sqrtPriceX96 + tick + logIndex + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/tick.gql b/packages/v3-watcher/src/gql/queries/tick.gql new file mode 100644 index 0000000..2264ca1 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/tick.gql @@ -0,0 +1,54 @@ +query tick($id: ID!, $block: Block_height){ + tick(id: $id, block: $block){ + id + poolAddress + tickIdx + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/tickDayData.gql b/packages/v3-watcher/src/gql/queries/tickDayData.gql new file mode 100644 index 0000000..cf6d5b6 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/tickDayData.gql @@ -0,0 +1,66 @@ +query tickDayData($id: ID!, $block: Block_height){ + tickDayData(id: $id, block: $block){ + id + date + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + tick{ + id + poolAddress + tickIdx + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } + liquidityGross + liquidityNet + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/tickDayDatas.gql b/packages/v3-watcher/src/gql/queries/tickDayDatas.gql new file mode 100644 index 0000000..686bfd7 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/tickDayDatas.gql @@ -0,0 +1,66 @@ +query tickDayDatas($block: Block_height, $where: TickDayData_filter, $orderBy: TickDayData_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + tickDayDatas(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + date + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + tick{ + id + poolAddress + tickIdx + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } + liquidityGross + liquidityNet + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/tickHourData.gql b/packages/v3-watcher/src/gql/queries/tickHourData.gql new file mode 100644 index 0000000..540fe9c --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/tickHourData.gql @@ -0,0 +1,64 @@ +query tickHourData($id: ID!, $block: Block_height){ + tickHourData(id: $id, block: $block){ + id + periodStartUnix + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + tick{ + id + poolAddress + tickIdx + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } + liquidityGross + liquidityNet + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/tickHourDatas.gql b/packages/v3-watcher/src/gql/queries/tickHourDatas.gql new file mode 100644 index 0000000..23be822 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/tickHourDatas.gql @@ -0,0 +1,64 @@ +query tickHourDatas($block: Block_height, $where: TickHourData_filter, $orderBy: TickHourData_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + tickHourDatas(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + periodStartUnix + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + tick{ + id + poolAddress + tickIdx + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } + liquidityGross + liquidityNet + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/ticks.gql b/packages/v3-watcher/src/gql/queries/ticks.gql new file mode 100644 index 0000000..91d8e5d --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/ticks.gql @@ -0,0 +1,54 @@ +query ticks($block: Block_height, $where: Tick_filter, $orderBy: Tick_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + ticks(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + poolAddress + tickIdx + pool{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/token.gql b/packages/v3-watcher/src/gql/queries/token.gql new file mode 100644 index 0000000..7a4706c --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/token.gql @@ -0,0 +1,64 @@ +query token($id: ID!, $block: Block_height){ + token(id: $id, block: $block){ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + whitelistPools{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + tokenDayData{ + id + date + volume + volumeUSD + untrackedVolumeUSD + totalValueLocked + totalValueLockedUSD + priceUSD + feesUSD + open + high + low + close + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/tokenDayData.gql b/packages/v3-watcher/src/gql/queries/tokenDayData.gql new file mode 100644 index 0000000..d6fb3ea --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/tokenDayData.gql @@ -0,0 +1,34 @@ +query tokenDayData($id: ID!, $block: Block_height){ + tokenDayData(id: $id, block: $block){ + id + date + token{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + volume + volumeUSD + untrackedVolumeUSD + totalValueLocked + totalValueLockedUSD + priceUSD + feesUSD + open + high + low + close + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/tokenDayDatas.gql b/packages/v3-watcher/src/gql/queries/tokenDayDatas.gql new file mode 100644 index 0000000..ddb8194 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/tokenDayDatas.gql @@ -0,0 +1,34 @@ +query tokenDayDatas($block: Block_height, $where: TokenDayData_filter, $orderBy: TokenDayData_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + tokenDayDatas(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + date + token{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + volume + volumeUSD + untrackedVolumeUSD + totalValueLocked + totalValueLockedUSD + priceUSD + feesUSD + open + high + low + close + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/tokenHourData.gql b/packages/v3-watcher/src/gql/queries/tokenHourData.gql new file mode 100644 index 0000000..ce527f8 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/tokenHourData.gql @@ -0,0 +1,34 @@ +query tokenHourData($id: ID!, $block: Block_height){ + tokenHourData(id: $id, block: $block){ + id + periodStartUnix + token{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + volume + volumeUSD + untrackedVolumeUSD + totalValueLocked + totalValueLockedUSD + priceUSD + feesUSD + open + high + low + close + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/tokenHourDatas.gql b/packages/v3-watcher/src/gql/queries/tokenHourDatas.gql new file mode 100644 index 0000000..59e8458 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/tokenHourDatas.gql @@ -0,0 +1,34 @@ +query tokenHourDatas($block: Block_height, $where: TokenHourData_filter, $orderBy: TokenHourData_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + tokenHourDatas(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + periodStartUnix + token{ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + } + volume + volumeUSD + untrackedVolumeUSD + totalValueLocked + totalValueLockedUSD + priceUSD + feesUSD + open + high + low + close + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/tokens.gql b/packages/v3-watcher/src/gql/queries/tokens.gql new file mode 100644 index 0000000..5c42ee8 --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/tokens.gql @@ -0,0 +1,64 @@ +query tokens($block: Block_height, $where: Token_filter, $orderBy: Token_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + tokens(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + whitelistPools{ + id + createdAtTimestamp + createdAtBlockNumber + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + } + tokenDayData{ + id + date + volume + volumeUSD + untrackedVolumeUSD + totalValueLocked + totalValueLockedUSD + priceUSD + feesUSD + open + high + low + close + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/transaction.gql b/packages/v3-watcher/src/gql/queries/transaction.gql new file mode 100644 index 0000000..7e9ac5b --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/transaction.gql @@ -0,0 +1,72 @@ +query transaction($id: ID!, $block: Block_height){ + transaction(id: $id, block: $block){ + id + blockNumber + timestamp + gasUsed + gasPrice + mints{ + id + timestamp + owner + sender + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + burns{ + id + timestamp + owner + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + swaps{ + id + timestamp + sender + recipient + origin + amount0 + amount1 + amountUSD + sqrtPriceX96 + tick + logIndex + } + flashed{ + id + timestamp + sender + recipient + amount0 + amount1 + amountUSD + amount0Paid + amount1Paid + logIndex + } + collects{ + id + timestamp + owner + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/transactions.gql b/packages/v3-watcher/src/gql/queries/transactions.gql new file mode 100644 index 0000000..b25b8fc --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/transactions.gql @@ -0,0 +1,72 @@ +query transactions($block: Block_height, $where: Transaction_filter, $orderBy: Transaction_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + transactions(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + blockNumber + timestamp + gasUsed + gasPrice + mints{ + id + timestamp + owner + sender + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + burns{ + id + timestamp + owner + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + swaps{ + id + timestamp + sender + recipient + origin + amount0 + amount1 + amountUSD + sqrtPriceX96 + tick + logIndex + } + flashed{ + id + timestamp + sender + recipient + amount0 + amount1 + amountUSD + amount0Paid + amount1Paid + logIndex + } + collects{ + id + timestamp + owner + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/uniswapDayData.gql b/packages/v3-watcher/src/gql/queries/uniswapDayData.gql new file mode 100644 index 0000000..dda072d --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/uniswapDayData.gql @@ -0,0 +1,12 @@ +query uniswapDayData($id: ID!, $block: Block_height){ + uniswapDayData(id: $id, block: $block){ + id + date + volumeETH + volumeUSD + volumeUSDUntracked + feesUSD + txCount + tvlUSD + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/queries/uniswapDayDatas.gql b/packages/v3-watcher/src/gql/queries/uniswapDayDatas.gql new file mode 100644 index 0000000..9e73dcb --- /dev/null +++ b/packages/v3-watcher/src/gql/queries/uniswapDayDatas.gql @@ -0,0 +1,12 @@ +query uniswapDayDatas($block: Block_height, $where: UniswapDayData_filter, $orderBy: UniswapDayData_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + uniswapDayDatas(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + date + volumeETH + volumeUSD + volumeUSDUntracked + feesUSD + txCount + tvlUSD + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/gql/subscriptions/index.ts b/packages/v3-watcher/src/gql/subscriptions/index.ts new file mode 100644 index 0000000..f12910c --- /dev/null +++ b/packages/v3-watcher/src/gql/subscriptions/index.ts @@ -0,0 +1,4 @@ +import fs from 'fs'; +import path from 'path'; + +export const onEvent = fs.readFileSync(path.join(__dirname, 'onEvent.gql'), 'utf8'); diff --git a/packages/v3-watcher/src/gql/subscriptions/onEvent.gql b/packages/v3-watcher/src/gql/subscriptions/onEvent.gql new file mode 100644 index 0000000..fc45f9d --- /dev/null +++ b/packages/v3-watcher/src/gql/subscriptions/onEvent.gql @@ -0,0 +1,129 @@ +subscription onEvent{ + onEvent{ + block{ + cid + hash + number + timestamp + parentHash + } + tx{ + hash + index + from + to + } + contract + eventIndex + event{ + ... on FeeAmountEnabledEvent { + fee + tickSpacing + } + ... on OwnerChangedEvent { + oldOwner + newOwner + } + ... on PoolCreatedEvent { + token0 + token1 + fee + tickSpacing + pool + } + ... on ApprovalEvent { + owner + approved + tokenId + } + ... on ApprovalForAllEvent { + owner + operator + approved + } + ... on CollectEvent { + tokenId + recipient + amount0 + amount1 + owner + tickLower + tickUpper + } + ... on DecreaseLiquidityEvent { + tokenId + liquidity + amount0 + amount1 + } + ... on IncreaseLiquidityEvent { + tokenId + liquidity + amount0 + amount1 + } + ... on TransferEvent { + from + to + tokenId + } + ... on BurnEvent { + owner + tickLower + tickUpper + amount + amount0 + amount1 + } + ... on CollectProtocolEvent { + sender + recipient + amount0 + amount1 + } + ... on FlashEvent { + sender + recipient + amount0 + amount1 + paid0 + paid1 + } + ... on IncreaseObservationCardinalityNextEvent { + observationCardinalityNextOld + observationCardinalityNextNew + } + ... on InitializeEvent { + sqrtPriceX96 + tick + } + ... on MintEvent { + sender + owner + tickLower + tickUpper + amount + amount0 + amount1 + } + ... on SetFeeProtocolEvent { + feeProtocol0Old + feeProtocol1Old + feeProtocol0New + feeProtocol1New + } + ... on SwapEvent { + sender + recipient + amount0 + amount1 + sqrtPriceX96 + liquidity + tick + } + } + proof{ + data + } + } +} \ No newline at end of file diff --git a/packages/v3-watcher/src/hooks.ts b/packages/v3-watcher/src/hooks.ts new file mode 100644 index 0000000..d45498b --- /dev/null +++ b/packages/v3-watcher/src/hooks.ts @@ -0,0 +1,86 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import assert from 'assert'; + +import { + ResultEvent, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + updateStateForMappingType, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + updateStateForElementaryType +} from '@cerc-io/util'; + +import { Indexer } from './indexer'; + +/** + * Hook function to store an initial state. + * @param indexer Indexer instance. + * @param blockHash Hash of the concerned block. + * @param contractAddress Address of the concerned contract. + * @returns Data block to be stored. + */ +export async function createInitialState (indexer: Indexer, contractAddress: string, blockHash: string): Promise { + assert(indexer); + assert(blockHash); + assert(contractAddress); + + // Store an empty State. + const stateData: any = { + state: {} + }; + + // Use updateStateForElementaryType to update initial state with an elementary property. + // Eg. const stateData = updateStateForElementaryType(stateData, '_totalBalance', result.value.toString()); + + // Use updateStateForMappingType to update initial state with a nested property. + // Eg. const stateData = updateStateForMappingType(stateData, '_allowances', [owner, spender], allowance.value.toString()); + + // Return initial state data to be saved. + return stateData; +} + +/** + * Hook function to create state diff. + * @param indexer Indexer instance that contains methods to fetch the contract variable values. + * @param blockHash Block hash of the concerned block. + */ +export async function createStateDiff (indexer: Indexer, blockHash: string): Promise { + assert(indexer); + assert(blockHash); + + // Use indexer.createDiff() method to save custom state diff(s). +} + +/** + * Hook function to create state checkpoint + * @param indexer Indexer instance. + * @param contractAddress Address of the concerned contract. + * @param blockHash Block hash of the concerned block. + * @returns Whether to disable default checkpoint. If false, the state from this hook is updated with that from default checkpoint. + */ +export async function createStateCheckpoint (indexer: Indexer, contractAddress: string, blockHash: string): Promise { + assert(indexer); + assert(blockHash); + assert(contractAddress); + + // Use indexer.createStateCheckpoint() method to create a custom checkpoint. + + // Return false to update the state created by this hook by auto-generated checkpoint state. + // Return true to disable update of the state created by this hook by auto-generated checkpoint state. + return false; +} + +/** + * Event hook function. + * @param indexer Indexer instance that contains methods to fetch and update the contract values in the database. + * @param eventData ResultEvent object containing event information. + */ +export async function handleEvent (indexer: Indexer, eventData: ResultEvent): Promise { + assert(indexer); + assert(eventData); + + // Use indexer methods to index data. + // Pass `diff` parameter to indexer methods as true to save an auto-generated state from the indexed data. +} diff --git a/packages/v3-watcher/src/indexer.ts b/packages/v3-watcher/src/indexer.ts new file mode 100644 index 0000000..ad49cd2 --- /dev/null +++ b/packages/v3-watcher/src/indexer.ts @@ -0,0 +1,1456 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import assert from 'assert'; +import { DeepPartial, FindConditions, FindManyOptions, ObjectLiteral } from 'typeorm'; +import debug from 'debug'; +import { ethers, constants } from 'ethers'; +import { GraphQLResolveInfo } from 'graphql'; + +import { JsonFragment } from '@ethersproject/abi'; +import { BaseProvider } from '@ethersproject/providers'; +import { MappingKey, StorageLayout } from '@cerc-io/solidity-mapper'; +import { + Indexer as BaseIndexer, + IndexerInterface, + ValueResult, + ServerConfig, + JobQueue, + Where, + QueryOptions, + BlockHeight, + ResultMeta, + updateSubgraphState, + dumpSubgraphState, + GraphWatcherInterface, + StateKind, + StateStatus, + ResultEvent, + getResultEvent, + DatabaseInterface, + Clients, + EthClient, + UpstreamConfig, + EthFullBlock, + EthFullTransaction, + ExtraEventData +} from '@cerc-io/util'; +import { GraphWatcher } from '@cerc-io/graph-node'; + +import FactoryArtifacts from './artifacts/Factory.json'; +import NonfungiblePositionManagerArtifacts from './artifacts/NonfungiblePositionManager.json'; +import PoolArtifacts from './artifacts/Pool.json'; +import { Database, ENTITIES, SUBGRAPH_ENTITIES } from './database'; +import { createInitialState, handleEvent, createStateDiff, createStateCheckpoint } from './hooks'; +import { Contract } from './entity/Contract'; +import { Event } from './entity/Event'; +import { SyncStatus } from './entity/SyncStatus'; +import { StateSyncStatus } from './entity/StateSyncStatus'; +import { BlockProgress } from './entity/BlockProgress'; +import { State } from './entity/State'; +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { Factory } from './entity/Factory'; +import { Bundle } from './entity/Bundle'; +import { Token } from './entity/Token'; +import { Pool } from './entity/Pool'; +import { Tick } from './entity/Tick'; +import { Position } from './entity/Position'; +import { PositionSnapshot } from './entity/PositionSnapshot'; +import { Transaction } from './entity/Transaction'; +import { Mint } from './entity/Mint'; +import { Burn } from './entity/Burn'; +import { Swap } from './entity/Swap'; +import { Collect } from './entity/Collect'; +import { Flash } from './entity/Flash'; +import { UniswapDayData } from './entity/UniswapDayData'; +import { PoolDayData } from './entity/PoolDayData'; +import { PoolHourData } from './entity/PoolHourData'; +import { TickHourData } from './entity/TickHourData'; +import { TickDayData } from './entity/TickDayData'; +import { TokenDayData } from './entity/TokenDayData'; +import { TokenHourData } from './entity/TokenHourData'; +import { IncreaseEvent } from './entity/IncreaseEvent'; +import { DecreaseEvent } from './entity/DecreaseEvent'; +import { SetProtocolFeeEvent } from './entity/SetProtocolFeeEvent'; +/* eslint-enable @typescript-eslint/no-unused-vars */ + +import { FrothyEntity } from './entity/FrothyEntity'; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const log = debug('vulcanize:indexer'); + +const KIND_FACTORY = 'Factory'; + +const KIND_NONFUNGIBLEPOSITIONMANAGER = 'NonfungiblePositionManager'; + +const KIND_POOL = 'Pool'; + +export class Indexer implements IndexerInterface { + _db: Database; + _ethClient: EthClient; + _ethProvider: BaseProvider; + _baseIndexer: BaseIndexer; + _serverConfig: ServerConfig; + _upstreamConfig: UpstreamConfig; + _graphWatcher: GraphWatcher; + + _abiMap: Map; + _storageLayoutMap: Map; + _contractMap: Map; + eventSignaturesMap: Map; + + _entityTypesMap: Map; + _relationsMap: Map; + + _subgraphStateMap: Map; + + constructor ( + config: { + server: ServerConfig; + upstream: UpstreamConfig; + }, + db: DatabaseInterface, + clients: Clients, + ethProvider: BaseProvider, + jobQueue: JobQueue, + graphWatcher?: GraphWatcherInterface + ) { + assert(db); + assert(clients.ethClient); + + this._db = db as Database; + this._ethClient = clients.ethClient; + this._ethProvider = ethProvider; + this._serverConfig = config.server; + this._upstreamConfig = config.upstream; + this._baseIndexer = new BaseIndexer(config, this._db, this._ethClient, this._ethProvider, jobQueue); + assert(graphWatcher); + this._graphWatcher = graphWatcher as GraphWatcher; + + this._abiMap = new Map(); + this._storageLayoutMap = new Map(); + this._contractMap = new Map(); + this.eventSignaturesMap = new Map(); + + const { abi: FactoryABI } = FactoryArtifacts; + + const { abi: NonfungiblePositionManagerABI } = NonfungiblePositionManagerArtifacts; + + const { abi: PoolABI } = PoolArtifacts; + + assert(FactoryABI); + this._abiMap.set(KIND_FACTORY, FactoryABI); + + const FactoryContractInterface = new ethers.utils.Interface(FactoryABI); + this._contractMap.set(KIND_FACTORY, FactoryContractInterface); + + const FactoryEventSignatures = Object.values(FactoryContractInterface.events).map(value => { + return FactoryContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_FACTORY, FactoryEventSignatures); + + assert(NonfungiblePositionManagerABI); + this._abiMap.set(KIND_NONFUNGIBLEPOSITIONMANAGER, NonfungiblePositionManagerABI); + + const NonfungiblePositionManagerContractInterface = new ethers.utils.Interface(NonfungiblePositionManagerABI); + this._contractMap.set(KIND_NONFUNGIBLEPOSITIONMANAGER, NonfungiblePositionManagerContractInterface); + + const NonfungiblePositionManagerEventSignatures = Object.values(NonfungiblePositionManagerContractInterface.events).map(value => { + return NonfungiblePositionManagerContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_NONFUNGIBLEPOSITIONMANAGER, NonfungiblePositionManagerEventSignatures); + + assert(PoolABI); + this._abiMap.set(KIND_POOL, PoolABI); + + const PoolContractInterface = new ethers.utils.Interface(PoolABI); + this._contractMap.set(KIND_POOL, PoolContractInterface); + + const PoolEventSignatures = Object.values(PoolContractInterface.events).map(value => { + return PoolContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_POOL, PoolEventSignatures); + + this._entityTypesMap = new Map(); + this._populateEntityTypesMap(); + + this._relationsMap = new Map(); + this._populateRelationsMap(); + + this._subgraphStateMap = new Map(); + } + + get serverConfig (): ServerConfig { + return this._serverConfig; + } + + get upstreamConfig (): UpstreamConfig { + return this._upstreamConfig; + } + + get storageLayoutMap (): Map { + return this._storageLayoutMap; + } + + get graphWatcher (): GraphWatcher { + return this._graphWatcher; + } + + async init (): Promise { + await this._baseIndexer.fetchContracts(); + await this._baseIndexer.fetchStateStatus(); + } + + switchClients ({ ethClient, ethProvider }: { ethClient: EthClient, ethProvider: BaseProvider }): void { + this._ethClient = ethClient; + this._ethProvider = ethProvider; + this._baseIndexer.switchClients({ ethClient, ethProvider }); + this._graphWatcher.switchClients({ ethClient, ethProvider }); + } + + async getMetaData (block: BlockHeight): Promise { + return this._baseIndexer.getMetaData(block); + } + + getResultEvent (event: Event): ResultEvent { + return getResultEvent(event); + } + + async getStorageValue (storageLayout: StorageLayout, blockHash: string, contractAddress: string, variable: string, ...mappingKeys: MappingKey[]): Promise { + return this._baseIndexer.getStorageValue( + storageLayout, + blockHash, + contractAddress, + variable, + ...mappingKeys + ); + } + + async getEntitiesForBlock (blockHash: string, tableName: string): Promise { + return this._db.getEntitiesForBlock(blockHash, tableName); + } + + async processInitialState (contractAddress: string, blockHash: string): Promise { + // Call initial state hook. + return createInitialState(this, contractAddress, blockHash); + } + + async processStateCheckpoint (contractAddress: string, blockHash: string): Promise { + // Call checkpoint hook. + return createStateCheckpoint(this, contractAddress, blockHash); + } + + async processCanonicalBlock (blockHash: string, blockNumber: number): Promise { + console.time('time:indexer#processCanonicalBlock-finalize_auto_diffs'); + // Finalize staged diff blocks if any. + await this._baseIndexer.finalizeDiffStaged(blockHash); + console.timeEnd('time:indexer#processCanonicalBlock-finalize_auto_diffs'); + + // Call custom stateDiff hook. + await createStateDiff(this, blockHash); + + this._graphWatcher.pruneEntityCacheFrothyBlocks(blockHash, blockNumber); + } + + async processCheckpoint (blockHash: string): Promise { + // Return if checkpointInterval is <= 0. + const checkpointInterval = this._serverConfig.checkpointInterval; + if (checkpointInterval <= 0) return; + + console.time('time:indexer#processCheckpoint-checkpoint'); + await this._baseIndexer.processCheckpoint(this, blockHash, checkpointInterval); + console.timeEnd('time:indexer#processCheckpoint-checkpoint'); + } + + async processCLICheckpoint (contractAddress: string, blockHash?: string): Promise { + return this._baseIndexer.processCLICheckpoint(this, contractAddress, blockHash); + } + + async getPrevState (blockHash: string, contractAddress: string, kind?: string): Promise { + return this._db.getPrevState(blockHash, contractAddress, kind); + } + + async getLatestState (contractAddress: string, kind: StateKind | null, blockNumber?: number): Promise { + return this._db.getLatestState(contractAddress, kind, blockNumber); + } + + async getStatesByHash (blockHash: string): Promise { + return this._baseIndexer.getStatesByHash(blockHash); + } + + async getStateByCID (cid: string): Promise { + return this._baseIndexer.getStateByCID(cid); + } + + async getStates (where: FindConditions): Promise { + return this._db.getStates(where); + } + + getStateData (state: State): any { + return this._baseIndexer.getStateData(state); + } + + // Method used to create auto diffs (diff_staged). + async createDiffStaged (contractAddress: string, blockHash: string, data: any): Promise { + console.time('time:indexer#createDiffStaged-auto_diff'); + await this._baseIndexer.createDiffStaged(contractAddress, blockHash, data); + console.timeEnd('time:indexer#createDiffStaged-auto_diff'); + } + + // Method to be used by createStateDiff hook. + async createDiff (contractAddress: string, blockHash: string, data: any): Promise { + const block = await this.getBlockProgress(blockHash); + assert(block); + + await this._baseIndexer.createDiff(contractAddress, block, data); + } + + // Method to be used by createStateCheckpoint hook. + async createStateCheckpoint (contractAddress: string, blockHash: string, data: any): Promise { + const block = await this.getBlockProgress(blockHash); + assert(block); + + return this._baseIndexer.createStateCheckpoint(contractAddress, block, data); + } + + // Method to be used by export-state CLI. + async createCheckpoint (contractAddress: string, blockHash: string): Promise { + const block = await this.getBlockProgress(blockHash); + assert(block); + + return this._baseIndexer.createCheckpoint(this, contractAddress, block); + } + + // Method to be used by fill-state CLI. + async createInit (blockHash: string, blockNumber: number): Promise { + // Create initial state for contracts. + await this._baseIndexer.createInit(this, blockHash, blockNumber); + } + + async saveOrUpdateState (state: State): Promise { + return this._baseIndexer.saveOrUpdateState(state); + } + + async removeStates (blockNumber: number, kind: StateKind): Promise { + await this._baseIndexer.removeStates(blockNumber, kind); + } + + async getSubgraphEntity ( + entity: new () => Entity, + id: string, + block: BlockHeight, + queryInfo: GraphQLResolveInfo + ): Promise { + const data = await this._graphWatcher.getEntity(entity, id, this._relationsMap, block, queryInfo); + + return data; + } + + async getSubgraphEntities ( + entity: new () => Entity, + block: BlockHeight, + where: { [key: string]: any } = {}, + queryOptions: QueryOptions = {}, + queryInfo: GraphQLResolveInfo + ): Promise { + return this._graphWatcher.getEntities(entity, this._relationsMap, block, where, queryOptions, queryInfo); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async triggerIndexingOnEvent (event: Event, extraData: ExtraEventData): Promise { + const resultEvent = this.getResultEvent(event); + + console.time('time:indexer#processEvent-mapping_code'); + // Call subgraph handler for event. + await this._graphWatcher.handleEvent(resultEvent, extraData); + console.timeEnd('time:indexer#processEvent-mapping_code'); + + // Call custom hook function for indexing on event. + await handleEvent(this, resultEvent); + } + + async processEvent (event: Event, extraData: ExtraEventData): Promise { + // Trigger indexing of data based on the event. + await this.triggerIndexingOnEvent(event, extraData); + } + + async processBlock (blockProgress: BlockProgress): Promise { + console.time('time:indexer#processBlock-init_state'); + // Call a function to create initial state for contracts. + await this._baseIndexer.createInit(this, blockProgress.blockHash, blockProgress.blockNumber); + console.timeEnd('time:indexer#processBlock-init_state'); + + this._graphWatcher.updateEntityCacheFrothyBlocks(blockProgress); + } + + async processBlockAfterEvents (blockHash: string, blockNumber: number, extraData: ExtraEventData): Promise { + console.time('time:indexer#processBlockAfterEvents-mapping_code'); + // Call subgraph handler for block. + await this._graphWatcher.handleBlock(blockHash, blockNumber, extraData); + console.timeEnd('time:indexer#processBlockAfterEvents-mapping_code'); + + console.time('time:indexer#processBlockAfterEvents-dump_subgraph_state'); + // Persist subgraph state to the DB. + await this.dumpSubgraphState(blockHash); + console.timeEnd('time:indexer#processBlockAfterEvents-dump_subgraph_state'); + } + + parseEventNameAndArgs (kind: string, logObj: any): { eventParsed: boolean, eventDetails: any } { + const { topics, data } = logObj; + + const contract = this._contractMap.get(kind); + assert(contract); + + let logDescription: ethers.utils.LogDescription; + try { + logDescription = contract.parseLog({ data, topics }); + } catch (err) { + // Return if no matching event found + if ((err as Error).message.includes('no matching event')) { + log(`WARNING: Skipping event for contract ${kind} as no matching event found in the ABI`); + return { eventParsed: false, eventDetails: {} }; + } + + throw err; + } + + const { eventName, eventInfo, eventSignature } = this._baseIndexer.parseEvent(logDescription); + + return { + eventParsed: true, + eventDetails: { + eventName, + eventInfo, + eventSignature + } + }; + } + + async getStateSyncStatus (): Promise { + return this._db.getStateSyncStatus(); + } + + async updateStateSyncStatusIndexedBlock (blockNumber: number, force?: boolean): Promise { + if (!this._serverConfig.enableState) { + return; + } + + const dbTx = await this._db.createTransactionRunner(); + let res; + + try { + res = await this._db.updateStateSyncStatusIndexedBlock(dbTx, blockNumber, force); + await dbTx.commitTransaction(); + } catch (error) { + await dbTx.rollbackTransaction(); + throw error; + } finally { + await dbTx.release(); + } + + return res; + } + + async updateStateSyncStatusCheckpointBlock (blockNumber: number, force?: boolean): Promise { + const dbTx = await this._db.createTransactionRunner(); + let res; + + try { + res = await this._db.updateStateSyncStatusCheckpointBlock(dbTx, blockNumber, force); + await dbTx.commitTransaction(); + } catch (error) { + await dbTx.rollbackTransaction(); + throw error; + } finally { + await dbTx.release(); + } + + return res; + } + + async getLatestCanonicalBlock (): Promise { + const syncStatus = await this.getSyncStatus(); + assert(syncStatus); + + if (syncStatus.latestCanonicalBlockHash === constants.HashZero) { + return; + } + + const latestCanonicalBlock = await this.getBlockProgress(syncStatus.latestCanonicalBlockHash); + assert(latestCanonicalBlock); + + return latestCanonicalBlock; + } + + async getLatestStateIndexedBlock (): Promise { + return this._baseIndexer.getLatestStateIndexedBlock(); + } + + async addContracts (): Promise { + // Watching all the contracts in the subgraph. + await this._graphWatcher.addContracts(); + } + + async watchContract (address: string, kind: string, checkpoint: boolean, startingBlock: number, context?: any): Promise { + return this._baseIndexer.watchContract(address, kind, checkpoint, startingBlock, context); + } + + updateStateStatusMap (address: string, stateStatus: StateStatus): void { + this._baseIndexer.updateStateStatusMap(address, stateStatus); + } + + cacheContract (contract: Contract): void { + return this._baseIndexer.cacheContract(contract); + } + + async saveEventEntity (dbEvent: Event): Promise { + return this._baseIndexer.saveEventEntity(dbEvent); + } + + async saveEvents (dbEvents: Event[]): Promise { + return this._baseIndexer.saveEvents(dbEvents); + } + + async getEventsByFilter (blockHash: string, contract?: string, name?: string): Promise> { + return this._baseIndexer.getEventsByFilter(blockHash, contract, name); + } + + isWatchedContract (address : string): Contract | undefined { + return this._baseIndexer.isWatchedContract(address); + } + + getWatchedContracts (): Contract[] { + return this._baseIndexer.getWatchedContracts(); + } + + getContractsByKind (kind: string): Contract[] { + return this._baseIndexer.getContractsByKind(kind); + } + + async getProcessedBlockCountForRange (fromBlockNumber: number, toBlockNumber: number): Promise<{ expected: number, actual: number }> { + return this._baseIndexer.getProcessedBlockCountForRange(fromBlockNumber, toBlockNumber); + } + + async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise> { + return this._baseIndexer.getEventsInRange(fromBlockNumber, toBlockNumber, this._serverConfig.gql.maxEventsBlockRange); + } + + async getSyncStatus (): Promise { + return this._baseIndexer.getSyncStatus(); + } + + async getBlocks (blockFilter: { blockHash?: string, blockNumber?: number }): Promise { + return this._baseIndexer.getBlocks(blockFilter); + } + + async updateSyncStatusIndexedBlock (blockHash: string, blockNumber: number, force = false): Promise { + return this._baseIndexer.updateSyncStatusIndexedBlock(blockHash, blockNumber, force); + } + + async updateSyncStatusChainHead (blockHash: string, blockNumber: number, force = false): Promise { + return this._baseIndexer.updateSyncStatusChainHead(blockHash, blockNumber, force); + } + + async updateSyncStatusCanonicalBlock (blockHash: string, blockNumber: number, force = false): Promise { + const syncStatus = this._baseIndexer.updateSyncStatusCanonicalBlock(blockHash, blockNumber, force); + await this.pruneFrothyEntities(blockNumber); + + return syncStatus; + } + + async updateSyncStatusProcessedBlock (blockHash: string, blockNumber: number, force = false): Promise { + return this._baseIndexer.updateSyncStatusProcessedBlock(blockHash, blockNumber, force); + } + + async updateSyncStatusIndexingError (hasIndexingError: boolean): Promise { + return this._baseIndexer.updateSyncStatusIndexingError(hasIndexingError); + } + + async updateSyncStatus (syncStatus: DeepPartial): Promise { + return this._baseIndexer.updateSyncStatus(syncStatus); + } + + async getEvent (id: string): Promise { + return this._baseIndexer.getEvent(id); + } + + async getBlockProgress (blockHash: string): Promise { + return this._baseIndexer.getBlockProgress(blockHash); + } + + async getBlockProgressEntities (where: FindConditions, options: FindManyOptions): Promise { + return this._baseIndexer.getBlockProgressEntities(where, options); + } + + async getBlocksAtHeight (height: number, isPruned: boolean): Promise { + return this._baseIndexer.getBlocksAtHeight(height, isPruned); + } + + async fetchAndSaveFilteredEventsAndBlocks (startBlock: number, endBlock: number): Promise<{ + blockProgress: BlockProgress, + events: DeepPartial[], + ethFullBlock: EthFullBlock; + ethFullTransactions: EthFullTransaction[]; + }[]> { + return this._baseIndexer.fetchAndSaveFilteredEventsAndBlocks(startBlock, endBlock, this.eventSignaturesMap, this.parseEventNameAndArgs.bind(this)); + } + + async fetchEventsForContracts (blockHash: string, blockNumber: number, addresses: string[]): Promise[]> { + return this._baseIndexer.fetchEventsForContracts(blockHash, blockNumber, addresses, this.eventSignaturesMap, this.parseEventNameAndArgs.bind(this)); + } + + async saveBlockAndFetchEvents (block: DeepPartial): Promise<[ + BlockProgress, + DeepPartial[], + EthFullTransaction[] + ]> { + return this._saveBlockAndFetchEvents(block); + } + + async getBlockEvents (blockHash: string, where: Where, queryOptions: QueryOptions): Promise> { + return this._baseIndexer.getBlockEvents(blockHash, where, queryOptions); + } + + async removeUnknownEvents (block: BlockProgress): Promise { + return this._baseIndexer.removeUnknownEvents(Event, block); + } + + async markBlocksAsPruned (blocks: BlockProgress[]): Promise { + await this._baseIndexer.markBlocksAsPruned(blocks); + + await this._graphWatcher.pruneEntities(FrothyEntity, blocks, SUBGRAPH_ENTITIES); + } + + async pruneFrothyEntities (blockNumber: number): Promise { + await this._graphWatcher.pruneFrothyEntities(FrothyEntity, blockNumber); + } + + async resetLatestEntities (blockNumber: number): Promise { + await this._graphWatcher.resetLatestEntities(blockNumber); + } + + async updateBlockProgress (block: BlockProgress, lastProcessedEventIndex: number): Promise { + return this._baseIndexer.updateBlockProgress(block, lastProcessedEventIndex); + } + + async getAncestorAtHeight (blockHash: string, height: number): Promise { + return this._baseIndexer.getAncestorAtHeight(blockHash, height); + } + + async resetWatcherToBlock (blockNumber: number): Promise { + const entities = [...ENTITIES, FrothyEntity]; + await this._baseIndexer.resetWatcherToBlock(blockNumber, entities); + + await this.resetLatestEntities(blockNumber); + } + + async clearProcessedBlockData (block: BlockProgress): Promise { + const entities = [...ENTITIES, FrothyEntity]; + await this._baseIndexer.clearProcessedBlockData(block, entities); + + await this.resetLatestEntities(block.blockNumber); + } + + getEntityTypesMap (): Map { + return this._entityTypesMap; + } + + getRelationsMap (): Map { + return this._relationsMap; + } + + updateSubgraphState (contractAddress: string, data: any): void { + return updateSubgraphState(this._subgraphStateMap, contractAddress, data); + } + + async dumpSubgraphState (blockHash: string, isStateFinalized = false): Promise { + return dumpSubgraphState(this, this._subgraphStateMap, blockHash, isStateFinalized); + } + + _populateEntityTypesMap (): void { + this._entityTypesMap.set('Factory', { + id: 'ID', + poolCount: 'BigInt', + txCount: 'BigInt', + totalVolumeUSD: 'BigDecimal', + totalVolumeETH: 'BigDecimal', + totalFeesUSD: 'BigDecimal', + totalFeesETH: 'BigDecimal', + untrackedVolumeUSD: 'BigDecimal', + totalValueLockedUSD: 'BigDecimal', + totalValueLockedETH: 'BigDecimal', + totalValueLockedUSDUntracked: 'BigDecimal', + totalValueLockedETHUntracked: 'BigDecimal', + owner: 'ID' + }); + this._entityTypesMap.set('Bundle', { + id: 'ID', + ethPriceUSD: 'BigDecimal' + }); + this._entityTypesMap.set('Token', { + id: 'ID', + symbol: 'String', + name: 'String', + decimals: 'BigInt', + totalSupply: 'BigInt', + volume: 'BigDecimal', + volumeUSD: 'BigDecimal', + untrackedVolumeUSD: 'BigDecimal', + feesUSD: 'BigDecimal', + txCount: 'BigInt', + poolCount: 'BigInt', + totalValueLocked: 'BigDecimal', + totalValueLockedUSD: 'BigDecimal', + totalValueLockedUSDUntracked: 'BigDecimal', + derivedETH: 'BigDecimal', + whitelistPools: 'Pool' + }); + this._entityTypesMap.set('Pool', { + id: 'ID', + createdAtTimestamp: 'BigInt', + createdAtBlockNumber: 'BigInt', + token0: 'Token', + token1: 'Token', + feeTier: 'BigInt', + liquidity: 'BigInt', + sqrtPrice: 'BigInt', + feeGrowthGlobal0X128: 'BigInt', + feeGrowthGlobal1X128: 'BigInt', + token0Price: 'BigDecimal', + token1Price: 'BigDecimal', + tick: 'BigInt', + observationIndex: 'BigInt', + volumeToken0: 'BigDecimal', + volumeToken1: 'BigDecimal', + volumeUSD: 'BigDecimal', + untrackedVolumeUSD: 'BigDecimal', + feesUSD: 'BigDecimal', + txCount: 'BigInt', + collectedFeesToken0: 'BigDecimal', + collectedFeesToken1: 'BigDecimal', + collectedFeesUSD: 'BigDecimal', + totalValueLockedToken0: 'BigDecimal', + totalValueLockedToken1: 'BigDecimal', + totalValueLockedETH: 'BigDecimal', + totalValueLockedUSD: 'BigDecimal', + totalValueLockedUSDUntracked: 'BigDecimal', + isProtocolFeeEnabled: 'Boolean', + liquidityProviderCount: 'BigInt' + }); + this._entityTypesMap.set('Tick', { + id: 'ID', + poolAddress: 'String', + tickIdx: 'BigInt', + pool: 'Pool', + liquidityGross: 'BigInt', + liquidityNet: 'BigInt', + price0: 'BigDecimal', + price1: 'BigDecimal', + volumeToken0: 'BigDecimal', + volumeToken1: 'BigDecimal', + volumeUSD: 'BigDecimal', + untrackedVolumeUSD: 'BigDecimal', + feesUSD: 'BigDecimal', + collectedFeesToken0: 'BigDecimal', + collectedFeesToken1: 'BigDecimal', + collectedFeesUSD: 'BigDecimal', + createdAtTimestamp: 'BigInt', + createdAtBlockNumber: 'BigInt', + liquidityProviderCount: 'BigInt', + feeGrowthOutside0X128: 'BigInt', + feeGrowthOutside1X128: 'BigInt' + }); + this._entityTypesMap.set('Position', { + id: 'ID', + owner: 'Bytes', + pool: 'Pool', + token0: 'Token', + token1: 'Token', + tickLower: 'Tick', + tickUpper: 'Tick', + liquidity: 'BigInt', + depositedToken0: 'BigDecimal', + depositedToken1: 'BigDecimal', + withdrawnToken0: 'BigDecimal', + withdrawnToken1: 'BigDecimal', + collectedToken0: 'BigDecimal', + collectedToken1: 'BigDecimal', + collectedFeesToken0: 'BigDecimal', + collectedFeesToken1: 'BigDecimal', + amountDepositedUSD: 'BigDecimal', + amountWithdrawnUSD: 'BigDecimal', + amountCollectedUSD: 'BigDecimal', + transaction: 'Transaction', + feeGrowthInside0LastX128: 'BigInt', + feeGrowthInside1LastX128: 'BigInt' + }); + this._entityTypesMap.set('PositionSnapshot', { + id: 'ID', + owner: 'Bytes', + pool: 'Pool', + position: 'Position', + blockNumber: 'BigInt', + timestamp: 'BigInt', + liquidity: 'BigInt', + depositedToken0: 'BigDecimal', + depositedToken1: 'BigDecimal', + withdrawnToken0: 'BigDecimal', + withdrawnToken1: 'BigDecimal', + collectedFeesToken0: 'BigDecimal', + collectedFeesToken1: 'BigDecimal', + transaction: 'Transaction', + feeGrowthInside0LastX128: 'BigInt', + feeGrowthInside1LastX128: 'BigInt' + }); + this._entityTypesMap.set('Transaction', { + id: 'ID', + blockNumber: 'BigInt', + timestamp: 'BigInt', + gasUsed: 'BigInt', + gasPrice: 'BigInt' + }); + this._entityTypesMap.set('Mint', { + id: 'ID', + transaction: 'Transaction', + timestamp: 'BigInt', + pool: 'Pool', + token0: 'Token', + token1: 'Token', + owner: 'Bytes', + sender: 'Bytes', + origin: 'Bytes', + amount: 'BigInt', + amount0: 'BigDecimal', + amount1: 'BigDecimal', + amountUSD: 'BigDecimal', + tickLower: 'BigInt', + tickUpper: 'BigInt', + logIndex: 'BigInt' + }); + this._entityTypesMap.set('Burn', { + id: 'ID', + transaction: 'Transaction', + pool: 'Pool', + token0: 'Token', + token1: 'Token', + timestamp: 'BigInt', + owner: 'Bytes', + origin: 'Bytes', + amount: 'BigInt', + amount0: 'BigDecimal', + amount1: 'BigDecimal', + amountUSD: 'BigDecimal', + tickLower: 'BigInt', + tickUpper: 'BigInt', + logIndex: 'BigInt' + }); + this._entityTypesMap.set('Swap', { + id: 'ID', + transaction: 'Transaction', + timestamp: 'BigInt', + pool: 'Pool', + token0: 'Token', + token1: 'Token', + sender: 'Bytes', + recipient: 'Bytes', + origin: 'Bytes', + amount0: 'BigDecimal', + amount1: 'BigDecimal', + amountUSD: 'BigDecimal', + sqrtPriceX96: 'BigInt', + tick: 'BigInt', + logIndex: 'BigInt' + }); + this._entityTypesMap.set('Collect', { + id: 'ID', + transaction: 'Transaction', + timestamp: 'BigInt', + pool: 'Pool', + owner: 'Bytes', + amount0: 'BigDecimal', + amount1: 'BigDecimal', + amountUSD: 'BigDecimal', + tickLower: 'BigInt', + tickUpper: 'BigInt', + logIndex: 'BigInt' + }); + this._entityTypesMap.set('Flash', { + id: 'ID', + transaction: 'Transaction', + timestamp: 'BigInt', + pool: 'Pool', + sender: 'Bytes', + recipient: 'Bytes', + amount0: 'BigDecimal', + amount1: 'BigDecimal', + amountUSD: 'BigDecimal', + amount0Paid: 'BigDecimal', + amount1Paid: 'BigDecimal', + logIndex: 'BigInt' + }); + this._entityTypesMap.set('UniswapDayData', { + id: 'ID', + date: 'Int', + volumeETH: 'BigDecimal', + volumeUSD: 'BigDecimal', + volumeUSDUntracked: 'BigDecimal', + feesUSD: 'BigDecimal', + txCount: 'BigInt', + tvlUSD: 'BigDecimal' + }); + this._entityTypesMap.set('PoolDayData', { + id: 'ID', + date: 'Int', + pool: 'Pool', + liquidity: 'BigInt', + sqrtPrice: 'BigInt', + token0Price: 'BigDecimal', + token1Price: 'BigDecimal', + tick: 'BigInt', + feeGrowthGlobal0X128: 'BigInt', + feeGrowthGlobal1X128: 'BigInt', + tvlUSD: 'BigDecimal', + volumeToken0: 'BigDecimal', + volumeToken1: 'BigDecimal', + volumeUSD: 'BigDecimal', + feesUSD: 'BigDecimal', + txCount: 'BigInt', + open: 'BigDecimal', + high: 'BigDecimal', + low: 'BigDecimal', + close: 'BigDecimal' + }); + this._entityTypesMap.set('PoolHourData', { + id: 'ID', + periodStartUnix: 'Int', + pool: 'Pool', + liquidity: 'BigInt', + sqrtPrice: 'BigInt', + token0Price: 'BigDecimal', + token1Price: 'BigDecimal', + tick: 'BigInt', + feeGrowthGlobal0X128: 'BigInt', + feeGrowthGlobal1X128: 'BigInt', + tvlUSD: 'BigDecimal', + volumeToken0: 'BigDecimal', + volumeToken1: 'BigDecimal', + volumeUSD: 'BigDecimal', + feesUSD: 'BigDecimal', + txCount: 'BigInt', + open: 'BigDecimal', + high: 'BigDecimal', + low: 'BigDecimal', + close: 'BigDecimal' + }); + this._entityTypesMap.set('TickHourData', { + id: 'ID', + periodStartUnix: 'Int', + pool: 'Pool', + tick: 'Tick', + liquidityGross: 'BigInt', + liquidityNet: 'BigInt', + volumeToken0: 'BigDecimal', + volumeToken1: 'BigDecimal', + volumeUSD: 'BigDecimal', + feesUSD: 'BigDecimal' + }); + this._entityTypesMap.set('TickDayData', { + id: 'ID', + date: 'Int', + pool: 'Pool', + tick: 'Tick', + liquidityGross: 'BigInt', + liquidityNet: 'BigInt', + volumeToken0: 'BigDecimal', + volumeToken1: 'BigDecimal', + volumeUSD: 'BigDecimal', + feesUSD: 'BigDecimal', + feeGrowthOutside0X128: 'BigInt', + feeGrowthOutside1X128: 'BigInt' + }); + this._entityTypesMap.set('TokenDayData', { + id: 'ID', + date: 'Int', + token: 'Token', + volume: 'BigDecimal', + volumeUSD: 'BigDecimal', + untrackedVolumeUSD: 'BigDecimal', + totalValueLocked: 'BigDecimal', + totalValueLockedUSD: 'BigDecimal', + priceUSD: 'BigDecimal', + feesUSD: 'BigDecimal', + open: 'BigDecimal', + high: 'BigDecimal', + low: 'BigDecimal', + close: 'BigDecimal' + }); + this._entityTypesMap.set('TokenHourData', { + id: 'ID', + periodStartUnix: 'Int', + token: 'Token', + volume: 'BigDecimal', + volumeUSD: 'BigDecimal', + untrackedVolumeUSD: 'BigDecimal', + totalValueLocked: 'BigDecimal', + totalValueLockedUSD: 'BigDecimal', + priceUSD: 'BigDecimal', + feesUSD: 'BigDecimal', + open: 'BigDecimal', + high: 'BigDecimal', + low: 'BigDecimal', + close: 'BigDecimal' + }); + this._entityTypesMap.set('IncreaseEvent', { + id: 'ID', + pool: 'Pool', + tokenID: 'BigInt', + position: 'Position', + amount0: 'BigInt', + amount1: 'BigInt', + token0: 'Token', + token1: 'Token', + timeStamp: 'BigInt', + transaction: 'Transaction' + }); + this._entityTypesMap.set('DecreaseEvent', { + id: 'ID', + pool: 'Pool', + tokenID: 'BigInt', + position: 'Position', + amount0: 'BigInt', + amount1: 'BigInt', + token0: 'Token', + token1: 'Token', + timeStamp: 'BigInt', + transaction: 'Transaction' + }); + this._entityTypesMap.set('SetProtocolFeeEvent', { + id: 'ID', + pool: 'Pool', + logIndex: 'BigInt', + new0: 'BigInt', + new1: 'BigInt', + old0: 'BigInt', + old1: 'BigInt', + timestamp: 'BigInt' + }); + } + + _populateRelationsMap (): void { + this._relationsMap.set(Token, { + whitelistPools: { + entity: Pool, + isArray: true, + isDerived: false + }, + tokenDayData: { + entity: TokenDayData, + isArray: true, + isDerived: true, + field: 'token' + } + }); + this._relationsMap.set(Pool, { + token0: { + entity: Token, + isArray: false, + isDerived: false + }, + token1: { + entity: Token, + isArray: false, + isDerived: false + }, + poolHourData: { + entity: PoolHourData, + isArray: true, + isDerived: true, + field: 'pool' + }, + poolDayData: { + entity: PoolDayData, + isArray: true, + isDerived: true, + field: 'pool' + }, + mints: { + entity: Mint, + isArray: true, + isDerived: true, + field: 'pool' + }, + burns: { + entity: Burn, + isArray: true, + isDerived: true, + field: 'pool' + }, + swaps: { + entity: Swap, + isArray: true, + isDerived: true, + field: 'pool' + }, + collects: { + entity: Collect, + isArray: true, + isDerived: true, + field: 'pool' + }, + ticks: { + entity: Tick, + isArray: true, + isDerived: true, + field: 'pool' + } + }); + this._relationsMap.set(Tick, { + pool: { + entity: Pool, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(Position, { + pool: { + entity: Pool, + isArray: false, + isDerived: false + }, + token0: { + entity: Token, + isArray: false, + isDerived: false + }, + token1: { + entity: Token, + isArray: false, + isDerived: false + }, + tickLower: { + entity: Tick, + isArray: false, + isDerived: false + }, + tickUpper: { + entity: Tick, + isArray: false, + isDerived: false + }, + transaction: { + entity: Transaction, + isArray: false, + isDerived: false + }, + increaseEvents: { + entity: IncreaseEvent, + isArray: true, + isDerived: true, + field: 'position' + }, + decreaseEvents: { + entity: IncreaseEvent, + isArray: true, + isDerived: true, + field: 'position' + } + }); + this._relationsMap.set(PositionSnapshot, { + pool: { + entity: Pool, + isArray: false, + isDerived: false + }, + position: { + entity: Position, + isArray: false, + isDerived: false + }, + transaction: { + entity: Transaction, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(Transaction, { + mints: { + entity: Mint, + isArray: true, + isDerived: true, + field: 'transaction' + }, + burns: { + entity: Burn, + isArray: true, + isDerived: true, + field: 'transaction' + }, + swaps: { + entity: Swap, + isArray: true, + isDerived: true, + field: 'transaction' + }, + flashed: { + entity: Flash, + isArray: true, + isDerived: true, + field: 'transaction' + }, + collects: { + entity: Collect, + isArray: true, + isDerived: true, + field: 'transaction' + } + }); + this._relationsMap.set(Mint, { + transaction: { + entity: Transaction, + isArray: false, + isDerived: false + }, + pool: { + entity: Pool, + isArray: false, + isDerived: false + }, + token0: { + entity: Token, + isArray: false, + isDerived: false + }, + token1: { + entity: Token, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(Burn, { + transaction: { + entity: Transaction, + isArray: false, + isDerived: false + }, + pool: { + entity: Pool, + isArray: false, + isDerived: false + }, + token0: { + entity: Token, + isArray: false, + isDerived: false + }, + token1: { + entity: Token, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(Swap, { + transaction: { + entity: Transaction, + isArray: false, + isDerived: false + }, + pool: { + entity: Pool, + isArray: false, + isDerived: false + }, + token0: { + entity: Token, + isArray: false, + isDerived: false + }, + token1: { + entity: Token, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(Collect, { + transaction: { + entity: Transaction, + isArray: false, + isDerived: false + }, + pool: { + entity: Pool, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(Flash, { + transaction: { + entity: Transaction, + isArray: false, + isDerived: false + }, + pool: { + entity: Pool, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(PoolDayData, { + pool: { + entity: Pool, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(PoolHourData, { + pool: { + entity: Pool, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(TickHourData, { + pool: { + entity: Pool, + isArray: false, + isDerived: false + }, + tick: { + entity: Tick, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(TickDayData, { + pool: { + entity: Pool, + isArray: false, + isDerived: false + }, + tick: { + entity: Tick, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(TokenDayData, { + token: { + entity: Token, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(TokenHourData, { + token: { + entity: Token, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(IncreaseEvent, { + pool: { + entity: Pool, + isArray: false, + isDerived: false + }, + position: { + entity: Position, + isArray: false, + isDerived: false + }, + token0: { + entity: Token, + isArray: false, + isDerived: false + }, + token1: { + entity: Token, + isArray: false, + isDerived: false + }, + transaction: { + entity: Transaction, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(DecreaseEvent, { + pool: { + entity: Pool, + isArray: false, + isDerived: false + }, + position: { + entity: Position, + isArray: false, + isDerived: false + }, + token0: { + entity: Token, + isArray: false, + isDerived: false + }, + token1: { + entity: Token, + isArray: false, + isDerived: false + }, + transaction: { + entity: Transaction, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(SetProtocolFeeEvent, { + pool: { + entity: Pool, + isArray: false, + isDerived: false + } + }); + } + + async _saveBlockAndFetchEvents ({ + cid: blockCid, + blockHash, + blockNumber, + blockTimestamp, + parentHash + }: DeepPartial): Promise<[ + BlockProgress, + DeepPartial[], + EthFullTransaction[] + ]> { + assert(blockHash); + assert(blockNumber); + + const { events: dbEvents, transactions } = await this._baseIndexer.fetchEvents(blockHash, blockNumber, this.eventSignaturesMap, this.parseEventNameAndArgs.bind(this)); + + const dbTx = await this._db.createTransactionRunner(); + try { + const block = { + cid: blockCid, + blockHash, + blockNumber, + blockTimestamp, + parentHash + }; + + console.time(`time:indexer#_saveBlockAndFetchEvents-db-save-${blockNumber}`); + const blockProgress = await this._db.saveBlockWithEvents(dbTx, block, dbEvents); + await dbTx.commitTransaction(); + console.timeEnd(`time:indexer#_saveBlockAndFetchEvents-db-save-${blockNumber}`); + + return [blockProgress, [], transactions]; + } catch (error) { + await dbTx.rollbackTransaction(); + throw error; + } finally { + await dbTx.release(); + } + } + + async getFullTransactions (txHashList: string[]): Promise { + return this._baseIndexer.getFullTransactions(txHashList); + } +} diff --git a/packages/v3-watcher/src/job-runner.ts b/packages/v3-watcher/src/job-runner.ts new file mode 100644 index 0000000..93d6820 --- /dev/null +++ b/packages/v3-watcher/src/job-runner.ts @@ -0,0 +1,48 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import debug from 'debug'; + +import { JobRunnerCmd } from '@cerc-io/cli'; +import { JobRunner } from '@cerc-io/util'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Indexer } from './indexer'; +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from './database'; + +const log = debug('vulcanize:job-runner'); + +export const main = async (): Promise => { + const jobRunnerCmd = new JobRunnerCmd(); + await jobRunnerCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + jobRunnerCmd.config.server, + jobRunnerCmd.clients.ethClient, + jobRunnerCmd.ethProvider, + jobRunnerCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await jobRunnerCmd.initIndexer(Indexer, graphWatcher); + + await jobRunnerCmd.exec(async (jobRunner: JobRunner): Promise => { + await jobRunner.subscribeBlockProcessingQueue(); + await jobRunner.subscribeHistoricalProcessingQueue(); + await jobRunner.subscribeEventProcessingQueue(); + await jobRunner.subscribeBlockCheckpointQueue(); + await jobRunner.subscribeHooksQueue(); + }); +}; + +main().then(() => { + log('Starting job runner...'); +}).catch(err => { + log(err); +}); + +process.on('uncaughtException', err => { + log('uncaughtException', err); +}); diff --git a/packages/v3-watcher/src/resolvers.ts b/packages/v3-watcher/src/resolvers.ts new file mode 100644 index 0000000..0b13ec1 --- /dev/null +++ b/packages/v3-watcher/src/resolvers.ts @@ -0,0 +1,1320 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import assert from 'assert'; +import debug from 'debug'; +import { GraphQLResolveInfo } from 'graphql'; +import { ExpressContext } from 'apollo-server-express'; +import winston from 'winston'; + +import { + gqlTotalQueryCount, + gqlQueryCount, + gqlQueryDuration, + getResultState, + IndexerInterface, + GraphQLBigInt, + GraphQLBigDecimal, + BlockHeight, + OrderDirection, + jsonBigIntStringReplacer, + EventWatcher, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + setGQLCacheHints +} from '@cerc-io/util'; + +import { Indexer } from './indexer'; + +import { Factory } from './entity/Factory'; +import { Bundle } from './entity/Bundle'; +import { Token } from './entity/Token'; +import { Pool } from './entity/Pool'; +import { Tick } from './entity/Tick'; +import { Position } from './entity/Position'; +import { PositionSnapshot } from './entity/PositionSnapshot'; +import { Transaction } from './entity/Transaction'; +import { Mint } from './entity/Mint'; +import { Burn } from './entity/Burn'; +import { Swap } from './entity/Swap'; +import { Collect } from './entity/Collect'; +import { Flash } from './entity/Flash'; +import { UniswapDayData } from './entity/UniswapDayData'; +import { PoolDayData } from './entity/PoolDayData'; +import { PoolHourData } from './entity/PoolHourData'; +import { TickHourData } from './entity/TickHourData'; +import { TickDayData } from './entity/TickDayData'; +import { TokenDayData } from './entity/TokenDayData'; +import { TokenHourData } from './entity/TokenHourData'; +import { IncreaseEvent } from './entity/IncreaseEvent'; +import { DecreaseEvent } from './entity/DecreaseEvent'; +import { SetProtocolFeeEvent } from './entity/SetProtocolFeeEvent'; + +const log = debug('vulcanize:resolver'); + +const executeAndRecordMetrics = async ( + indexer: Indexer, + gqlLogger: winston.Logger, + opName: string, + expressContext: ExpressContext, + operation: () => Promise +) => { + gqlTotalQueryCount.inc(1); + gqlQueryCount.labels(opName).inc(1); + const endTimer = gqlQueryDuration.labels(opName).startTimer(); + + try { + const [result, syncStatus] = await Promise.all([ + operation(), + indexer.getSyncStatus() + ]); + + gqlLogger.info({ + opName, + query: expressContext.req.body.query, + variables: expressContext.req.body.variables, + latestIndexedBlockNumber: syncStatus?.latestIndexedBlockNumber, + urlPath: expressContext.req.path, + apiKey: expressContext.req.header('x-api-key'), + origin: expressContext.req.headers.origin + }); + return result; + } catch (error) { + gqlLogger.error({ + opName, + error, + query: expressContext.req.body.query, + variables: expressContext.req.body.variables, + urlPath: expressContext.req.path, + apiKey: expressContext.req.header('x-api-key'), + origin: expressContext.req.headers.origin + }); + } finally { + endTimer(); + } +}; + +export const createResolvers = async ( + indexerArg: IndexerInterface, + eventWatcher: EventWatcher, + gqlLogger: winston.Logger +): Promise => { + const indexer = indexerArg as Indexer; + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const gqlCacheConfig = indexer.serverConfig.gql.cache; + + return { + BigInt: GraphQLBigInt, + + BigDecimal: GraphQLBigDecimal, + + Event: { + __resolveType: (obj: any) => { + assert(obj.__typename); + + return obj.__typename; + } + }, + + Subscription: { + onEvent: { + subscribe: () => eventWatcher.getEventIterator() + } + }, + + Mutation: { + watchContract: async (_: any, { address, kind, checkpoint, startingBlock = 1 }: { address: string, kind: string, checkpoint: boolean, startingBlock: number }): Promise => { + log('watchContract', address, kind, checkpoint, startingBlock); + await indexer.watchContract(address, kind, checkpoint, startingBlock); + + return true; + } + }, + + Query: { + factory: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('factory', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'factory', + expressContext, + async () => indexer.getSubgraphEntity(Factory, id, block, info) + ); + }, + + factories: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('factories', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'factories', + expressContext, + async () => indexer.getSubgraphEntities( + Factory, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + bundle: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('bundle', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'bundle', + expressContext, + async () => indexer.getSubgraphEntity(Bundle, id, block, info) + ); + }, + + bundles: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('bundles', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'bundles', + expressContext, + async () => indexer.getSubgraphEntities( + Bundle, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + token: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('token', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'token', + expressContext, + async () => indexer.getSubgraphEntity(Token, id, block, info) + ); + }, + + tokens: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('tokens', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'tokens', + expressContext, + async () => indexer.getSubgraphEntities( + Token, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + pool: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('pool', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'pool', + expressContext, + async () => indexer.getSubgraphEntity(Pool, id, block, info) + ); + }, + + pools: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('pools', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'pools', + expressContext, + async () => indexer.getSubgraphEntities( + Pool, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + tick: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('tick', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'tick', + expressContext, + async () => indexer.getSubgraphEntity(Tick, id, block, info) + ); + }, + + ticks: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('ticks', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'ticks', + expressContext, + async () => indexer.getSubgraphEntities( + Tick, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + position: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('position', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'position', + expressContext, + async () => indexer.getSubgraphEntity(Position, id, block, info) + ); + }, + + positions: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('positions', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'positions', + expressContext, + async () => indexer.getSubgraphEntities( + Position, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + positionSnapshot: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('positionSnapshot', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'positionSnapshot', + expressContext, + async () => indexer.getSubgraphEntity(PositionSnapshot, id, block, info) + ); + }, + + positionSnapshots: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('positionSnapshots', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'positionSnapshots', + expressContext, + async () => indexer.getSubgraphEntities( + PositionSnapshot, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + transaction: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('transaction', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'transaction', + expressContext, + async () => indexer.getSubgraphEntity(Transaction, id, block, info) + ); + }, + + transactions: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('transactions', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'transactions', + expressContext, + async () => indexer.getSubgraphEntities( + Transaction, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + mint: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('mint', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'mint', + expressContext, + async () => indexer.getSubgraphEntity(Mint, id, block, info) + ); + }, + + mints: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('mints', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'mints', + expressContext, + async () => indexer.getSubgraphEntities( + Mint, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + burn: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('burn', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'burn', + expressContext, + async () => indexer.getSubgraphEntity(Burn, id, block, info) + ); + }, + + burns: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('burns', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'burns', + expressContext, + async () => indexer.getSubgraphEntities( + Burn, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + swap: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('swap', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'swap', + expressContext, + async () => indexer.getSubgraphEntity(Swap, id, block, info) + ); + }, + + swaps: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('swaps', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'swaps', + expressContext, + async () => indexer.getSubgraphEntities( + Swap, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + collect: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('collect', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'collect', + expressContext, + async () => indexer.getSubgraphEntity(Collect, id, block, info) + ); + }, + + collects: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('collects', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'collects', + expressContext, + async () => indexer.getSubgraphEntities( + Collect, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + flash: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('flash', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'flash', + expressContext, + async () => indexer.getSubgraphEntity(Flash, id, block, info) + ); + }, + + flashes: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('flashes', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'flashes', + expressContext, + async () => indexer.getSubgraphEntities( + Flash, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + uniswapDayData: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('uniswapDayData', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'uniswapDayData', + expressContext, + async () => indexer.getSubgraphEntity(UniswapDayData, id, block, info) + ); + }, + + uniswapDayDatas: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('uniswapDayDatas', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'uniswapDayDatas', + expressContext, + async () => indexer.getSubgraphEntities( + UniswapDayData, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + poolDayData: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('poolDayData', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'poolDayData', + expressContext, + async () => indexer.getSubgraphEntity(PoolDayData, id, block, info) + ); + }, + + poolDayDatas: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('poolDayDatas', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'poolDayDatas', + expressContext, + async () => indexer.getSubgraphEntities( + PoolDayData, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + poolHourData: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('poolHourData', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'poolHourData', + expressContext, + async () => indexer.getSubgraphEntity(PoolHourData, id, block, info) + ); + }, + + poolHourDatas: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('poolHourDatas', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'poolHourDatas', + expressContext, + async () => indexer.getSubgraphEntities( + PoolHourData, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + tickHourData: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('tickHourData', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'tickHourData', + expressContext, + async () => indexer.getSubgraphEntity(TickHourData, id, block, info) + ); + }, + + tickHourDatas: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('tickHourDatas', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'tickHourDatas', + expressContext, + async () => indexer.getSubgraphEntities( + TickHourData, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + tickDayData: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('tickDayData', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'tickDayData', + expressContext, + async () => indexer.getSubgraphEntity(TickDayData, id, block, info) + ); + }, + + tickDayDatas: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('tickDayDatas', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'tickDayDatas', + expressContext, + async () => indexer.getSubgraphEntities( + TickDayData, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + tokenDayData: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('tokenDayData', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'tokenDayData', + expressContext, + async () => indexer.getSubgraphEntity(TokenDayData, id, block, info) + ); + }, + + tokenDayDatas: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('tokenDayDatas', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'tokenDayDatas', + expressContext, + async () => indexer.getSubgraphEntities( + TokenDayData, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + tokenHourData: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('tokenHourData', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'tokenHourData', + expressContext, + async () => indexer.getSubgraphEntity(TokenHourData, id, block, info) + ); + }, + + tokenHourDatas: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('tokenHourDatas', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'tokenHourDatas', + expressContext, + async () => indexer.getSubgraphEntities( + TokenHourData, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + increaseEvent: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('increaseEvent', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'increaseEvent', + expressContext, + async () => indexer.getSubgraphEntity(IncreaseEvent, id, block, info) + ); + }, + + increaseEvents: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('increaseEvents', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'increaseEvents', + expressContext, + async () => indexer.getSubgraphEntities( + IncreaseEvent, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + decreaseEvent: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('decreaseEvent', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'decreaseEvent', + expressContext, + async () => indexer.getSubgraphEntity(DecreaseEvent, id, block, info) + ); + }, + + decreaseEvents: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('decreaseEvents', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'decreaseEvents', + expressContext, + async () => indexer.getSubgraphEntities( + DecreaseEvent, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + setProtocolFeeEvent: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('setProtocolFeeEvent', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'setProtocolFeeEvent', + expressContext, + async () => indexer.getSubgraphEntity(SetProtocolFeeEvent, id, block, info) + ); + }, + + setProtocolFeeEvents: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('setProtocolFeeEvents', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'setProtocolFeeEvents', + expressContext, + async () => indexer.getSubgraphEntities( + SetProtocolFeeEvent, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + events: async ( + _: any, + { blockHash, contractAddress, name }: { blockHash: string, contractAddress: string, name?: string }, + expressContext: ExpressContext + ) => { + log('events', blockHash, contractAddress, name); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'events', + expressContext, + async () => { + const block = await indexer.getBlockProgress(blockHash); + if (!block || !block.isComplete) { + throw new Error(`Block hash ${blockHash} number ${block?.blockNumber} not processed yet`); + } + + const events = await indexer.getEventsByFilter(blockHash, contractAddress, name); + return events.map(event => indexer.getResultEvent(event)); + } + ); + }, + + eventsInRange: async ( + _: any, + { fromBlockNumber, toBlockNumber }: { fromBlockNumber: number, toBlockNumber: number }, + expressContext: ExpressContext + ) => { + log('eventsInRange', fromBlockNumber, toBlockNumber); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'eventsInRange', + expressContext, + async () => { + const syncStatus = await indexer.getSyncStatus(); + + if (!syncStatus) { + throw new Error('No blocks processed yet'); + } + + if ((fromBlockNumber < syncStatus.initialIndexedBlockNumber) || (toBlockNumber > syncStatus.latestProcessedBlockNumber)) { + throw new Error(`Block range should be between ${syncStatus.initialIndexedBlockNumber} and ${syncStatus.latestProcessedBlockNumber}`); + } + + const events = await indexer.getEventsInRange(fromBlockNumber, toBlockNumber); + return events.map(event => indexer.getResultEvent(event)); + } + ); + }, + + getStateByCID: async ( + _: any, + { cid }: { cid: string }, + expressContext: ExpressContext + ) => { + log('getStateByCID', cid); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'getStateByCID', + expressContext, + async () => { + const state = await indexer.getStateByCID(cid); + + return state && state.block.isComplete ? getResultState(state) : undefined; + } + ); + }, + + getState: async ( + _: any, + { blockHash, contractAddress, kind }: { blockHash: string, contractAddress: string, kind: string }, + expressContext: ExpressContext + ) => { + log('getState', blockHash, contractAddress, kind); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'getState', + expressContext, + async () => { + const state = await indexer.getPrevState(blockHash, contractAddress, kind); + + return state && state.block.isComplete ? getResultState(state) : undefined; + } + ); + }, + + _meta: async ( + _: any, + { block = {} }: { block: BlockHeight }, + expressContext: ExpressContext + ) => { + log('_meta'); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + '_meta', + expressContext, + async () => indexer.getMetaData(block) + ); + }, + + getSyncStatus: async ( + _: any, + __: Record, + expressContext: ExpressContext + ) => { + log('getSyncStatus'); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'getSyncStatus', + expressContext, + async () => indexer.getSyncStatus() + ); + } + } + }; +}; diff --git a/packages/v3-watcher/src/schema.gql b/packages/v3-watcher/src/schema.gql new file mode 100644 index 0000000..9e2b792 --- /dev/null +++ b/packages/v3-watcher/src/schema.gql @@ -0,0 +1,5298 @@ +directive @cacheControl(maxAge: Int, inheritMaxAge: Boolean, scope: CacheControlScope) on FIELD_DEFINITION | OBJECT | INTERFACE | UNION + +enum CacheControlScope { + PUBLIC + PRIVATE +} + +scalar BigInt + +scalar BigDecimal + +scalar Bytes + +type Proof { + data: String! +} + +type _Block_ { + cid: String + hash: String! + number: Int! + timestamp: Int! + parentHash: String! +} + +type _Transaction_ { + hash: String! + index: Int! + from: String! + to: String! +} + +type ResultEvent { + block: _Block_! + tx: _Transaction_! + contract: String! + eventIndex: Int! + event: Event! + proof: Proof +} + +union Event = FeeAmountEnabledEvent | OwnerChangedEvent | PoolCreatedEvent | ApprovalEvent | ApprovalForAllEvent | CollectEvent | DecreaseLiquidityEvent | IncreaseLiquidityEvent | TransferEvent | BurnEvent | CollectProtocolEvent | FlashEvent | IncreaseObservationCardinalityNextEvent | InitializeEvent | MintEvent | SetFeeProtocolEvent | SwapEvent + +type FeeAmountEnabledEvent { + fee: Int! + tickSpacing: Int! +} + +type OwnerChangedEvent { + oldOwner: String! + newOwner: String! +} + +type PoolCreatedEvent { + token0: String! + token1: String! + fee: Int! + tickSpacing: Int! + pool: String! +} + +type ApprovalEvent { + owner: String! + approved: String! + tokenId: BigInt! +} + +type ApprovalForAllEvent { + owner: String! + operator: String! + approved: Boolean! +} + +type CollectEvent { + tokenId: BigInt + recipient: String! + amount0: BigInt! + amount1: BigInt! + owner: String + tickLower: Int + tickUpper: Int +} + +type DecreaseLiquidityEvent { + tokenId: BigInt! + liquidity: BigInt! + amount0: BigInt! + amount1: BigInt! +} + +type IncreaseLiquidityEvent { + tokenId: BigInt! + liquidity: BigInt! + amount0: BigInt! + amount1: BigInt! +} + +type TransferEvent { + from: String! + to: String! + tokenId: BigInt! +} + +type BurnEvent { + owner: String! + tickLower: Int! + tickUpper: Int! + amount: BigInt! + amount0: BigInt! + amount1: BigInt! +} + +type CollectProtocolEvent { + sender: String! + recipient: String! + amount0: BigInt! + amount1: BigInt! +} + +type FlashEvent { + sender: String! + recipient: String! + amount0: BigInt! + amount1: BigInt! + paid0: BigInt! + paid1: BigInt! +} + +type IncreaseObservationCardinalityNextEvent { + observationCardinalityNextOld: Int! + observationCardinalityNextNew: Int! +} + +type InitializeEvent { + sqrtPriceX96: BigInt! + tick: Int! +} + +type MintEvent { + sender: String! + owner: String! + tickLower: Int! + tickUpper: Int! + amount: BigInt! + amount0: BigInt! + amount1: BigInt! +} + +type SetFeeProtocolEvent { + feeProtocol0Old: Int! + feeProtocol1Old: Int! + feeProtocol0New: Int! + feeProtocol1New: Int! +} + +type SwapEvent { + sender: String! + recipient: String! + amount0: BigInt! + amount1: BigInt! + sqrtPriceX96: BigInt! + liquidity: BigInt! + tick: Int! +} + +input Block_height { + hash: Bytes + number: Int +} + +input BlockChangedFilter { + number_gte: Int! +} + +enum OrderDirection { + asc + desc +} + +enum Factory_orderBy { + id + poolCount + txCount + totalVolumeUSD + totalVolumeETH + totalFeesUSD + totalFeesETH + untrackedVolumeUSD + totalValueLockedUSD + totalValueLockedETH + totalValueLockedUSDUntracked + totalValueLockedETHUntracked + owner +} + +input Factory_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + poolCount: BigInt + poolCount_not: BigInt + poolCount_gt: BigInt + poolCount_lt: BigInt + poolCount_gte: BigInt + poolCount_lte: BigInt + poolCount_in: [BigInt!] + poolCount_not_in: [BigInt!] + txCount: BigInt + txCount_not: BigInt + txCount_gt: BigInt + txCount_lt: BigInt + txCount_gte: BigInt + txCount_lte: BigInt + txCount_in: [BigInt!] + txCount_not_in: [BigInt!] + totalVolumeUSD: BigDecimal + totalVolumeUSD_not: BigDecimal + totalVolumeUSD_gt: BigDecimal + totalVolumeUSD_lt: BigDecimal + totalVolumeUSD_gte: BigDecimal + totalVolumeUSD_lte: BigDecimal + totalVolumeUSD_in: [BigDecimal!] + totalVolumeUSD_not_in: [BigDecimal!] + totalVolumeETH: BigDecimal + totalVolumeETH_not: BigDecimal + totalVolumeETH_gt: BigDecimal + totalVolumeETH_lt: BigDecimal + totalVolumeETH_gte: BigDecimal + totalVolumeETH_lte: BigDecimal + totalVolumeETH_in: [BigDecimal!] + totalVolumeETH_not_in: [BigDecimal!] + totalFeesUSD: BigDecimal + totalFeesUSD_not: BigDecimal + totalFeesUSD_gt: BigDecimal + totalFeesUSD_lt: BigDecimal + totalFeesUSD_gte: BigDecimal + totalFeesUSD_lte: BigDecimal + totalFeesUSD_in: [BigDecimal!] + totalFeesUSD_not_in: [BigDecimal!] + totalFeesETH: BigDecimal + totalFeesETH_not: BigDecimal + totalFeesETH_gt: BigDecimal + totalFeesETH_lt: BigDecimal + totalFeesETH_gte: BigDecimal + totalFeesETH_lte: BigDecimal + totalFeesETH_in: [BigDecimal!] + totalFeesETH_not_in: [BigDecimal!] + untrackedVolumeUSD: BigDecimal + untrackedVolumeUSD_not: BigDecimal + untrackedVolumeUSD_gt: BigDecimal + untrackedVolumeUSD_lt: BigDecimal + untrackedVolumeUSD_gte: BigDecimal + untrackedVolumeUSD_lte: BigDecimal + untrackedVolumeUSD_in: [BigDecimal!] + untrackedVolumeUSD_not_in: [BigDecimal!] + totalValueLockedUSD: BigDecimal + totalValueLockedUSD_not: BigDecimal + totalValueLockedUSD_gt: BigDecimal + totalValueLockedUSD_lt: BigDecimal + totalValueLockedUSD_gte: BigDecimal + totalValueLockedUSD_lte: BigDecimal + totalValueLockedUSD_in: [BigDecimal!] + totalValueLockedUSD_not_in: [BigDecimal!] + totalValueLockedETH: BigDecimal + totalValueLockedETH_not: BigDecimal + totalValueLockedETH_gt: BigDecimal + totalValueLockedETH_lt: BigDecimal + totalValueLockedETH_gte: BigDecimal + totalValueLockedETH_lte: BigDecimal + totalValueLockedETH_in: [BigDecimal!] + totalValueLockedETH_not_in: [BigDecimal!] + totalValueLockedUSDUntracked: BigDecimal + totalValueLockedUSDUntracked_not: BigDecimal + totalValueLockedUSDUntracked_gt: BigDecimal + totalValueLockedUSDUntracked_lt: BigDecimal + totalValueLockedUSDUntracked_gte: BigDecimal + totalValueLockedUSDUntracked_lte: BigDecimal + totalValueLockedUSDUntracked_in: [BigDecimal!] + totalValueLockedUSDUntracked_not_in: [BigDecimal!] + totalValueLockedETHUntracked: BigDecimal + totalValueLockedETHUntracked_not: BigDecimal + totalValueLockedETHUntracked_gt: BigDecimal + totalValueLockedETHUntracked_lt: BigDecimal + totalValueLockedETHUntracked_gte: BigDecimal + totalValueLockedETHUntracked_lte: BigDecimal + totalValueLockedETHUntracked_in: [BigDecimal!] + totalValueLockedETHUntracked_not_in: [BigDecimal!] + owner: ID + owner_not: ID + owner_gt: ID + owner_lt: ID + owner_gte: ID + owner_lte: ID + owner_in: [ID!] + owner_not_in: [ID!] + _change_block: BlockChangedFilter + and: [Factory_filter] + or: [Factory_filter] +} + +enum Bundle_orderBy { + id + ethPriceUSD +} + +input Bundle_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + ethPriceUSD: BigDecimal + ethPriceUSD_not: BigDecimal + ethPriceUSD_gt: BigDecimal + ethPriceUSD_lt: BigDecimal + ethPriceUSD_gte: BigDecimal + ethPriceUSD_lte: BigDecimal + ethPriceUSD_in: [BigDecimal!] + ethPriceUSD_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [Bundle_filter] + or: [Bundle_filter] +} + +enum Token_orderBy { + id + symbol + name + decimals + totalSupply + volume + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + poolCount + totalValueLocked + totalValueLockedUSD + totalValueLockedUSDUntracked + derivedETH + whitelistPools + tokenDayData +} + +input Token_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + symbol: String + symbol_not: String + symbol_gt: String + symbol_lt: String + symbol_gte: String + symbol_lte: String + symbol_in: [String!] + symbol_not_in: [String!] + symbol_starts_with: String + symbol_starts_with_nocase: String + symbol_not_starts_with: String + symbol_not_starts_with_nocase: String + symbol_ends_with: String + symbol_ends_with_nocase: String + symbol_not_ends_with: String + symbol_not_ends_with_nocase: String + symbol_contains: String + symbol_not_contains: String + symbol_contains_nocase: String + symbol_not_contains_nocase: String + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + name_contains: String + name_not_contains: String + name_contains_nocase: String + name_not_contains_nocase: String + decimals: BigInt + decimals_not: BigInt + decimals_gt: BigInt + decimals_lt: BigInt + decimals_gte: BigInt + decimals_lte: BigInt + decimals_in: [BigInt!] + decimals_not_in: [BigInt!] + totalSupply: BigInt + totalSupply_not: BigInt + totalSupply_gt: BigInt + totalSupply_lt: BigInt + totalSupply_gte: BigInt + totalSupply_lte: BigInt + totalSupply_in: [BigInt!] + totalSupply_not_in: [BigInt!] + volume: BigDecimal + volume_not: BigDecimal + volume_gt: BigDecimal + volume_lt: BigDecimal + volume_gte: BigDecimal + volume_lte: BigDecimal + volume_in: [BigDecimal!] + volume_not_in: [BigDecimal!] + volumeUSD: BigDecimal + volumeUSD_not: BigDecimal + volumeUSD_gt: BigDecimal + volumeUSD_lt: BigDecimal + volumeUSD_gte: BigDecimal + volumeUSD_lte: BigDecimal + volumeUSD_in: [BigDecimal!] + volumeUSD_not_in: [BigDecimal!] + untrackedVolumeUSD: BigDecimal + untrackedVolumeUSD_not: BigDecimal + untrackedVolumeUSD_gt: BigDecimal + untrackedVolumeUSD_lt: BigDecimal + untrackedVolumeUSD_gte: BigDecimal + untrackedVolumeUSD_lte: BigDecimal + untrackedVolumeUSD_in: [BigDecimal!] + untrackedVolumeUSD_not_in: [BigDecimal!] + feesUSD: BigDecimal + feesUSD_not: BigDecimal + feesUSD_gt: BigDecimal + feesUSD_lt: BigDecimal + feesUSD_gte: BigDecimal + feesUSD_lte: BigDecimal + feesUSD_in: [BigDecimal!] + feesUSD_not_in: [BigDecimal!] + txCount: BigInt + txCount_not: BigInt + txCount_gt: BigInt + txCount_lt: BigInt + txCount_gte: BigInt + txCount_lte: BigInt + txCount_in: [BigInt!] + txCount_not_in: [BigInt!] + poolCount: BigInt + poolCount_not: BigInt + poolCount_gt: BigInt + poolCount_lt: BigInt + poolCount_gte: BigInt + poolCount_lte: BigInt + poolCount_in: [BigInt!] + poolCount_not_in: [BigInt!] + totalValueLocked: BigDecimal + totalValueLocked_not: BigDecimal + totalValueLocked_gt: BigDecimal + totalValueLocked_lt: BigDecimal + totalValueLocked_gte: BigDecimal + totalValueLocked_lte: BigDecimal + totalValueLocked_in: [BigDecimal!] + totalValueLocked_not_in: [BigDecimal!] + totalValueLockedUSD: BigDecimal + totalValueLockedUSD_not: BigDecimal + totalValueLockedUSD_gt: BigDecimal + totalValueLockedUSD_lt: BigDecimal + totalValueLockedUSD_gte: BigDecimal + totalValueLockedUSD_lte: BigDecimal + totalValueLockedUSD_in: [BigDecimal!] + totalValueLockedUSD_not_in: [BigDecimal!] + totalValueLockedUSDUntracked: BigDecimal + totalValueLockedUSDUntracked_not: BigDecimal + totalValueLockedUSDUntracked_gt: BigDecimal + totalValueLockedUSDUntracked_lt: BigDecimal + totalValueLockedUSDUntracked_gte: BigDecimal + totalValueLockedUSDUntracked_lte: BigDecimal + totalValueLockedUSDUntracked_in: [BigDecimal!] + totalValueLockedUSDUntracked_not_in: [BigDecimal!] + derivedETH: BigDecimal + derivedETH_not: BigDecimal + derivedETH_gt: BigDecimal + derivedETH_lt: BigDecimal + derivedETH_gte: BigDecimal + derivedETH_lte: BigDecimal + derivedETH_in: [BigDecimal!] + derivedETH_not_in: [BigDecimal!] + whitelistPools: [String!] + whitelistPools_not: [String!] + whitelistPools_contains: [String!] + whitelistPools_not_contains: [String!] + whitelistPools_contains_nocase: [String!] + whitelistPools_not_contains_nocase: [String!] + whitelistPools_: Pool_filter + tokenDayData_: TokenDayData_filter + _change_block: BlockChangedFilter + and: [Token_filter] + or: [Token_filter] +} + +enum Pool_orderBy { + id + createdAtTimestamp + createdAtBlockNumber + token0 + token0__id + token0__symbol + token0__name + token0__decimals + token0__totalSupply + token0__volume + token0__volumeUSD + token0__untrackedVolumeUSD + token0__feesUSD + token0__txCount + token0__poolCount + token0__totalValueLocked + token0__totalValueLockedUSD + token0__totalValueLockedUSDUntracked + token0__derivedETH + token1 + token1__id + token1__symbol + token1__name + token1__decimals + token1__totalSupply + token1__volume + token1__volumeUSD + token1__untrackedVolumeUSD + token1__feesUSD + token1__txCount + token1__poolCount + token1__totalValueLocked + token1__totalValueLockedUSD + token1__totalValueLockedUSDUntracked + token1__derivedETH + feeTier + liquidity + sqrtPrice + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + token0Price + token1Price + tick + observationIndex + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + txCount + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + totalValueLockedToken0 + totalValueLockedToken1 + totalValueLockedETH + totalValueLockedUSD + totalValueLockedUSDUntracked + isProtocolFeeEnabled + liquidityProviderCount + poolHourData + poolDayData + mints + burns + swaps + collects + ticks +} + +input Pool_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + createdAtTimestamp: BigInt + createdAtTimestamp_not: BigInt + createdAtTimestamp_gt: BigInt + createdAtTimestamp_lt: BigInt + createdAtTimestamp_gte: BigInt + createdAtTimestamp_lte: BigInt + createdAtTimestamp_in: [BigInt!] + createdAtTimestamp_not_in: [BigInt!] + createdAtBlockNumber: BigInt + createdAtBlockNumber_not: BigInt + createdAtBlockNumber_gt: BigInt + createdAtBlockNumber_lt: BigInt + createdAtBlockNumber_gte: BigInt + createdAtBlockNumber_lte: BigInt + createdAtBlockNumber_in: [BigInt!] + createdAtBlockNumber_not_in: [BigInt!] + token0: String + token0_not: String + token0_gt: String + token0_lt: String + token0_gte: String + token0_lte: String + token0_in: [String!] + token0_not_in: [String!] + token0_starts_with: String + token0_starts_with_nocase: String + token0_not_starts_with: String + token0_not_starts_with_nocase: String + token0_ends_with: String + token0_ends_with_nocase: String + token0_not_ends_with: String + token0_not_ends_with_nocase: String + token0_contains: String + token0_not_contains: String + token0_contains_nocase: String + token0_not_contains_nocase: String + token0_: Token_filter + token1: String + token1_not: String + token1_gt: String + token1_lt: String + token1_gte: String + token1_lte: String + token1_in: [String!] + token1_not_in: [String!] + token1_starts_with: String + token1_starts_with_nocase: String + token1_not_starts_with: String + token1_not_starts_with_nocase: String + token1_ends_with: String + token1_ends_with_nocase: String + token1_not_ends_with: String + token1_not_ends_with_nocase: String + token1_contains: String + token1_not_contains: String + token1_contains_nocase: String + token1_not_contains_nocase: String + token1_: Token_filter + feeTier: BigInt + feeTier_not: BigInt + feeTier_gt: BigInt + feeTier_lt: BigInt + feeTier_gte: BigInt + feeTier_lte: BigInt + feeTier_in: [BigInt!] + feeTier_not_in: [BigInt!] + liquidity: BigInt + liquidity_not: BigInt + liquidity_gt: BigInt + liquidity_lt: BigInt + liquidity_gte: BigInt + liquidity_lte: BigInt + liquidity_in: [BigInt!] + liquidity_not_in: [BigInt!] + sqrtPrice: BigInt + sqrtPrice_not: BigInt + sqrtPrice_gt: BigInt + sqrtPrice_lt: BigInt + sqrtPrice_gte: BigInt + sqrtPrice_lte: BigInt + sqrtPrice_in: [BigInt!] + sqrtPrice_not_in: [BigInt!] + feeGrowthGlobal0X128: BigInt + feeGrowthGlobal0X128_not: BigInt + feeGrowthGlobal0X128_gt: BigInt + feeGrowthGlobal0X128_lt: BigInt + feeGrowthGlobal0X128_gte: BigInt + feeGrowthGlobal0X128_lte: BigInt + feeGrowthGlobal0X128_in: [BigInt!] + feeGrowthGlobal0X128_not_in: [BigInt!] + feeGrowthGlobal1X128: BigInt + feeGrowthGlobal1X128_not: BigInt + feeGrowthGlobal1X128_gt: BigInt + feeGrowthGlobal1X128_lt: BigInt + feeGrowthGlobal1X128_gte: BigInt + feeGrowthGlobal1X128_lte: BigInt + feeGrowthGlobal1X128_in: [BigInt!] + feeGrowthGlobal1X128_not_in: [BigInt!] + token0Price: BigDecimal + token0Price_not: BigDecimal + token0Price_gt: BigDecimal + token0Price_lt: BigDecimal + token0Price_gte: BigDecimal + token0Price_lte: BigDecimal + token0Price_in: [BigDecimal!] + token0Price_not_in: [BigDecimal!] + token1Price: BigDecimal + token1Price_not: BigDecimal + token1Price_gt: BigDecimal + token1Price_lt: BigDecimal + token1Price_gte: BigDecimal + token1Price_lte: BigDecimal + token1Price_in: [BigDecimal!] + token1Price_not_in: [BigDecimal!] + tick: BigInt + tick_not: BigInt + tick_gt: BigInt + tick_lt: BigInt + tick_gte: BigInt + tick_lte: BigInt + tick_in: [BigInt!] + tick_not_in: [BigInt!] + observationIndex: BigInt + observationIndex_not: BigInt + observationIndex_gt: BigInt + observationIndex_lt: BigInt + observationIndex_gte: BigInt + observationIndex_lte: BigInt + observationIndex_in: [BigInt!] + observationIndex_not_in: [BigInt!] + volumeToken0: BigDecimal + volumeToken0_not: BigDecimal + volumeToken0_gt: BigDecimal + volumeToken0_lt: BigDecimal + volumeToken0_gte: BigDecimal + volumeToken0_lte: BigDecimal + volumeToken0_in: [BigDecimal!] + volumeToken0_not_in: [BigDecimal!] + volumeToken1: BigDecimal + volumeToken1_not: BigDecimal + volumeToken1_gt: BigDecimal + volumeToken1_lt: BigDecimal + volumeToken1_gte: BigDecimal + volumeToken1_lte: BigDecimal + volumeToken1_in: [BigDecimal!] + volumeToken1_not_in: [BigDecimal!] + volumeUSD: BigDecimal + volumeUSD_not: BigDecimal + volumeUSD_gt: BigDecimal + volumeUSD_lt: BigDecimal + volumeUSD_gte: BigDecimal + volumeUSD_lte: BigDecimal + volumeUSD_in: [BigDecimal!] + volumeUSD_not_in: [BigDecimal!] + untrackedVolumeUSD: BigDecimal + untrackedVolumeUSD_not: BigDecimal + untrackedVolumeUSD_gt: BigDecimal + untrackedVolumeUSD_lt: BigDecimal + untrackedVolumeUSD_gte: BigDecimal + untrackedVolumeUSD_lte: BigDecimal + untrackedVolumeUSD_in: [BigDecimal!] + untrackedVolumeUSD_not_in: [BigDecimal!] + feesUSD: BigDecimal + feesUSD_not: BigDecimal + feesUSD_gt: BigDecimal + feesUSD_lt: BigDecimal + feesUSD_gte: BigDecimal + feesUSD_lte: BigDecimal + feesUSD_in: [BigDecimal!] + feesUSD_not_in: [BigDecimal!] + txCount: BigInt + txCount_not: BigInt + txCount_gt: BigInt + txCount_lt: BigInt + txCount_gte: BigInt + txCount_lte: BigInt + txCount_in: [BigInt!] + txCount_not_in: [BigInt!] + collectedFeesToken0: BigDecimal + collectedFeesToken0_not: BigDecimal + collectedFeesToken0_gt: BigDecimal + collectedFeesToken0_lt: BigDecimal + collectedFeesToken0_gte: BigDecimal + collectedFeesToken0_lte: BigDecimal + collectedFeesToken0_in: [BigDecimal!] + collectedFeesToken0_not_in: [BigDecimal!] + collectedFeesToken1: BigDecimal + collectedFeesToken1_not: BigDecimal + collectedFeesToken1_gt: BigDecimal + collectedFeesToken1_lt: BigDecimal + collectedFeesToken1_gte: BigDecimal + collectedFeesToken1_lte: BigDecimal + collectedFeesToken1_in: [BigDecimal!] + collectedFeesToken1_not_in: [BigDecimal!] + collectedFeesUSD: BigDecimal + collectedFeesUSD_not: BigDecimal + collectedFeesUSD_gt: BigDecimal + collectedFeesUSD_lt: BigDecimal + collectedFeesUSD_gte: BigDecimal + collectedFeesUSD_lte: BigDecimal + collectedFeesUSD_in: [BigDecimal!] + collectedFeesUSD_not_in: [BigDecimal!] + totalValueLockedToken0: BigDecimal + totalValueLockedToken0_not: BigDecimal + totalValueLockedToken0_gt: BigDecimal + totalValueLockedToken0_lt: BigDecimal + totalValueLockedToken0_gte: BigDecimal + totalValueLockedToken0_lte: BigDecimal + totalValueLockedToken0_in: [BigDecimal!] + totalValueLockedToken0_not_in: [BigDecimal!] + totalValueLockedToken1: BigDecimal + totalValueLockedToken1_not: BigDecimal + totalValueLockedToken1_gt: BigDecimal + totalValueLockedToken1_lt: BigDecimal + totalValueLockedToken1_gte: BigDecimal + totalValueLockedToken1_lte: BigDecimal + totalValueLockedToken1_in: [BigDecimal!] + totalValueLockedToken1_not_in: [BigDecimal!] + totalValueLockedETH: BigDecimal + totalValueLockedETH_not: BigDecimal + totalValueLockedETH_gt: BigDecimal + totalValueLockedETH_lt: BigDecimal + totalValueLockedETH_gte: BigDecimal + totalValueLockedETH_lte: BigDecimal + totalValueLockedETH_in: [BigDecimal!] + totalValueLockedETH_not_in: [BigDecimal!] + totalValueLockedUSD: BigDecimal + totalValueLockedUSD_not: BigDecimal + totalValueLockedUSD_gt: BigDecimal + totalValueLockedUSD_lt: BigDecimal + totalValueLockedUSD_gte: BigDecimal + totalValueLockedUSD_lte: BigDecimal + totalValueLockedUSD_in: [BigDecimal!] + totalValueLockedUSD_not_in: [BigDecimal!] + totalValueLockedUSDUntracked: BigDecimal + totalValueLockedUSDUntracked_not: BigDecimal + totalValueLockedUSDUntracked_gt: BigDecimal + totalValueLockedUSDUntracked_lt: BigDecimal + totalValueLockedUSDUntracked_gte: BigDecimal + totalValueLockedUSDUntracked_lte: BigDecimal + totalValueLockedUSDUntracked_in: [BigDecimal!] + totalValueLockedUSDUntracked_not_in: [BigDecimal!] + isProtocolFeeEnabled: Boolean + isProtocolFeeEnabled_not: Boolean + isProtocolFeeEnabled_gt: Boolean + isProtocolFeeEnabled_lt: Boolean + isProtocolFeeEnabled_gte: Boolean + isProtocolFeeEnabled_lte: Boolean + isProtocolFeeEnabled_in: [Boolean!] + isProtocolFeeEnabled_not_in: [Boolean!] + liquidityProviderCount: BigInt + liquidityProviderCount_not: BigInt + liquidityProviderCount_gt: BigInt + liquidityProviderCount_lt: BigInt + liquidityProviderCount_gte: BigInt + liquidityProviderCount_lte: BigInt + liquidityProviderCount_in: [BigInt!] + liquidityProviderCount_not_in: [BigInt!] + poolHourData_: PoolHourData_filter + poolDayData_: PoolDayData_filter + mints_: Mint_filter + burns_: Burn_filter + swaps_: Swap_filter + collects_: Collect_filter + ticks_: Tick_filter + _change_block: BlockChangedFilter + and: [Pool_filter] + or: [Pool_filter] +} + +enum Tick_orderBy { + id + poolAddress + tickIdx + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + liquidityGross + liquidityNet + price0 + price1 + volumeToken0 + volumeToken1 + volumeUSD + untrackedVolumeUSD + feesUSD + collectedFeesToken0 + collectedFeesToken1 + collectedFeesUSD + createdAtTimestamp + createdAtBlockNumber + liquidityProviderCount + feeGrowthOutside0X128 + feeGrowthOutside1X128 +} + +input Tick_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + poolAddress: String + poolAddress_not: String + poolAddress_gt: String + poolAddress_lt: String + poolAddress_gte: String + poolAddress_lte: String + poolAddress_in: [String!] + poolAddress_not_in: [String!] + poolAddress_starts_with: String + poolAddress_starts_with_nocase: String + poolAddress_not_starts_with: String + poolAddress_not_starts_with_nocase: String + poolAddress_ends_with: String + poolAddress_ends_with_nocase: String + poolAddress_not_ends_with: String + poolAddress_not_ends_with_nocase: String + poolAddress_contains: String + poolAddress_not_contains: String + poolAddress_contains_nocase: String + poolAddress_not_contains_nocase: String + tickIdx: BigInt + tickIdx_not: BigInt + tickIdx_gt: BigInt + tickIdx_lt: BigInt + tickIdx_gte: BigInt + tickIdx_lte: BigInt + tickIdx_in: [BigInt!] + tickIdx_not_in: [BigInt!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + liquidityGross: BigInt + liquidityGross_not: BigInt + liquidityGross_gt: BigInt + liquidityGross_lt: BigInt + liquidityGross_gte: BigInt + liquidityGross_lte: BigInt + liquidityGross_in: [BigInt!] + liquidityGross_not_in: [BigInt!] + liquidityNet: BigInt + liquidityNet_not: BigInt + liquidityNet_gt: BigInt + liquidityNet_lt: BigInt + liquidityNet_gte: BigInt + liquidityNet_lte: BigInt + liquidityNet_in: [BigInt!] + liquidityNet_not_in: [BigInt!] + price0: BigDecimal + price0_not: BigDecimal + price0_gt: BigDecimal + price0_lt: BigDecimal + price0_gte: BigDecimal + price0_lte: BigDecimal + price0_in: [BigDecimal!] + price0_not_in: [BigDecimal!] + price1: BigDecimal + price1_not: BigDecimal + price1_gt: BigDecimal + price1_lt: BigDecimal + price1_gte: BigDecimal + price1_lte: BigDecimal + price1_in: [BigDecimal!] + price1_not_in: [BigDecimal!] + volumeToken0: BigDecimal + volumeToken0_not: BigDecimal + volumeToken0_gt: BigDecimal + volumeToken0_lt: BigDecimal + volumeToken0_gte: BigDecimal + volumeToken0_lte: BigDecimal + volumeToken0_in: [BigDecimal!] + volumeToken0_not_in: [BigDecimal!] + volumeToken1: BigDecimal + volumeToken1_not: BigDecimal + volumeToken1_gt: BigDecimal + volumeToken1_lt: BigDecimal + volumeToken1_gte: BigDecimal + volumeToken1_lte: BigDecimal + volumeToken1_in: [BigDecimal!] + volumeToken1_not_in: [BigDecimal!] + volumeUSD: BigDecimal + volumeUSD_not: BigDecimal + volumeUSD_gt: BigDecimal + volumeUSD_lt: BigDecimal + volumeUSD_gte: BigDecimal + volumeUSD_lte: BigDecimal + volumeUSD_in: [BigDecimal!] + volumeUSD_not_in: [BigDecimal!] + untrackedVolumeUSD: BigDecimal + untrackedVolumeUSD_not: BigDecimal + untrackedVolumeUSD_gt: BigDecimal + untrackedVolumeUSD_lt: BigDecimal + untrackedVolumeUSD_gte: BigDecimal + untrackedVolumeUSD_lte: BigDecimal + untrackedVolumeUSD_in: [BigDecimal!] + untrackedVolumeUSD_not_in: [BigDecimal!] + feesUSD: BigDecimal + feesUSD_not: BigDecimal + feesUSD_gt: BigDecimal + feesUSD_lt: BigDecimal + feesUSD_gte: BigDecimal + feesUSD_lte: BigDecimal + feesUSD_in: [BigDecimal!] + feesUSD_not_in: [BigDecimal!] + collectedFeesToken0: BigDecimal + collectedFeesToken0_not: BigDecimal + collectedFeesToken0_gt: BigDecimal + collectedFeesToken0_lt: BigDecimal + collectedFeesToken0_gte: BigDecimal + collectedFeesToken0_lte: BigDecimal + collectedFeesToken0_in: [BigDecimal!] + collectedFeesToken0_not_in: [BigDecimal!] + collectedFeesToken1: BigDecimal + collectedFeesToken1_not: BigDecimal + collectedFeesToken1_gt: BigDecimal + collectedFeesToken1_lt: BigDecimal + collectedFeesToken1_gte: BigDecimal + collectedFeesToken1_lte: BigDecimal + collectedFeesToken1_in: [BigDecimal!] + collectedFeesToken1_not_in: [BigDecimal!] + collectedFeesUSD: BigDecimal + collectedFeesUSD_not: BigDecimal + collectedFeesUSD_gt: BigDecimal + collectedFeesUSD_lt: BigDecimal + collectedFeesUSD_gte: BigDecimal + collectedFeesUSD_lte: BigDecimal + collectedFeesUSD_in: [BigDecimal!] + collectedFeesUSD_not_in: [BigDecimal!] + createdAtTimestamp: BigInt + createdAtTimestamp_not: BigInt + createdAtTimestamp_gt: BigInt + createdAtTimestamp_lt: BigInt + createdAtTimestamp_gte: BigInt + createdAtTimestamp_lte: BigInt + createdAtTimestamp_in: [BigInt!] + createdAtTimestamp_not_in: [BigInt!] + createdAtBlockNumber: BigInt + createdAtBlockNumber_not: BigInt + createdAtBlockNumber_gt: BigInt + createdAtBlockNumber_lt: BigInt + createdAtBlockNumber_gte: BigInt + createdAtBlockNumber_lte: BigInt + createdAtBlockNumber_in: [BigInt!] + createdAtBlockNumber_not_in: [BigInt!] + liquidityProviderCount: BigInt + liquidityProviderCount_not: BigInt + liquidityProviderCount_gt: BigInt + liquidityProviderCount_lt: BigInt + liquidityProviderCount_gte: BigInt + liquidityProviderCount_lte: BigInt + liquidityProviderCount_in: [BigInt!] + liquidityProviderCount_not_in: [BigInt!] + feeGrowthOutside0X128: BigInt + feeGrowthOutside0X128_not: BigInt + feeGrowthOutside0X128_gt: BigInt + feeGrowthOutside0X128_lt: BigInt + feeGrowthOutside0X128_gte: BigInt + feeGrowthOutside0X128_lte: BigInt + feeGrowthOutside0X128_in: [BigInt!] + feeGrowthOutside0X128_not_in: [BigInt!] + feeGrowthOutside1X128: BigInt + feeGrowthOutside1X128_not: BigInt + feeGrowthOutside1X128_gt: BigInt + feeGrowthOutside1X128_lt: BigInt + feeGrowthOutside1X128_gte: BigInt + feeGrowthOutside1X128_lte: BigInt + feeGrowthOutside1X128_in: [BigInt!] + feeGrowthOutside1X128_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [Tick_filter] + or: [Tick_filter] +} + +enum Position_orderBy { + id + owner + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + token0 + token0__id + token0__symbol + token0__name + token0__decimals + token0__totalSupply + token0__volume + token0__volumeUSD + token0__untrackedVolumeUSD + token0__feesUSD + token0__txCount + token0__poolCount + token0__totalValueLocked + token0__totalValueLockedUSD + token0__totalValueLockedUSDUntracked + token0__derivedETH + token1 + token1__id + token1__symbol + token1__name + token1__decimals + token1__totalSupply + token1__volume + token1__volumeUSD + token1__untrackedVolumeUSD + token1__feesUSD + token1__txCount + token1__poolCount + token1__totalValueLocked + token1__totalValueLockedUSD + token1__totalValueLockedUSDUntracked + token1__derivedETH + tickLower + tickLower__id + tickLower__poolAddress + tickLower__tickIdx + tickLower__liquidityGross + tickLower__liquidityNet + tickLower__price0 + tickLower__price1 + tickLower__volumeToken0 + tickLower__volumeToken1 + tickLower__volumeUSD + tickLower__untrackedVolumeUSD + tickLower__feesUSD + tickLower__collectedFeesToken0 + tickLower__collectedFeesToken1 + tickLower__collectedFeesUSD + tickLower__createdAtTimestamp + tickLower__createdAtBlockNumber + tickLower__liquidityProviderCount + tickLower__feeGrowthOutside0X128 + tickLower__feeGrowthOutside1X128 + tickUpper + tickUpper__id + tickUpper__poolAddress + tickUpper__tickIdx + tickUpper__liquidityGross + tickUpper__liquidityNet + tickUpper__price0 + tickUpper__price1 + tickUpper__volumeToken0 + tickUpper__volumeToken1 + tickUpper__volumeUSD + tickUpper__untrackedVolumeUSD + tickUpper__feesUSD + tickUpper__collectedFeesToken0 + tickUpper__collectedFeesToken1 + tickUpper__collectedFeesUSD + tickUpper__createdAtTimestamp + tickUpper__createdAtBlockNumber + tickUpper__liquidityProviderCount + tickUpper__feeGrowthOutside0X128 + tickUpper__feeGrowthOutside1X128 + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedToken0 + collectedToken1 + collectedFeesToken0 + collectedFeesToken1 + amountDepositedUSD + amountWithdrawnUSD + amountCollectedUSD + transaction + transaction__id + transaction__blockNumber + transaction__timestamp + transaction__gasUsed + transaction__gasPrice + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 + increaseEvents + decreaseEvents +} + +input Position_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + owner: Bytes + owner_not: Bytes + owner_gt: Bytes + owner_lt: Bytes + owner_gte: Bytes + owner_lte: Bytes + owner_in: [Bytes!] + owner_not_in: [Bytes!] + owner_contains: Bytes + owner_not_contains: Bytes + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + token0: String + token0_not: String + token0_gt: String + token0_lt: String + token0_gte: String + token0_lte: String + token0_in: [String!] + token0_not_in: [String!] + token0_starts_with: String + token0_starts_with_nocase: String + token0_not_starts_with: String + token0_not_starts_with_nocase: String + token0_ends_with: String + token0_ends_with_nocase: String + token0_not_ends_with: String + token0_not_ends_with_nocase: String + token0_contains: String + token0_not_contains: String + token0_contains_nocase: String + token0_not_contains_nocase: String + token0_: Token_filter + token1: String + token1_not: String + token1_gt: String + token1_lt: String + token1_gte: String + token1_lte: String + token1_in: [String!] + token1_not_in: [String!] + token1_starts_with: String + token1_starts_with_nocase: String + token1_not_starts_with: String + token1_not_starts_with_nocase: String + token1_ends_with: String + token1_ends_with_nocase: String + token1_not_ends_with: String + token1_not_ends_with_nocase: String + token1_contains: String + token1_not_contains: String + token1_contains_nocase: String + token1_not_contains_nocase: String + token1_: Token_filter + tickLower: String + tickLower_not: String + tickLower_gt: String + tickLower_lt: String + tickLower_gte: String + tickLower_lte: String + tickLower_in: [String!] + tickLower_not_in: [String!] + tickLower_starts_with: String + tickLower_starts_with_nocase: String + tickLower_not_starts_with: String + tickLower_not_starts_with_nocase: String + tickLower_ends_with: String + tickLower_ends_with_nocase: String + tickLower_not_ends_with: String + tickLower_not_ends_with_nocase: String + tickLower_contains: String + tickLower_not_contains: String + tickLower_contains_nocase: String + tickLower_not_contains_nocase: String + tickLower_: Tick_filter + tickUpper: String + tickUpper_not: String + tickUpper_gt: String + tickUpper_lt: String + tickUpper_gte: String + tickUpper_lte: String + tickUpper_in: [String!] + tickUpper_not_in: [String!] + tickUpper_starts_with: String + tickUpper_starts_with_nocase: String + tickUpper_not_starts_with: String + tickUpper_not_starts_with_nocase: String + tickUpper_ends_with: String + tickUpper_ends_with_nocase: String + tickUpper_not_ends_with: String + tickUpper_not_ends_with_nocase: String + tickUpper_contains: String + tickUpper_not_contains: String + tickUpper_contains_nocase: String + tickUpper_not_contains_nocase: String + tickUpper_: Tick_filter + liquidity: BigInt + liquidity_not: BigInt + liquidity_gt: BigInt + liquidity_lt: BigInt + liquidity_gte: BigInt + liquidity_lte: BigInt + liquidity_in: [BigInt!] + liquidity_not_in: [BigInt!] + depositedToken0: BigDecimal + depositedToken0_not: BigDecimal + depositedToken0_gt: BigDecimal + depositedToken0_lt: BigDecimal + depositedToken0_gte: BigDecimal + depositedToken0_lte: BigDecimal + depositedToken0_in: [BigDecimal!] + depositedToken0_not_in: [BigDecimal!] + depositedToken1: BigDecimal + depositedToken1_not: BigDecimal + depositedToken1_gt: BigDecimal + depositedToken1_lt: BigDecimal + depositedToken1_gte: BigDecimal + depositedToken1_lte: BigDecimal + depositedToken1_in: [BigDecimal!] + depositedToken1_not_in: [BigDecimal!] + withdrawnToken0: BigDecimal + withdrawnToken0_not: BigDecimal + withdrawnToken0_gt: BigDecimal + withdrawnToken0_lt: BigDecimal + withdrawnToken0_gte: BigDecimal + withdrawnToken0_lte: BigDecimal + withdrawnToken0_in: [BigDecimal!] + withdrawnToken0_not_in: [BigDecimal!] + withdrawnToken1: BigDecimal + withdrawnToken1_not: BigDecimal + withdrawnToken1_gt: BigDecimal + withdrawnToken1_lt: BigDecimal + withdrawnToken1_gte: BigDecimal + withdrawnToken1_lte: BigDecimal + withdrawnToken1_in: [BigDecimal!] + withdrawnToken1_not_in: [BigDecimal!] + collectedToken0: BigDecimal + collectedToken0_not: BigDecimal + collectedToken0_gt: BigDecimal + collectedToken0_lt: BigDecimal + collectedToken0_gte: BigDecimal + collectedToken0_lte: BigDecimal + collectedToken0_in: [BigDecimal!] + collectedToken0_not_in: [BigDecimal!] + collectedToken1: BigDecimal + collectedToken1_not: BigDecimal + collectedToken1_gt: BigDecimal + collectedToken1_lt: BigDecimal + collectedToken1_gte: BigDecimal + collectedToken1_lte: BigDecimal + collectedToken1_in: [BigDecimal!] + collectedToken1_not_in: [BigDecimal!] + collectedFeesToken0: BigDecimal + collectedFeesToken0_not: BigDecimal + collectedFeesToken0_gt: BigDecimal + collectedFeesToken0_lt: BigDecimal + collectedFeesToken0_gte: BigDecimal + collectedFeesToken0_lte: BigDecimal + collectedFeesToken0_in: [BigDecimal!] + collectedFeesToken0_not_in: [BigDecimal!] + collectedFeesToken1: BigDecimal + collectedFeesToken1_not: BigDecimal + collectedFeesToken1_gt: BigDecimal + collectedFeesToken1_lt: BigDecimal + collectedFeesToken1_gte: BigDecimal + collectedFeesToken1_lte: BigDecimal + collectedFeesToken1_in: [BigDecimal!] + collectedFeesToken1_not_in: [BigDecimal!] + amountDepositedUSD: BigDecimal + amountDepositedUSD_not: BigDecimal + amountDepositedUSD_gt: BigDecimal + amountDepositedUSD_lt: BigDecimal + amountDepositedUSD_gte: BigDecimal + amountDepositedUSD_lte: BigDecimal + amountDepositedUSD_in: [BigDecimal!] + amountDepositedUSD_not_in: [BigDecimal!] + amountWithdrawnUSD: BigDecimal + amountWithdrawnUSD_not: BigDecimal + amountWithdrawnUSD_gt: BigDecimal + amountWithdrawnUSD_lt: BigDecimal + amountWithdrawnUSD_gte: BigDecimal + amountWithdrawnUSD_lte: BigDecimal + amountWithdrawnUSD_in: [BigDecimal!] + amountWithdrawnUSD_not_in: [BigDecimal!] + amountCollectedUSD: BigDecimal + amountCollectedUSD_not: BigDecimal + amountCollectedUSD_gt: BigDecimal + amountCollectedUSD_lt: BigDecimal + amountCollectedUSD_gte: BigDecimal + amountCollectedUSD_lte: BigDecimal + amountCollectedUSD_in: [BigDecimal!] + amountCollectedUSD_not_in: [BigDecimal!] + transaction: String + transaction_not: String + transaction_gt: String + transaction_lt: String + transaction_gte: String + transaction_lte: String + transaction_in: [String!] + transaction_not_in: [String!] + transaction_starts_with: String + transaction_starts_with_nocase: String + transaction_not_starts_with: String + transaction_not_starts_with_nocase: String + transaction_ends_with: String + transaction_ends_with_nocase: String + transaction_not_ends_with: String + transaction_not_ends_with_nocase: String + transaction_contains: String + transaction_not_contains: String + transaction_contains_nocase: String + transaction_not_contains_nocase: String + transaction_: Transaction_filter + feeGrowthInside0LastX128: BigInt + feeGrowthInside0LastX128_not: BigInt + feeGrowthInside0LastX128_gt: BigInt + feeGrowthInside0LastX128_lt: BigInt + feeGrowthInside0LastX128_gte: BigInt + feeGrowthInside0LastX128_lte: BigInt + feeGrowthInside0LastX128_in: [BigInt!] + feeGrowthInside0LastX128_not_in: [BigInt!] + feeGrowthInside1LastX128: BigInt + feeGrowthInside1LastX128_not: BigInt + feeGrowthInside1LastX128_gt: BigInt + feeGrowthInside1LastX128_lt: BigInt + feeGrowthInside1LastX128_gte: BigInt + feeGrowthInside1LastX128_lte: BigInt + feeGrowthInside1LastX128_in: [BigInt!] + feeGrowthInside1LastX128_not_in: [BigInt!] + increaseEvents_: IncreaseEvent_filter + decreaseEvents_: IncreaseEvent_filter + _change_block: BlockChangedFilter + and: [Position_filter] + or: [Position_filter] +} + +enum PositionSnapshot_orderBy { + id + owner + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + position + position__id + position__owner + position__liquidity + position__depositedToken0 + position__depositedToken1 + position__withdrawnToken0 + position__withdrawnToken1 + position__collectedToken0 + position__collectedToken1 + position__collectedFeesToken0 + position__collectedFeesToken1 + position__amountDepositedUSD + position__amountWithdrawnUSD + position__amountCollectedUSD + position__feeGrowthInside0LastX128 + position__feeGrowthInside1LastX128 + blockNumber + timestamp + liquidity + depositedToken0 + depositedToken1 + withdrawnToken0 + withdrawnToken1 + collectedFeesToken0 + collectedFeesToken1 + transaction + transaction__id + transaction__blockNumber + transaction__timestamp + transaction__gasUsed + transaction__gasPrice + feeGrowthInside0LastX128 + feeGrowthInside1LastX128 +} + +input PositionSnapshot_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + owner: Bytes + owner_not: Bytes + owner_gt: Bytes + owner_lt: Bytes + owner_gte: Bytes + owner_lte: Bytes + owner_in: [Bytes!] + owner_not_in: [Bytes!] + owner_contains: Bytes + owner_not_contains: Bytes + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + position: String + position_not: String + position_gt: String + position_lt: String + position_gte: String + position_lte: String + position_in: [String!] + position_not_in: [String!] + position_starts_with: String + position_starts_with_nocase: String + position_not_starts_with: String + position_not_starts_with_nocase: String + position_ends_with: String + position_ends_with_nocase: String + position_not_ends_with: String + position_not_ends_with_nocase: String + position_contains: String + position_not_contains: String + position_contains_nocase: String + position_not_contains_nocase: String + position_: Position_filter + blockNumber: BigInt + blockNumber_not: BigInt + blockNumber_gt: BigInt + blockNumber_lt: BigInt + blockNumber_gte: BigInt + blockNumber_lte: BigInt + blockNumber_in: [BigInt!] + blockNumber_not_in: [BigInt!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + liquidity: BigInt + liquidity_not: BigInt + liquidity_gt: BigInt + liquidity_lt: BigInt + liquidity_gte: BigInt + liquidity_lte: BigInt + liquidity_in: [BigInt!] + liquidity_not_in: [BigInt!] + depositedToken0: BigDecimal + depositedToken0_not: BigDecimal + depositedToken0_gt: BigDecimal + depositedToken0_lt: BigDecimal + depositedToken0_gte: BigDecimal + depositedToken0_lte: BigDecimal + depositedToken0_in: [BigDecimal!] + depositedToken0_not_in: [BigDecimal!] + depositedToken1: BigDecimal + depositedToken1_not: BigDecimal + depositedToken1_gt: BigDecimal + depositedToken1_lt: BigDecimal + depositedToken1_gte: BigDecimal + depositedToken1_lte: BigDecimal + depositedToken1_in: [BigDecimal!] + depositedToken1_not_in: [BigDecimal!] + withdrawnToken0: BigDecimal + withdrawnToken0_not: BigDecimal + withdrawnToken0_gt: BigDecimal + withdrawnToken0_lt: BigDecimal + withdrawnToken0_gte: BigDecimal + withdrawnToken0_lte: BigDecimal + withdrawnToken0_in: [BigDecimal!] + withdrawnToken0_not_in: [BigDecimal!] + withdrawnToken1: BigDecimal + withdrawnToken1_not: BigDecimal + withdrawnToken1_gt: BigDecimal + withdrawnToken1_lt: BigDecimal + withdrawnToken1_gte: BigDecimal + withdrawnToken1_lte: BigDecimal + withdrawnToken1_in: [BigDecimal!] + withdrawnToken1_not_in: [BigDecimal!] + collectedFeesToken0: BigDecimal + collectedFeesToken0_not: BigDecimal + collectedFeesToken0_gt: BigDecimal + collectedFeesToken0_lt: BigDecimal + collectedFeesToken0_gte: BigDecimal + collectedFeesToken0_lte: BigDecimal + collectedFeesToken0_in: [BigDecimal!] + collectedFeesToken0_not_in: [BigDecimal!] + collectedFeesToken1: BigDecimal + collectedFeesToken1_not: BigDecimal + collectedFeesToken1_gt: BigDecimal + collectedFeesToken1_lt: BigDecimal + collectedFeesToken1_gte: BigDecimal + collectedFeesToken1_lte: BigDecimal + collectedFeesToken1_in: [BigDecimal!] + collectedFeesToken1_not_in: [BigDecimal!] + transaction: String + transaction_not: String + transaction_gt: String + transaction_lt: String + transaction_gte: String + transaction_lte: String + transaction_in: [String!] + transaction_not_in: [String!] + transaction_starts_with: String + transaction_starts_with_nocase: String + transaction_not_starts_with: String + transaction_not_starts_with_nocase: String + transaction_ends_with: String + transaction_ends_with_nocase: String + transaction_not_ends_with: String + transaction_not_ends_with_nocase: String + transaction_contains: String + transaction_not_contains: String + transaction_contains_nocase: String + transaction_not_contains_nocase: String + transaction_: Transaction_filter + feeGrowthInside0LastX128: BigInt + feeGrowthInside0LastX128_not: BigInt + feeGrowthInside0LastX128_gt: BigInt + feeGrowthInside0LastX128_lt: BigInt + feeGrowthInside0LastX128_gte: BigInt + feeGrowthInside0LastX128_lte: BigInt + feeGrowthInside0LastX128_in: [BigInt!] + feeGrowthInside0LastX128_not_in: [BigInt!] + feeGrowthInside1LastX128: BigInt + feeGrowthInside1LastX128_not: BigInt + feeGrowthInside1LastX128_gt: BigInt + feeGrowthInside1LastX128_lt: BigInt + feeGrowthInside1LastX128_gte: BigInt + feeGrowthInside1LastX128_lte: BigInt + feeGrowthInside1LastX128_in: [BigInt!] + feeGrowthInside1LastX128_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [PositionSnapshot_filter] + or: [PositionSnapshot_filter] +} + +enum Transaction_orderBy { + id + blockNumber + timestamp + gasUsed + gasPrice + mints + burns + swaps + flashed + collects +} + +input Transaction_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + blockNumber: BigInt + blockNumber_not: BigInt + blockNumber_gt: BigInt + blockNumber_lt: BigInt + blockNumber_gte: BigInt + blockNumber_lte: BigInt + blockNumber_in: [BigInt!] + blockNumber_not_in: [BigInt!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + gasUsed: BigInt + gasUsed_not: BigInt + gasUsed_gt: BigInt + gasUsed_lt: BigInt + gasUsed_gte: BigInt + gasUsed_lte: BigInt + gasUsed_in: [BigInt!] + gasUsed_not_in: [BigInt!] + gasPrice: BigInt + gasPrice_not: BigInt + gasPrice_gt: BigInt + gasPrice_lt: BigInt + gasPrice_gte: BigInt + gasPrice_lte: BigInt + gasPrice_in: [BigInt!] + gasPrice_not_in: [BigInt!] + mints_: Mint_filter + burns_: Burn_filter + swaps_: Swap_filter + flashed_: Flash_filter + collects_: Collect_filter + _change_block: BlockChangedFilter + and: [Transaction_filter] + or: [Transaction_filter] +} + +enum Mint_orderBy { + id + transaction + transaction__id + transaction__blockNumber + transaction__timestamp + transaction__gasUsed + transaction__gasPrice + timestamp + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + token0 + token0__id + token0__symbol + token0__name + token0__decimals + token0__totalSupply + token0__volume + token0__volumeUSD + token0__untrackedVolumeUSD + token0__feesUSD + token0__txCount + token0__poolCount + token0__totalValueLocked + token0__totalValueLockedUSD + token0__totalValueLockedUSDUntracked + token0__derivedETH + token1 + token1__id + token1__symbol + token1__name + token1__decimals + token1__totalSupply + token1__volume + token1__volumeUSD + token1__untrackedVolumeUSD + token1__feesUSD + token1__txCount + token1__poolCount + token1__totalValueLocked + token1__totalValueLockedUSD + token1__totalValueLockedUSDUntracked + token1__derivedETH + owner + sender + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex +} + +input Mint_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + transaction: String + transaction_not: String + transaction_gt: String + transaction_lt: String + transaction_gte: String + transaction_lte: String + transaction_in: [String!] + transaction_not_in: [String!] + transaction_starts_with: String + transaction_starts_with_nocase: String + transaction_not_starts_with: String + transaction_not_starts_with_nocase: String + transaction_ends_with: String + transaction_ends_with_nocase: String + transaction_not_ends_with: String + transaction_not_ends_with_nocase: String + transaction_contains: String + transaction_not_contains: String + transaction_contains_nocase: String + transaction_not_contains_nocase: String + transaction_: Transaction_filter + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + token0: String + token0_not: String + token0_gt: String + token0_lt: String + token0_gte: String + token0_lte: String + token0_in: [String!] + token0_not_in: [String!] + token0_starts_with: String + token0_starts_with_nocase: String + token0_not_starts_with: String + token0_not_starts_with_nocase: String + token0_ends_with: String + token0_ends_with_nocase: String + token0_not_ends_with: String + token0_not_ends_with_nocase: String + token0_contains: String + token0_not_contains: String + token0_contains_nocase: String + token0_not_contains_nocase: String + token0_: Token_filter + token1: String + token1_not: String + token1_gt: String + token1_lt: String + token1_gte: String + token1_lte: String + token1_in: [String!] + token1_not_in: [String!] + token1_starts_with: String + token1_starts_with_nocase: String + token1_not_starts_with: String + token1_not_starts_with_nocase: String + token1_ends_with: String + token1_ends_with_nocase: String + token1_not_ends_with: String + token1_not_ends_with_nocase: String + token1_contains: String + token1_not_contains: String + token1_contains_nocase: String + token1_not_contains_nocase: String + token1_: Token_filter + owner: Bytes + owner_not: Bytes + owner_gt: Bytes + owner_lt: Bytes + owner_gte: Bytes + owner_lte: Bytes + owner_in: [Bytes!] + owner_not_in: [Bytes!] + owner_contains: Bytes + owner_not_contains: Bytes + sender: Bytes + sender_not: Bytes + sender_gt: Bytes + sender_lt: Bytes + sender_gte: Bytes + sender_lte: Bytes + sender_in: [Bytes!] + sender_not_in: [Bytes!] + sender_contains: Bytes + sender_not_contains: Bytes + origin: Bytes + origin_not: Bytes + origin_gt: Bytes + origin_lt: Bytes + origin_gte: Bytes + origin_lte: Bytes + origin_in: [Bytes!] + origin_not_in: [Bytes!] + origin_contains: Bytes + origin_not_contains: Bytes + amount: BigInt + amount_not: BigInt + amount_gt: BigInt + amount_lt: BigInt + amount_gte: BigInt + amount_lte: BigInt + amount_in: [BigInt!] + amount_not_in: [BigInt!] + amount0: BigDecimal + amount0_not: BigDecimal + amount0_gt: BigDecimal + amount0_lt: BigDecimal + amount0_gte: BigDecimal + amount0_lte: BigDecimal + amount0_in: [BigDecimal!] + amount0_not_in: [BigDecimal!] + amount1: BigDecimal + amount1_not: BigDecimal + amount1_gt: BigDecimal + amount1_lt: BigDecimal + amount1_gte: BigDecimal + amount1_lte: BigDecimal + amount1_in: [BigDecimal!] + amount1_not_in: [BigDecimal!] + amountUSD: BigDecimal + amountUSD_not: BigDecimal + amountUSD_gt: BigDecimal + amountUSD_lt: BigDecimal + amountUSD_gte: BigDecimal + amountUSD_lte: BigDecimal + amountUSD_in: [BigDecimal!] + amountUSD_not_in: [BigDecimal!] + tickLower: BigInt + tickLower_not: BigInt + tickLower_gt: BigInt + tickLower_lt: BigInt + tickLower_gte: BigInt + tickLower_lte: BigInt + tickLower_in: [BigInt!] + tickLower_not_in: [BigInt!] + tickUpper: BigInt + tickUpper_not: BigInt + tickUpper_gt: BigInt + tickUpper_lt: BigInt + tickUpper_gte: BigInt + tickUpper_lte: BigInt + tickUpper_in: [BigInt!] + tickUpper_not_in: [BigInt!] + logIndex: BigInt + logIndex_not: BigInt + logIndex_gt: BigInt + logIndex_lt: BigInt + logIndex_gte: BigInt + logIndex_lte: BigInt + logIndex_in: [BigInt!] + logIndex_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [Mint_filter] + or: [Mint_filter] +} + +enum Burn_orderBy { + id + transaction + transaction__id + transaction__blockNumber + transaction__timestamp + transaction__gasUsed + transaction__gasPrice + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + token0 + token0__id + token0__symbol + token0__name + token0__decimals + token0__totalSupply + token0__volume + token0__volumeUSD + token0__untrackedVolumeUSD + token0__feesUSD + token0__txCount + token0__poolCount + token0__totalValueLocked + token0__totalValueLockedUSD + token0__totalValueLockedUSDUntracked + token0__derivedETH + token1 + token1__id + token1__symbol + token1__name + token1__decimals + token1__totalSupply + token1__volume + token1__volumeUSD + token1__untrackedVolumeUSD + token1__feesUSD + token1__txCount + token1__poolCount + token1__totalValueLocked + token1__totalValueLockedUSD + token1__totalValueLockedUSDUntracked + token1__derivedETH + timestamp + owner + origin + amount + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex +} + +input Burn_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + transaction: String + transaction_not: String + transaction_gt: String + transaction_lt: String + transaction_gte: String + transaction_lte: String + transaction_in: [String!] + transaction_not_in: [String!] + transaction_starts_with: String + transaction_starts_with_nocase: String + transaction_not_starts_with: String + transaction_not_starts_with_nocase: String + transaction_ends_with: String + transaction_ends_with_nocase: String + transaction_not_ends_with: String + transaction_not_ends_with_nocase: String + transaction_contains: String + transaction_not_contains: String + transaction_contains_nocase: String + transaction_not_contains_nocase: String + transaction_: Transaction_filter + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + token0: String + token0_not: String + token0_gt: String + token0_lt: String + token0_gte: String + token0_lte: String + token0_in: [String!] + token0_not_in: [String!] + token0_starts_with: String + token0_starts_with_nocase: String + token0_not_starts_with: String + token0_not_starts_with_nocase: String + token0_ends_with: String + token0_ends_with_nocase: String + token0_not_ends_with: String + token0_not_ends_with_nocase: String + token0_contains: String + token0_not_contains: String + token0_contains_nocase: String + token0_not_contains_nocase: String + token0_: Token_filter + token1: String + token1_not: String + token1_gt: String + token1_lt: String + token1_gte: String + token1_lte: String + token1_in: [String!] + token1_not_in: [String!] + token1_starts_with: String + token1_starts_with_nocase: String + token1_not_starts_with: String + token1_not_starts_with_nocase: String + token1_ends_with: String + token1_ends_with_nocase: String + token1_not_ends_with: String + token1_not_ends_with_nocase: String + token1_contains: String + token1_not_contains: String + token1_contains_nocase: String + token1_not_contains_nocase: String + token1_: Token_filter + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + owner: Bytes + owner_not: Bytes + owner_gt: Bytes + owner_lt: Bytes + owner_gte: Bytes + owner_lte: Bytes + owner_in: [Bytes!] + owner_not_in: [Bytes!] + owner_contains: Bytes + owner_not_contains: Bytes + origin: Bytes + origin_not: Bytes + origin_gt: Bytes + origin_lt: Bytes + origin_gte: Bytes + origin_lte: Bytes + origin_in: [Bytes!] + origin_not_in: [Bytes!] + origin_contains: Bytes + origin_not_contains: Bytes + amount: BigInt + amount_not: BigInt + amount_gt: BigInt + amount_lt: BigInt + amount_gte: BigInt + amount_lte: BigInt + amount_in: [BigInt!] + amount_not_in: [BigInt!] + amount0: BigDecimal + amount0_not: BigDecimal + amount0_gt: BigDecimal + amount0_lt: BigDecimal + amount0_gte: BigDecimal + amount0_lte: BigDecimal + amount0_in: [BigDecimal!] + amount0_not_in: [BigDecimal!] + amount1: BigDecimal + amount1_not: BigDecimal + amount1_gt: BigDecimal + amount1_lt: BigDecimal + amount1_gte: BigDecimal + amount1_lte: BigDecimal + amount1_in: [BigDecimal!] + amount1_not_in: [BigDecimal!] + amountUSD: BigDecimal + amountUSD_not: BigDecimal + amountUSD_gt: BigDecimal + amountUSD_lt: BigDecimal + amountUSD_gte: BigDecimal + amountUSD_lte: BigDecimal + amountUSD_in: [BigDecimal!] + amountUSD_not_in: [BigDecimal!] + tickLower: BigInt + tickLower_not: BigInt + tickLower_gt: BigInt + tickLower_lt: BigInt + tickLower_gte: BigInt + tickLower_lte: BigInt + tickLower_in: [BigInt!] + tickLower_not_in: [BigInt!] + tickUpper: BigInt + tickUpper_not: BigInt + tickUpper_gt: BigInt + tickUpper_lt: BigInt + tickUpper_gte: BigInt + tickUpper_lte: BigInt + tickUpper_in: [BigInt!] + tickUpper_not_in: [BigInt!] + logIndex: BigInt + logIndex_not: BigInt + logIndex_gt: BigInt + logIndex_lt: BigInt + logIndex_gte: BigInt + logIndex_lte: BigInt + logIndex_in: [BigInt!] + logIndex_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [Burn_filter] + or: [Burn_filter] +} + +enum Swap_orderBy { + id + transaction + transaction__id + transaction__blockNumber + transaction__timestamp + transaction__gasUsed + transaction__gasPrice + timestamp + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + token0 + token0__id + token0__symbol + token0__name + token0__decimals + token0__totalSupply + token0__volume + token0__volumeUSD + token0__untrackedVolumeUSD + token0__feesUSD + token0__txCount + token0__poolCount + token0__totalValueLocked + token0__totalValueLockedUSD + token0__totalValueLockedUSDUntracked + token0__derivedETH + token1 + token1__id + token1__symbol + token1__name + token1__decimals + token1__totalSupply + token1__volume + token1__volumeUSD + token1__untrackedVolumeUSD + token1__feesUSD + token1__txCount + token1__poolCount + token1__totalValueLocked + token1__totalValueLockedUSD + token1__totalValueLockedUSDUntracked + token1__derivedETH + sender + recipient + origin + amount0 + amount1 + amountUSD + sqrtPriceX96 + tick + logIndex +} + +input Swap_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + transaction: String + transaction_not: String + transaction_gt: String + transaction_lt: String + transaction_gte: String + transaction_lte: String + transaction_in: [String!] + transaction_not_in: [String!] + transaction_starts_with: String + transaction_starts_with_nocase: String + transaction_not_starts_with: String + transaction_not_starts_with_nocase: String + transaction_ends_with: String + transaction_ends_with_nocase: String + transaction_not_ends_with: String + transaction_not_ends_with_nocase: String + transaction_contains: String + transaction_not_contains: String + transaction_contains_nocase: String + transaction_not_contains_nocase: String + transaction_: Transaction_filter + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + token0: String + token0_not: String + token0_gt: String + token0_lt: String + token0_gte: String + token0_lte: String + token0_in: [String!] + token0_not_in: [String!] + token0_starts_with: String + token0_starts_with_nocase: String + token0_not_starts_with: String + token0_not_starts_with_nocase: String + token0_ends_with: String + token0_ends_with_nocase: String + token0_not_ends_with: String + token0_not_ends_with_nocase: String + token0_contains: String + token0_not_contains: String + token0_contains_nocase: String + token0_not_contains_nocase: String + token0_: Token_filter + token1: String + token1_not: String + token1_gt: String + token1_lt: String + token1_gte: String + token1_lte: String + token1_in: [String!] + token1_not_in: [String!] + token1_starts_with: String + token1_starts_with_nocase: String + token1_not_starts_with: String + token1_not_starts_with_nocase: String + token1_ends_with: String + token1_ends_with_nocase: String + token1_not_ends_with: String + token1_not_ends_with_nocase: String + token1_contains: String + token1_not_contains: String + token1_contains_nocase: String + token1_not_contains_nocase: String + token1_: Token_filter + sender: Bytes + sender_not: Bytes + sender_gt: Bytes + sender_lt: Bytes + sender_gte: Bytes + sender_lte: Bytes + sender_in: [Bytes!] + sender_not_in: [Bytes!] + sender_contains: Bytes + sender_not_contains: Bytes + recipient: Bytes + recipient_not: Bytes + recipient_gt: Bytes + recipient_lt: Bytes + recipient_gte: Bytes + recipient_lte: Bytes + recipient_in: [Bytes!] + recipient_not_in: [Bytes!] + recipient_contains: Bytes + recipient_not_contains: Bytes + origin: Bytes + origin_not: Bytes + origin_gt: Bytes + origin_lt: Bytes + origin_gte: Bytes + origin_lte: Bytes + origin_in: [Bytes!] + origin_not_in: [Bytes!] + origin_contains: Bytes + origin_not_contains: Bytes + amount0: BigDecimal + amount0_not: BigDecimal + amount0_gt: BigDecimal + amount0_lt: BigDecimal + amount0_gte: BigDecimal + amount0_lte: BigDecimal + amount0_in: [BigDecimal!] + amount0_not_in: [BigDecimal!] + amount1: BigDecimal + amount1_not: BigDecimal + amount1_gt: BigDecimal + amount1_lt: BigDecimal + amount1_gte: BigDecimal + amount1_lte: BigDecimal + amount1_in: [BigDecimal!] + amount1_not_in: [BigDecimal!] + amountUSD: BigDecimal + amountUSD_not: BigDecimal + amountUSD_gt: BigDecimal + amountUSD_lt: BigDecimal + amountUSD_gte: BigDecimal + amountUSD_lte: BigDecimal + amountUSD_in: [BigDecimal!] + amountUSD_not_in: [BigDecimal!] + sqrtPriceX96: BigInt + sqrtPriceX96_not: BigInt + sqrtPriceX96_gt: BigInt + sqrtPriceX96_lt: BigInt + sqrtPriceX96_gte: BigInt + sqrtPriceX96_lte: BigInt + sqrtPriceX96_in: [BigInt!] + sqrtPriceX96_not_in: [BigInt!] + tick: BigInt + tick_not: BigInt + tick_gt: BigInt + tick_lt: BigInt + tick_gte: BigInt + tick_lte: BigInt + tick_in: [BigInt!] + tick_not_in: [BigInt!] + logIndex: BigInt + logIndex_not: BigInt + logIndex_gt: BigInt + logIndex_lt: BigInt + logIndex_gte: BigInt + logIndex_lte: BigInt + logIndex_in: [BigInt!] + logIndex_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [Swap_filter] + or: [Swap_filter] +} + +enum Collect_orderBy { + id + transaction + transaction__id + transaction__blockNumber + transaction__timestamp + transaction__gasUsed + transaction__gasPrice + timestamp + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + owner + amount0 + amount1 + amountUSD + tickLower + tickUpper + logIndex +} + +input Collect_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + transaction: String + transaction_not: String + transaction_gt: String + transaction_lt: String + transaction_gte: String + transaction_lte: String + transaction_in: [String!] + transaction_not_in: [String!] + transaction_starts_with: String + transaction_starts_with_nocase: String + transaction_not_starts_with: String + transaction_not_starts_with_nocase: String + transaction_ends_with: String + transaction_ends_with_nocase: String + transaction_not_ends_with: String + transaction_not_ends_with_nocase: String + transaction_contains: String + transaction_not_contains: String + transaction_contains_nocase: String + transaction_not_contains_nocase: String + transaction_: Transaction_filter + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + owner: Bytes + owner_not: Bytes + owner_gt: Bytes + owner_lt: Bytes + owner_gte: Bytes + owner_lte: Bytes + owner_in: [Bytes!] + owner_not_in: [Bytes!] + owner_contains: Bytes + owner_not_contains: Bytes + amount0: BigDecimal + amount0_not: BigDecimal + amount0_gt: BigDecimal + amount0_lt: BigDecimal + amount0_gte: BigDecimal + amount0_lte: BigDecimal + amount0_in: [BigDecimal!] + amount0_not_in: [BigDecimal!] + amount1: BigDecimal + amount1_not: BigDecimal + amount1_gt: BigDecimal + amount1_lt: BigDecimal + amount1_gte: BigDecimal + amount1_lte: BigDecimal + amount1_in: [BigDecimal!] + amount1_not_in: [BigDecimal!] + amountUSD: BigDecimal + amountUSD_not: BigDecimal + amountUSD_gt: BigDecimal + amountUSD_lt: BigDecimal + amountUSD_gte: BigDecimal + amountUSD_lte: BigDecimal + amountUSD_in: [BigDecimal!] + amountUSD_not_in: [BigDecimal!] + tickLower: BigInt + tickLower_not: BigInt + tickLower_gt: BigInt + tickLower_lt: BigInt + tickLower_gte: BigInt + tickLower_lte: BigInt + tickLower_in: [BigInt!] + tickLower_not_in: [BigInt!] + tickUpper: BigInt + tickUpper_not: BigInt + tickUpper_gt: BigInt + tickUpper_lt: BigInt + tickUpper_gte: BigInt + tickUpper_lte: BigInt + tickUpper_in: [BigInt!] + tickUpper_not_in: [BigInt!] + logIndex: BigInt + logIndex_not: BigInt + logIndex_gt: BigInt + logIndex_lt: BigInt + logIndex_gte: BigInt + logIndex_lte: BigInt + logIndex_in: [BigInt!] + logIndex_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [Collect_filter] + or: [Collect_filter] +} + +enum Flash_orderBy { + id + transaction + transaction__id + transaction__blockNumber + transaction__timestamp + transaction__gasUsed + transaction__gasPrice + timestamp + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + sender + recipient + amount0 + amount1 + amountUSD + amount0Paid + amount1Paid + logIndex +} + +input Flash_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + transaction: String + transaction_not: String + transaction_gt: String + transaction_lt: String + transaction_gte: String + transaction_lte: String + transaction_in: [String!] + transaction_not_in: [String!] + transaction_starts_with: String + transaction_starts_with_nocase: String + transaction_not_starts_with: String + transaction_not_starts_with_nocase: String + transaction_ends_with: String + transaction_ends_with_nocase: String + transaction_not_ends_with: String + transaction_not_ends_with_nocase: String + transaction_contains: String + transaction_not_contains: String + transaction_contains_nocase: String + transaction_not_contains_nocase: String + transaction_: Transaction_filter + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + sender: Bytes + sender_not: Bytes + sender_gt: Bytes + sender_lt: Bytes + sender_gte: Bytes + sender_lte: Bytes + sender_in: [Bytes!] + sender_not_in: [Bytes!] + sender_contains: Bytes + sender_not_contains: Bytes + recipient: Bytes + recipient_not: Bytes + recipient_gt: Bytes + recipient_lt: Bytes + recipient_gte: Bytes + recipient_lte: Bytes + recipient_in: [Bytes!] + recipient_not_in: [Bytes!] + recipient_contains: Bytes + recipient_not_contains: Bytes + amount0: BigDecimal + amount0_not: BigDecimal + amount0_gt: BigDecimal + amount0_lt: BigDecimal + amount0_gte: BigDecimal + amount0_lte: BigDecimal + amount0_in: [BigDecimal!] + amount0_not_in: [BigDecimal!] + amount1: BigDecimal + amount1_not: BigDecimal + amount1_gt: BigDecimal + amount1_lt: BigDecimal + amount1_gte: BigDecimal + amount1_lte: BigDecimal + amount1_in: [BigDecimal!] + amount1_not_in: [BigDecimal!] + amountUSD: BigDecimal + amountUSD_not: BigDecimal + amountUSD_gt: BigDecimal + amountUSD_lt: BigDecimal + amountUSD_gte: BigDecimal + amountUSD_lte: BigDecimal + amountUSD_in: [BigDecimal!] + amountUSD_not_in: [BigDecimal!] + amount0Paid: BigDecimal + amount0Paid_not: BigDecimal + amount0Paid_gt: BigDecimal + amount0Paid_lt: BigDecimal + amount0Paid_gte: BigDecimal + amount0Paid_lte: BigDecimal + amount0Paid_in: [BigDecimal!] + amount0Paid_not_in: [BigDecimal!] + amount1Paid: BigDecimal + amount1Paid_not: BigDecimal + amount1Paid_gt: BigDecimal + amount1Paid_lt: BigDecimal + amount1Paid_gte: BigDecimal + amount1Paid_lte: BigDecimal + amount1Paid_in: [BigDecimal!] + amount1Paid_not_in: [BigDecimal!] + logIndex: BigInt + logIndex_not: BigInt + logIndex_gt: BigInt + logIndex_lt: BigInt + logIndex_gte: BigInt + logIndex_lte: BigInt + logIndex_in: [BigInt!] + logIndex_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [Flash_filter] + or: [Flash_filter] +} + +enum UniswapDayData_orderBy { + id + date + volumeETH + volumeUSD + volumeUSDUntracked + feesUSD + txCount + tvlUSD +} + +input UniswapDayData_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + date: Int + date_not: Int + date_gt: Int + date_lt: Int + date_gte: Int + date_lte: Int + date_in: [Int!] + date_not_in: [Int!] + volumeETH: BigDecimal + volumeETH_not: BigDecimal + volumeETH_gt: BigDecimal + volumeETH_lt: BigDecimal + volumeETH_gte: BigDecimal + volumeETH_lte: BigDecimal + volumeETH_in: [BigDecimal!] + volumeETH_not_in: [BigDecimal!] + volumeUSD: BigDecimal + volumeUSD_not: BigDecimal + volumeUSD_gt: BigDecimal + volumeUSD_lt: BigDecimal + volumeUSD_gte: BigDecimal + volumeUSD_lte: BigDecimal + volumeUSD_in: [BigDecimal!] + volumeUSD_not_in: [BigDecimal!] + volumeUSDUntracked: BigDecimal + volumeUSDUntracked_not: BigDecimal + volumeUSDUntracked_gt: BigDecimal + volumeUSDUntracked_lt: BigDecimal + volumeUSDUntracked_gte: BigDecimal + volumeUSDUntracked_lte: BigDecimal + volumeUSDUntracked_in: [BigDecimal!] + volumeUSDUntracked_not_in: [BigDecimal!] + feesUSD: BigDecimal + feesUSD_not: BigDecimal + feesUSD_gt: BigDecimal + feesUSD_lt: BigDecimal + feesUSD_gte: BigDecimal + feesUSD_lte: BigDecimal + feesUSD_in: [BigDecimal!] + feesUSD_not_in: [BigDecimal!] + txCount: BigInt + txCount_not: BigInt + txCount_gt: BigInt + txCount_lt: BigInt + txCount_gte: BigInt + txCount_lte: BigInt + txCount_in: [BigInt!] + txCount_not_in: [BigInt!] + tvlUSD: BigDecimal + tvlUSD_not: BigDecimal + tvlUSD_gt: BigDecimal + tvlUSD_lt: BigDecimal + tvlUSD_gte: BigDecimal + tvlUSD_lte: BigDecimal + tvlUSD_in: [BigDecimal!] + tvlUSD_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [UniswapDayData_filter] + or: [UniswapDayData_filter] +} + +enum PoolDayData_orderBy { + id + date + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + liquidity + sqrtPrice + token0Price + token1Price + tick + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + tvlUSD + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + txCount + open + high + low + close +} + +input PoolDayData_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + date: Int + date_not: Int + date_gt: Int + date_lt: Int + date_gte: Int + date_lte: Int + date_in: [Int!] + date_not_in: [Int!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + liquidity: BigInt + liquidity_not: BigInt + liquidity_gt: BigInt + liquidity_lt: BigInt + liquidity_gte: BigInt + liquidity_lte: BigInt + liquidity_in: [BigInt!] + liquidity_not_in: [BigInt!] + sqrtPrice: BigInt + sqrtPrice_not: BigInt + sqrtPrice_gt: BigInt + sqrtPrice_lt: BigInt + sqrtPrice_gte: BigInt + sqrtPrice_lte: BigInt + sqrtPrice_in: [BigInt!] + sqrtPrice_not_in: [BigInt!] + token0Price: BigDecimal + token0Price_not: BigDecimal + token0Price_gt: BigDecimal + token0Price_lt: BigDecimal + token0Price_gte: BigDecimal + token0Price_lte: BigDecimal + token0Price_in: [BigDecimal!] + token0Price_not_in: [BigDecimal!] + token1Price: BigDecimal + token1Price_not: BigDecimal + token1Price_gt: BigDecimal + token1Price_lt: BigDecimal + token1Price_gte: BigDecimal + token1Price_lte: BigDecimal + token1Price_in: [BigDecimal!] + token1Price_not_in: [BigDecimal!] + tick: BigInt + tick_not: BigInt + tick_gt: BigInt + tick_lt: BigInt + tick_gte: BigInt + tick_lte: BigInt + tick_in: [BigInt!] + tick_not_in: [BigInt!] + feeGrowthGlobal0X128: BigInt + feeGrowthGlobal0X128_not: BigInt + feeGrowthGlobal0X128_gt: BigInt + feeGrowthGlobal0X128_lt: BigInt + feeGrowthGlobal0X128_gte: BigInt + feeGrowthGlobal0X128_lte: BigInt + feeGrowthGlobal0X128_in: [BigInt!] + feeGrowthGlobal0X128_not_in: [BigInt!] + feeGrowthGlobal1X128: BigInt + feeGrowthGlobal1X128_not: BigInt + feeGrowthGlobal1X128_gt: BigInt + feeGrowthGlobal1X128_lt: BigInt + feeGrowthGlobal1X128_gte: BigInt + feeGrowthGlobal1X128_lte: BigInt + feeGrowthGlobal1X128_in: [BigInt!] + feeGrowthGlobal1X128_not_in: [BigInt!] + tvlUSD: BigDecimal + tvlUSD_not: BigDecimal + tvlUSD_gt: BigDecimal + tvlUSD_lt: BigDecimal + tvlUSD_gte: BigDecimal + tvlUSD_lte: BigDecimal + tvlUSD_in: [BigDecimal!] + tvlUSD_not_in: [BigDecimal!] + volumeToken0: BigDecimal + volumeToken0_not: BigDecimal + volumeToken0_gt: BigDecimal + volumeToken0_lt: BigDecimal + volumeToken0_gte: BigDecimal + volumeToken0_lte: BigDecimal + volumeToken0_in: [BigDecimal!] + volumeToken0_not_in: [BigDecimal!] + volumeToken1: BigDecimal + volumeToken1_not: BigDecimal + volumeToken1_gt: BigDecimal + volumeToken1_lt: BigDecimal + volumeToken1_gte: BigDecimal + volumeToken1_lte: BigDecimal + volumeToken1_in: [BigDecimal!] + volumeToken1_not_in: [BigDecimal!] + volumeUSD: BigDecimal + volumeUSD_not: BigDecimal + volumeUSD_gt: BigDecimal + volumeUSD_lt: BigDecimal + volumeUSD_gte: BigDecimal + volumeUSD_lte: BigDecimal + volumeUSD_in: [BigDecimal!] + volumeUSD_not_in: [BigDecimal!] + feesUSD: BigDecimal + feesUSD_not: BigDecimal + feesUSD_gt: BigDecimal + feesUSD_lt: BigDecimal + feesUSD_gte: BigDecimal + feesUSD_lte: BigDecimal + feesUSD_in: [BigDecimal!] + feesUSD_not_in: [BigDecimal!] + txCount: BigInt + txCount_not: BigInt + txCount_gt: BigInt + txCount_lt: BigInt + txCount_gte: BigInt + txCount_lte: BigInt + txCount_in: [BigInt!] + txCount_not_in: [BigInt!] + open: BigDecimal + open_not: BigDecimal + open_gt: BigDecimal + open_lt: BigDecimal + open_gte: BigDecimal + open_lte: BigDecimal + open_in: [BigDecimal!] + open_not_in: [BigDecimal!] + high: BigDecimal + high_not: BigDecimal + high_gt: BigDecimal + high_lt: BigDecimal + high_gte: BigDecimal + high_lte: BigDecimal + high_in: [BigDecimal!] + high_not_in: [BigDecimal!] + low: BigDecimal + low_not: BigDecimal + low_gt: BigDecimal + low_lt: BigDecimal + low_gte: BigDecimal + low_lte: BigDecimal + low_in: [BigDecimal!] + low_not_in: [BigDecimal!] + close: BigDecimal + close_not: BigDecimal + close_gt: BigDecimal + close_lt: BigDecimal + close_gte: BigDecimal + close_lte: BigDecimal + close_in: [BigDecimal!] + close_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [PoolDayData_filter] + or: [PoolDayData_filter] +} + +enum PoolHourData_orderBy { + id + periodStartUnix + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + liquidity + sqrtPrice + token0Price + token1Price + tick + feeGrowthGlobal0X128 + feeGrowthGlobal1X128 + tvlUSD + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + txCount + open + high + low + close +} + +input PoolHourData_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + periodStartUnix: Int + periodStartUnix_not: Int + periodStartUnix_gt: Int + periodStartUnix_lt: Int + periodStartUnix_gte: Int + periodStartUnix_lte: Int + periodStartUnix_in: [Int!] + periodStartUnix_not_in: [Int!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + liquidity: BigInt + liquidity_not: BigInt + liquidity_gt: BigInt + liquidity_lt: BigInt + liquidity_gte: BigInt + liquidity_lte: BigInt + liquidity_in: [BigInt!] + liquidity_not_in: [BigInt!] + sqrtPrice: BigInt + sqrtPrice_not: BigInt + sqrtPrice_gt: BigInt + sqrtPrice_lt: BigInt + sqrtPrice_gte: BigInt + sqrtPrice_lte: BigInt + sqrtPrice_in: [BigInt!] + sqrtPrice_not_in: [BigInt!] + token0Price: BigDecimal + token0Price_not: BigDecimal + token0Price_gt: BigDecimal + token0Price_lt: BigDecimal + token0Price_gte: BigDecimal + token0Price_lte: BigDecimal + token0Price_in: [BigDecimal!] + token0Price_not_in: [BigDecimal!] + token1Price: BigDecimal + token1Price_not: BigDecimal + token1Price_gt: BigDecimal + token1Price_lt: BigDecimal + token1Price_gte: BigDecimal + token1Price_lte: BigDecimal + token1Price_in: [BigDecimal!] + token1Price_not_in: [BigDecimal!] + tick: BigInt + tick_not: BigInt + tick_gt: BigInt + tick_lt: BigInt + tick_gte: BigInt + tick_lte: BigInt + tick_in: [BigInt!] + tick_not_in: [BigInt!] + feeGrowthGlobal0X128: BigInt + feeGrowthGlobal0X128_not: BigInt + feeGrowthGlobal0X128_gt: BigInt + feeGrowthGlobal0X128_lt: BigInt + feeGrowthGlobal0X128_gte: BigInt + feeGrowthGlobal0X128_lte: BigInt + feeGrowthGlobal0X128_in: [BigInt!] + feeGrowthGlobal0X128_not_in: [BigInt!] + feeGrowthGlobal1X128: BigInt + feeGrowthGlobal1X128_not: BigInt + feeGrowthGlobal1X128_gt: BigInt + feeGrowthGlobal1X128_lt: BigInt + feeGrowthGlobal1X128_gte: BigInt + feeGrowthGlobal1X128_lte: BigInt + feeGrowthGlobal1X128_in: [BigInt!] + feeGrowthGlobal1X128_not_in: [BigInt!] + tvlUSD: BigDecimal + tvlUSD_not: BigDecimal + tvlUSD_gt: BigDecimal + tvlUSD_lt: BigDecimal + tvlUSD_gte: BigDecimal + tvlUSD_lte: BigDecimal + tvlUSD_in: [BigDecimal!] + tvlUSD_not_in: [BigDecimal!] + volumeToken0: BigDecimal + volumeToken0_not: BigDecimal + volumeToken0_gt: BigDecimal + volumeToken0_lt: BigDecimal + volumeToken0_gte: BigDecimal + volumeToken0_lte: BigDecimal + volumeToken0_in: [BigDecimal!] + volumeToken0_not_in: [BigDecimal!] + volumeToken1: BigDecimal + volumeToken1_not: BigDecimal + volumeToken1_gt: BigDecimal + volumeToken1_lt: BigDecimal + volumeToken1_gte: BigDecimal + volumeToken1_lte: BigDecimal + volumeToken1_in: [BigDecimal!] + volumeToken1_not_in: [BigDecimal!] + volumeUSD: BigDecimal + volumeUSD_not: BigDecimal + volumeUSD_gt: BigDecimal + volumeUSD_lt: BigDecimal + volumeUSD_gte: BigDecimal + volumeUSD_lte: BigDecimal + volumeUSD_in: [BigDecimal!] + volumeUSD_not_in: [BigDecimal!] + feesUSD: BigDecimal + feesUSD_not: BigDecimal + feesUSD_gt: BigDecimal + feesUSD_lt: BigDecimal + feesUSD_gte: BigDecimal + feesUSD_lte: BigDecimal + feesUSD_in: [BigDecimal!] + feesUSD_not_in: [BigDecimal!] + txCount: BigInt + txCount_not: BigInt + txCount_gt: BigInt + txCount_lt: BigInt + txCount_gte: BigInt + txCount_lte: BigInt + txCount_in: [BigInt!] + txCount_not_in: [BigInt!] + open: BigDecimal + open_not: BigDecimal + open_gt: BigDecimal + open_lt: BigDecimal + open_gte: BigDecimal + open_lte: BigDecimal + open_in: [BigDecimal!] + open_not_in: [BigDecimal!] + high: BigDecimal + high_not: BigDecimal + high_gt: BigDecimal + high_lt: BigDecimal + high_gte: BigDecimal + high_lte: BigDecimal + high_in: [BigDecimal!] + high_not_in: [BigDecimal!] + low: BigDecimal + low_not: BigDecimal + low_gt: BigDecimal + low_lt: BigDecimal + low_gte: BigDecimal + low_lte: BigDecimal + low_in: [BigDecimal!] + low_not_in: [BigDecimal!] + close: BigDecimal + close_not: BigDecimal + close_gt: BigDecimal + close_lt: BigDecimal + close_gte: BigDecimal + close_lte: BigDecimal + close_in: [BigDecimal!] + close_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [PoolHourData_filter] + or: [PoolHourData_filter] +} + +enum TickHourData_orderBy { + id + periodStartUnix + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + tick + tick__id + tick__poolAddress + tick__tickIdx + tick__liquidityGross + tick__liquidityNet + tick__price0 + tick__price1 + tick__volumeToken0 + tick__volumeToken1 + tick__volumeUSD + tick__untrackedVolumeUSD + tick__feesUSD + tick__collectedFeesToken0 + tick__collectedFeesToken1 + tick__collectedFeesUSD + tick__createdAtTimestamp + tick__createdAtBlockNumber + tick__liquidityProviderCount + tick__feeGrowthOutside0X128 + tick__feeGrowthOutside1X128 + liquidityGross + liquidityNet + volumeToken0 + volumeToken1 + volumeUSD + feesUSD +} + +input TickHourData_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + periodStartUnix: Int + periodStartUnix_not: Int + periodStartUnix_gt: Int + periodStartUnix_lt: Int + periodStartUnix_gte: Int + periodStartUnix_lte: Int + periodStartUnix_in: [Int!] + periodStartUnix_not_in: [Int!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + tick: String + tick_not: String + tick_gt: String + tick_lt: String + tick_gte: String + tick_lte: String + tick_in: [String!] + tick_not_in: [String!] + tick_starts_with: String + tick_starts_with_nocase: String + tick_not_starts_with: String + tick_not_starts_with_nocase: String + tick_ends_with: String + tick_ends_with_nocase: String + tick_not_ends_with: String + tick_not_ends_with_nocase: String + tick_contains: String + tick_not_contains: String + tick_contains_nocase: String + tick_not_contains_nocase: String + tick_: Tick_filter + liquidityGross: BigInt + liquidityGross_not: BigInt + liquidityGross_gt: BigInt + liquidityGross_lt: BigInt + liquidityGross_gte: BigInt + liquidityGross_lte: BigInt + liquidityGross_in: [BigInt!] + liquidityGross_not_in: [BigInt!] + liquidityNet: BigInt + liquidityNet_not: BigInt + liquidityNet_gt: BigInt + liquidityNet_lt: BigInt + liquidityNet_gte: BigInt + liquidityNet_lte: BigInt + liquidityNet_in: [BigInt!] + liquidityNet_not_in: [BigInt!] + volumeToken0: BigDecimal + volumeToken0_not: BigDecimal + volumeToken0_gt: BigDecimal + volumeToken0_lt: BigDecimal + volumeToken0_gte: BigDecimal + volumeToken0_lte: BigDecimal + volumeToken0_in: [BigDecimal!] + volumeToken0_not_in: [BigDecimal!] + volumeToken1: BigDecimal + volumeToken1_not: BigDecimal + volumeToken1_gt: BigDecimal + volumeToken1_lt: BigDecimal + volumeToken1_gte: BigDecimal + volumeToken1_lte: BigDecimal + volumeToken1_in: [BigDecimal!] + volumeToken1_not_in: [BigDecimal!] + volumeUSD: BigDecimal + volumeUSD_not: BigDecimal + volumeUSD_gt: BigDecimal + volumeUSD_lt: BigDecimal + volumeUSD_gte: BigDecimal + volumeUSD_lte: BigDecimal + volumeUSD_in: [BigDecimal!] + volumeUSD_not_in: [BigDecimal!] + feesUSD: BigDecimal + feesUSD_not: BigDecimal + feesUSD_gt: BigDecimal + feesUSD_lt: BigDecimal + feesUSD_gte: BigDecimal + feesUSD_lte: BigDecimal + feesUSD_in: [BigDecimal!] + feesUSD_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [TickHourData_filter] + or: [TickHourData_filter] +} + +enum TickDayData_orderBy { + id + date + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + tick + tick__id + tick__poolAddress + tick__tickIdx + tick__liquidityGross + tick__liquidityNet + tick__price0 + tick__price1 + tick__volumeToken0 + tick__volumeToken1 + tick__volumeUSD + tick__untrackedVolumeUSD + tick__feesUSD + tick__collectedFeesToken0 + tick__collectedFeesToken1 + tick__collectedFeesUSD + tick__createdAtTimestamp + tick__createdAtBlockNumber + tick__liquidityProviderCount + tick__feeGrowthOutside0X128 + tick__feeGrowthOutside1X128 + liquidityGross + liquidityNet + volumeToken0 + volumeToken1 + volumeUSD + feesUSD + feeGrowthOutside0X128 + feeGrowthOutside1X128 +} + +input TickDayData_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + date: Int + date_not: Int + date_gt: Int + date_lt: Int + date_gte: Int + date_lte: Int + date_in: [Int!] + date_not_in: [Int!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + tick: String + tick_not: String + tick_gt: String + tick_lt: String + tick_gte: String + tick_lte: String + tick_in: [String!] + tick_not_in: [String!] + tick_starts_with: String + tick_starts_with_nocase: String + tick_not_starts_with: String + tick_not_starts_with_nocase: String + tick_ends_with: String + tick_ends_with_nocase: String + tick_not_ends_with: String + tick_not_ends_with_nocase: String + tick_contains: String + tick_not_contains: String + tick_contains_nocase: String + tick_not_contains_nocase: String + tick_: Tick_filter + liquidityGross: BigInt + liquidityGross_not: BigInt + liquidityGross_gt: BigInt + liquidityGross_lt: BigInt + liquidityGross_gte: BigInt + liquidityGross_lte: BigInt + liquidityGross_in: [BigInt!] + liquidityGross_not_in: [BigInt!] + liquidityNet: BigInt + liquidityNet_not: BigInt + liquidityNet_gt: BigInt + liquidityNet_lt: BigInt + liquidityNet_gte: BigInt + liquidityNet_lte: BigInt + liquidityNet_in: [BigInt!] + liquidityNet_not_in: [BigInt!] + volumeToken0: BigDecimal + volumeToken0_not: BigDecimal + volumeToken0_gt: BigDecimal + volumeToken0_lt: BigDecimal + volumeToken0_gte: BigDecimal + volumeToken0_lte: BigDecimal + volumeToken0_in: [BigDecimal!] + volumeToken0_not_in: [BigDecimal!] + volumeToken1: BigDecimal + volumeToken1_not: BigDecimal + volumeToken1_gt: BigDecimal + volumeToken1_lt: BigDecimal + volumeToken1_gte: BigDecimal + volumeToken1_lte: BigDecimal + volumeToken1_in: [BigDecimal!] + volumeToken1_not_in: [BigDecimal!] + volumeUSD: BigDecimal + volumeUSD_not: BigDecimal + volumeUSD_gt: BigDecimal + volumeUSD_lt: BigDecimal + volumeUSD_gte: BigDecimal + volumeUSD_lte: BigDecimal + volumeUSD_in: [BigDecimal!] + volumeUSD_not_in: [BigDecimal!] + feesUSD: BigDecimal + feesUSD_not: BigDecimal + feesUSD_gt: BigDecimal + feesUSD_lt: BigDecimal + feesUSD_gte: BigDecimal + feesUSD_lte: BigDecimal + feesUSD_in: [BigDecimal!] + feesUSD_not_in: [BigDecimal!] + feeGrowthOutside0X128: BigInt + feeGrowthOutside0X128_not: BigInt + feeGrowthOutside0X128_gt: BigInt + feeGrowthOutside0X128_lt: BigInt + feeGrowthOutside0X128_gte: BigInt + feeGrowthOutside0X128_lte: BigInt + feeGrowthOutside0X128_in: [BigInt!] + feeGrowthOutside0X128_not_in: [BigInt!] + feeGrowthOutside1X128: BigInt + feeGrowthOutside1X128_not: BigInt + feeGrowthOutside1X128_gt: BigInt + feeGrowthOutside1X128_lt: BigInt + feeGrowthOutside1X128_gte: BigInt + feeGrowthOutside1X128_lte: BigInt + feeGrowthOutside1X128_in: [BigInt!] + feeGrowthOutside1X128_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [TickDayData_filter] + or: [TickDayData_filter] +} + +enum TokenDayData_orderBy { + id + date + token + token__id + token__symbol + token__name + token__decimals + token__totalSupply + token__volume + token__volumeUSD + token__untrackedVolumeUSD + token__feesUSD + token__txCount + token__poolCount + token__totalValueLocked + token__totalValueLockedUSD + token__totalValueLockedUSDUntracked + token__derivedETH + volume + volumeUSD + untrackedVolumeUSD + totalValueLocked + totalValueLockedUSD + priceUSD + feesUSD + open + high + low + close +} + +input TokenDayData_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + date: Int + date_not: Int + date_gt: Int + date_lt: Int + date_gte: Int + date_lte: Int + date_in: [Int!] + date_not_in: [Int!] + token: String + token_not: String + token_gt: String + token_lt: String + token_gte: String + token_lte: String + token_in: [String!] + token_not_in: [String!] + token_starts_with: String + token_starts_with_nocase: String + token_not_starts_with: String + token_not_starts_with_nocase: String + token_ends_with: String + token_ends_with_nocase: String + token_not_ends_with: String + token_not_ends_with_nocase: String + token_contains: String + token_not_contains: String + token_contains_nocase: String + token_not_contains_nocase: String + token_: Token_filter + volume: BigDecimal + volume_not: BigDecimal + volume_gt: BigDecimal + volume_lt: BigDecimal + volume_gte: BigDecimal + volume_lte: BigDecimal + volume_in: [BigDecimal!] + volume_not_in: [BigDecimal!] + volumeUSD: BigDecimal + volumeUSD_not: BigDecimal + volumeUSD_gt: BigDecimal + volumeUSD_lt: BigDecimal + volumeUSD_gte: BigDecimal + volumeUSD_lte: BigDecimal + volumeUSD_in: [BigDecimal!] + volumeUSD_not_in: [BigDecimal!] + untrackedVolumeUSD: BigDecimal + untrackedVolumeUSD_not: BigDecimal + untrackedVolumeUSD_gt: BigDecimal + untrackedVolumeUSD_lt: BigDecimal + untrackedVolumeUSD_gte: BigDecimal + untrackedVolumeUSD_lte: BigDecimal + untrackedVolumeUSD_in: [BigDecimal!] + untrackedVolumeUSD_not_in: [BigDecimal!] + totalValueLocked: BigDecimal + totalValueLocked_not: BigDecimal + totalValueLocked_gt: BigDecimal + totalValueLocked_lt: BigDecimal + totalValueLocked_gte: BigDecimal + totalValueLocked_lte: BigDecimal + totalValueLocked_in: [BigDecimal!] + totalValueLocked_not_in: [BigDecimal!] + totalValueLockedUSD: BigDecimal + totalValueLockedUSD_not: BigDecimal + totalValueLockedUSD_gt: BigDecimal + totalValueLockedUSD_lt: BigDecimal + totalValueLockedUSD_gte: BigDecimal + totalValueLockedUSD_lte: BigDecimal + totalValueLockedUSD_in: [BigDecimal!] + totalValueLockedUSD_not_in: [BigDecimal!] + priceUSD: BigDecimal + priceUSD_not: BigDecimal + priceUSD_gt: BigDecimal + priceUSD_lt: BigDecimal + priceUSD_gte: BigDecimal + priceUSD_lte: BigDecimal + priceUSD_in: [BigDecimal!] + priceUSD_not_in: [BigDecimal!] + feesUSD: BigDecimal + feesUSD_not: BigDecimal + feesUSD_gt: BigDecimal + feesUSD_lt: BigDecimal + feesUSD_gte: BigDecimal + feesUSD_lte: BigDecimal + feesUSD_in: [BigDecimal!] + feesUSD_not_in: [BigDecimal!] + open: BigDecimal + open_not: BigDecimal + open_gt: BigDecimal + open_lt: BigDecimal + open_gte: BigDecimal + open_lte: BigDecimal + open_in: [BigDecimal!] + open_not_in: [BigDecimal!] + high: BigDecimal + high_not: BigDecimal + high_gt: BigDecimal + high_lt: BigDecimal + high_gte: BigDecimal + high_lte: BigDecimal + high_in: [BigDecimal!] + high_not_in: [BigDecimal!] + low: BigDecimal + low_not: BigDecimal + low_gt: BigDecimal + low_lt: BigDecimal + low_gte: BigDecimal + low_lte: BigDecimal + low_in: [BigDecimal!] + low_not_in: [BigDecimal!] + close: BigDecimal + close_not: BigDecimal + close_gt: BigDecimal + close_lt: BigDecimal + close_gte: BigDecimal + close_lte: BigDecimal + close_in: [BigDecimal!] + close_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [TokenDayData_filter] + or: [TokenDayData_filter] +} + +enum TokenHourData_orderBy { + id + periodStartUnix + token + token__id + token__symbol + token__name + token__decimals + token__totalSupply + token__volume + token__volumeUSD + token__untrackedVolumeUSD + token__feesUSD + token__txCount + token__poolCount + token__totalValueLocked + token__totalValueLockedUSD + token__totalValueLockedUSDUntracked + token__derivedETH + volume + volumeUSD + untrackedVolumeUSD + totalValueLocked + totalValueLockedUSD + priceUSD + feesUSD + open + high + low + close +} + +input TokenHourData_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + periodStartUnix: Int + periodStartUnix_not: Int + periodStartUnix_gt: Int + periodStartUnix_lt: Int + periodStartUnix_gte: Int + periodStartUnix_lte: Int + periodStartUnix_in: [Int!] + periodStartUnix_not_in: [Int!] + token: String + token_not: String + token_gt: String + token_lt: String + token_gte: String + token_lte: String + token_in: [String!] + token_not_in: [String!] + token_starts_with: String + token_starts_with_nocase: String + token_not_starts_with: String + token_not_starts_with_nocase: String + token_ends_with: String + token_ends_with_nocase: String + token_not_ends_with: String + token_not_ends_with_nocase: String + token_contains: String + token_not_contains: String + token_contains_nocase: String + token_not_contains_nocase: String + token_: Token_filter + volume: BigDecimal + volume_not: BigDecimal + volume_gt: BigDecimal + volume_lt: BigDecimal + volume_gte: BigDecimal + volume_lte: BigDecimal + volume_in: [BigDecimal!] + volume_not_in: [BigDecimal!] + volumeUSD: BigDecimal + volumeUSD_not: BigDecimal + volumeUSD_gt: BigDecimal + volumeUSD_lt: BigDecimal + volumeUSD_gte: BigDecimal + volumeUSD_lte: BigDecimal + volumeUSD_in: [BigDecimal!] + volumeUSD_not_in: [BigDecimal!] + untrackedVolumeUSD: BigDecimal + untrackedVolumeUSD_not: BigDecimal + untrackedVolumeUSD_gt: BigDecimal + untrackedVolumeUSD_lt: BigDecimal + untrackedVolumeUSD_gte: BigDecimal + untrackedVolumeUSD_lte: BigDecimal + untrackedVolumeUSD_in: [BigDecimal!] + untrackedVolumeUSD_not_in: [BigDecimal!] + totalValueLocked: BigDecimal + totalValueLocked_not: BigDecimal + totalValueLocked_gt: BigDecimal + totalValueLocked_lt: BigDecimal + totalValueLocked_gte: BigDecimal + totalValueLocked_lte: BigDecimal + totalValueLocked_in: [BigDecimal!] + totalValueLocked_not_in: [BigDecimal!] + totalValueLockedUSD: BigDecimal + totalValueLockedUSD_not: BigDecimal + totalValueLockedUSD_gt: BigDecimal + totalValueLockedUSD_lt: BigDecimal + totalValueLockedUSD_gte: BigDecimal + totalValueLockedUSD_lte: BigDecimal + totalValueLockedUSD_in: [BigDecimal!] + totalValueLockedUSD_not_in: [BigDecimal!] + priceUSD: BigDecimal + priceUSD_not: BigDecimal + priceUSD_gt: BigDecimal + priceUSD_lt: BigDecimal + priceUSD_gte: BigDecimal + priceUSD_lte: BigDecimal + priceUSD_in: [BigDecimal!] + priceUSD_not_in: [BigDecimal!] + feesUSD: BigDecimal + feesUSD_not: BigDecimal + feesUSD_gt: BigDecimal + feesUSD_lt: BigDecimal + feesUSD_gte: BigDecimal + feesUSD_lte: BigDecimal + feesUSD_in: [BigDecimal!] + feesUSD_not_in: [BigDecimal!] + open: BigDecimal + open_not: BigDecimal + open_gt: BigDecimal + open_lt: BigDecimal + open_gte: BigDecimal + open_lte: BigDecimal + open_in: [BigDecimal!] + open_not_in: [BigDecimal!] + high: BigDecimal + high_not: BigDecimal + high_gt: BigDecimal + high_lt: BigDecimal + high_gte: BigDecimal + high_lte: BigDecimal + high_in: [BigDecimal!] + high_not_in: [BigDecimal!] + low: BigDecimal + low_not: BigDecimal + low_gt: BigDecimal + low_lt: BigDecimal + low_gte: BigDecimal + low_lte: BigDecimal + low_in: [BigDecimal!] + low_not_in: [BigDecimal!] + close: BigDecimal + close_not: BigDecimal + close_gt: BigDecimal + close_lt: BigDecimal + close_gte: BigDecimal + close_lte: BigDecimal + close_in: [BigDecimal!] + close_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [TokenHourData_filter] + or: [TokenHourData_filter] +} + +enum IncreaseEvent_orderBy { + id + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + tokenID + position + position__id + position__owner + position__liquidity + position__depositedToken0 + position__depositedToken1 + position__withdrawnToken0 + position__withdrawnToken1 + position__collectedToken0 + position__collectedToken1 + position__collectedFeesToken0 + position__collectedFeesToken1 + position__amountDepositedUSD + position__amountWithdrawnUSD + position__amountCollectedUSD + position__feeGrowthInside0LastX128 + position__feeGrowthInside1LastX128 + amount0 + amount1 + token0 + token0__id + token0__symbol + token0__name + token0__decimals + token0__totalSupply + token0__volume + token0__volumeUSD + token0__untrackedVolumeUSD + token0__feesUSD + token0__txCount + token0__poolCount + token0__totalValueLocked + token0__totalValueLockedUSD + token0__totalValueLockedUSDUntracked + token0__derivedETH + token1 + token1__id + token1__symbol + token1__name + token1__decimals + token1__totalSupply + token1__volume + token1__volumeUSD + token1__untrackedVolumeUSD + token1__feesUSD + token1__txCount + token1__poolCount + token1__totalValueLocked + token1__totalValueLockedUSD + token1__totalValueLockedUSDUntracked + token1__derivedETH + timeStamp + transaction + transaction__id + transaction__blockNumber + transaction__timestamp + transaction__gasUsed + transaction__gasPrice +} + +input IncreaseEvent_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + tokenID: BigInt + tokenID_not: BigInt + tokenID_gt: BigInt + tokenID_lt: BigInt + tokenID_gte: BigInt + tokenID_lte: BigInt + tokenID_in: [BigInt!] + tokenID_not_in: [BigInt!] + position: String + position_not: String + position_gt: String + position_lt: String + position_gte: String + position_lte: String + position_in: [String!] + position_not_in: [String!] + position_starts_with: String + position_starts_with_nocase: String + position_not_starts_with: String + position_not_starts_with_nocase: String + position_ends_with: String + position_ends_with_nocase: String + position_not_ends_with: String + position_not_ends_with_nocase: String + position_contains: String + position_not_contains: String + position_contains_nocase: String + position_not_contains_nocase: String + position_: Position_filter + amount0: BigInt + amount0_not: BigInt + amount0_gt: BigInt + amount0_lt: BigInt + amount0_gte: BigInt + amount0_lte: BigInt + amount0_in: [BigInt!] + amount0_not_in: [BigInt!] + amount1: BigInt + amount1_not: BigInt + amount1_gt: BigInt + amount1_lt: BigInt + amount1_gte: BigInt + amount1_lte: BigInt + amount1_in: [BigInt!] + amount1_not_in: [BigInt!] + token0: String + token0_not: String + token0_gt: String + token0_lt: String + token0_gte: String + token0_lte: String + token0_in: [String!] + token0_not_in: [String!] + token0_starts_with: String + token0_starts_with_nocase: String + token0_not_starts_with: String + token0_not_starts_with_nocase: String + token0_ends_with: String + token0_ends_with_nocase: String + token0_not_ends_with: String + token0_not_ends_with_nocase: String + token0_contains: String + token0_not_contains: String + token0_contains_nocase: String + token0_not_contains_nocase: String + token0_: Token_filter + token1: String + token1_not: String + token1_gt: String + token1_lt: String + token1_gte: String + token1_lte: String + token1_in: [String!] + token1_not_in: [String!] + token1_starts_with: String + token1_starts_with_nocase: String + token1_not_starts_with: String + token1_not_starts_with_nocase: String + token1_ends_with: String + token1_ends_with_nocase: String + token1_not_ends_with: String + token1_not_ends_with_nocase: String + token1_contains: String + token1_not_contains: String + token1_contains_nocase: String + token1_not_contains_nocase: String + token1_: Token_filter + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + transaction: String + transaction_not: String + transaction_gt: String + transaction_lt: String + transaction_gte: String + transaction_lte: String + transaction_in: [String!] + transaction_not_in: [String!] + transaction_starts_with: String + transaction_starts_with_nocase: String + transaction_not_starts_with: String + transaction_not_starts_with_nocase: String + transaction_ends_with: String + transaction_ends_with_nocase: String + transaction_not_ends_with: String + transaction_not_ends_with_nocase: String + transaction_contains: String + transaction_not_contains: String + transaction_contains_nocase: String + transaction_not_contains_nocase: String + transaction_: Transaction_filter + _change_block: BlockChangedFilter + and: [IncreaseEvent_filter] + or: [IncreaseEvent_filter] +} + +enum DecreaseEvent_orderBy { + id + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + tokenID + position + position__id + position__owner + position__liquidity + position__depositedToken0 + position__depositedToken1 + position__withdrawnToken0 + position__withdrawnToken1 + position__collectedToken0 + position__collectedToken1 + position__collectedFeesToken0 + position__collectedFeesToken1 + position__amountDepositedUSD + position__amountWithdrawnUSD + position__amountCollectedUSD + position__feeGrowthInside0LastX128 + position__feeGrowthInside1LastX128 + amount0 + amount1 + token0 + token0__id + token0__symbol + token0__name + token0__decimals + token0__totalSupply + token0__volume + token0__volumeUSD + token0__untrackedVolumeUSD + token0__feesUSD + token0__txCount + token0__poolCount + token0__totalValueLocked + token0__totalValueLockedUSD + token0__totalValueLockedUSDUntracked + token0__derivedETH + token1 + token1__id + token1__symbol + token1__name + token1__decimals + token1__totalSupply + token1__volume + token1__volumeUSD + token1__untrackedVolumeUSD + token1__feesUSD + token1__txCount + token1__poolCount + token1__totalValueLocked + token1__totalValueLockedUSD + token1__totalValueLockedUSDUntracked + token1__derivedETH + timeStamp + transaction + transaction__id + transaction__blockNumber + transaction__timestamp + transaction__gasUsed + transaction__gasPrice +} + +input DecreaseEvent_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + tokenID: BigInt + tokenID_not: BigInt + tokenID_gt: BigInt + tokenID_lt: BigInt + tokenID_gte: BigInt + tokenID_lte: BigInt + tokenID_in: [BigInt!] + tokenID_not_in: [BigInt!] + position: String + position_not: String + position_gt: String + position_lt: String + position_gte: String + position_lte: String + position_in: [String!] + position_not_in: [String!] + position_starts_with: String + position_starts_with_nocase: String + position_not_starts_with: String + position_not_starts_with_nocase: String + position_ends_with: String + position_ends_with_nocase: String + position_not_ends_with: String + position_not_ends_with_nocase: String + position_contains: String + position_not_contains: String + position_contains_nocase: String + position_not_contains_nocase: String + position_: Position_filter + amount0: BigInt + amount0_not: BigInt + amount0_gt: BigInt + amount0_lt: BigInt + amount0_gte: BigInt + amount0_lte: BigInt + amount0_in: [BigInt!] + amount0_not_in: [BigInt!] + amount1: BigInt + amount1_not: BigInt + amount1_gt: BigInt + amount1_lt: BigInt + amount1_gte: BigInt + amount1_lte: BigInt + amount1_in: [BigInt!] + amount1_not_in: [BigInt!] + token0: String + token0_not: String + token0_gt: String + token0_lt: String + token0_gte: String + token0_lte: String + token0_in: [String!] + token0_not_in: [String!] + token0_starts_with: String + token0_starts_with_nocase: String + token0_not_starts_with: String + token0_not_starts_with_nocase: String + token0_ends_with: String + token0_ends_with_nocase: String + token0_not_ends_with: String + token0_not_ends_with_nocase: String + token0_contains: String + token0_not_contains: String + token0_contains_nocase: String + token0_not_contains_nocase: String + token0_: Token_filter + token1: String + token1_not: String + token1_gt: String + token1_lt: String + token1_gte: String + token1_lte: String + token1_in: [String!] + token1_not_in: [String!] + token1_starts_with: String + token1_starts_with_nocase: String + token1_not_starts_with: String + token1_not_starts_with_nocase: String + token1_ends_with: String + token1_ends_with_nocase: String + token1_not_ends_with: String + token1_not_ends_with_nocase: String + token1_contains: String + token1_not_contains: String + token1_contains_nocase: String + token1_not_contains_nocase: String + token1_: Token_filter + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + transaction: String + transaction_not: String + transaction_gt: String + transaction_lt: String + transaction_gte: String + transaction_lte: String + transaction_in: [String!] + transaction_not_in: [String!] + transaction_starts_with: String + transaction_starts_with_nocase: String + transaction_not_starts_with: String + transaction_not_starts_with_nocase: String + transaction_ends_with: String + transaction_ends_with_nocase: String + transaction_not_ends_with: String + transaction_not_ends_with_nocase: String + transaction_contains: String + transaction_not_contains: String + transaction_contains_nocase: String + transaction_not_contains_nocase: String + transaction_: Transaction_filter + _change_block: BlockChangedFilter + and: [DecreaseEvent_filter] + or: [DecreaseEvent_filter] +} + +enum SetProtocolFeeEvent_orderBy { + id + pool + pool__id + pool__createdAtTimestamp + pool__createdAtBlockNumber + pool__feeTier + pool__liquidity + pool__sqrtPrice + pool__feeGrowthGlobal0X128 + pool__feeGrowthGlobal1X128 + pool__token0Price + pool__token1Price + pool__tick + pool__observationIndex + pool__volumeToken0 + pool__volumeToken1 + pool__volumeUSD + pool__untrackedVolumeUSD + pool__feesUSD + pool__txCount + pool__collectedFeesToken0 + pool__collectedFeesToken1 + pool__collectedFeesUSD + pool__totalValueLockedToken0 + pool__totalValueLockedToken1 + pool__totalValueLockedETH + pool__totalValueLockedUSD + pool__totalValueLockedUSDUntracked + pool__isProtocolFeeEnabled + pool__liquidityProviderCount + logIndex + new0 + new1 + old0 + old1 + timestamp +} + +input SetProtocolFeeEvent_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + pool_: Pool_filter + logIndex: BigInt + logIndex_not: BigInt + logIndex_gt: BigInt + logIndex_lt: BigInt + logIndex_gte: BigInt + logIndex_lte: BigInt + logIndex_in: [BigInt!] + logIndex_not_in: [BigInt!] + new0: BigInt + new0_not: BigInt + new0_gt: BigInt + new0_lt: BigInt + new0_gte: BigInt + new0_lte: BigInt + new0_in: [BigInt!] + new0_not_in: [BigInt!] + new1: BigInt + new1_not: BigInt + new1_gt: BigInt + new1_lt: BigInt + new1_gte: BigInt + new1_lte: BigInt + new1_in: [BigInt!] + new1_not_in: [BigInt!] + old0: BigInt + old0_not: BigInt + old0_gt: BigInt + old0_lt: BigInt + old0_gte: BigInt + old0_lte: BigInt + old0_in: [BigInt!] + old0_not_in: [BigInt!] + old1: BigInt + old1_not: BigInt + old1_gt: BigInt + old1_lt: BigInt + old1_gte: BigInt + old1_lte: BigInt + old1_in: [BigInt!] + old1_not_in: [BigInt!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [SetProtocolFeeEvent_filter] + or: [SetProtocolFeeEvent_filter] +} + +type _MetaBlock_ { + hash: Bytes + number: Int! + timestamp: Int +} + +type _Meta_ { + block: _MetaBlock_! + deployment: String! + hasIndexingErrors: Boolean! +} + +type ResultState { + block: _Block_! + contractAddress: String! + cid: String! + kind: String! + data: String! +} + +type SyncStatus { + latestIndexedBlockHash: String! + latestIndexedBlockNumber: Int! + latestCanonicalBlockHash: String! + latestCanonicalBlockNumber: Int! + initialIndexedBlockHash: String! + initialIndexedBlockNumber: Int! + latestProcessedBlockHash: String! + latestProcessedBlockNumber: Int! +} + +type Query { + events(blockHash: String!, contractAddress: String!, name: String): [ResultEvent!] + eventsInRange(fromBlockNumber: Int!, toBlockNumber: Int!): [ResultEvent!] + factory(id: ID!, block: Block_height): Factory + factories(block: Block_height, where: Factory_filter, orderBy: Factory_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Factory!]! + bundle(id: ID!, block: Block_height): Bundle + bundles(block: Block_height, where: Bundle_filter, orderBy: Bundle_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Bundle!]! + token(id: ID!, block: Block_height): Token + tokens(block: Block_height, where: Token_filter, orderBy: Token_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Token!]! + pool(id: ID!, block: Block_height): Pool + pools(block: Block_height, where: Pool_filter, orderBy: Pool_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Pool!]! + tick(id: ID!, block: Block_height): Tick + ticks(block: Block_height, where: Tick_filter, orderBy: Tick_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Tick!]! + position(id: ID!, block: Block_height): Position + positions(block: Block_height, where: Position_filter, orderBy: Position_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Position!]! + positionSnapshot(id: ID!, block: Block_height): PositionSnapshot + positionSnapshots(block: Block_height, where: PositionSnapshot_filter, orderBy: PositionSnapshot_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [PositionSnapshot!]! + transaction(id: ID!, block: Block_height): Transaction + transactions(block: Block_height, where: Transaction_filter, orderBy: Transaction_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Transaction!]! + mint(id: ID!, block: Block_height): Mint + mints(block: Block_height, where: Mint_filter, orderBy: Mint_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Mint!]! + burn(id: ID!, block: Block_height): Burn + burns(block: Block_height, where: Burn_filter, orderBy: Burn_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Burn!]! + swap(id: ID!, block: Block_height): Swap + swaps(block: Block_height, where: Swap_filter, orderBy: Swap_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Swap!]! + collect(id: ID!, block: Block_height): Collect + collects(block: Block_height, where: Collect_filter, orderBy: Collect_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Collect!]! + flash(id: ID!, block: Block_height): Flash + flashes(block: Block_height, where: Flash_filter, orderBy: Flash_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Flash!]! + uniswapDayData(id: ID!, block: Block_height): UniswapDayData + uniswapDayDatas(block: Block_height, where: UniswapDayData_filter, orderBy: UniswapDayData_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [UniswapDayData!]! + poolDayData(id: ID!, block: Block_height): PoolDayData + poolDayDatas(block: Block_height, where: PoolDayData_filter, orderBy: PoolDayData_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [PoolDayData!]! + poolHourData(id: ID!, block: Block_height): PoolHourData + poolHourDatas(block: Block_height, where: PoolHourData_filter, orderBy: PoolHourData_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [PoolHourData!]! + tickHourData(id: ID!, block: Block_height): TickHourData + tickHourDatas(block: Block_height, where: TickHourData_filter, orderBy: TickHourData_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [TickHourData!]! + tickDayData(id: ID!, block: Block_height): TickDayData + tickDayDatas(block: Block_height, where: TickDayData_filter, orderBy: TickDayData_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [TickDayData!]! + tokenDayData(id: ID!, block: Block_height): TokenDayData + tokenDayDatas(block: Block_height, where: TokenDayData_filter, orderBy: TokenDayData_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [TokenDayData!]! + tokenHourData(id: ID!, block: Block_height): TokenHourData + tokenHourDatas(block: Block_height, where: TokenHourData_filter, orderBy: TokenHourData_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [TokenHourData!]! + increaseEvent(id: ID!, block: Block_height): IncreaseEvent + increaseEvents(block: Block_height, where: IncreaseEvent_filter, orderBy: IncreaseEvent_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [IncreaseEvent!]! + decreaseEvent(id: ID!, block: Block_height): DecreaseEvent + decreaseEvents(block: Block_height, where: DecreaseEvent_filter, orderBy: DecreaseEvent_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [DecreaseEvent!]! + setProtocolFeeEvent(id: ID!, block: Block_height): SetProtocolFeeEvent + setProtocolFeeEvents(block: Block_height, where: SetProtocolFeeEvent_filter, orderBy: SetProtocolFeeEvent_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [SetProtocolFeeEvent!]! + _meta(block: Block_height): _Meta_ + getStateByCID(cid: String!): ResultState + getState(blockHash: String!, contractAddress: String!, kind: String): ResultState + getSyncStatus: SyncStatus +} + +type Factory { + id: ID! + poolCount: BigInt! + txCount: BigInt! + totalVolumeUSD: BigDecimal! + totalVolumeETH: BigDecimal! + totalFeesUSD: BigDecimal! + totalFeesETH: BigDecimal! + untrackedVolumeUSD: BigDecimal! + totalValueLockedUSD: BigDecimal! + totalValueLockedETH: BigDecimal! + totalValueLockedUSDUntracked: BigDecimal! + totalValueLockedETHUntracked: BigDecimal! + owner: ID! +} + +type Bundle { + id: ID! + ethPriceUSD: BigDecimal! +} + +type Token { + id: ID! + symbol: String! + name: String! + decimals: BigInt! + totalSupply: BigInt! + volume: BigDecimal! + volumeUSD: BigDecimal! + untrackedVolumeUSD: BigDecimal! + feesUSD: BigDecimal! + txCount: BigInt! + poolCount: BigInt! + totalValueLocked: BigDecimal! + totalValueLockedUSD: BigDecimal! + totalValueLockedUSDUntracked: BigDecimal! + derivedETH: BigDecimal! + whitelistPools: [Pool!]! + tokenDayData: [TokenDayData!]! +} + +type Pool { + id: ID! + createdAtTimestamp: BigInt! + createdAtBlockNumber: BigInt! + token0: Token! + token1: Token! + feeTier: BigInt! + liquidity: BigInt! + sqrtPrice: BigInt! + feeGrowthGlobal0X128: BigInt! + feeGrowthGlobal1X128: BigInt! + token0Price: BigDecimal! + token1Price: BigDecimal! + tick: BigInt + observationIndex: BigInt! + volumeToken0: BigDecimal! + volumeToken1: BigDecimal! + volumeUSD: BigDecimal! + untrackedVolumeUSD: BigDecimal! + feesUSD: BigDecimal! + txCount: BigInt! + collectedFeesToken0: BigDecimal! + collectedFeesToken1: BigDecimal! + collectedFeesUSD: BigDecimal! + totalValueLockedToken0: BigDecimal! + totalValueLockedToken1: BigDecimal! + totalValueLockedETH: BigDecimal! + totalValueLockedUSD: BigDecimal! + totalValueLockedUSDUntracked: BigDecimal! + isProtocolFeeEnabled: Boolean! + liquidityProviderCount: BigInt! + poolHourData: [PoolHourData!]! + poolDayData: [PoolDayData!]! + mints: [Mint!]! + burns: [Burn!]! + swaps: [Swap!]! + collects: [Collect!]! + ticks: [Tick!]! +} + +type PoolHourData { + id: ID! + periodStartUnix: Int! + pool: Pool! + liquidity: BigInt! + sqrtPrice: BigInt! + token0Price: BigDecimal! + token1Price: BigDecimal! + tick: BigInt + feeGrowthGlobal0X128: BigInt! + feeGrowthGlobal1X128: BigInt! + tvlUSD: BigDecimal! + volumeToken0: BigDecimal! + volumeToken1: BigDecimal! + volumeUSD: BigDecimal! + feesUSD: BigDecimal! + txCount: BigInt! + open: BigDecimal! + high: BigDecimal! + low: BigDecimal! + close: BigDecimal! +} + +type PoolDayData { + id: ID! + date: Int! + pool: Pool! + liquidity: BigInt! + sqrtPrice: BigInt! + token0Price: BigDecimal! + token1Price: BigDecimal! + tick: BigInt + feeGrowthGlobal0X128: BigInt! + feeGrowthGlobal1X128: BigInt! + tvlUSD: BigDecimal! + volumeToken0: BigDecimal! + volumeToken1: BigDecimal! + volumeUSD: BigDecimal! + feesUSD: BigDecimal! + txCount: BigInt! + open: BigDecimal! + high: BigDecimal! + low: BigDecimal! + close: BigDecimal! +} + +type Mint { + id: ID! + transaction: Transaction! + timestamp: BigInt! + pool: Pool! + token0: Token! + token1: Token! + owner: Bytes! + sender: Bytes + origin: Bytes! + amount: BigInt! + amount0: BigDecimal! + amount1: BigDecimal! + amountUSD: BigDecimal + tickLower: BigInt! + tickUpper: BigInt! + logIndex: BigInt +} + +type Transaction { + id: ID! + blockNumber: BigInt! + timestamp: BigInt! + gasUsed: BigInt! + gasPrice: BigInt! + mints: [Mint!]! + burns: [Burn!]! + swaps: [Swap!]! + flashed: [Flash!]! + collects: [Collect!]! +} + +type Burn { + id: ID! + transaction: Transaction! + pool: Pool! + token0: Token! + token1: Token! + timestamp: BigInt! + owner: Bytes + origin: Bytes! + amount: BigInt! + amount0: BigDecimal! + amount1: BigDecimal! + amountUSD: BigDecimal + tickLower: BigInt! + tickUpper: BigInt! + logIndex: BigInt +} + +type Swap { + id: ID! + transaction: Transaction! + timestamp: BigInt! + pool: Pool! + token0: Token! + token1: Token! + sender: Bytes! + recipient: Bytes! + origin: Bytes! + amount0: BigDecimal! + amount1: BigDecimal! + amountUSD: BigDecimal! + sqrtPriceX96: BigInt! + tick: BigInt! + logIndex: BigInt +} + +type Flash { + id: ID! + transaction: Transaction! + timestamp: BigInt! + pool: Pool! + sender: Bytes! + recipient: Bytes! + amount0: BigDecimal! + amount1: BigDecimal! + amountUSD: BigDecimal! + amount0Paid: BigDecimal! + amount1Paid: BigDecimal! + logIndex: BigInt +} + +type Collect { + id: ID! + transaction: Transaction! + timestamp: BigInt! + pool: Pool! + owner: Bytes + amount0: BigDecimal! + amount1: BigDecimal! + amountUSD: BigDecimal + tickLower: BigInt! + tickUpper: BigInt! + logIndex: BigInt +} + +type Tick { + id: ID! + poolAddress: String + tickIdx: BigInt! + pool: Pool! + liquidityGross: BigInt! + liquidityNet: BigInt! + price0: BigDecimal! + price1: BigDecimal! + volumeToken0: BigDecimal! + volumeToken1: BigDecimal! + volumeUSD: BigDecimal! + untrackedVolumeUSD: BigDecimal! + feesUSD: BigDecimal! + collectedFeesToken0: BigDecimal! + collectedFeesToken1: BigDecimal! + collectedFeesUSD: BigDecimal! + createdAtTimestamp: BigInt! + createdAtBlockNumber: BigInt! + liquidityProviderCount: BigInt! + feeGrowthOutside0X128: BigInt! + feeGrowthOutside1X128: BigInt! +} + +type TokenDayData { + id: ID! + date: Int! + token: Token! + volume: BigDecimal! + volumeUSD: BigDecimal! + untrackedVolumeUSD: BigDecimal! + totalValueLocked: BigDecimal! + totalValueLockedUSD: BigDecimal! + priceUSD: BigDecimal! + feesUSD: BigDecimal! + open: BigDecimal! + high: BigDecimal! + low: BigDecimal! + close: BigDecimal! +} + +type Position { + id: ID! + owner: Bytes! + pool: Pool! + token0: Token! + token1: Token! + tickLower: Tick! + tickUpper: Tick! + liquidity: BigInt! + depositedToken0: BigDecimal! + depositedToken1: BigDecimal! + withdrawnToken0: BigDecimal! + withdrawnToken1: BigDecimal! + collectedToken0: BigDecimal! + collectedToken1: BigDecimal! + collectedFeesToken0: BigDecimal! + collectedFeesToken1: BigDecimal! + amountDepositedUSD: BigDecimal! + amountWithdrawnUSD: BigDecimal! + amountCollectedUSD: BigDecimal! + transaction: Transaction! + feeGrowthInside0LastX128: BigInt! + feeGrowthInside1LastX128: BigInt! + increaseEvents: [IncreaseEvent!]! + decreaseEvents: [IncreaseEvent!]! +} + +type IncreaseEvent { + id: ID! + pool: Pool! + tokenID: BigInt! + position: Position! + amount0: BigInt! + amount1: BigInt! + token0: Token! + token1: Token! + timeStamp: BigInt! + transaction: Transaction! +} + +type PositionSnapshot { + id: ID! + owner: Bytes! + pool: Pool! + position: Position! + blockNumber: BigInt! + timestamp: BigInt! + liquidity: BigInt! + depositedToken0: BigDecimal! + depositedToken1: BigDecimal! + withdrawnToken0: BigDecimal! + withdrawnToken1: BigDecimal! + collectedFeesToken0: BigDecimal! + collectedFeesToken1: BigDecimal! + transaction: Transaction! + feeGrowthInside0LastX128: BigInt! + feeGrowthInside1LastX128: BigInt! +} + +type UniswapDayData { + id: ID! + date: Int! + volumeETH: BigDecimal! + volumeUSD: BigDecimal! + volumeUSDUntracked: BigDecimal! + feesUSD: BigDecimal! + txCount: BigInt! + tvlUSD: BigDecimal! +} + +type TickHourData { + id: ID! + periodStartUnix: Int! + pool: Pool! + tick: Tick! + liquidityGross: BigInt! + liquidityNet: BigInt! + volumeToken0: BigDecimal! + volumeToken1: BigDecimal! + volumeUSD: BigDecimal! + feesUSD: BigDecimal! +} + +type TickDayData { + id: ID! + date: Int! + pool: Pool! + tick: Tick! + liquidityGross: BigInt! + liquidityNet: BigInt! + volumeToken0: BigDecimal! + volumeToken1: BigDecimal! + volumeUSD: BigDecimal! + feesUSD: BigDecimal! + feeGrowthOutside0X128: BigInt! + feeGrowthOutside1X128: BigInt! +} + +type TokenHourData { + id: ID! + periodStartUnix: Int! + token: Token! + volume: BigDecimal! + volumeUSD: BigDecimal! + untrackedVolumeUSD: BigDecimal! + totalValueLocked: BigDecimal! + totalValueLockedUSD: BigDecimal! + priceUSD: BigDecimal! + feesUSD: BigDecimal! + open: BigDecimal! + high: BigDecimal! + low: BigDecimal! + close: BigDecimal! +} + +type DecreaseEvent { + id: ID! + pool: Pool! + tokenID: BigInt! + position: Position! + amount0: BigInt! + amount1: BigInt! + token0: Token! + token1: Token! + timeStamp: BigInt! + transaction: Transaction! +} + +type SetProtocolFeeEvent { + id: ID! + pool: Pool! + logIndex: BigInt! + new0: BigInt! + new1: BigInt! + old0: BigInt! + old1: BigInt! + timestamp: BigInt! +} + +type Mutation { + watchContract(address: String!, kind: String!, checkpoint: Boolean!, startingBlock: Int): Boolean! +} + +type Subscription { + onEvent: ResultEvent! +} diff --git a/packages/v3-watcher/src/server.ts b/packages/v3-watcher/src/server.ts new file mode 100644 index 0000000..679134f --- /dev/null +++ b/packages/v3-watcher/src/server.ts @@ -0,0 +1,43 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import fs from 'fs'; +import path from 'path'; +import 'reflect-metadata'; +import debug from 'debug'; + +import { ServerCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { createResolvers } from './resolvers'; +import { Indexer } from './indexer'; +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from './database'; + +const log = debug('vulcanize:server'); + +export const main = async (): Promise => { + const serverCmd = new ServerCmd(); + await serverCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + serverCmd.config.server, + serverCmd.clients.ethClient, + serverCmd.ethProvider, + serverCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await serverCmd.initIndexer(Indexer, graphWatcher); + + const typeDefs = fs.readFileSync(path.join(__dirname, 'schema.gql')).toString(); + + return serverCmd.exec(createResolvers, typeDefs); +}; + +main().then(() => { + log('Starting server...'); +}).catch(err => { + log(err); +}); diff --git a/packages/v3-watcher/src/types.ts b/packages/v3-watcher/src/types.ts new file mode 100644 index 0000000..c456217 --- /dev/null +++ b/packages/v3-watcher/src/types.ts @@ -0,0 +1,3 @@ +// +// Copyright 2021 Vulcanize, Inc. +// diff --git a/packages/v3-watcher/subgraph-build/Factory/Factory.wasm b/packages/v3-watcher/subgraph-build/Factory/Factory.wasm new file mode 100644 index 0000000000000000000000000000000000000000..ae80ef127274281d2b904f06286cf9bd3dcbcb51 GIT binary patch literal 228196 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 literal 0 HcmV?d00001 diff --git a/packages/v3-watcher/subgraph-build/Factory/abis/ERC20.json b/packages/v3-watcher/subgraph-build/Factory/abis/ERC20.json new file mode 100644 index 0000000..3b0ab2f --- /dev/null +++ b/packages/v3-watcher/subgraph-build/Factory/abis/ERC20.json @@ -0,0 +1,222 @@ +[ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/Factory/abis/ERC20NameBytes.json b/packages/v3-watcher/subgraph-build/Factory/abis/ERC20NameBytes.json new file mode 100644 index 0000000..b9455e4 --- /dev/null +++ b/packages/v3-watcher/subgraph-build/Factory/abis/ERC20NameBytes.json @@ -0,0 +1,17 @@ +[ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/Factory/abis/ERC20SymbolBytes.json b/packages/v3-watcher/subgraph-build/Factory/abis/ERC20SymbolBytes.json new file mode 100644 index 0000000..8c329ca --- /dev/null +++ b/packages/v3-watcher/subgraph-build/Factory/abis/ERC20SymbolBytes.json @@ -0,0 +1,17 @@ +[ + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/Factory/abis/factory.json b/packages/v3-watcher/subgraph-build/Factory/abis/factory.json new file mode 100644 index 0000000..2503212 --- /dev/null +++ b/packages/v3-watcher/subgraph-build/Factory/abis/factory.json @@ -0,0 +1,198 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + } + ], + "name": "FeeAmountEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + }, + { + "indexed": false, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "createPool", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + } + ], + "name": "enableFeeAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "feeAmountTickSpacing", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "getPool", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/Factory/abis/pool.json b/packages/v3-watcher/subgraph-build/Factory/abis/pool.json new file mode 100644 index 0000000..c87d64d --- /dev/null +++ b/packages/v3-watcher/subgraph-build/Factory/abis/pool.json @@ -0,0 +1,988 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Burn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "name": "Collect", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "name": "CollectProtocol", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paid0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paid1", + "type": "uint256" + } + ], + "name": "Flash", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "observationCardinalityNextOld", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "observationCardinalityNextNew", + "type": "uint16" + } + ], + "name": "IncreaseObservationCardinalityNext", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "Initialize", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol0Old", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol1Old", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol0New", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol1New", + "type": "uint8" + } + ], + "name": "SetFeeProtocol", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount0", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount1", + "type": "int256" + }, + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "Swap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount0Requested", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Requested", + "type": "uint128" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Requested", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Requested", + "type": "uint128" + } + ], + "name": "collectProtocol", + "outputs": [ + { + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fee", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeGrowthGlobal0X128", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeGrowthGlobal1X128", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "flash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "observationCardinalityNext", + "type": "uint16" + } + ], + "name": "increaseObservationCardinalityNext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "liquidity", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxLiquidityPerTick", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "observations", + "outputs": [ + { + "internalType": "uint32", + "name": "blockTimestamp", + "type": "uint32" + }, + { + "internalType": "int56", + "name": "tickCumulative", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityCumulativeX128", + "type": "uint160" + }, + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32[]", + "name": "secondsAgos", + "type": "uint32[]" + } + ], + "name": "observe", + "outputs": [ + { + "internalType": "int56[]", + "name": "tickCumulatives", + "type": "int56[]" + }, + { + "internalType": "uint160[]", + "name": "secondsPerLiquidityCumulativeX128s", + "type": "uint160[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "positions", + "outputs": [ + { + "internalType": "uint128", + "name": "_liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside0LastX128", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside1LastX128", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "tokensOwed0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "tokensOwed1", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFees", + "outputs": [ + { + "internalType": "uint128", + "name": "token0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "token1", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "feeProtocol0", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "feeProtocol1", + "type": "uint8" + } + ], + "name": "setFeeProtocol", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slot0", + "outputs": [ + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "internalType": "int24", + "name": "tick", + "type": "int24" + }, + { + "internalType": "uint16", + "name": "observationIndex", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "observationCardinality", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "observationCardinalityNext", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "feeProtocol", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "unlocked", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + } + ], + "name": "snapshotCumulativesInside", + "outputs": [ + { + "internalType": "int56", + "name": "tickCumulativeInside", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityInsideX128", + "type": "uint160" + }, + { + "internalType": "uint32", + "name": "secondsInside", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bool", + "name": "zeroForOne", + "type": "bool" + }, + { + "internalType": "int256", + "name": "amountSpecified", + "type": "int256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "int256", + "name": "amount0", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int16", + "name": "wordPosition", + "type": "int16" + } + ], + "name": "tickBitmap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tickSpacing", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "ticks", + "outputs": [ + { + "internalType": "uint128", + "name": "liquidityGross", + "type": "uint128" + }, + { + "internalType": "int128", + "name": "liquidityNet", + "type": "int128" + }, + { + "internalType": "uint256", + "name": "feeGrowthOutside0X128", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeGrowthOutside1X128", + "type": "uint256" + }, + { + "internalType": "int56", + "name": "tickCumulativeOutside", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityOutsideX128", + "type": "uint160" + }, + { + "internalType": "uint32", + "name": "secondsOutside", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token0", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/NonfungiblePositionManager.wasm b/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/NonfungiblePositionManager.wasm new file mode 100644 index 0000000000000000000000000000000000000000..47d8567354b1e25e658e832620d82e42e7dd50c1 GIT binary patch literal 232579 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 literal 0 HcmV?d00001 diff --git a/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/ERC20.json b/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/ERC20.json new file mode 100644 index 0000000..3b0ab2f --- /dev/null +++ b/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/ERC20.json @@ -0,0 +1,222 @@ +[ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/NonfungiblePositionManager.json b/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/NonfungiblePositionManager.json new file mode 100644 index 0000000..29cef05 --- /dev/null +++ b/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/NonfungiblePositionManager.json @@ -0,0 +1,1193 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_factory", + "type": "address" + }, + { + "internalType": "address", + "name": "_WETH9", + "type": "address" + }, + { + "internalType": "address", + "name": "_tokenDescriptor_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Collect", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "DecreaseLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "IncreaseLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WETH9", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Max", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Max", + "type": "uint128" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + } + ], + "name": "createAndInitializePoolIfNecessary", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "decreaseLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "increaseLiquidity", + "outputs": [ + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "internalType": "struct INonfungiblePositionManager.MintParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "positions", + "outputs": [ + { + "internalType": "uint96", + "name": "nonce", + "type": "uint96" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside0LastX128", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside1LastX128", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "tokensOwed0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "tokensOwed1", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowed", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowedIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "sweepToken", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Owed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Owed", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3MintCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "unwrapWETH9", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/factory.json b/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/factory.json new file mode 100644 index 0000000..2503212 --- /dev/null +++ b/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/factory.json @@ -0,0 +1,198 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + } + ], + "name": "FeeAmountEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + }, + { + "indexed": false, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "createPool", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + } + ], + "name": "enableFeeAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "feeAmountTickSpacing", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "getPool", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/pool.json b/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/pool.json new file mode 100644 index 0000000..c87d64d --- /dev/null +++ b/packages/v3-watcher/subgraph-build/NonfungiblePositionManager/abis/pool.json @@ -0,0 +1,988 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Burn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "name": "Collect", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "name": "CollectProtocol", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paid0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paid1", + "type": "uint256" + } + ], + "name": "Flash", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "observationCardinalityNextOld", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "observationCardinalityNextNew", + "type": "uint16" + } + ], + "name": "IncreaseObservationCardinalityNext", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "Initialize", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol0Old", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol1Old", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol0New", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol1New", + "type": "uint8" + } + ], + "name": "SetFeeProtocol", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount0", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount1", + "type": "int256" + }, + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "Swap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount0Requested", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Requested", + "type": "uint128" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Requested", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Requested", + "type": "uint128" + } + ], + "name": "collectProtocol", + "outputs": [ + { + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fee", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeGrowthGlobal0X128", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeGrowthGlobal1X128", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "flash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "observationCardinalityNext", + "type": "uint16" + } + ], + "name": "increaseObservationCardinalityNext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "liquidity", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxLiquidityPerTick", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "observations", + "outputs": [ + { + "internalType": "uint32", + "name": "blockTimestamp", + "type": "uint32" + }, + { + "internalType": "int56", + "name": "tickCumulative", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityCumulativeX128", + "type": "uint160" + }, + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32[]", + "name": "secondsAgos", + "type": "uint32[]" + } + ], + "name": "observe", + "outputs": [ + { + "internalType": "int56[]", + "name": "tickCumulatives", + "type": "int56[]" + }, + { + "internalType": "uint160[]", + "name": "secondsPerLiquidityCumulativeX128s", + "type": "uint160[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "positions", + "outputs": [ + { + "internalType": "uint128", + "name": "_liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside0LastX128", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside1LastX128", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "tokensOwed0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "tokensOwed1", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFees", + "outputs": [ + { + "internalType": "uint128", + "name": "token0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "token1", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "feeProtocol0", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "feeProtocol1", + "type": "uint8" + } + ], + "name": "setFeeProtocol", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slot0", + "outputs": [ + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "internalType": "int24", + "name": "tick", + "type": "int24" + }, + { + "internalType": "uint16", + "name": "observationIndex", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "observationCardinality", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "observationCardinalityNext", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "feeProtocol", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "unlocked", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + } + ], + "name": "snapshotCumulativesInside", + "outputs": [ + { + "internalType": "int56", + "name": "tickCumulativeInside", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityInsideX128", + "type": "uint160" + }, + { + "internalType": "uint32", + "name": "secondsInside", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bool", + "name": "zeroForOne", + "type": "bool" + }, + { + "internalType": "int256", + "name": "amountSpecified", + "type": "int256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "int256", + "name": "amount0", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int16", + "name": "wordPosition", + "type": "int16" + } + ], + "name": "tickBitmap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tickSpacing", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "ticks", + "outputs": [ + { + "internalType": "uint128", + "name": "liquidityGross", + "type": "uint128" + }, + { + "internalType": "int128", + "name": "liquidityNet", + "type": "int128" + }, + { + "internalType": "uint256", + "name": "feeGrowthOutside0X128", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeGrowthOutside1X128", + "type": "uint256" + }, + { + "internalType": "int56", + "name": "tickCumulativeOutside", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityOutsideX128", + "type": "uint160" + }, + { + "internalType": "uint32", + "name": "secondsOutside", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token0", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/Pool/abis/ERC20.json b/packages/v3-watcher/subgraph-build/Pool/abis/ERC20.json new file mode 100644 index 0000000..3b0ab2f --- /dev/null +++ b/packages/v3-watcher/subgraph-build/Pool/abis/ERC20.json @@ -0,0 +1,222 @@ +[ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/Pool/abis/factory.json b/packages/v3-watcher/subgraph-build/Pool/abis/factory.json new file mode 100644 index 0000000..2503212 --- /dev/null +++ b/packages/v3-watcher/subgraph-build/Pool/abis/factory.json @@ -0,0 +1,198 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + } + ], + "name": "FeeAmountEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + }, + { + "indexed": false, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "createPool", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "int24", + "name": "tickSpacing", + "type": "int24" + } + ], + "name": "enableFeeAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "feeAmountTickSpacing", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenB", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + } + ], + "name": "getPool", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/Pool/abis/pool.json b/packages/v3-watcher/subgraph-build/Pool/abis/pool.json new file mode 100644 index 0000000..c87d64d --- /dev/null +++ b/packages/v3-watcher/subgraph-build/Pool/abis/pool.json @@ -0,0 +1,988 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Burn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "name": "Collect", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "name": "CollectProtocol", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paid0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paid1", + "type": "uint256" + } + ], + "name": "Flash", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "observationCardinalityNextOld", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "observationCardinalityNextNew", + "type": "uint16" + } + ], + "name": "IncreaseObservationCardinalityNext", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "Initialize", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "indexed": true, + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol0Old", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol1Old", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol0New", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "feeProtocol1New", + "type": "uint8" + } + ], + "name": "SetFeeProtocol", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount0", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount1", + "type": "int256" + }, + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "Swap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount0Requested", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Requested", + "type": "uint128" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount0Requested", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1Requested", + "type": "uint128" + } + ], + "name": "collectProtocol", + "outputs": [ + { + "internalType": "uint128", + "name": "amount0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount1", + "type": "uint128" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fee", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeGrowthGlobal0X128", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeGrowthGlobal1X128", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "flash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "observationCardinalityNext", + "type": "uint16" + } + ], + "name": "increaseObservationCardinalityNext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "liquidity", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxLiquidityPerTick", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "observations", + "outputs": [ + { + "internalType": "uint32", + "name": "blockTimestamp", + "type": "uint32" + }, + { + "internalType": "int56", + "name": "tickCumulative", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityCumulativeX128", + "type": "uint160" + }, + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32[]", + "name": "secondsAgos", + "type": "uint32[]" + } + ], + "name": "observe", + "outputs": [ + { + "internalType": "int56[]", + "name": "tickCumulatives", + "type": "int56[]" + }, + { + "internalType": "uint160[]", + "name": "secondsPerLiquidityCumulativeX128s", + "type": "uint160[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "positions", + "outputs": [ + { + "internalType": "uint128", + "name": "_liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside0LastX128", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeGrowthInside1LastX128", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "tokensOwed0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "tokensOwed1", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFees", + "outputs": [ + { + "internalType": "uint128", + "name": "token0", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "token1", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "feeProtocol0", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "feeProtocol1", + "type": "uint8" + } + ], + "name": "setFeeProtocol", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slot0", + "outputs": [ + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "internalType": "int24", + "name": "tick", + "type": "int24" + }, + { + "internalType": "uint16", + "name": "observationIndex", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "observationCardinality", + "type": "uint16" + }, + { + "internalType": "uint16", + "name": "observationCardinalityNext", + "type": "uint16" + }, + { + "internalType": "uint8", + "name": "feeProtocol", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "unlocked", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + } + ], + "name": "snapshotCumulativesInside", + "outputs": [ + { + "internalType": "int56", + "name": "tickCumulativeInside", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityInsideX128", + "type": "uint160" + }, + { + "internalType": "uint32", + "name": "secondsInside", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bool", + "name": "zeroForOne", + "type": "bool" + }, + { + "internalType": "int256", + "name": "amountSpecified", + "type": "int256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "int256", + "name": "amount0", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int16", + "name": "wordPosition", + "type": "int16" + } + ], + "name": "tickBitmap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tickSpacing", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "name": "ticks", + "outputs": [ + { + "internalType": "uint128", + "name": "liquidityGross", + "type": "uint128" + }, + { + "internalType": "int128", + "name": "liquidityNet", + "type": "int128" + }, + { + "internalType": "uint256", + "name": "feeGrowthOutside0X128", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeGrowthOutside1X128", + "type": "uint256" + }, + { + "internalType": "int56", + "name": "tickCumulativeOutside", + "type": "int56" + }, + { + "internalType": "uint160", + "name": "secondsPerLiquidityOutsideX128", + "type": "uint160" + }, + { + "internalType": "uint32", + "name": "secondsOutside", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token0", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/schema.graphql b/packages/v3-watcher/subgraph-build/schema.graphql new file mode 100644 index 0000000..60a5e63 --- /dev/null +++ b/packages/v3-watcher/subgraph-build/schema.graphql @@ -0,0 +1,707 @@ +type Factory @entity { + # factory address + id: ID! + # amount of pools created + poolCount: BigInt! + # amoutn of transactions all time + txCount: BigInt! + # total volume all time in derived USD + totalVolumeUSD: BigDecimal! + # total volume all time in derived ETH + totalVolumeETH: BigDecimal! + # total swap fees all time in USD + totalFeesUSD: BigDecimal! + # total swap fees all time in USD + totalFeesETH: BigDecimal! + # all volume even through less reliable USD values + untrackedVolumeUSD: BigDecimal! + # TVL derived in USD + totalValueLockedUSD: BigDecimal! + # TVL derived in ETH + totalValueLockedETH: BigDecimal! + # TVL derived in USD untracked + totalValueLockedUSDUntracked: BigDecimal! + # TVL derived in ETH untracked + totalValueLockedETHUntracked: BigDecimal! + + # current owner of the factory + owner: ID! +} + +# stores for USD calculations +type Bundle @entity { + id: ID! + # price of ETH in usd + ethPriceUSD: BigDecimal! +} + +type Token @entity { + # token address + id: ID! + # token symbol + symbol: String! + # token name + name: String! + # token decimals + decimals: BigInt! + # token total supply + totalSupply: BigInt! + # volume in token units + volume: BigDecimal! + # volume in derived USD + volumeUSD: BigDecimal! + # volume in USD even on pools with less reliable USD values + untrackedVolumeUSD: BigDecimal! + # fees in USD + feesUSD: BigDecimal! + # transactions across all pools that include this token + txCount: BigInt! + # number of pools containing this token + poolCount: BigInt! + # liquidity across all pools in token units + totalValueLocked: BigDecimal! + # liquidity across all pools in derived USD + totalValueLockedUSD: BigDecimal! + # TVL derived in USD untracked + totalValueLockedUSDUntracked: BigDecimal! + # derived price in ETH + derivedETH: BigDecimal! + # pools token is in that are white listed for USD pricing + whitelistPools: [Pool!]! + # derived fields + tokenDayData: [TokenDayData!]! @derivedFrom(field: "token") +} + +type Pool @entity { + # pool address + id: ID! + # creation + createdAtTimestamp: BigInt! + # block pool was created at + createdAtBlockNumber: BigInt! + # token0 + token0: Token! + # token1 + token1: Token! + # fee amount + feeTier: BigInt! + # in range liquidity + liquidity: BigInt! + # current price tracker + sqrtPrice: BigInt! + # tracker for global fee growth + feeGrowthGlobal0X128: BigInt! + # tracker for global fee growth + feeGrowthGlobal1X128: BigInt! + # token0 per token1 + token0Price: BigDecimal! + # token1 per token0 + token1Price: BigDecimal! + # current tick + tick: BigInt + # current observation index + observationIndex: BigInt! + # all time token0 swapped + volumeToken0: BigDecimal! + # all time token1 swapped + volumeToken1: BigDecimal! + # all time USD swapped + volumeUSD: BigDecimal! + # all time USD swapped, unfiltered for unreliable USD pools + untrackedVolumeUSD: BigDecimal! + # fees in USD + feesUSD: BigDecimal! + # all time number of transactions + txCount: BigInt! + # all time fees collected token0 + collectedFeesToken0: BigDecimal! + # all time fees collected token1 + collectedFeesToken1: BigDecimal! + # all time fees collected derived USD + collectedFeesUSD: BigDecimal! + # total token 0 across all ticks + totalValueLockedToken0: BigDecimal! + # total token 1 across all ticks + totalValueLockedToken1: BigDecimal! + # tvl derived ETH + totalValueLockedETH: BigDecimal! + # tvl USD + totalValueLockedUSD: BigDecimal! + # TVL derived in USD untracked + totalValueLockedUSDUntracked: BigDecimal! + # protocol fee + isProtocolFeeEnabled: Boolean! + # Fields used to help derived relationship + liquidityProviderCount: BigInt! # used to detect new exchanges + # hourly snapshots of pool data + poolHourData: [PoolHourData!]! @derivedFrom(field: "pool") + # daily snapshots of pool data + poolDayData: [PoolDayData!]! @derivedFrom(field: "pool") + # derived fields + mints: [Mint!]! @derivedFrom(field: "pool") + burns: [Burn!]! @derivedFrom(field: "pool") + swaps: [Swap!]! @derivedFrom(field: "pool") + collects: [Collect!]! @derivedFrom(field: "pool") + ticks: [Tick!]! @derivedFrom(field: "pool") +} + +type Tick @entity { + # format: # + id: ID! + # pool address + poolAddress: String + # tick index + tickIdx: BigInt! + # pointer to pool + pool: Pool! + # total liquidity pool has as tick lower or upper + liquidityGross: BigInt! + # how much liquidity changes when tick crossed + liquidityNet: BigInt! + # calculated price of token0 of tick within this pool - constant + price0: BigDecimal! + # calculated price of token1 of tick within this pool - constant + price1: BigDecimal! + # lifetime volume of token0 with this tick in range + volumeToken0: BigDecimal! + # lifetime volume of token1 with this tick in range + volumeToken1: BigDecimal! + # lifetime volume in derived USD with this tick in range + volumeUSD: BigDecimal! + # lifetime volume in untracked USD with this tick in range + untrackedVolumeUSD: BigDecimal! + # fees in USD + feesUSD: BigDecimal! + # all time collected fees in token0 + collectedFeesToken0: BigDecimal! + # all time collected fees in token1 + collectedFeesToken1: BigDecimal! + # all time collected fees in USD + collectedFeesUSD: BigDecimal! + # created time + createdAtTimestamp: BigInt! + # created block + createdAtBlockNumber: BigInt! + # Fields used to help derived relationship + liquidityProviderCount: BigInt! # used to detect new exchanges + # derived fields + # swaps: [Swap!]! @derivedFrom(field: "tick") + # vars needed for fee computation + feeGrowthOutside0X128: BigInt! + feeGrowthOutside1X128: BigInt! +} + +type Position @entity { + # Positions created through NonfungiblePositionManager + # NFT token id + id: ID! + # owner of the NFT + owner: Bytes! + # pool position is within + pool: Pool! + # allow indexing by tokens + token0: Token! + # allow indexing by tokens + token1: Token! + # lower tick of the position + tickLower: Tick! + # upper tick of the position + tickUpper: Tick! + # total position liquidity + liquidity: BigInt! + # amount of token 0 ever deposited to position + depositedToken0: BigDecimal! + # amount of token 1 ever deposited to position + depositedToken1: BigDecimal! + # amount of token 0 ever withdrawn from position (without fees) + withdrawnToken0: BigDecimal! + # amount of token 1 ever withdrawn from position (without fees) + withdrawnToken1: BigDecimal! + # all time collect (inclusive of burn amounts) + collectedToken0: BigDecimal! + # all time collect (inclusive of burn amounts) + collectedToken1: BigDecimal! + # all time collected fees in token0 + collectedFeesToken0: BigDecimal! + # all time collected fees in token1 + collectedFeesToken1: BigDecimal! + # Total amount deposited in terms of USD + amountDepositedUSD: BigDecimal! + # Total amount withdrawn in terms of USD + amountWithdrawnUSD: BigDecimal! + # Total amount collected in terms of USD + amountCollectedUSD: BigDecimal! + # tx in which the position was initialized + transaction: Transaction! + # vars needed for fee computation + feeGrowthInside0LastX128: BigInt! + feeGrowthInside1LastX128: BigInt! + + # derived fields + increaseEvents: [IncreaseEvent!]! @derivedFrom(field: "position") + decreaseEvents: [IncreaseEvent!]! @derivedFrom(field: "position") +} + +type PositionSnapshot @entity { + # # + id: ID! + # owner of the NFT + owner: Bytes! + # pool the position is within + pool: Pool! + # position of which the snap was taken of + position: Position! + # block in which the snap was created + blockNumber: BigInt! + # timestamp of block in which the snap was created + timestamp: BigInt! + # total position liquidity + liquidity: BigInt! + # amount of token 0 ever deposited to position + depositedToken0: BigDecimal! + # amount of token 1 ever deposited to position + depositedToken1: BigDecimal! + # amount of token 0 ever withdrawn from position (without fees) + withdrawnToken0: BigDecimal! + # amount of token 1 ever withdrawn from position (without fees) + withdrawnToken1: BigDecimal! + # all time collected fees in token0 + collectedFeesToken0: BigDecimal! + # all time collected fees in token1 + collectedFeesToken1: BigDecimal! + # tx in which the snapshot was initialized + transaction: Transaction! + # internal vars needed for fee computation + feeGrowthInside0LastX128: BigInt! + feeGrowthInside1LastX128: BigInt! +} + +type Transaction @entity { + # txn hash + id: ID! + # block txn was included in + blockNumber: BigInt! + # timestamp txn was confirmed + timestamp: BigInt! + # gas used during txn execution + gasUsed: BigInt! + gasPrice: BigInt! + # derived values + mints: [Mint!]! @derivedFrom(field: "transaction") + burns: [Burn!]! @derivedFrom(field: "transaction") + swaps: [Swap!]! @derivedFrom(field: "transaction") + flashed: [Flash!]! @derivedFrom(field: "transaction") + collects: [Collect!]! @derivedFrom(field: "transaction") +} + +type Mint @entity { + # transaction hash + "#" + index in mints Transaction array + id: ID! + # which txn the mint was included in + transaction: Transaction! + # time of txn + timestamp: BigInt! + # pool position is within + pool: Pool! + # allow indexing by tokens + token0: Token! + # allow indexing by tokens + token1: Token! + # owner of position where liquidity minted to + owner: Bytes! + # the address that minted the liquidity + sender: Bytes + # txn origin + origin: Bytes! # the EOA that initiated the txn + # amount of liquidity minted + amount: BigInt! + # amount of token 0 minted + amount0: BigDecimal! + # amount of token 1 minted + amount1: BigDecimal! + # derived amount based on available prices of tokens + amountUSD: BigDecimal + # lower tick of the position + tickLower: BigInt! + # upper tick of the position + tickUpper: BigInt! + # order within the txn + logIndex: BigInt +} + +type Burn @entity { + # transaction hash + "#" + index in mints Transaction array + id: ID! + # txn burn was included in + transaction: Transaction! + # pool position is within + pool: Pool! + # allow indexing by tokens + token0: Token! + # allow indexing by tokens + token1: Token! + # need this to pull recent txns for specific token or pool + timestamp: BigInt! + # owner of position where liquidity was burned + owner: Bytes + # txn origin + origin: Bytes! # the EOA that initiated the txn + # amouny of liquidity burned + amount: BigInt! + # amount of token 0 burned + amount0: BigDecimal! + # amount of token 1 burned + amount1: BigDecimal! + # derived amount based on available prices of tokens + amountUSD: BigDecimal + # lower tick of position + tickLower: BigInt! + # upper tick of position + tickUpper: BigInt! + # position within the transactions + logIndex: BigInt +} + +type Swap @entity { + # transaction hash + "#" + index in swaps Transaction array + id: ID! + # pointer to transaction + transaction: Transaction! + # timestamp of transaction + timestamp: BigInt! + # pool swap occured within + pool: Pool! + # allow indexing by tokens + token0: Token! + # allow indexing by tokens + token1: Token! + # sender of the swap + sender: Bytes! + # recipient of the swap + recipient: Bytes! + # txn origin + origin: Bytes! # the EOA that initiated the txn + # delta of token0 swapped + amount0: BigDecimal! + # delta of token1 swapped + amount1: BigDecimal! + # derived info + amountUSD: BigDecimal! + # The sqrt(price) of the pool after the swap, as a Q64.96 + sqrtPriceX96: BigInt! + # the tick after the swap + tick: BigInt! + # index within the txn + logIndex: BigInt +} + +type Collect @entity { + # transaction hash + "#" + index in collect Transaction array + id: ID! + # pointer to txn + transaction: Transaction! + # timestamp of event + timestamp: BigInt! + # pool collect occured within + pool: Pool! + # owner of position collect was performed on + owner: Bytes + # amount of token0 collected + amount0: BigDecimal! + # amount of token1 collected + amount1: BigDecimal! + # derived amount based on available prices of tokens + amountUSD: BigDecimal + # lower tick of position + tickLower: BigInt! + # uppper tick of position + tickUpper: BigInt! + # index within the txn + logIndex: BigInt +} + +type Flash @entity { + # transaction hash + "-" + index in collect Transaction array + id: ID! + # pointer to txn + transaction: Transaction! + # timestamp of event + timestamp: BigInt! + # pool collect occured within + pool: Pool! + # sender of the flash + sender: Bytes! + # recipient of the flash + recipient: Bytes! + # amount of token0 flashed + amount0: BigDecimal! + # amount of token1 flashed + amount1: BigDecimal! + # derived amount based on available prices of tokens + amountUSD: BigDecimal! + # amount token0 paid for flash + amount0Paid: BigDecimal! + # amount token1 paid for flash + amount1Paid: BigDecimal! + # index within the txn + logIndex: BigInt +} + +# Data accumulated and condensed into day stats for all of Uniswap +type UniswapDayData @entity { + # timestamp rounded to current day by dividing by 86400 + id: ID! + # timestamp rounded to current day by dividing by 86400 + date: Int! + # total daily volume in Uniswap derived in terms of ETH + volumeETH: BigDecimal! + # total daily volume in Uniswap derived in terms of USD + volumeUSD: BigDecimal! + # total daily volume in Uniswap derived in terms of USD untracked + volumeUSDUntracked: BigDecimal! + # fees in USD + feesUSD: BigDecimal! + # number of daily transactions + txCount: BigInt! + # tvl in terms of USD + tvlUSD: BigDecimal! +} + +# Data accumulated and condensed into day stats for each pool +type PoolDayData @entity { + # timestamp rounded to current day by dividing by 86400 + id: ID! + # timestamp rounded to current day by dividing by 86400 + date: Int! + # pointer to pool + pool: Pool! + # in range liquidity at end of period + liquidity: BigInt! + # current price tracker at end of period + sqrtPrice: BigInt! + # price of token0 - derived from sqrtPrice + token0Price: BigDecimal! + # price of token1 - derived from sqrtPrice + token1Price: BigDecimal! + # current tick at end of period + tick: BigInt + # tracker for global fee growth + feeGrowthGlobal0X128: BigInt! + # tracker for global fee growth + feeGrowthGlobal1X128: BigInt! + # tvl derived in USD at end of period + tvlUSD: BigDecimal! + # volume in token0 + volumeToken0: BigDecimal! + # volume in token1 + volumeToken1: BigDecimal! + # volume in USD + volumeUSD: BigDecimal! + # fees in USD + feesUSD: BigDecimal! + # numebr of transactions during period + txCount: BigInt! + # opening price of token0 + open: BigDecimal! + # high price of token0 + high: BigDecimal! + # low price of token0 + low: BigDecimal! + # close price of token0 + close: BigDecimal! +} + +# hourly stats tracker for pool +type PoolHourData @entity { + # format: - + id: ID! + # unix timestamp for start of hour + periodStartUnix: Int! + # pointer to pool + pool: Pool! + # in range liquidity at end of period + liquidity: BigInt! + # current price tracker at end of period + sqrtPrice: BigInt! + # price of token0 - derived from sqrtPrice + token0Price: BigDecimal! + # price of token1 - derived from sqrtPrice + token1Price: BigDecimal! + # current tick at end of period + tick: BigInt + # tracker for global fee growth + feeGrowthGlobal0X128: BigInt! + # tracker for global fee growth + feeGrowthGlobal1X128: BigInt! + # tvl derived in USD at end of period + tvlUSD: BigDecimal! + # volume in token0 + volumeToken0: BigDecimal! + # volume in token1 + volumeToken1: BigDecimal! + # volume in USD + volumeUSD: BigDecimal! + # fees in USD + feesUSD: BigDecimal! + # numebr of transactions during period + txCount: BigInt! + # opening price of token0 + open: BigDecimal! + # high price of token0 + high: BigDecimal! + # low price of token0 + low: BigDecimal! + # close price of token0 + close: BigDecimal! +} + +type TickHourData @entity { + # format: -- + id: ID! + # unix timestamp for start of hour + periodStartUnix: Int! + # pointer to pool + pool: Pool! + # pointer to tick + tick: Tick! + # total liquidity pool has as tick lower or upper at end of period + liquidityGross: BigInt! + # how much liquidity changes when tick crossed at end of period + liquidityNet: BigInt! + # hourly volume of token0 with this tick in range + volumeToken0: BigDecimal! + # hourly volume of token1 with this tick in range + volumeToken1: BigDecimal! + # hourly volume in derived USD with this tick in range + volumeUSD: BigDecimal! + # fees in USD + feesUSD: BigDecimal! +} + +# Data accumulated and condensed into day stats for each exchange +# Note: this entity gets saved only if there is a change during the day +type TickDayData @entity { + # format: -- + id: ID! + # timestamp rounded to current day by dividing by 86400 + date: Int! + # pointer to pool + pool: Pool! + # pointer to tick + tick: Tick! + # total liquidity pool has as tick lower or upper at end of period + liquidityGross: BigInt! + # how much liquidity changes when tick crossed at end of period + liquidityNet: BigInt! + # hourly volume of token0 with this tick in range + volumeToken0: BigDecimal! + # hourly volume of token1 with this tick in range + volumeToken1: BigDecimal! + # hourly volume in derived USD with this tick in range + volumeUSD: BigDecimal! + # fees in USD + feesUSD: BigDecimal! + # vars needed for fee computation + feeGrowthOutside0X128: BigInt! + feeGrowthOutside1X128: BigInt! +} + +type TokenDayData @entity { + # token address concatendated with date + id: ID! + # timestamp rounded to current day by dividing by 86400 + date: Int! + # pointer to token + token: Token! + # volume in token units + volume: BigDecimal! + # volume in derived USD + volumeUSD: BigDecimal! + # volume in USD even on pools with less reliable USD values + untrackedVolumeUSD: BigDecimal! + # liquidity across all pools in token units + totalValueLocked: BigDecimal! + # liquidity across all pools in derived USD + totalValueLockedUSD: BigDecimal! + # price at end of period in USD + priceUSD: BigDecimal! + # fees in USD + feesUSD: BigDecimal! + # opening price USD + open: BigDecimal! + # high price USD + high: BigDecimal! + # low price USD + low: BigDecimal! + # close price USD + close: BigDecimal! +} + +type TokenHourData @entity { + # token address concatendated with date + id: ID! + # unix timestamp for start of hour + periodStartUnix: Int! + # pointer to token + token: Token! + # volume in token units + volume: BigDecimal! + # volume in derived USD + volumeUSD: BigDecimal! + # volume in USD even on pools with less reliable USD values + untrackedVolumeUSD: BigDecimal! + # liquidity across all pools in token units + totalValueLocked: BigDecimal! + # liquidity across all pools in derived USD + totalValueLockedUSD: BigDecimal! + # price at end of period in USD + priceUSD: BigDecimal! + # fees in USD + feesUSD: BigDecimal! + # opening price USD + open: BigDecimal! + # high price USD + high: BigDecimal! + # low price USD + low: BigDecimal! + # close price USD + close: BigDecimal! +} + type IncreaseEvent @entity { + id: ID! + pool: Pool! + tokenID: BigInt! + # amount of liquidity added + position: Position! + amount0: BigInt! + amount1: BigInt! +# amountUSD: BigDecimal! + token0: Token! + token1: Token! + timeStamp: BigInt! + transaction: Transaction! +} +type DecreaseEvent @entity { + id: ID! + pool: Pool! + tokenID: BigInt! + # amount of liquidity added + position: Position! + amount0: BigInt! + amount1: BigInt! + token0: Token! + token1: Token! + timeStamp: BigInt! + transaction: Transaction! +} + +type SetProtocolFeeEvent @entity { + id: ID! + pool: Pool! + logIndex: BigInt! + new0: BigInt! + new1: BigInt! + old0: BigInt! + old1: BigInt! + timestamp: BigInt! +} \ No newline at end of file diff --git a/packages/v3-watcher/subgraph-build/subgraph.yaml b/packages/v3-watcher/subgraph-build/subgraph.yaml new file mode 100644 index 0000000..371ac0e --- /dev/null +++ b/packages/v3-watcher/subgraph-build/subgraph.yaml @@ -0,0 +1,100 @@ +specVersion: 0.0.4 +schema: + file: schema.graphql +features: + - nonFatalErrors +dataSources: + - kind: ethereum/contract + name: Factory + network: mainnet + source: + address: "0xc35dadb65012ec5796536bd9864ed8773abc74c4" + startBlock: 2867560 + abi: Factory + mapping: + kind: ethereum/events + apiVersion: 0.0.5 + language: wasm/assemblyscript + file: Factory/Factory.wasm + entities: [] + abis: + - name: Factory + file: Factory/abis/factory.json + - name: ERC20 + file: Factory/abis/ERC20.json + - name: ERC20SymbolBytes + file: Factory/abis/ERC20SymbolBytes.json + - name: ERC20NameBytes + file: Factory/abis/ERC20NameBytes.json + - name: Pool + file: Factory/abis/pool.json + eventHandlers: + - event: PoolCreated(indexed address,indexed address,indexed uint24,int24,address) + handler: handlePoolCreated + - kind: ethereum/contract + name: NonfungiblePositionManager + network: mainnet + source: + address: "0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3" + startBlock: 2868037 + abi: NonfungiblePositionManager + mapping: + kind: ethereum/events + apiVersion: 0.0.5 + language: wasm/assemblyscript + file: NonfungiblePositionManager/NonfungiblePositionManager.wasm + entities: [] + abis: + - name: NonfungiblePositionManager + file: NonfungiblePositionManager/abis/NonfungiblePositionManager.json + - name: Pool + file: NonfungiblePositionManager/abis/pool.json + - name: Factory + file: NonfungiblePositionManager/abis/factory.json + - name: ERC20 + file: NonfungiblePositionManager/abis/ERC20.json + eventHandlers: + - event: IncreaseLiquidity(indexed uint256,uint128,uint256,uint256) + handler: handleIncreaseLiquidity + - event: DecreaseLiquidity(indexed uint256,uint128,uint256,uint256) + handler: handleDecreaseLiquidity + - event: Collect(indexed uint256,address,uint256,uint256) + handler: handleCollect + - event: Transfer(indexed address,indexed address,indexed uint256) + handler: handleTransfer +templates: + - kind: ethereum/contract + name: Pool + network: mainnet + source: + abi: Pool + mapping: + kind: ethereum/events + apiVersion: 0.0.5 + language: wasm/assemblyscript + file: templates/Pool/Pool.wasm + entities: [] + abis: + - name: Pool + file: Pool/abis/pool.json + - name: Factory + file: Pool/abis/factory.json + - name: ERC20 + file: Pool/abis/ERC20.json + eventHandlers: + - event: Initialize(uint160,int24) + handler: handleInitialize + - event: Swap(indexed address,indexed address,int256,int256,uint160,uint128,int24) + handler: handleSwap + - event: Mint(address,indexed address,indexed int24,indexed int24,uint128,uint256,uint256) + handler: handleMint + - event: Burn(indexed address,indexed int24,indexed int24,uint128,uint256,uint256) + handler: handleBurn + - event: Flash(indexed address,indexed address,uint256,uint256,uint256,uint256) + handler: handleFlash + - event: Collect(indexed address,address,indexed int24,indexed int24,uint128,uint128) + handler: handlePoolCollect + - event: CollectProtocol(indexed address,indexed address,uint128,uint128) + handler: handleProtocolCollect + - event: SetFeeProtocol(uint8,uint8,uint8,uint8) + handler: handleSetProtocolFee diff --git a/packages/v3-watcher/subgraph-build/templates/Pool/Pool.wasm b/packages/v3-watcher/subgraph-build/templates/Pool/Pool.wasm new file mode 100644 index 0000000000000000000000000000000000000000..5d5e1407e5605a700f340e25b64a065127fd73ac GIT binary patch literal 326908 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

rwX5!w)~4o{b0nqm`xg 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.7.0": + version "20.14.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.2.tgz#a5f4d2bcb4b6a87bffcaa717718c5a0f208f4a18" + integrity sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q== + dependencies: + undici-types "~5.26.4" + +"@types/node@^10.1.0": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.3": version "2.4.4" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== @@ -633,6 +2786,189 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== +"@types/qs@*": + version "6.9.15" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/semver@^7.3.12": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.0": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" + +"@types/zen-observable@0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" + integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== + +"@typescript-eslint/eslint-plugin@^5.47.1": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.47.1": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@wry/caches@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@wry/caches/-/caches-1.0.1.tgz#8641fd3b6e09230b86ce8b93558d44cf1ece7e52" + integrity sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA== + dependencies: + tslib "^2.3.0" + +"@wry/context@^0.7.0": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.4.tgz#e32d750fa075955c4ab2cfb8c48095e1d42d5990" + integrity sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ== + dependencies: + tslib "^2.3.0" + +"@wry/equality@^0.5.6": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.7.tgz#72ec1a73760943d439d56b7b1e9985aec5d497bb" + integrity sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw== + dependencies: + tslib "^2.3.0" + +"@wry/trie@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.4.3.tgz#077d52c22365871bf3ffcbab8e95cb8bc5689af4" + integrity sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w== + dependencies: + tslib "^2.3.0" + +"@wry/trie@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.5.0.tgz#11e783f3a53f6e4cd1d42d2d1323f5bc3fa99c94" + integrity sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA== + dependencies: + tslib "^2.3.0" + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -671,11 +3007,80 @@ abbrev@^2.0.0: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== +abortable-iterator@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/abortable-iterator/-/abortable-iterator-4.0.3.tgz#432570d8256dbad2cef4f129312b651c5ffcdd0f" + integrity sha512-GJ5fyS9O0hK/TMf+weR+WMEwSEBWVuStHqHmUYWbfHPULyVf7QdUnAvh41+1cUWtHVf0Z/qtQynidxz4ZFDPOg== + dependencies: + get-iterator "^2.0.0" + it-stream-types "^1.0.3" + +abortable-iterator@^5.0.0, abortable-iterator@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/abortable-iterator/-/abortable-iterator-5.0.1.tgz#5d93eba6fa8287a973a9ea090c64ca08b3777780" + integrity sha512-hlZ5Z8UwqrKsJcelVPEqDduZowJPBQJ9ZhBC2FXpja3lXy8X6MoI5uMzIgmrA8+3jcVnp8TF/tx+IBBqYJNUrg== + dependencies: + get-iterator "^2.0.0" + it-stream-types "^2.0.1" + +abstract-level@^1.0.2, abstract-level@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" + integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +accepts@^1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -698,6 +3103,21 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -710,6 +3130,16 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -720,6 +3150,11 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -744,6 +3179,138 @@ ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +any-signal@^3.0.0, any-signal@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-3.0.1.tgz#49cae34368187a3472e31de28fb5cb1430caa9a6" + integrity sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg== + +any-signal@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-4.1.1.tgz#928416c355c66899e6b2a91cad4488f0324bae03" + integrity sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA== + +anymatch@~3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apollo-datasource@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-3.3.2.tgz#5711f8b38d4b7b53fb788cb4dbd4a6a526ea74c8" + integrity sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + apollo-server-env "^4.2.1" + +apollo-reporting-protobuf@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.4.0.tgz#6edd31f09d4a3704d9e808d1db30eca2229ded26" + integrity sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog== + dependencies: + "@apollo/protobufjs" "1.2.6" + +apollo-server-core@^3.11.1, apollo-server-core@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-3.13.0.tgz#ad6601fbb34cc97eedca27a9fb0b5738d11cd27d" + integrity sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + "@apollo/utils.logger" "^1.0.0" + "@apollo/utils.usagereporting" "^1.0.0" + "@apollographql/apollo-tools" "^0.5.3" + "@apollographql/graphql-playground-html" "1.6.29" + "@graphql-tools/mock" "^8.1.2" + "@graphql-tools/schema" "^8.0.0" + "@josephg/resolvable" "^1.0.0" + apollo-datasource "^3.3.2" + apollo-reporting-protobuf "^3.4.0" + apollo-server-env "^4.2.1" + apollo-server-errors "^3.3.1" + apollo-server-plugin-base "^3.7.2" + apollo-server-types "^3.8.0" + async-retry "^1.2.1" + fast-json-stable-stringify "^2.1.0" + graphql-tag "^2.11.0" + loglevel "^1.6.8" + lru-cache "^6.0.0" + node-abort-controller "^3.0.1" + sha.js "^2.4.11" + uuid "^9.0.0" + whatwg-mimetype "^3.0.0" + +apollo-server-env@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-4.2.1.tgz#ea5b1944accdbdba311f179e4dfaeca482c20185" + integrity sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g== + dependencies: + node-fetch "^2.6.7" + +apollo-server-errors@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz#ba5c00cdaa33d4cbd09779f8cb6f47475d1cd655" + integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== + +apollo-server-express@^3.11.1: + version "3.13.0" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-3.13.0.tgz#0d8d9bbba3b8b8264912d215f63fd44e74d5f42a" + integrity sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g== + dependencies: + "@types/accepts" "^1.3.5" + "@types/body-parser" "1.19.2" + "@types/cors" "2.8.12" + "@types/express" "4.17.14" + "@types/express-serve-static-core" "4.17.31" + accepts "^1.3.5" + apollo-server-core "^3.13.0" + apollo-server-types "^3.8.0" + body-parser "^1.19.0" + cors "^2.8.5" + parseurl "^1.3.3" + +apollo-server-plugin-base@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.2.tgz#c19cd137bc4c993ba2490ba2b571b0f3ce60a0cd" + integrity sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw== + dependencies: + apollo-server-types "^3.8.0" + +apollo-server-plugin-response-cache@^3.8.1: + version "3.8.2" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-response-cache/-/apollo-server-plugin-response-cache-3.8.2.tgz#131ce372c3e83d5eaf8c826283c8432fa74b90dd" + integrity sha512-1k9iGgE7QIUvjC9B0A1elGrV5YcZZQFl5wEVOS7URUfEuTr3GsIHBZSFCLAEFNKTQewzS5Spqhv13AmFsOaFmg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + apollo-server-plugin-base "^3.7.2" + apollo-server-types "^3.8.0" + +apollo-server-types@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-3.8.0.tgz#d976b6967878681f715fe2b9e4dad9ba86b1346f" + integrity sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + "@apollo/utils.logger" "^1.0.0" + apollo-reporting-protobuf "^3.4.0" + apollo-server-env "^4.2.1" + +apollo-type-bigint@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/apollo-type-bigint/-/apollo-type-bigint-0.1.3.tgz#9242115ca909b9467ba5c4bc6493a56a06984c0b" + integrity sha512-nyfwEWRZ+kon3Nnot20DufGm2EHZrkJoryYzw3soD+USdxhkcW434w1c/n+mjMLQDl86Z6EvlkvMX5Lordf2Wg== + +app-root-path@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + "aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" @@ -762,6 +3329,11 @@ are-we-there-yet@^4.0.0: resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.2.tgz#aed25dd0eae514660d49ac2b2366b175c614785a" integrity sha512-ncSWAawFhKMJDTdoAeOV+jyW1VCMj5QIAwULIBV0SSR7B/RLPPEQiknKcg/RIIZlUQrxELpsxMiTUoAQ4sIUyg== +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -774,21 +3346,92 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== +array-includes@^3.1.7: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.findlastindex@^1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -799,11 +3442,46 @@ arrify@^2.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== +assert@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +async-mutex@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.4.1.tgz#bccf55b96f2baf8df90ed798cb5544a1f6ee4c2c" + integrity sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA== + dependencies: + tslib "^2.4.0" + +async-retry@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + async@^3.2.3: version "3.2.5" resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== +asyncify-wasm@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/asyncify-wasm/-/asyncify-wasm-1.2.1.tgz#a15c0480e858619a4f971e44e6fc05c49015d9e8" + integrity sha512-ZS7tZ8H8EVbUxAZnkKHvMt9UkYoALue2jwrVl7cnLByjq+1MRrbq7rL5TS+EHQduwkfXD/cNZNa+I0ZyLEBBRQ== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -814,6 +3492,13 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + axios@^1.0.0: version "1.7.2" resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" @@ -833,11 +3518,29 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + before-after-hook@^2.2.0: version "2.2.3" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== +benchmark@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" + integrity sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ== + dependencies: + lodash "^4.17.4" + platform "^1.3.3" + +bignumber.js@^9.0.0: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + bin-links@^4.0.1: version "4.0.4" resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.4.tgz#c3565832b8e287c85f109a02a17027d152a58a63" @@ -848,6 +3551,21 @@ bin-links@^4.0.1: read-cmd-shim "^4.0.0" write-file-atomic "^5.0.0" +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +binaryen@101.0.0-nightly.20210723: + version "101.0.0-nightly.20210723" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-101.0.0-nightly.20210723.tgz#b6bb7f3501341727681a03866c0856500eec3740" + integrity sha512-eioJNqhHlkguVSbblHOtLqlhtC882SOEPKmNFZaDuz1hzQjolxZ+eu3/kaS10n3sGPONsIZsO7R9fR00UyhEUA== + +bintrees@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" + integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== + bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -857,6 +3575,41 @@ bl@^4.0.3, bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" +blob-to-it@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-1.0.4.tgz#f6caf7a4e90b7bb9215fa6a318ed6bd8ad9898cb" + integrity sha512-iCmk0W4NdbrWgRRuxOriU8aM5ijeVLI61Zulsmg/lUHNr7pYjoj+U77opLefNagevtrrbMt3JQ5Qip7ar178kA== + dependencies: + browser-readablestream-to-it "^1.0.3" + +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.2, body-parser@^1.19.0: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -872,13 +3625,38 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.3: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + +browser-readablestream-to-it@^1.0.0, browser-readablestream-to-it@^1.0.1, browser-readablestream-to-it@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.3.tgz#ac3e406c7ee6cdf0a502dd55db33bab97f7fba76" + integrity sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw== + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -892,6 +3670,14 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.1, buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -904,11 +3690,33 @@ builtins@^5.0.0: dependencies: semver "^7.0.0" +bunyan@^1.8.15: + version "1.8.15" + resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.15.tgz#8ce34ca908a17d0776576ca1b2f6cbd916e93b46" + integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== + optionalDependencies: + dtrace-provider "~0.8" + moment "^2.19.3" + mv "~2" + safe-json-stringify "~1" + +byte-access@^1.0.0, byte-access@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/byte-access/-/byte-access-1.0.1.tgz#84badd99be3671c03f0dd6a039a9c963983724af" + integrity sha512-GKYa+lvxnzhgHWj9X+LCsQ4s2/C5uvib573eAOiQKywXMkzFFErY2+yQdzmdE5iWVpmqecsRx3bOtOY4/1eINw== + dependencies: + uint8arraylist "^2.0.0" + byte-size@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.0.tgz#36528cd1ca87d39bd9abd51f5715dc93b6ceb032" integrity sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ== +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + cacache@^16.1.0: version "16.1.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" @@ -951,6 +3759,17 @@ cacache@^17.0.0, cacache@^17.0.4: tar "^6.1.11" unique-filename "^3.0.0" +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -970,6 +3789,39 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +canonical-json@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/canonical-json/-/canonical-json-0.0.4.tgz#6579c072c3db5c477ec41dc978fbf2b8f41074a3" + integrity sha512-2sW7x0m/P7dqEnO0O87U7RTVQAaa7MELcd+Jd9FA6CYgYtwJ1TlDWIYMD8nuMkH1KoThsJogqgLyklrt9d/Azw== + +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cborg@^1.5.4, cborg@^1.6.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.10.2.tgz#83cd581b55b3574c816f82696307c7512db759a1" + integrity sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug== + +chai@^4.3.4: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.0.8" + chalk@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" @@ -978,6 +3830,17 @@ chalk@4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -987,7 +3850,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1000,6 +3863,28 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -1015,11 +3900,29 @@ ci-info@^3.6.1: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== +classic-level@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" + integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-color@~0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347" + integrity sha512-xNaQxWYgI6DD4xIJLn8GY2zDZVbrN0vsU1fEbDNAHZRyceWhpj7A08mYcG1AY92q1Aw0geYkVfiAcEYIZtuTSg== + dependencies: + es5-ext "0.8.x" + cli-cursor@3.1.0, cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -1027,6 +3930,18 @@ cli-cursor@3.1.0, cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + cli-spinners@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" @@ -1086,7 +4001,7 @@ cmd-shim@^6.0.0: resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.3.tgz#c491e9656594ba17ac83c4bd931590a9d6e26033" integrity sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA== -color-convert@^1.9.0: +color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -1105,16 +4020,40 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + columnify@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" @@ -1130,6 +4069,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + common-ancestor-path@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" @@ -1171,6 +4115,18 @@ console-control-strings@^1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + conventional-changelog-angular@5.0.12: version "5.0.12" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" @@ -1253,11 +4209,42 @@ conventional-recommended-bump@6.1.0: meow "^8.0.0" q "^1.5.1" +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + +copyfiles@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.1.tgz#d2dcff60aaad1015f09d0b66e7f0f1c5cd3c5da5" + integrity sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg== + dependencies: + glob "^7.0.5" + minimatch "^3.0.3" + mkdirp "^1.0.4" + noms "0.0.0" + through2 "^2.0.1" + untildify "^4.0.0" + yargs "^16.1.0" + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + cosmiconfig@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" @@ -1269,7 +4256,26 @@ cosmiconfig@7.0.0: path-type "^4.0.0" yaml "^1.10.0" -cross-spawn@^7.0.0, cross-spawn@^7.0.3: +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cron-parser@^4.0.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5" + integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q== + dependencies: + luxon "^3.2.1" + +cross-fetch@^3.1.4, cross-fetch@^3.1.5: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1288,23 +4294,102 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== + +dag-jose@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dag-jose/-/dag-jose-1.0.0.tgz#52e42d70cb5bee31ae4e8e3ab860615568d7ad73" + integrity sha512-U0b/YsIPBp6YZNTFrVjwLZAlY3qGRxZTIEcM/CcQmrVrCWq9MWQq9pheXVSPLIhF4SNwzp2SikPva4/BIrJY+g== + dependencies: + "@ipld/dag-cbor" "^6.0.3" + multiformats "^9.0.2" + dargs@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +datastore-core@^8.0.1: + version "8.0.4" + resolved "https://registry.yarnpkg.com/datastore-core/-/datastore-core-8.0.4.tgz#a5951c8e530f0ba11ca44f6bb3ce5d7070a3d44e" + integrity sha512-oBA6a024NFXJOTu+w9nLAimfy4wCYUhdE/5XQGtdKt1BmCVtPYW10GORvVT3pdZBcse6k/mVcBl+hjkXIlm65A== + dependencies: + "@libp2p/logger" "^2.0.0" + err-code "^3.0.1" + interface-datastore "^7.0.0" + it-all "^2.0.0" + it-drain "^2.0.0" + it-filter "^2.0.0" + it-map "^2.0.0" + it-merge "^2.0.0" + it-pipe "^2.0.3" + it-pushable "^3.0.0" + it-take "^2.0.0" + uint8arrays "^4.0.2" + dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@4, debug@^4.3.3, debug@^4.3.4: +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.5" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== dependencies: ms "2.1.2" +debug@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -1318,11 +4403,40 @@ decamelize@^1.1.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decimal.js@^10.3.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + dedent@0.7.0, dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +default-gateway@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-7.2.2.tgz#85e6d88fde0f58703bab7744ed9d5330fa6b3f6c" + integrity sha512-AD7TrdNNPXRZIGw63dw+lnGmT4v7ggZC5NHNJgAYWm5njrwoze1q5JSAW9YuLy2tjnoLUG/r8FEB93MCh9QJPg== + dependencies: + execa "^7.1.1" + defaults@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" @@ -1330,11 +4444,37 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +deferred-leveldown@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-7.0.0.tgz#39802715fda6ec06d0159a8b28bd1c7e2b1cf0bf" + integrity sha512-QKN8NtuS3BC6m0B8vAnBls44tX1WXAFATUsJlruyAYbZpysWV3siH6o/i3g9DCHauzodksO60bdj5NazNbjCmg== + dependencies: + abstract-leveldown "^7.2.0" + inherits "^2.0.3" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + del@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" @@ -1349,6 +4489,11 @@ del@^6.0.0: rimraf "^3.0.2" slash "^3.0.0" +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1359,16 +4504,48 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== +denque@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +difflib@~0.2.1: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1376,6 +4553,46 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +dns-over-http-resolver@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz#194d5e140a42153f55bb79ac5a64dd2768c36af9" + integrity sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA== + dependencies: + debug "^4.3.1" + native-fetch "^3.0.0" + receptacle "^1.3.2" + +dns-over-http-resolver@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-2.1.3.tgz#bb7f2e10cc18d960339a6e30e21b8c1d99be7b38" + integrity sha512-zjRYFhq+CsxPAouQWzOsxNMvEN+SHisjzhX8EMxd2Y0EG3thvn6wXQgMJLnTDImkhe4jhLbOQpXtL10nALBOSA== + dependencies: + debug "^4.3.1" + native-fetch "^4.0.2" + receptacle "^1.3.2" + undici "^5.12.0" + +dns-packet@^5.6.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + dot-prop@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" @@ -1390,11 +4607,30 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" -dotenv@~10.0.0: +dotenv@^10.0.0, dotenv@~10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^8.2.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + +dreamopt@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b" + integrity sha512-KRJa47iBEK0y6ZtgCgy2ykuvMT8c9gj3ua9Dv7vCkclFJJeH2FjhGY2xO5qBoWGahsjCGMlk4Cq9wJYeWxuYhQ== + dependencies: + wordwrap ">=0.0.2" + +dtrace-provider@~0.8: + version "0.8.8" + resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.8.tgz#2996d5490c37e1347be263b423ed7b297fb0d97e" + integrity sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg== + dependencies: + nan "^2.14.0" + duplexer@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -1405,6 +4641,11 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + ejs@^3.1.7: version "3.1.10" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" @@ -1412,6 +4653,39 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" +electron-fetch@^1.7.2: + version "1.9.1" + resolved "https://registry.yarnpkg.com/electron-fetch/-/electron-fetch-1.9.1.tgz#e28bfe78d467de3f2dec884b1d72b8b05322f30f" + integrity sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA== + dependencies: + encoding "^0.1.13" + +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +elliptic@^6.5.4: + version "6.5.5" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" + integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -1422,6 +4696,26 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding-down@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-7.1.0.tgz#8d55b5a20d50eb6f0edaf7233f6aee0ff562386a" + integrity sha512-ky47X5jP84ryk5EQmvedQzELwVJPjCgXDQZGeb9F6r4PdChByCGHTBrVcF3h8ynKVJ1wVbkxTsDC8zBROPypgQ== + dependencies: + abstract-leveldown "^7.2.0" + inherits "^2.0.3" + level-codec "^10.0.0" + level-errors "^3.0.0" + encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -1458,6 +4752,11 @@ err-code@^2.0.2: resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== +err-code@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" + integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1465,26 +4764,387 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@0.8.x: + version "0.8.2" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" + integrity sha512-H19ompyhnKiBdjHR1DPHvf5RHgHPmJaY9JNzFGbMbPgdsUkvnUCN1Ke8J4Y0IMyTwFM2M9l4h2GoHwzwpSmXbA== + escalade@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== -escape-string-regexp@^1.0.5: +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +eslint-config-semistandard@^15.0.1: + version "15.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-semistandard/-/eslint-config-semistandard-15.0.1.tgz#a868397af8fb26d1bb6b907aa9d575d385581099" + integrity sha512-sfV+qNBWKOmF0kZJll1VH5XqOAdTmLlhbOl9WKI11d2eMEe+Kicxnpm24PQWHOqAfk5pAWU2An0LjNCXKa4Usg== + +eslint-config-standard@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516" + integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== + dependencies: + debug "^3.2.7" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.27.5: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.15.0" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz#a596acc32981627eb36d9d75f9666ac1a4564971" + integrity sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw== + +eslint-plugin-standard@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-5.0.0.tgz#c43f6925d669f177db46f095ea30be95476b1ee4" + integrity sha512-eSIXPc9wBM4BrniMzJRBm2uoVuXz2EPa+NXPk2+itrVt+r5SbKFERx/IgrK/HmfjddyKVz2f+j+7gBRvu19xLg== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.35.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -eventemitter3@^4.0.4: +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +ethers@^5.1.4, ethers@^5.4.4, ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +event-iterator@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/event-iterator/-/event-iterator-2.0.0.tgz#10f06740cc1e9fd6bc575f334c2bc1ae9d2dbf62" + integrity sha512-KGft0ldl31BZVV//jj+IAIGCxkvvUkkON+ScH6zfoX+l+omX6001ggyRSpI0Io2Hlro0ThXotswCtfzS8UkIiQ== + +eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + execa@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" @@ -1515,11 +5175,79 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + exponential-backoff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== +express-end@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/express-end/-/express-end-0.0.8.tgz#0c8fd95428932158f2b4cf91f4045346bf2c5323" + integrity sha512-PPntzICAq006LBpXKBVJtmRUiCRqTMZ+OB8L2RFXgx+OmkMWU66IL4DTEPF/DOcxmsuC7Y0NdbT2R71lb+pBpg== + dependencies: + debug "^2.2.0" + +express-queue@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/express-queue/-/express-queue-0.0.13.tgz#e9800d67749d4dfab7c34223f00595af933ce5df" + integrity sha512-C4OEDasGDqpXLrZICSUxbY47p5c0bKqf/3/3hwauSCmI+jVVxKBWU2w39BuKLP6nF65z87uDFBbJMPAn2ZrG3g== + dependencies: + debug "^4.3.4" + express-end "0.0.8" + mini-queue "0.0.14" + +express@^4.18.2: + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.6.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -1529,6 +5257,16 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-fifo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + fast-glob@3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" @@ -1551,6 +5289,16 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + fastq@^1.6.0: version "1.17.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" @@ -1558,6 +5306,16 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + +figlet@^1.1.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.7.0.tgz#46903a04603fd19c3e380358418bb2703587a72e" + integrity sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg== + figures@3.2.0, figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -1565,6 +5323,13 @@ figures@3.2.0, figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + file-url@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/file-url/-/file-url-3.0.0.tgz#247a586a746ce9f7a8ed05560290968afc262a77" @@ -1584,7 +5349,20 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -find-up@5.0.0: +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@5.0.0, find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -1607,16 +5385,42 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -follow-redirects@^1.15.6: +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +follow-redirects@^1.0.0, follow-redirects@^1.15.6: version "1.15.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + foreground-child@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" @@ -1634,6 +5438,21 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +freeport-promise@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/freeport-promise/-/freeport-promise-2.0.0.tgz#11e4f81e24d680b88a20c15b2103551f4b6663d8" + integrity sha512-dwWpT1DdQcwrhmRwnDnPM/ZFny+FtzU+k50qF2eid3KxaQDsMiBrwo1i0G3qSugkN5db6Cb0zgfc68QeTOpEFg== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -1649,6 +5468,15 @@ fs-extra@9.1.0, fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^11.1.0: version "11.2.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" @@ -1677,11 +5505,31 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@~2.3.1: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + gauge@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" @@ -1715,6 +5563,32 @@ 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-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-iterator@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" + integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== + +get-iterator@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-2.0.1.tgz#a904829f61bace789e0d64bd1a504c511a015c3f" + integrity sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg== + get-pkg-repo@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" @@ -1735,11 +5609,25 @@ get-stream@6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +get-value@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + git-raw-commits@^2.0.8: version "2.0.11" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" @@ -1789,13 +5677,20 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -glob-parent@5.1.2, glob-parent@^5.1.2: +glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -1808,6 +5703,18 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^10.2.2: version "10.4.1" resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2" @@ -1819,7 +5726,18 @@ glob@^10.2.2: minipass "^7.1.2" path-scurry "^1.11.1" -glob@^7.1.3, glob@^7.1.4: +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1852,7 +5770,22 @@ glob@^9.2.0: minipass "^4.2.4" path-scurry "^1.6.1" -globby@11.1.0, globby@^11.0.1: +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@11.1.0, globby@^11.0.1, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -1864,6 +5797,13 @@ globby@11.1.0, globby@^11.0.1: merge2 "^1.4.1" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@4.2.10: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" @@ -1874,6 +5814,48 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +graphql-request@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-6.1.0.tgz#f4eb2107967af3c7a5907eb3131c671eac89be4f" + integrity sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw== + dependencies: + "@graphql-typed-document-node/core" "^3.2.0" + cross-fetch "^3.1.5" + +graphql-subscriptions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-2.0.0.tgz#11ec181d475852d8aec879183e8e1eb94f2eb79a" + integrity sha512-s6k2b8mmt9gF9pEfkxsaO1lTxaySfKoEJzEfmwguBbQ//Oq23hIXCfR1hm4kdh5hnR20RdwB+s3BCb+0duHSZA== + dependencies: + iterall "^1.3.0" + +graphql-tag@^2.11.0, graphql-tag@^2.12.6: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql-ws@^5.11.2: + version "5.16.0" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.16.0.tgz#849efe02f384b4332109329be01d74c345842729" + integrity sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A== + +graphql@^15.5.0: + version "15.8.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + handlebars@^4.7.7: version "4.7.8" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" @@ -1891,6 +5873,18 @@ 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-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -1901,18 +5895,100 @@ 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.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + has-unicode@2.0.1, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -hasown@^2.0.0: +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hashlru@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/hashlru/-/hashlru-2.3.0.tgz#5dc15928b3f6961a2056416bb3a4910216fdfb51" + integrity sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A== + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +"heap@>= 0.2.0", heap@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -1946,11 +6022,29 @@ hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: dependencies: lru-cache "^7.5.1" +hosted-git-info@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== + dependencies: + lru-cache "^10.0.1" + http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + http-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" @@ -1960,6 +6054,26 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-proxy-middleware@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -1973,6 +6087,11 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -1985,7 +6104,7 @@ husky@^7.0.2: resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== -iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -1999,7 +6118,7 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -2018,7 +6137,7 @@ ignore-walk@^6.0.0: dependencies: minimatch "^9.0.0" -ignore@^5.0.4, ignore@^5.2.0: +ignore@^5.0.4, ignore@^5.1.1, ignore@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== @@ -2049,6 +6168,11 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +index-to-position@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-0.1.2.tgz#e11bfe995ca4d8eddb1ec43274488f3c201a7f09" + integrity sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g== + infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" @@ -2062,7 +6186,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2127,6 +6251,56 @@ inquirer@^8.2.4: through "^2.3.6" wrap-ansi "^6.0.1" +interface-datastore@^6.0.2: + version "6.1.1" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-6.1.1.tgz#5150a00de2e7513eaadba58bcafd059cb50004c1" + integrity sha512-AmCS+9CT34pp2u0QQVXjKztkuq3y5T+BIciuiHDDtDZucZD8VudosnSdUyXJV6IsRkN5jc4RFDhCk1O6Q3Gxjg== + dependencies: + interface-store "^2.0.2" + nanoid "^3.0.2" + uint8arrays "^3.0.0" + +interface-datastore@^7.0.0, interface-datastore@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-7.0.4.tgz#f09ae4e2896f57f876d5d742a59e982fb3f42891" + integrity sha512-Q8LZS/jfFFHz6XyZazLTAc078SSCoa27ZPBOfobWdpDiFO7FqPA2yskitUJIhaCgxNK8C+/lMBUTBNfVIDvLiw== + dependencies: + interface-store "^3.0.0" + nanoid "^4.0.0" + uint8arrays "^4.0.2" + +interface-datastore@^8.2.0, interface-datastore@^8.2.11: + version "8.2.11" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-8.2.11.tgz#1d555ce6218ab6cba6291fc361debe9713590207" + integrity sha512-9E0iXehfp/j0UbZ2mvlYB4K9pP7uQBCppfuy8WHs1EHF6wLQrM9+zwyX+8Qt6HnH4GKZRyXX/CNXm6oD4+QYgA== + dependencies: + interface-store "^5.0.0" + uint8arrays "^5.0.2" + +interface-store@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-2.0.2.tgz#83175fd2b0c501585ed96db54bb8ba9d55fce34c" + integrity sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg== + +interface-store@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-3.0.4.tgz#670d95ef45f3b7061d154c3cbfaf39a538167ad7" + integrity sha512-OjHUuGXbH4eXSBx1TF1tTySvjLldPLzRSYYXJwrEQI+XfH5JWYZofr0gVMV4F8XTwC+4V7jomDYkvGRmDSRKqQ== + +interface-store@^5.0.0: + version "5.1.8" + resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-5.1.8.tgz#94bf867d165b5c904cccf09adeba215a5b0f459e" + integrity sha512-7na81Uxkl0vqk0CBPO5PvyTkdaJBaezwUJGsMOz7riPOq0rJt+7W31iaopaMICWea/iykUsvNlPx/Tc+MxC3/w== + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + ip-address@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" @@ -2135,11 +6309,175 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" +ip-regex@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + +ip-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632" + integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== + +ipfs-core-types@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ipfs-core-types/-/ipfs-core-types-0.10.3.tgz#89ebe98199d4d829f2b20104bfa3299f808c80fe" + integrity sha512-GNid2lRBjR5qgScCglgk7w9Hk3TZAwPHQXxOLQx72wgyc0jF2U5NXRoKW0GRvX8NPbHmsrFszForIqxd23I1Gw== + dependencies: + "@ipld/dag-pb" "^2.1.3" + interface-datastore "^6.0.2" + ipfs-unixfs "^6.0.3" + multiaddr "^10.0.0" + multiformats "^9.5.1" + +ipfs-core-utils@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.14.3.tgz#d04c631c472507bdefc58d4e8d1d9109efbb411c" + integrity sha512-aBkewVhgAj3NWXPwu6imj0wADGiGVZmJzqKzODOJsibDjkx6FGdMv8kvvqtLnK8LS/dvSk9yk32IDtuDyYoV7Q== + dependencies: + any-signal "^3.0.0" + blob-to-it "^1.0.1" + browser-readablestream-to-it "^1.0.1" + debug "^4.1.1" + err-code "^3.0.1" + ipfs-core-types "^0.10.3" + ipfs-unixfs "^6.0.3" + ipfs-utils "^9.0.6" + it-all "^1.0.4" + it-map "^1.0.4" + it-peekable "^1.0.2" + it-to-stream "^1.0.0" + merge-options "^3.0.4" + multiaddr "^10.0.0" + multiaddr-to-uri "^8.0.0" + multiformats "^9.5.1" + nanoid "^3.1.23" + parse-duration "^1.0.0" + timeout-abort-controller "^3.0.0" + uint8arrays "^3.0.0" + +ipfs-http-client@^56.0.3: + version "56.0.3" + resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-56.0.3.tgz#45bbea55347ef13524769d5919cbed84d9d022d6" + integrity sha512-E3L5ylVl6BjyRUsNehvfuRBYp1hj8vQ8in4zskVPMNzXs6JiCFUbif5a6BtcAlSK4xPQyJCeLNNAWLUeFQTLNA== + dependencies: + "@ipld/dag-cbor" "^7.0.0" + "@ipld/dag-json" "^8.0.1" + "@ipld/dag-pb" "^2.1.3" + any-signal "^3.0.0" + dag-jose "^1.0.0" + debug "^4.1.1" + err-code "^3.0.1" + ipfs-core-types "^0.10.3" + ipfs-core-utils "^0.14.3" + ipfs-utils "^9.0.6" + it-first "^1.0.6" + it-last "^1.0.4" + merge-options "^3.0.4" + multiaddr "^10.0.0" + multiformats "^9.5.1" + parse-duration "^1.0.0" + stream-to-it "^0.2.2" + uint8arrays "^3.0.0" + +ipfs-unixfs@^6.0.3: + version "6.0.9" + resolved "https://registry.yarnpkg.com/ipfs-unixfs/-/ipfs-unixfs-6.0.9.tgz#f6613b8e081d83faa43ed96e016a694c615a9374" + integrity sha512-0DQ7p0/9dRB6XCb0mVCTli33GzIzSVx5udpJuVM47tGcD+W+Bl4LsnoLswd3ggNnNEakMv1FdoFITiEnchXDqQ== + dependencies: + err-code "^3.0.1" + protobufjs "^6.10.2" + +ipfs-utils@^9.0.6: + version "9.0.14" + resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-9.0.14.tgz#24f5fda1f4567685eb32bca2543d518f95fd8704" + integrity sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg== + dependencies: + any-signal "^3.0.0" + browser-readablestream-to-it "^1.0.0" + buffer "^6.0.1" + electron-fetch "^1.7.2" + err-code "^3.0.1" + is-electron "^2.2.0" + iso-url "^1.1.5" + it-all "^1.0.4" + it-glob "^1.0.1" + it-to-stream "^1.0.0" + merge-options "^3.0.4" + nanoid "^3.1.20" + native-fetch "^3.0.0" + node-fetch "^2.6.8" + react-native-fetch-api "^3.0.0" + stream-to-it "^0.2.2" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-ci@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -2147,29 +6485,60 @@ is-ci@2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.8.1: +is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0, is-core-module@^2.8.1: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: hasown "^2.0.0" +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-electron@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.2.tgz#3778902a2044d76de98036f5dc58089ac4d80bb9" + integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.1: +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -2181,11 +6550,43 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== +is-ip@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" + integrity sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== + dependencies: + ip-regex "^4.0.0" + is-lambda@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== +is-loopback-addr@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-loopback-addr/-/is-loopback-addr-2.0.2.tgz#70a6668fa3555d47caebdcee045745ab80adf5e4" + integrity sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg== + +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -2201,7 +6602,7 @@ is-path-cwd@^2.2.0: resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-inside@^3.0.2: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -2211,7 +6612,17 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== -is-plain-object@^2.0.4: +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.1, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -2223,6 +6634,21 @@ 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== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + is-ssh@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" @@ -2240,6 +6666,25 @@ 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-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + is-text-path@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" @@ -2247,11 +6692,25 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" +is-typed-array@^1.1.13, is-typed-array@^1.1.3: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -2259,21 +6718,280 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@~1.0.0: +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^3.0.1: +iso-random-stream@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/iso-random-stream/-/iso-random-stream-2.0.2.tgz#a24f77c34cfdad9d398707d522a6a0cc640ff27d" + integrity sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ== + dependencies: + events "^3.3.0" + readable-stream "^3.4.0" + +iso-url@^1.1.2, iso-url@^1.1.5: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.2.1.tgz#db96a49d8d9a64a1c889fc07cc525d093afb1811" + integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +it-all@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/it-all/-/it-all-1.0.6.tgz#852557355367606295c4c3b7eff0136f07749335" + integrity sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A== + +it-all@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-all/-/it-all-2.0.1.tgz#45d530ecf6e13fb81d7ba583cdfd55ffdb376b05" + integrity sha512-9UuJcCRZsboz+HBQTNOau80Dw+ryGaHYFP/cPYzFBJBFcfDathMYnhHk4t52en9+fcyDGPTdLB+lFc1wzQIroA== + +it-batched-bytes@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/it-batched-bytes/-/it-batched-bytes-1.0.1.tgz#a3b12a10db24308c76a1126032af9184afc2dc63" + integrity sha512-ptBiZ0Mh3kJYySpG0pCS7JgvWhaAW1fGfKDVFtNIuNTA+bpSlXINvD5H3b14ZlJbnJFzFzRSCSZ10E1nH4z/WQ== + dependencies: + it-stream-types "^1.0.4" + p-defer "^4.0.0" + uint8arraylist "^2.4.1" + +it-drain@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-drain/-/it-drain-2.0.1.tgz#f50f6ce5cb8592a9d6337c9b5e780348877b152d" + integrity sha512-ESuHV6MLUNxuSy0vGZpKhSRjW0ixczN1FhbVy7eGJHjX6U2qiiXTyMvDc0z/w+nifOOwPyI5DT9Rc3o9IaGqEQ== + +it-filter@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/it-filter/-/it-filter-2.0.2.tgz#c849b3de4a12a2de3cc45be734ee55f69a0ed284" + integrity sha512-gocw1F3siqupegsOzZ78rAc9C+sYlQbI2af/TmzgdrR613MyEJHbvfwBf12XRekGG907kqXSOGKPlxzJa6XV1Q== + +it-first@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/it-first/-/it-first-1.0.7.tgz#a4bef40da8be21667f7d23e44dae652f5ccd7ab1" + integrity sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g== + +it-first@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-first/-/it-first-2.0.1.tgz#75d66b254c385ae3a1906def060a69006a437cef" + integrity sha512-noC1oEQcWZZMUwq7VWxHNLML43dM+5bviZpfmkxkXlvBe60z7AFRqpZSga9uQBo792jKv9otnn1IjA4zwgNARw== + +it-first@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/it-first/-/it-first-3.0.6.tgz#f532f0f36fe9bf0c291e0162b9d3375d59fe8f05" + integrity sha512-ExIewyK9kXKNAplg2GMeWfgjUcfC1FnUXz/RPfAvIXby+w7U4b3//5Lic0NV03gXT8O/isj5Nmp6KiY0d45pIQ== + +it-foreach@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/it-foreach/-/it-foreach-1.0.1.tgz#a4dab99c111457d1480bef6c4f9382076d9a6b81" + integrity sha512-eaVFhKxU+uwPs7+DKYxjuL6pj6c50/MBlAH+XPMgPWRRVIChVoyEIsdUQkkC0Ad6oTUmJbKRTnJxEY6o2aIs7A== + +it-glob@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-1.0.2.tgz#bab9b04d6aaac42884502f3a0bfee84c7a29e15e" + integrity sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q== + dependencies: + "@types/minimatch" "^3.0.4" + minimatch "^3.0.4" + +it-handshake@^4.1.2, it-handshake@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/it-handshake/-/it-handshake-4.1.3.tgz#4e6650f8eff5cb3686c6861958645289fb3dc32a" + integrity sha512-V6Lt9A9usox9iduOX+edU1Vo94E6v9Lt9dOvg3ubFaw1qf5NCxXLi93Ao4fyCHWDYd8Y+DUhadwNtWVyn7qqLg== + dependencies: + it-pushable "^3.1.0" + it-reader "^6.0.1" + it-stream-types "^2.0.1" + p-defer "^4.0.0" + uint8arraylist "^2.0.0" + +it-last@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/it-last/-/it-last-1.0.6.tgz#4106232e5905ec11e16de15a0e9f7037eaecfc45" + integrity sha512-aFGeibeiX/lM4bX3JY0OkVCFkAw8+n9lkukkLNivbJRvNz8lI3YXv5xcqhFUV2lDJiraEK3OXRDbGuevnnR67Q== + +it-length-prefixed@^8.0.2, it-length-prefixed@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/it-length-prefixed/-/it-length-prefixed-8.0.4.tgz#80bd356d93d77a8989a71200f8ca0860db040404" + integrity sha512-5OJ1lxH+IaqJB7lxe8IAIwt9UfSfsmjKJoAI/RO9djYoBDt1Jfy9PeVHUmOfqhqyu/4kJvWBFAJUaG1HhLQ12A== + dependencies: + err-code "^3.0.1" + it-stream-types "^1.0.4" + uint8-varint "^1.0.1" + uint8arraylist "^2.0.0" + uint8arrays "^4.0.2" + +it-length-prefixed@^9.0.0: + version "9.0.4" + resolved "https://registry.yarnpkg.com/it-length-prefixed/-/it-length-prefixed-9.0.4.tgz#8096c3270420fe8abaa920c7b4d5e5895144008e" + integrity sha512-lz28fykbG0jq7s5XtvlzGxO5BeSOw6ikymkRllxjL21V5VKLcvB4pHr9wPvEnsAJ2et1xpOk3BRTMq9XrhgKsg== + dependencies: + err-code "^3.0.1" + it-reader "^6.0.1" + it-stream-types "^2.0.1" + uint8-varint "^2.0.1" + uint8arraylist "^2.0.0" + uint8arrays "^5.0.1" + +it-map@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/it-map/-/it-map-1.0.6.tgz#6aa547e363eedcf8d4f69d8484b450bc13c9882c" + integrity sha512-XT4/RM6UHIFG9IobGlQPFQUrlEKkU4eBUFG3qhWhfAdh1JfF2x11ShCrKCdmZ0OiZppPfoLuzcfA4cey6q3UAQ== + +it-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-map/-/it-map-2.0.1.tgz#d5251fd6b222d6ee39293d406a3f8fce54fb9220" + integrity sha512-a2GcYDHiAh/eSU628xlvB56LA98luXZnniH2GlD0IdBzf15shEq9rBeb0Rg3o1SWtNILUAwqmQxEXcewGCdvmQ== + +it-merge@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-merge/-/it-merge-2.0.1.tgz#6137c63f0dbdcb3b8b74ec67549f2b3351c84da8" + integrity sha512-ItoBy3dPlNKnhjHR8e7nfabfZzH4Jy2OMPvayYH3XHy4YNqSVKmWTIxhz7KX4UMBsLChlIJZ+5j6csJgrYGQtw== + dependencies: + it-pushable "^3.1.0" + +it-merge@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/it-merge/-/it-merge-3.0.5.tgz#2b0d1d07c825b9d20c4c2889aab8e07322fd803e" + integrity sha512-2l7+mPf85pyRF5pqi0dKcA54E5Jm/2FyY5GsOaN51Ta0ipC7YZ3szuAsH8wOoB6eKY4XsU4k2X+mzPmFBMayEA== + dependencies: + it-pushable "^3.2.3" + +it-pair@^2.0.2: + version "2.0.6" + resolved "https://registry.yarnpkg.com/it-pair/-/it-pair-2.0.6.tgz#072defa6b96f611af34e0b0c84573107ddb9f28f" + integrity sha512-5M0t5RAcYEQYNG5BV7d7cqbdwbCAp5yLdzvkxsZmkuZsLbTdZzah6MQySYfaAQjNDCq6PUnDt0hqBZ4NwMfW6g== + dependencies: + it-stream-types "^2.0.1" + p-defer "^4.0.0" + +it-pb-stream@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/it-pb-stream/-/it-pb-stream-3.2.1.tgz#58ad0b1268894d6eb05c17110e22326a33884a46" + integrity sha512-vKE04Zv5MUcwxPNE9bIEfYK3rd/Klj5ORGD1D8Bn5f0mbCLGfouSrqZP1Jntg2osqQg4BN5dKKS2BbfwyGUI3Q== + dependencies: + err-code "^3.0.1" + it-length-prefixed "^9.0.0" + it-pushable "^3.1.2" + it-stream-types "^1.0.4" + protons-runtime "^5.0.0" + uint8-varint "^1.0.6" + uint8arraylist "^2.0.0" + +it-peekable@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/it-peekable/-/it-peekable-1.0.3.tgz#8ebe933767d9c5aa0ae4ef8e9cb3a47389bced8c" + integrity sha512-5+8zemFS+wSfIkSZyf0Zh5kNN+iGyccN02914BY4w/Dj+uoFEoPSvj5vaWn8pNZJNSxzjW0zHRxC3LUb2KWJTQ== + +it-pipe@^2.0.3, it-pipe@^2.0.4, it-pipe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/it-pipe/-/it-pipe-2.0.5.tgz#9caf7993dcbbc3824bc6ef64ee8b94574f65afa7" + integrity sha512-y85nW1N6zoiTnkidr2EAyC+ZVzc7Mwt2p+xt2a2ooG1ThFakSpNw1Kxm+7F13Aivru96brJhjQVRQNU+w0yozw== + dependencies: + it-merge "^2.0.0" + it-pushable "^3.1.0" + it-stream-types "^1.0.3" + +it-pipe@^3.0.0, it-pipe@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/it-pipe/-/it-pipe-3.0.1.tgz#b25720df82f4c558a8532602b5fbc37bbe4e7ba5" + integrity sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA== + dependencies: + it-merge "^3.0.0" + it-pushable "^3.1.2" + it-stream-types "^2.0.1" + +it-pushable@^3.0.0, it-pushable@^3.1.0, it-pushable@^3.1.2, it-pushable@^3.1.3, it-pushable@^3.2.0, it-pushable@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/it-pushable/-/it-pushable-3.2.3.tgz#e2b80aed90cfbcd54b620c0a0785e546d4e5f334" + integrity sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg== + dependencies: + p-defer "^4.0.0" + +it-reader@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/it-reader/-/it-reader-6.0.4.tgz#439cb88225dcd15116be0ffde9e846a928c3871a" + integrity sha512-XCWifEcNFFjjBHtor4Sfaj8rcpt+FkY0L6WdhD578SCDhV4VUm7fCkF3dv5a+fTcfQqvN9BsxBTvWbYO6iCjTg== + dependencies: + it-stream-types "^2.0.1" + uint8arraylist "^2.0.0" + +it-sort@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-sort/-/it-sort-2.0.1.tgz#37af025862f7adb30d7fc1f8520b3cd7ef219ef6" + integrity sha512-9f4jKOTHfxc/FJpg/wwuQ+j+88i+sfNGKsu2HukAKymm71/XDnBFtOAOzaimko3YIhmn/ERwnfEKrsYLykxw9A== + dependencies: + it-all "^2.0.0" + +it-stream-types@^1.0.2, it-stream-types@^1.0.3, it-stream-types@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/it-stream-types/-/it-stream-types-1.0.5.tgz#9c72e6adefdea9dac69d0a28fbea783deebd508d" + integrity sha512-I88Ka1nHgfX62e5mi5LLL+oueqz7Ltg0bUdtsUKDe9SoUqbQPf2Mp5kxDTe9pNhHQGs4pvYPAINwuZ1HAt42TA== + +it-stream-types@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-stream-types/-/it-stream-types-2.0.1.tgz#69cb4d7e79e707b8257a8997e02751ccb6c3af32" + integrity sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg== + +it-take@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-take/-/it-take-2.0.1.tgz#f9e5ddf0b73a18ba00e62fb532d9d3cde3fe4ce6" + integrity sha512-DL7kpZNjuoeSTnB9dMAJ0Z3m2T29LRRAU+HIgkiQM+1jH3m8l9e/1xpWs8JHTlbKivbqSFrQMTc8KVcaQNmsaA== + +it-to-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-1.0.0.tgz#6c47f91d5b5df28bda9334c52782ef8e97fe3a4a" + integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== + dependencies: + buffer "^6.0.3" + fast-fifo "^1.0.0" + get-iterator "^1.0.2" + p-defer "^3.0.0" + p-fifo "^1.0.0" + readable-stream "^3.6.0" + +it-ws@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/it-ws/-/it-ws-5.0.6.tgz#9b69ff2ef9d08fda18ef2db604acf972d0fedded" + integrity sha512-TEEJQaGtkxgP/nGVq8dq48nPT85Afu8kwwvtDFLj4rQLWRhZcb26RWdXLdn9qhXkWPiWbK5H7JWBW1Bebj/SuQ== + dependencies: + event-iterator "^2.0.0" + iso-url "^1.1.2" + it-stream-types "^1.0.2" + uint8arrays "^4.0.2" + ws "^8.4.0" + +iterall@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== + jackspeak@^3.1.2: version "3.4.0" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" @@ -2293,12 +7011,24 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" -js-tokens@^4.0.0: +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0, js-yaml@^4.1.0: +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + +js-yaml@4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -2318,6 +7048,27 @@ jsbn@1.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-diff@^0.5.4: + version "0.5.5" + resolved "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.5.tgz#24658ad200dbdd64ae8a56baf4d87b2b33d7196e" + integrity sha512-B2RSfPv8Y5iqm6/9aKC3cOhXPzjYupKDpGuqT5py9NRulL8J0UoB/zKXUo70xBsuxPcIFgtsGgEdXLrNp0GL7w== + dependencies: + cli-color "~0.1.6" + difflib "~0.2.1" + dreamopt "~0.6.0" + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -2333,6 +7084,16 @@ json-parse-even-better-errors@^3.0.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + json-stringify-nice@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" @@ -2343,6 +7104,13 @@ json-stringify-safe@^5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + json5@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" @@ -2377,11 +7145,28 @@ just-diff@^6.0.0: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + lerna@^6.6.1: version "6.6.2" resolved "https://registry.yarnpkg.com/lerna/-/lerna-6.6.2.tgz#ad921f913aca4e7307123a598768b6f15ca5804f" @@ -2464,6 +7249,117 @@ lerna@^6.6.1: yargs "16.2.0" yargs-parser "20.2.4" +level-codec@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-10.0.0.tgz#f9e892770532c6cdcc83529546730791b0c62c12" + integrity sha512-QW3VteVNAp6c/LuV6nDjg7XDXx9XHK4abmQarxZmlRSDyXYk20UdaJTSX6yzVvQ4i0JyWSB7jert0DsyD/kk6g== + dependencies: + buffer "^6.0.3" + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-errors@^3.0.0, level-errors@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-3.0.1.tgz#4bed48a33108cd83b0e39fdf9bbd84e96fbbef9f" + integrity sha512-tqTL2DxzPDzpwl0iV5+rBCv65HWbHp6eutluHNcVIftKZlQN//b6GEnZDM2CvGZvzGYMwyPtYppYnydBQd2SMQ== + +level-iterator-stream@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-5.0.0.tgz#85b3438e1b4c54ce5aa8c0eb973cfb628117df9e" + integrity sha512-wnb1+o+CVFUDdiSMR/ZymE2prPs3cjVLlXuDeSq9Zb8o032XrabGEXcTCsBxprAtseO3qvFeGzh6406z9sOTRA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + +level-js@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-6.1.0.tgz#982ee9e583fca801aa75689c041995d0e7aab4ef" + integrity sha512-i7mPtkZm68aewfv0FnIUWvFUFfoyzIvVKnUmuQGrelEkP72vSPTaA1SGneWWoCV5KZJG4wlzbJLp1WxVNGuc6A== + dependencies: + abstract-leveldown "^7.2.0" + buffer "^6.0.3" + inherits "^2.0.3" + ltgt "^2.1.2" + run-parallel-limit "^1.1.0" + +level-packager@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-6.0.1.tgz#46b521e63df7f9728543f6792c0a8fe967e679a0" + integrity sha512-8Ezr0XM6hmAwqX9uu8IGzGNkWz/9doyPA8Oo9/D7qcMI6meJC+XhIbNYHukJhIn8OGdlzQs/JPcL9B8lA2F6EQ== + dependencies: + encoding-down "^7.1.0" + levelup "^5.1.1" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-7.0.1.tgz#05121748d95a4ff7355860d56eb5d0aa36faef2a" + integrity sha512-w3E64+ALx2eZf8RV5JL4kIcE0BFAvQscRYd1yU4YVqZN9RGTQxXSvH202xvK15yZwFFxRXe60f13LJjcJ//I4Q== + dependencies: + level-js "^6.1.0" + level-packager "^6.0.1" + leveldown "^6.1.0" + +level@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" + integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== + dependencies: + abstract-level "^1.0.4" + browser-level "^1.0.1" + classic-level "^1.2.0" + +leveldown@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.1.tgz#0f0e480fa88fd807abf94c33cb7e40966ea4b5ce" + integrity sha512-88c+E+Eizn4CkQOBHwqlCJaTNEjGpaEIikn1S+cINc5E9HEvJ77bqY4JY/HxT5u0caWqsc3P3DcFIKBI1vHt+A== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +levelup@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-5.1.1.tgz#9f99699f414ac084a3f8a28fc262a1f49cd7a52c" + integrity sha512-0mFCcHcEebOwsQuk00WJwjLI6oCjbBuEYdh/RaRqhjnyVlzqf41T1NnDtCedumZ56qyIh8euLFDqV1KfzTAVhg== + dependencies: + catering "^2.0.0" + deferred-leveldown "^7.0.0" + level-errors "^3.0.1" + level-iterator-stream "^5.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + libnpmaccess@^6.0.3: version "6.0.4" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" @@ -2540,16 +7436,38 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== -lodash@^4.17.15, lodash@^4.17.21: +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -2558,7 +7476,61 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -lru-cache@^10.2.0: +logform@^2.3.2, logform@^2.4.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" + integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + +loglevel@^1.6.8: + version "1.9.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.1.tgz#d63976ac9bcd03c7c873116d41c2a85bafff1be7" + integrity sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg== + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +long@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + +longbits@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/longbits/-/longbits-1.1.0.tgz#d6a7b2411dead1cf4b79ee4586816e65c7356ab9" + integrity sha512-22U2exkkYy7sr7nuQJYx2NEZ2kEMsC69+BxM5h8auLvkVIJa+LwAB5mFIExnuW2dFuYXFOWsFMKXjaWiq/htYQ== + dependencies: + byte-access "^1.0.1" + uint8arraylist "^2.0.0" + +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +"lru-cache@7.10.1 - 7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.1.tgz#267a81fbd0881327c46a81c5922606a2cfe336c4" + integrity sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ== + +lru-cache@^10.0.0, lru-cache@^10.0.1, lru-cache@^10.2.0: version "10.2.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== @@ -2575,6 +7547,16 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== +ltgt@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + +luxon@^3.2.1: + version "3.4.4" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af" + integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA== + make-dir@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -2590,6 +7572,11 @@ make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: version "10.2.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" @@ -2643,6 +7630,11 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + meow@^8.0.0: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -2660,6 +7652,18 @@ meow@^8.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== + dependencies: + is-plain-obj "^2.1.0" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -2670,7 +7674,12 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== @@ -2683,23 +7692,64 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12: +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +mini-queue@0.0.14: + version "0.0.14" + resolved "https://registry.yarnpkg.com/mini-queue/-/mini-queue-0.0.14.tgz#83d2f3f908e3cac5390bd986d1e6fbbfa0d95b93" + integrity sha512-DNh9Wn8U1jrmn1yVfpviwClyER/Y4ltgGbG+LF/KIdKJ8BEo2Q9jDDPG7tEhz6F/DTZ/ohv5D7AAXFVSFyP05Q== + dependencies: + debug "^3.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +"minimatch@2 || 3", minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + minimatch@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" @@ -2707,13 +7757,6 @@ minimatch@3.0.5: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - minimatch@^5.0.1: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" @@ -2858,21 +7901,130 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mocha@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff" + integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "4.0.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.3" + nanoid "3.1.20" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +mokka@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/mokka/-/mokka-1.4.2.tgz#b0d7117e216672ff2deda6ef2212bcfa0edb8114" + integrity sha512-Vgki/Fr9fqUMZzChGC1yH64AQg+qkMdZZe3xKrTwYBVGEuq8j2GdnDg8voYXwWl+MLfNzWBnNiejq2xZ8PmojA== + dependencies: + bn.js "^5.2.0" + elliptic "^6.5.4" + +moment@^2.19.3: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +mortice@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/mortice/-/mortice-3.0.4.tgz#34aadef768161e9dc49a7f73637b7858bcb7c6fa" + integrity sha512-MUHRCAztSl4v/dAmK8vbYi5u1n9NZtQu4H3FsqS7qgMFQIAFw9lTpHiErd9kJpapqmvEdD1L3dUmiikifAvLsQ== + dependencies: + observable-webworkers "^2.0.1" + p-queue "^8.0.1" + p-timeout "^6.0.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multiaddr-to-uri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-8.0.0.tgz#65efe4b1f9de5f6b681aa42ff36a7c8db7625e58" + integrity sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA== + dependencies: + multiaddr "^10.0.0" + +multiaddr@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-10.0.1.tgz#0d15848871370860a4d266bb44d93b3dac5d90ef" + integrity sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg== + dependencies: + dns-over-http-resolver "^1.2.3" + err-code "^3.0.1" + is-ip "^3.1.0" + multiformats "^9.4.5" + uint8arrays "^3.0.0" + varint "^6.0.0" + +multiformats@^11.0.0, multiformats@^11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-11.0.2.tgz#b14735efc42cd8581e73895e66bebb9752151b60" + integrity sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg== + +multiformats@^12.0.1: + version "12.1.3" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-12.1.3.tgz#cbf7a9861e11e74f8228b21376088cb43ba8754e" + integrity sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw== + +multiformats@^13.0.0, multiformats@^13.1.0: + version "13.1.1" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.1.1.tgz#b22ce4df26330d2cf0d69f5bdcbc9a787095a6e5" + integrity sha512-JiptvwMmlxlzIlLLwhCi/srf/nk409UL0eUBr0kioRJq15hqqKyg68iftrBvhCRjR6Rw4fkNnSc4ZJXJDuta/Q== + +multiformats@^9.0.2, multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.4.8, multiformats@^9.5.1, multiformats@^9.5.4: + version "9.9.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" + integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== + multimatch@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" @@ -2889,7 +8041,80 @@ mute-stream@0.0.8, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -negotiator@^0.6.3: +mv@~2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" + integrity sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== + dependencies: + mkdirp "~0.5.1" + ncp "~2.0.0" + rimraf "~2.4.0" + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.14.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0" + integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw== + +nanoid@3.1.20: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +nanoid@^3.0.2, nanoid@^3.1.20, nanoid@^3.1.23: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +nanoid@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-4.0.2.tgz#140b3c5003959adbebf521c170f282c5e7f9fb9e" + integrity sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw== + +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +native-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-3.0.0.tgz#06ccdd70e79e171c365c75117959cf4fe14a09bb" + integrity sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw== + +native-fetch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-4.0.2.tgz#75c8a44c5f3bb021713e5e24f2846750883e49af" + integrity sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +ncp@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + +negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -2899,6 +8124,16 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + +node-abort-controller@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== + node-addon-api@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" @@ -2911,13 +8146,18 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.7: +node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.6.8: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" +node-forge@^1.1.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-gyp-build@^4.3.0: version "4.8.1" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" @@ -2940,6 +8180,14 @@ node-gyp@^9.0.0: tar "^6.1.2" which "^2.0.2" +noms@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" + integrity sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow== + dependencies: + inherits "^2.0.1" + readable-stream "~1.0.31" + nopt@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" @@ -2994,6 +8242,21 @@ normalize-package-data@^5.0.0: semver "^7.3.5" validate-npm-package-license "^3.0.4" +normalize-package-data@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.1.tgz#fa69e9452210f0fabf4d79ee08d0c2870c51ed88" + integrity sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ== + dependencies: + hosted-git-info "^7.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + npm-bundled@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" @@ -3132,6 +8395,13 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + npmlog@6.0.2, npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" @@ -3203,6 +8473,87 @@ nx@15.9.7, "nx@>=15.5.2 < 16": "@nrwl/nx-win32-arm64-msvc" "15.9.7" "@nrwl/nx-win32-x64-msvc" "15.9.7" +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.7: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.1.7: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +observable-webworkers@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/observable-webworkers/-/observable-webworkers-2.0.1.tgz#7d9086ebc567bd318b46ba0506b10cedf3813878" + integrity sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw== + +omit-deep@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/omit-deep/-/omit-deep-0.3.0.tgz#21c8af3499bcadd29651a232cbcacbc52445ebec" + integrity sha512-Lbl/Ma59sss2b15DpnWnGmECBRL8cRl/PjPbPMVW+Y8zIQzRrwMaI65Oy6HvxyhYeILVKBJb2LWeG81bj5zbMg== + dependencies: + is-plain-object "^2.0.1" + unset-value "^0.1.1" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3210,6 +8561,13 @@ once@^1.3.0, once@^1.4.0: dependencies: wrappy "1" +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -3217,6 +8575,13 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^8.4.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" @@ -3226,6 +8591,28 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +optimism@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.18.0.tgz#e7bb38b24715f3fdad8a9a7fc18e999144bbfa63" + integrity sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ== + dependencies: + "@wry/caches" "^1.0.0" + "@wry/context" "^0.7.0" + "@wry/trie" "^0.4.3" + tslib "^2.3.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + ora@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" @@ -3246,6 +8633,31 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + +p-defer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-4.0.1.tgz#d12c6d41420785ed0d162dbd86b71ba490f7f99e" + integrity sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A== + +p-event@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-5.0.1.tgz#614624ec02ae7f4f13d09a721c90586184af5b0c" + integrity sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ== + dependencies: + p-timeout "^5.0.2" + +p-fifo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-fifo/-/p-fifo-1.0.0.tgz#e29d5cf17c239ba87f51dde98c1d26a9cfe20a63" + integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== + dependencies: + fast-fifo "^1.0.0" + p-defer "^3.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -3272,6 +8684,13 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -3318,11 +8737,40 @@ p-queue@6.6.2: eventemitter3 "^4.0.4" p-timeout "^3.2.0" +p-queue@^7.2.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-7.4.1.tgz#7f86f853048beca8272abdbb7cec1ed2afc0f265" + integrity sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA== + dependencies: + eventemitter3 "^5.0.1" + p-timeout "^5.0.2" + +p-queue@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-8.0.1.tgz#718b7f83836922ef213ddec263ff4223ce70bef8" + integrity sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA== + dependencies: + eventemitter3 "^5.0.1" + p-timeout "^6.1.2" + p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== +p-reflect@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-reflect/-/p-reflect-3.1.0.tgz#bba22747439b5fc50a7f626e8e909dc9b888218d" + integrity sha512-3sG3UlpisPSaX+o7u2q01hIQmrpkvdl5GSO1ZwL7pfc5kHB2bPF0eFNCfYTrW1/LTUdgmPwBAvmT0Zr8eSmaAQ== + +p-settle@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/p-settle/-/p-settle-5.1.1.tgz#9300778f896d5c01e4361b8ab45d003548574c3e" + integrity sha512-VLgSBpA71aMncPVP5Es4nhQYxcxN0lit8hGlobJke8YTAhtwdRDu/s4KePP5gCT5LFfZty3qosBFYMgD5rFpCg== + dependencies: + p-limit "^4.0.0" + p-reflect "^3.1.0" + p-timeout@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" @@ -3330,6 +8778,16 @@ p-timeout@^3.2.0: dependencies: p-finally "^1.0.0" +p-timeout@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" + integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== + +p-timeout@^6.0.0, p-timeout@^6.1.1, p-timeout@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.2.tgz#22b8d8a78abf5e103030211c5fc6dee1166a6aa5" + integrity sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ== + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -3402,6 +8860,11 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parent-require@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" + integrity sha512-2MXDNZC4aXdkkap+rBBMv0lUsfJqvX5/2FiYYnfCnorZt3Pk06/IOR5KeaoghgS2w07MLWgjbsnyaq6PdHn2LQ== + parse-conflict-json@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" @@ -3411,6 +8874,11 @@ parse-conflict-json@^3.0.0: just-diff "^6.0.0" just-diff-apply "^5.2.0" +parse-duration@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-1.1.0.tgz#5192084c5d8f2a3fd676d04a451dbd2e05a1819c" + integrity sha512-z6t9dvSJYaPoQq7quMzdEagSFtpGu+utzHqqxmpVWNNZRIXnvqyCvn9XsTdh7c/w0Bqmdz3RB3YnRaKtpRtEXQ== + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -3429,6 +8897,15 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-json@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.1.0.tgz#91cdc7728004e955af9cb734de5684733b24a717" + integrity sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA== + dependencies: + "@babel/code-frame" "^7.22.13" + index-to-position "^0.1.2" + type-fest "^4.7.1" + parse-path@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" @@ -3443,6 +8920,33 @@ parse-url@^8.1.0: dependencies: parse-path "^7.0.0" +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@^1.3.3, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -3463,6 +8967,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -3476,6 +8985,11 @@ path-scurry@^1.11.1, path-scurry@^1.6.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -3488,12 +9002,85 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pg-boss@^6.1.0: + version "6.2.2" + resolved "https://registry.yarnpkg.com/pg-boss/-/pg-boss-6.2.2.tgz#b33b6c99e53bcec201cc36bbaac69ebb6c09adf1" + integrity sha512-WA4cHCmN4RTOS7uCrGQ8n+Cc88tsgZXrp4U/iGUehgl2XcawSo2L5rm5bFvqX8YFcmrdsl8sh7ZDeKPWAAvOIQ== + dependencies: + cron-parser "^4.0.0" + delay "^5.0.0" + lodash.debounce "^4.0.8" + p-map "^4.0.0" + pg "^8.5.1" + uuid "^8.3.2" + +pg-cloudflare@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" + integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== + +pg-connection-string@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.4.tgz#f543862adfa49fa4e14bc8a8892d2a84d754246d" + integrity sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.2.tgz#3a592370b8ae3f02a7c8130d245bc02fa2c5f3f2" + integrity sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg== + +pg-protocol@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.1.tgz#21333e6d83b01faaebfe7a33a7ad6bfd9ed38cb3" + integrity sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg== + +pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg@^8.5.1: + version "8.12.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.12.0.tgz#9341724db571022490b657908f65aee8db91df79" + integrity sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ== + dependencies: + pg-connection-string "^2.6.4" + pg-pool "^3.6.2" + pg-protocol "^1.6.1" + pg-types "^2.1.0" + pgpass "1.x" + optionalDependencies: + pg-cloudflare "^1.1.1" + +pgpass@1.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + picocolors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== -picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -3525,6 +9112,21 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +platform@^1.3.3: + version "1.3.6" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-selector-parser@^6.0.10: version "6.1.0" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" @@ -3533,6 +9135,33 @@ postcss-selector-parser@^6.0.10: cssesc "^3.0.0" util-deprecate "^1.0.2" +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + pretty-format@29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.3.tgz#25500ada21a53c9e8423205cf0337056b201244c" @@ -3542,6 +9171,16 @@ pretty-format@29.4.3: ansi-styles "^5.0.0" react-is "^18.0.0" +private-ip@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/private-ip/-/private-ip-3.0.2.tgz#1daf6052ee5cee53238616a377d6be180e9490ef" + integrity sha512-2pkOVPGYD/4QyAg95c6E/4bLYXPthT5Xw4ocXYzIIsMBhskOMn6IwkWXmg6ZiA6K58+O6VD/n02r1hDhk7vDPw== + dependencies: + "@chainsafe/is-ip" "^2.0.1" + ip-regex "^5.0.0" + ipaddr.js "^2.1.0" + netmask "^2.0.2" + proc-log@^2.0.0, proc-log@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" @@ -3557,6 +9196,18 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +progress-events@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/progress-events/-/progress-events-1.0.0.tgz#34f5e8fdb5dae3561837b22672d1e02277bb2109" + integrity sha512-zIB6QDrSbPfRg+33FZalluFIowkbV5Xh1xSuetjG+rlC5he6u2dc6VQJ0TbMdlN3R1RHdpOqxEFMKTnQ+itUwA== + +prom-client@^14.0.1: + version "14.2.0" + resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-14.2.0.tgz#ca94504e64156f6506574c25fb1c34df7812cf11" + integrity sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA== + dependencies: + tdigest "^0.1.1" + promise-all-reject-late@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" @@ -3580,6 +9231,11 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" +promjs@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/promjs/-/promjs-0.4.2.tgz#9c2b4a60e00c1a0ecb69a3c1c322d1cfb47a300d" + integrity sha512-qvHcTU9xwEieFOf2Qnf5JYPKkdJU2lRbJfJvJspw6XpnoH7VPmNfnJJnOLPfN8ODJMBLRt8wEPVjxyyn0Or6RQ== + promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" @@ -3587,27 +9243,110 @@ promzard@^0.3.0: dependencies: read "1" +prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== +protobufjs@^6.10.2, protobufjs@^6.11.2: + version "6.11.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" + integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" + long "^4.0.0" + +protobufjs@^7.0.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.0.tgz#a32ec0422c039798c41a0700306a6e305b9cb32c" + integrity sha512-YWD03n3shzV9ImZRX3ccbjqLxj7NokGN0V/ESiBV5xWqrommYHYiihuIyavq03pWSGqlyvYUFmfoMKd+1rPA/g== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + protocols@^2.0.0, protocols@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== +protons-runtime@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/protons-runtime/-/protons-runtime-4.0.2.tgz#a5670e703a5389dccb3700b583532e3316efcb94" + integrity sha512-R4N6qKHgz8T2Gl45CTcZfITzXPQY9ym8lbLb4VyFMS4ag1KusCRZwkQXTBRhxQ+93ck3K3aDhK1wIk98AMtNyw== + dependencies: + protobufjs "^7.0.0" + uint8arraylist "^2.4.3" + +protons-runtime@^5.0.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/protons-runtime/-/protons-runtime-5.4.0.tgz#2751ce22cae6c35eebba89acfd9d783419ae3726" + integrity sha512-XfA++W/WlQOSyjUyuF5lgYBfXZUEMP01Oh1C2dSwZAlF2e/ZrMRPfWonXj6BGM+o8Xciv7w0tsRMKYwYEuQvaw== + dependencies: + uint8-varint "^2.0.2" + uint8arraylist "^2.4.3" + uint8arrays "^5.0.1" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -queue-microtask@^1.2.2: +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== @@ -3617,11 +9356,55 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +race-signal@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/race-signal/-/race-signal-1.0.2.tgz#e42379fba0cec4ee8dab7c9bbbd4aa6e0d14c25f" + integrity sha512-o3xNv0iTcIDQCXFlF6fPAMEBRjFxssgGoRqLbg06m+AdzEXXLUmoNOoUHTVz2NoBI8hHwKFKoC6IqyNtWr2bww== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +rate-limiter-flexible@^2.3.11, rate-limiter-flexible@^2.3.9: + version "2.4.2" + resolved "https://registry.yarnpkg.com/rate-limiter-flexible/-/rate-limiter-flexible-2.4.2.tgz#2a219cc473f015142fd8fb599371223d730decbd" + integrity sha512-rMATGGOdO1suFyf/mI5LYhts71g1sbdhmd6YvdiXO2gJnd42Tt6QS4JUKJKSWVVkMtBacm6l40FR7Trjo6Iruw== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-is@^18.0.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== +react-native-fetch-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz#81e1bb6562c292521bc4eca52fe1097f4c1ebab5" + integrity sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA== + dependencies: + p-defer "^3.0.0" + read-cmd-shim@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" @@ -3714,6 +9497,17 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +read-pkg@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b" + integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA== + dependencies: + "@types/normalize-package-data" "^2.4.3" + normalize-package-data "^6.0.0" + parse-json "^8.0.0" + type-fest "^4.6.0" + unicorn-magic "^0.1.0" + read@1, read@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" @@ -3730,6 +9524,16 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stre string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@~1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -3743,6 +9547,20 @@ readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +receptacle@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/receptacle/-/receptacle-1.3.2.tgz#a7994c7efafc7a01d0e2041839dab6c4951360d2" + integrity sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A== + dependencies: + ms "^2.1.1" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -3751,11 +9569,41 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reflect-metadata@^0.1.13: + version "0.1.14" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.14.tgz#24cf721fe60677146bb77eeb0e1f9dece3d65859" + integrity sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A== + +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +regexpp@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +rehackt@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.1.0.tgz#a7c5e289c87345f70da8728a7eb878e5d03c696b" + integrity sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw== + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -3773,7 +9621,7 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.10.0: +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -3782,6 +9630,11 @@ resolve@^1.10.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +response-iterator@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.6.tgz#249005fb14d2e4eeb478a3f735a28fd8b4c9f3da" + integrity sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw== + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -3790,6 +9643,16 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +retimer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/retimer/-/retimer-3.0.0.tgz#98b751b1feaf1af13eb0228f8ea68b8f9da530df" + integrity sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA== + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -3814,11 +9677,25 @@ rimraf@^4.4.1: dependencies: glob "^9.2.0" +rimraf@~2.4.0: + version "2.4.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" + integrity sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== + dependencies: + glob "^6.0.1" + run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -3833,21 +9710,67 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-json-stringify@~1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" + integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +sax@>=0.6.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + +scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + "semver@2 || 3 || 4 || 5", semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" @@ -3867,7 +9790,7 @@ semver@7.5.4: dependencies: lru-cache "^6.0.0" -semver@^6.0.0: +semver@^6.0.0, semver@^6.1.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -3877,11 +9800,87 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semve resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-delayed-interval@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-delayed-interval/-/set-delayed-interval-1.0.0.tgz#1f7c065780a365f10250f8a80e2be10175ea0388" + integrity sha512-29fhAwuZlLcuBnW/EwxvLcg2D3ELX+VBDNhnavs3YYkab72qmrcSeQNVdzl8EcPPahGQXhBM6MKdPLCQGMDakw== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -3901,6 +9900,16 @@ 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@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" @@ -3922,6 +9931,13 @@ sigstore@^1.0.0, sigstore@^1.3.0, sigstore@^1.4.0: "@sigstore/tuf" "^1.0.3" make-fetch-happen "^11.0.1" +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + slash@3.0.0, slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -3994,6 +10010,11 @@ split2@^3.0.0: dependencies: readable-stream "^3.0.0" +split2@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -4001,6 +10022,11 @@ split@^1.0.0: dependencies: through "2" +sprintf-js@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + sprintf-js@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" @@ -4025,6 +10051,23 @@ ssri@^10.0.0, ssri@^10.0.1: dependencies: minipass "^7.0.3" +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +stream-to-it@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/stream-to-it/-/stream-to-it-0.2.4.tgz#d2fd7bfbd4a899b4c0d6a7e6a533723af5749bd0" + integrity sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ== + dependencies: + get-iterator "^1.0.2" + "string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -4034,6 +10077,14 @@ ssri@^10.0.0, ssri@^10.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -4043,6 +10094,34 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -4050,6 +10129,11 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4064,6 +10148,20 @@ string_decoder@~1.1.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -4086,6 +10184,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -4093,6 +10196,11 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -4102,6 +10210,18 @@ strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: minimist "^1.2.0" through "^2.3.4" +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -4121,6 +10241,11 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +symbol-observable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + tar-stream@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" @@ -4156,6 +10281,13 @@ tar@^6.1.11, tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" +tdigest@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.2.tgz#96c64bac4ff10746b910b0e23b515794e12faced" + integrity sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA== + dependencies: + bintrees "1.0.2" + temp-dir@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -4182,7 +10314,31 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -through2@^2.0.0: +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +through2@^2.0.0, through2@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -4202,6 +10358,13 @@ through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +timeout-abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz#dd57ffca041652c03769904f8d95afd93fb95595" + integrity sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA== + dependencies: + retimer "^3.0.0" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -4221,6 +10384,16 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4236,6 +10409,59 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== + dependencies: + utf8-byte-length "^1.0.1" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-invariant@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" + integrity sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ== + dependencies: + tslib "^2.1.0" + +ts-node@^10.2.1: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tsconfig-paths@^4.1.2: version "4.2.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" @@ -4245,11 +10471,23 @@ tsconfig-paths@^4.1.2: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: version "2.6.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tuf-js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" @@ -4259,6 +10497,18 @@ tuf-js@^1.1.7: debug "^4.3.4" make-fetch-happen "^11.1.1" +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@^4.0.0, type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.16.0: version "0.16.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" @@ -4269,6 +10519,11 @@ type-fest@^0.18.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -4289,21 +10544,184 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^4.6.0, type-fest@^4.7.1: + version "4.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.19.0.tgz#f7d3d5f55a7a118b5fe3d2eef53059cf8e516dcd" + integrity sha512-CN2l+hWACRiejlnr68vY0/7734Kzu+9+TOslUXbSCQ1ruY9XIHDBSceVXCcHm/oXrdzhtLMMdJEKfemf1yXiZQ== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== +typeorm-naming-strategies@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/typeorm-naming-strategies/-/typeorm-naming-strategies-2.0.0.tgz#c7c10bc768ddce2592ef9ad4d2dca55fd5fa6ad6" + integrity sha512-nsJ5jDjhBBEG6olFmxojkO4yrW7hEv38sH7ZXWWx9wnDoo9uaoH/mo2mBYAh/VKgwoFHBLu+CYxGmzXz2GUMcA== + +typeorm@0.2.37: + version "0.2.37" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.37.tgz#1a5e59216077640694d27c04c99ed3f968d15dc8" + integrity sha512-7rkW0yCgFC24I5T0f3S/twmLSuccPh1SQmxET/oDWn2sSDVzbyWdnItSdKy27CdJGTlKHYtUVeOcMYw5LRsXVw== + dependencies: + "@sqltools/formatter" "^1.2.2" + app-root-path "^3.0.0" + buffer "^6.0.3" + chalk "^4.1.0" + cli-highlight "^2.1.11" + debug "^4.3.1" + dotenv "^8.2.0" + glob "^7.1.6" + js-yaml "^4.0.0" + mkdirp "^1.0.4" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.1.0" + xml2js "^0.4.23" + yargonaut "^1.1.4" + yargs "^17.0.1" + zen-observable-ts "^1.0.0" + "typescript@^3 || ^4": version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.0.2: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + uglify-js@^3.1.4: version "3.17.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== +uint8-varint@^1.0.1, uint8-varint@^1.0.2, uint8-varint@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/uint8-varint/-/uint8-varint-1.0.8.tgz#3f6c268e4c1a1ece232f660ec37729faca7cc7d0" + integrity sha512-QS03THS87Wlc0fBCC3xP5sqScDwfvVZLUrTCeMAQbQxQUWJosPC7C8uTNhpVUEgpTbV1Ut2Fer9Se3kI1KbnlQ== + dependencies: + byte-access "^1.0.0" + longbits "^1.1.0" + uint8arraylist "^2.0.0" + uint8arrays "^4.0.2" + +uint8-varint@^2.0.1, uint8-varint@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/uint8-varint/-/uint8-varint-2.0.4.tgz#85be52b3849eb30f2c3640a2df8a14364180affb" + integrity sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw== + dependencies: + uint8arraylist "^2.0.0" + uint8arrays "^5.0.0" + +uint8arraylist@^2.0.0, uint8arraylist@^2.1.0, uint8arraylist@^2.1.1, uint8arraylist@^2.1.2, uint8arraylist@^2.3.1, uint8arraylist@^2.3.2, uint8arraylist@^2.4.1, uint8arraylist@^2.4.3, uint8arraylist@^2.4.8: + version "2.4.8" + resolved "https://registry.yarnpkg.com/uint8arraylist/-/uint8arraylist-2.4.8.tgz#5a4d17f4defd77799cb38e93fd5db0f0dceddc12" + integrity sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ== + dependencies: + uint8arrays "^5.0.1" + +uint8arrays@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" + integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== + dependencies: + multiformats "^9.4.2" + +uint8arrays@^4.0.2, uint8arrays@^4.0.3, uint8arrays@^4.0.6: + version "4.0.10" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-4.0.10.tgz#3ec5cde3348903c140e87532fc53f46b8f2e921f" + integrity sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA== + dependencies: + multiformats "^12.0.1" + +uint8arrays@^5.0.0, uint8arrays@^5.0.1, uint8arrays@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-5.1.0.tgz#14047c9bdf825d025b7391299436e5e50e7270f1" + integrity sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww== + dependencies: + multiformats "^13.0.0" + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici@^5.12.0: + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== + dependencies: + "@fastify/busboy" "^2.0.0" + +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + unique-filename@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" @@ -4318,6 +10736,11 @@ unique-filename@^3.0.0: dependencies: unique-slug "^4.0.0" +unique-names-generator@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/unique-names-generator/-/unique-names-generator-4.7.1.tgz#966407b12ba97f618928f77322cfac8c80df5597" + integrity sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow== + unique-slug@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" @@ -4349,21 +10772,77 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unset-value@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-0.1.2.tgz#506810b867f27c2a5a6e9b04833631f6de58d310" + integrity sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + upath@2.0.1, upath@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utf8-byte-length@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz#f9f63910d15536ee2b2d5dd4665389715eac5c1e" + integrity sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@8.3.2: +util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@8.3.2, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-compile-cache@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -4396,6 +10875,26 @@ validate-npm-package-name@^5.0.0: resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== +value-or-promise@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" + integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== + +value-or-promise@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" + integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== + +varint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" + integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + walk-up-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" @@ -4413,6 +10912,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -4421,7 +10925,36 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which@^2.0.1, which@^2.0.2: +wherearewe@^2.0.0, wherearewe@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wherearewe/-/wherearewe-2.0.1.tgz#37c97a7bf112dca8db34bfefb2f6c997af312bb8" + integrity sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw== + dependencies: + is-electron "^2.2.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -4435,6 +10968,13 @@ which@^3.0.0: dependencies: isexe "^2.0.0" +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -4442,11 +10982,47 @@ wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -wordwrap@^1.0.0: +winston-transport@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" + integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== + dependencies: + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" + +winston@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.13.0.tgz#e76c0d722f78e04838158c61adc1287201de7ce3" + integrity sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ== + dependencies: + "@colors/colors" "^1.6.0" + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.4.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.7.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@>=0.0.2, wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -4525,7 +11101,51 @@ write-pkg@4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" -xtend@~4.0.1: +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^8.11.0, ws@^8.12.1, ws@^8.4.0: + version "8.17.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" + integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== + +xml2js@^0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xml2js@^0.6.0, xml2js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" + integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xsalsa20@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/xsalsa20/-/xsalsa20-1.2.0.tgz#e5a05cb26f8cef723f94a559102ed50c1b44c25c" + integrity sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w== + +xss@^1.0.8: + version "1.0.15" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a" + integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" + +xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -4545,6 +11165,15 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yargonaut@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c" + integrity sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA== + dependencies: + chalk "^1.1.1" + figlet "^1.1.1" + parent-require "^1.0.0" + yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" @@ -4560,7 +11189,17 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@16.2.0, yargs@^16.2.0: +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.0.0, yargs@^16.1.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -4573,7 +11212,7 @@ yargs@16.2.0, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.6.2: +yargs@^17.0.1, yargs@^17.6.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -4586,7 +11225,37 @@ yargs@^17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + +zen-observable-ts@^1.0.0, zen-observable-ts@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83" + integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA== + dependencies: + "@types/zen-observable" "0.8.3" + zen-observable "0.8.15" + +zen-observable-ts@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" + integrity sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg== + dependencies: + zen-observable "0.8.15" + +zen-observable@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==