diff --git a/.env.example b/.env.example index ecbd3aeba..e69de29bb 100644 --- a/.env.example +++ b/.env.example @@ -1,24 +0,0 @@ -STATS_PORT=10001 - -VERBOSE_OUTPUT=false - -CHAIN_RPC_ENDPOINT=http://localhost:8545 -CHAIN_NETWORK_CONTRACT=0x777760996135F0791E2e1a74aFAa060711197777 - -AWS_APPSYNC_ENDPOINT=http://localhost:20002/graphql -AWS_APPSYNC_KEY=da2-fakeApiId123456 - -NODE_ENV=development - -BLOCK_TIME=5 # in seconds - -# Number of blocks to process in a single batch -# Helps greatly with fast networks (ie: Arbitrum) -BLOCK_PAGING_SIZE=1000 - -# Needed for notifications via magicbell -MAGICBELL_API_KEY= -MAGICBELL_API_SECRET= - -# Used to set a local key so that in development you only recieve notifications from your current dev env -MAGICBELL_DEV_KEY= diff --git a/.eslintrc.js b/.eslintrc.js index b2efe172b..67c03bf94 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -8,13 +8,19 @@ module.exports = { parserOptions: { ecmaVersion: 'latest', sourceType: 'module', - project: ['./tsconfig.json'], + project: [ + './tsconfig.base.json', + './packages/*/tsconfig.json', + './apps/*/tsconfig.json' + ], + tsconfigRootDir: __dirname, }, rules: { semi: 'off', '@typescript-eslint/semi': ['error', 'always'], '@typescript-eslint/strict-boolean-expressions': 'off', '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/consistent-type-definitions': 'off', 'comma-dangle': 'off', '@typescript-eslint/comma-dangle': ['error', 'always-multiline'], '@typescript-eslint/no-misused-promises': 'off', @@ -25,6 +31,10 @@ module.exports = { 'no-useless-return': 'off', '@typescript-eslint/member-delimiter-style': 'off', '@typescript-eslint/indent': 'off', + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/prefer-optional-chain': 'off', + '@typescript-eslint/return-await': 'off', '@typescript-eslint/space-before-function-paren': [ 'error', { @@ -36,8 +46,9 @@ module.exports = { }, ignorePatterns: [ 'codegen.ts', - 'src/graphql/generated.ts', + 'packages/graphql/codegen.ts', + 'packages/graphql/src/generated.ts', 'wagmi.config.ts', - 'src/constants/abis.ts', + 'packages/blocks/src/constants/abis.ts', ], }; diff --git a/.github/workflows/build-deploy-proxy.yaml b/.github/workflows/build-deploy-proxy.yaml index 6b3a8e25b..84eb205d8 100644 --- a/.github/workflows/build-deploy-proxy.yaml +++ b/.github/workflows/build-deploy-proxy.yaml @@ -1,11 +1,10 @@ -name: Build and deploy cdapp block-ingestor proxy chain docker image - -on: +name: Block ingestor proxy chain - Build and deploy +on: workflow_dispatch: # Allows manual workflow trigger repository_dispatch: # Allows API workflow trigger types: [cdapp-block-ingestor-proxy-chain] - + # push: # branches: # - master # Automatically deploy on commits to master @@ -24,41 +23,37 @@ env: COMMIT_HASH: ${{ github.event.client_payload.COMMIT_HASH != null && github.event.client_payload.COMMIT_HASH || github.sha }} jobs: - # Build cdapp block-ingestor and push to AWS ECR buildAndPush: - runs-on: ubuntu-latest steps: - - name: Echo Env Vars through Context run: | echo "$GITHUB_CONTEXT" - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_QA }} + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_QA }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_QA }} aws-region: ${{ env.AWS_REGION }} - - name: Login to Amazon ECR - id: login-ecr + - name: Login to Amazon ECR + id: login-ecr uses: aws-actions/amazon-ecr-login@v1 - - - name: Checkout + + - name: Checkout uses: actions/checkout@v2 with: fetch-depth: 0 - name: Checkout relevant branch - run: - git checkout ${{ github.event.client_payload.COMMIT_HASH != null && github.event.client_payload.COMMIT_HASH || github.sha }} - + run: git checkout ${{ github.event.client_payload.COMMIT_HASH != null && github.event.client_payload.COMMIT_HASH || github.sha }} + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - + - name: Build and push uses: docker/build-push-action@v3 with: @@ -70,16 +65,15 @@ jobs: tags: | ${{ env.ECR_REPOSITORY }}:run-${{ github.run_number }} ${{ env.ECR_REPOSITORY }}:${{ env.COMMIT_HASH }} - + - uses: sarisia/actions-status-discord@c193626e5ce172002b8161e116aa897de7ab5383 if: always() with: webhook: ${{ secrets.DISCORD_WEBHOOK }} - title: "Build and push cdapp block-ingestor" + title: 'Build and push cdapp block-ingestor' # Deploy cdapp block-ingestor to QA environment deployQA: - needs: buildAndPush runs-on: ubuntu-latest @@ -88,68 +82,66 @@ jobs: NAMESPACE: cdapp CLUSTER_NAME: qa-cluster ENVIRONMENT_TAG: qa - REPOSITORY_NAME: cdapp/block-ingestor + REPOSITORY_NAME: cdapp/block-ingestor-proxy-chain steps: + - name: Configure AWS credentials for ECR + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_QA }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_QA }} + aws-region: ${{ env.AWS_REGION }} + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + + - name: Echo current image and tag new image + run: | + echo -e "Getting image info...\n" + + echo -e "###### Current image being used ######\n" + SHA256=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.ENVIRONMENT_TAG }} --output json | jq '.images[].imageId.imageDigest') + aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageDigest=$SHA256 --output json | jq '.images[].imageId' - - name: Configure AWS credentials for ECR - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_QA }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_QA }} - aws-region: ${{ env.AWS_REGION }} - - - name: Login to Amazon ECR - id: login-ecr - uses: aws-actions/amazon-ecr-login@v1 - - - name: Echo current image and tag new image - run: | - echo -e "Getting image info...\n" - - echo -e "###### Current image being used ######\n" - SHA256=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.ENVIRONMENT_TAG }} --output json | jq '.images[].imageId.imageDigest') - aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageDigest=$SHA256 --output json | jq '.images[].imageId' - - echo -e "\n###### Tagging new image with environment tag ######" - MANIFEST=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.COMMIT_HASH }} --output json | jq --raw-output --join-output '.images[0].imageManifest') - aws ecr put-image --repository-name ${{ env.REPOSITORY_NAME }} --image-tag ${{ env.ENVIRONMENT_TAG }} --image-manifest "$MANIFEST" - - echo -e "\n###### New image being used ######\n" - SHA256=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.ENVIRONMENT_TAG }} --output json | jq '.images[].imageId.imageDigest') - aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageDigest=$SHA256 --output json | jq '.images[].imageId' - - - name: Configure AWS credentials for EKS - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_QA }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_QA }} - role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID_QA }}:role/eks-admin - role-session-name: github-cicd - role-duration-seconds: 1200 - aws-region: ${{ env.AWS_REGION }} - - - name: Configure AWS EKS - run: | - aws eks --region ${{ env.AWS_REGION }} update-kubeconfig --name ${{ env.CLUSTER_NAME }} - - - name: Deploy to Kubernetes cluster - run: | - kubectl rollout restart deployment/cdapp-block-ingestor-${{ env.ENVIRONMENT_TAG }}-polygon-amoy -n ${{ env.NAMESPACE }} - - - name: Validate Kubernetes deployment - run: | - kubectl rollout status deployment/cdapp-block-ingestor-${{ env.ENVIRONMENT_TAG }}-polygon-amoy -n ${{ env.NAMESPACE }} - - - uses: sarisia/actions-status-discord@c193626e5ce172002b8161e116aa897de7ab5383 - if: always() - with: - webhook: ${{ secrets.DISCORD_WEBHOOK }} - title: "Deploy cdapp block-ingestor to ${{ env.ENVIRONMENT_TAG }}-polygon-amoy" + echo -e "\n###### Tagging new image with environment tag ######" + MANIFEST=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.COMMIT_HASH }} --output json | jq --raw-output --join-output '.images[0].imageManifest') + aws ecr put-image --repository-name ${{ env.REPOSITORY_NAME }} --image-tag ${{ env.ENVIRONMENT_TAG }} --image-manifest "$MANIFEST" + + echo -e "\n###### New image being used ######\n" + SHA256=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.ENVIRONMENT_TAG }} --output json | jq '.images[].imageId.imageDigest') + aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageDigest=$SHA256 --output json | jq '.images[].imageId' + + - name: Configure AWS credentials for EKS + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_QA }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_QA }} + role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID_QA }}:role/eks-admin + role-session-name: github-cicd + role-duration-seconds: 1200 + aws-region: ${{ env.AWS_REGION }} + + - name: Configure AWS EKS + run: | + aws eks --region ${{ env.AWS_REGION }} update-kubeconfig --name ${{ env.CLUSTER_NAME }} + + - name: Deploy to Kubernetes cluster + run: | + kubectl rollout restart deployment/cdapp-block-ingestor-${{ env.ENVIRONMENT_TAG }}-polygon-amoy -n ${{ env.NAMESPACE }} + + - name: Validate Kubernetes deployment + run: | + kubectl rollout status deployment/cdapp-block-ingestor-${{ env.ENVIRONMENT_TAG }}-polygon-amoy -n ${{ env.NAMESPACE }} + + - uses: sarisia/actions-status-discord@c193626e5ce172002b8161e116aa897de7ab5383 + if: always() + with: + webhook: ${{ secrets.DISCORD_WEBHOOK }} + title: 'Deploy cdapp block-ingestor to ${{ env.ENVIRONMENT_TAG }}-polygon-amoy' # Deploy cdapp block-ingestor to Prod environment deployProd: - needs: deployQA environment: prod @@ -160,61 +152,60 @@ jobs: NAMESPACE: cdapp CLUSTER_NAME: prod-cluster ENVIRONMENT_TAG: prod - REPOSITORY_NAME: cdapp/block-ingestor + REPOSITORY_NAME: cdapp/block-ingestor-proxy-chain steps: + - name: Configure AWS credentials for ECR + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_QA }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_QA }} + aws-region: ${{ env.AWS_REGION }} + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + + - name: Echo current image and tag new image + run: | + echo -e "Getting image info...\n" + + echo -e "###### Current image being used ######\n" + SHA256=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.ENVIRONMENT_TAG }} --output json | jq '.images[].imageId.imageDigest') + aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageDigest=$SHA256 --output json | jq '.images[].imageId' + + echo -e "\n###### Tagging new image with environment tag ######" + MANIFEST=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.COMMIT_HASH }} --output json | jq --raw-output --join-output '.images[0].imageManifest') + aws ecr put-image --repository-name ${{ env.REPOSITORY_NAME }} --image-tag ${{ env.ENVIRONMENT_TAG }} --image-manifest "$MANIFEST" - - name: Configure AWS credentials for ECR - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_QA }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_QA }} - aws-region: ${{ env.AWS_REGION }} - - - name: Login to Amazon ECR - id: login-ecr - uses: aws-actions/amazon-ecr-login@v1 - - - name: Echo current image and tag new image - run: | - echo -e "Getting image info...\n" - - echo -e "###### Current image being used ######\n" - SHA256=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.ENVIRONMENT_TAG }} --output json | jq '.images[].imageId.imageDigest') - aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageDigest=$SHA256 --output json | jq '.images[].imageId' - - echo -e "\n###### Tagging new image with environment tag ######" - MANIFEST=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.COMMIT_HASH }} --output json | jq --raw-output --join-output '.images[0].imageManifest') - aws ecr put-image --repository-name ${{ env.REPOSITORY_NAME }} --image-tag ${{ env.ENVIRONMENT_TAG }} --image-manifest "$MANIFEST" - - echo -e "\n###### New image being used ######\n" - SHA256=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.ENVIRONMENT_TAG }} --output json | jq '.images[].imageId.imageDigest') - aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageDigest=$SHA256 --output json | jq '.images[].imageId' - - - name: Configure AWS credentials for EKS - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} - role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID_PROD }}:role/eks-admin - role-session-name: github-cicd - role-duration-seconds: 1200 - aws-region: ${{ env.AWS_REGION }} - - - name: Configure AWS EKS - run: | - aws eks --region ${{ env.AWS_REGION }} update-kubeconfig --name ${{ env.CLUSTER_NAME }} - - - name: Deploy to Kubernetes cluster - run: | - kubectl rollout restart deployment/cdapp-block-ingestor-${{ env.ENVIRONMENT_TAG }}-polygon-mainnet -n ${{ env.NAMESPACE }} - - - name: Validate Kubernetes deployment - run: | - kubectl rollout status deployment/cdapp-block-ingestor-${{ env.ENVIRONMENT_TAG }}-polygon-mainnet -n ${{ env.NAMESPACE }} - - - uses: sarisia/actions-status-discord@c193626e5ce172002b8161e116aa897de7ab5383 - if: always() - with: - webhook: ${{ secrets.DISCORD_WEBHOOK }} - title: "Deploy cdapp block-ingestor to ${{ env.ENVIRONMENT_TAG }}-polygon-mainnet" + echo -e "\n###### New image being used ######\n" + SHA256=$(aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageTag=${{ env.ENVIRONMENT_TAG }} --output json | jq '.images[].imageId.imageDigest') + aws ecr batch-get-image --repository-name ${{ env.REPOSITORY_NAME }} --image-ids imageDigest=$SHA256 --output json | jq '.images[].imageId' + + - name: Configure AWS credentials for EKS + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} + role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID_PROD }}:role/eks-admin + role-session-name: github-cicd + role-duration-seconds: 1200 + aws-region: ${{ env.AWS_REGION }} + + - name: Configure AWS EKS + run: | + aws eks --region ${{ env.AWS_REGION }} update-kubeconfig --name ${{ env.CLUSTER_NAME }} + + - name: Deploy to Kubernetes cluster + run: | + kubectl rollout restart deployment/cdapp-block-ingestor-${{ env.ENVIRONMENT_TAG }}-polygon-mainnet -n ${{ env.NAMESPACE }} + + - name: Validate Kubernetes deployment + run: | + kubectl rollout status deployment/cdapp-block-ingestor-${{ env.ENVIRONMENT_TAG }}-polygon-mainnet -n ${{ env.NAMESPACE }} + + - uses: sarisia/actions-status-discord@c193626e5ce172002b8161e116aa897de7ab5383 + if: always() + with: + webhook: ${{ secrets.DISCORD_WEBHOOK }} + title: 'Deploy cdapp block-ingestor to ${{ env.ENVIRONMENT_TAG }}-polygon-mainnet' diff --git a/.github/workflows/build-deploy.yaml b/.github/workflows/build-deploy.yaml index 71065c452..4c90888db 100644 --- a/.github/workflows/build-deploy.yaml +++ b/.github/workflows/build-deploy.yaml @@ -1,4 +1,4 @@ -name: Build and deploy cdapp block-ingestor docker image +name: Block ingestor main chain - Build and deploy on: @@ -65,6 +65,8 @@ jobs: context: ${{ github.workspace }} file: ./Dockerfile push: true + build-args: | + BUILD_TARGET=main-chain tags: | ${{ env.ECR_REPOSITORY }}:run-${{ github.run_number }} ${{ env.ECR_REPOSITORY }}:${{ env.COMMIT_HASH }} diff --git a/.gitignore b/.gitignore index be62f4f73..675713ff1 100644 --- a/.gitignore +++ b/.gitignore @@ -70,6 +70,7 @@ typings/ # dotenv environment variables file .env +.env.proxy-2 .env.test # parcel-bundler cache (https://parceljs.org/) @@ -102,5 +103,3 @@ dist # TernJS port file .tern-port - -stats diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..11eda4977 --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +node-linker=hoisted +hoist-pattern=@ethersproject/* +link-workspace-packages=true \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 9bac3b91e..9efc6e3a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,43 @@ -FROM node:16.16.0 +# Declare the build argument at the top +ARG BUILD_TARGET=main-chain -# Copy source code to image -COPY . . +FROM node:20-slim AS base +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +ENV COREPACK_DISABLE_PROMPT=1 +RUN corepack enable +RUN corepack use pnpm@9.5.0 -# Install block ingestor dependencies -RUN npm ci +FROM base AS build +WORKDIR /workspace +COPY . /workspace +RUN pnpm install --frozen-lockfile + + +# Main Chain Stage +FROM base AS main-chain +WORKDIR /workspace +COPY --from=build /workspace /workspace +WORKDIR /workspace/apps/main-chain +CMD ["pnpm", "--filter", "@joincolony/main-chain", "prod"] + +# Proxy Chain Stage +FROM base AS proxy-chain +WORKDIR /workspace +COPY --from=build /workspace /workspace +WORKDIR /workspace/apps/proxy-chain +CMD ["pnpm", "--filter", "@joincolony/proxy-chain", "prod"] + +# Final stage that will be used +FROM ${BUILD_TARGET} AS final + +# Re-declare the build argument in the final stage +ARG BUILD_TARGET + +# Add labels and echo build info +LABEL build_type=${BUILD_TARGET} +RUN echo "🏗️ Building ${BUILD_TARGET} version of block-ingestor" && \ + echo "📦 Final build target: ${BUILD_TARGET}" + +# Keep existing CMD from the selected stage -# the command that starts our app -CMD ["npm","run","prod"] diff --git a/apps/main-chain/.env.example b/apps/main-chain/.env.example new file mode 100644 index 000000000..1fa25f817 --- /dev/null +++ b/apps/main-chain/.env.example @@ -0,0 +1,3 @@ +CHAIN_RPC_ENDPOINT=http://localhost:8545 +CHAIN_NETWORK_CONTRACT=0x777760996135F0791E2e1a74aFAa060711197777 +STATS_PORT=10001 diff --git a/apps/main-chain/package-lock.json b/apps/main-chain/package-lock.json new file mode 100644 index 000000000..0bd51baee --- /dev/null +++ b/apps/main-chain/package-lock.json @@ -0,0 +1,12 @@ +{ + "name": "main-chain", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "main-chain", + "version": "1.0.0" + } + } +} diff --git a/apps/main-chain/package.json b/apps/main-chain/package.json new file mode 100644 index 000000000..bc1d9b94e --- /dev/null +++ b/apps/main-chain/package.json @@ -0,0 +1,18 @@ +{ + "name": "@joincolony/main-chain", + "version": "1.0.0", + "main": "src/index.ts", + "scripts": { + "build": "rm -rf dist/* && npx tsc", + "start": "node -r ts-node/register/transpile-only -r tsconfig-paths/register -r ./dist/env.js dist/index.js", + "dev": "NODE_ENV=development ts-node-dev -r tsconfig-paths/register -r ./src/env.ts src/index.ts", + "prod": "pnpm run build && NODE_ENV=production pnpm run start", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@joincolony/graphql": "workspace:*", + "@joincolony/clients": "workspace:*", + "@joincolony/blocks": "workspace:*", + "@joincolony/utils": "workspace:*" + } +} \ No newline at end of file diff --git a/apps/main-chain/src/amplifyClient.ts b/apps/main-chain/src/amplifyClient.ts new file mode 100644 index 000000000..381535806 --- /dev/null +++ b/apps/main-chain/src/amplifyClient.ts @@ -0,0 +1,8 @@ +import { AmplifyClient } from '@joincolony/clients'; + +const amplifyClient = new AmplifyClient( + process.env.AWS_APPSYNC_ENDPOINT || '', + process.env.AWS_APPSYNC_KEY || '', +); + +export default amplifyClient; diff --git a/apps/main-chain/src/blockManager.ts b/apps/main-chain/src/blockManager.ts new file mode 100644 index 000000000..bbaac0e00 --- /dev/null +++ b/apps/main-chain/src/blockManager.ts @@ -0,0 +1,8 @@ +import { BlockManager } from '@joincolony/blocks'; +import eventManager from '~eventManager'; +import rpcProvider from '~provider'; +import statsManager from '~statsManager'; + +const blockManager = new BlockManager(eventManager, rpcProvider, statsManager); + +export default blockManager; diff --git a/src/constants.ts b/apps/main-chain/src/constants.ts similarity index 100% rename from src/constants.ts rename to apps/main-chain/src/constants.ts diff --git a/apps/main-chain/src/env.ts b/apps/main-chain/src/env.ts new file mode 100644 index 000000000..184def0e1 --- /dev/null +++ b/apps/main-chain/src/env.ts @@ -0,0 +1,5 @@ +import path from 'path'; +import dotenv from 'dotenv'; + +dotenv.config({ path: path.resolve(__dirname, '../.env') }); +dotenv.config({ path: path.resolve(__dirname, '../../../.env') }); diff --git a/src/eventListeners/colony.ts b/apps/main-chain/src/eventListeners/colony.ts similarity index 87% rename from src/eventListeners/colony.ts rename to apps/main-chain/src/eventListeners/colony.ts index 8fa293120..3360350c8 100644 --- a/src/eventListeners/colony.ts +++ b/apps/main-chain/src/eventListeners/colony.ts @@ -1,20 +1,22 @@ import { utils } from 'ethers'; -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ListColoniesDocument, ListColoniesQuery, ListColoniesQueryVariables, -} from '~graphql'; -import { ContractEventsSignatures, EventHandler } from '~types'; -import { notNull, output } from '~utils'; +} from '@joincolony/graphql'; +import { + ContractEventsSignatures, + EventHandler, + EventListenerType, +} from '@joincolony/blocks'; +import { notNull } from '~utils'; import { - addEventListener, addNetworkEventListener, addTokenEventListener, } from '~eventListeners'; -import { EventListenerType } from './types'; import { handleAnnotateTransaction, handleColonyAdded, @@ -47,14 +49,21 @@ import { handleTokenUnlockedAction, handleTransfer, } from '~handlers'; +import { + handleProxyColonyRequested, + handleProxyColonyFundsClaimed, +} from '~handlers/proxyColonies'; import setTokenAuthority from '~handlers/tokens/setTokenAuthority'; +import { addProxyColoniesEventListener } from './proxyColonies'; +import { output } from '@joincolony/utils'; +import eventManager from '~eventManager'; const addColonyEventListener = ( eventSignature: ContractEventsSignatures, address: string, handler: EventHandler, ): void => { - addEventListener({ + eventManager.addEventListener({ type: EventListenerType.Colony, address, eventSignature, @@ -74,7 +83,7 @@ const fetchColoniesAddresses = async (): Promise< do { const { data } = - (await query( + (await amplifyClient.query( ListColoniesDocument, { nextToken }, )) ?? {}; @@ -165,6 +174,18 @@ export const setupListenersForColony = ( ), ); + addProxyColoniesEventListener( + ContractEventsSignatures.ProxyColonyRequested, + colonyAddress, + handleProxyColonyRequested, + ); + + addProxyColoniesEventListener( + ContractEventsSignatures.ProxyColonyFundsClaimed, + colonyAddress, + handleProxyColonyFundsClaimed, + ); + /* * @NOTE Setup both token event listners * diff --git a/src/eventListeners/extension/index.ts b/apps/main-chain/src/eventListeners/extension/index.ts similarity index 86% rename from src/eventListeners/extension/index.ts rename to apps/main-chain/src/eventListeners/extension/index.ts index 2cde66df5..69d02ee2f 100644 --- a/src/eventListeners/extension/index.ts +++ b/apps/main-chain/src/eventListeners/extension/index.ts @@ -1,22 +1,23 @@ import { utils } from 'ethers'; import { Extension, getExtensionHash } from '@colony/colony-js'; -import { ContractEventsSignatures, EventHandler } from '~types'; import { + ContractEventsSignatures, + EventHandler, EventListenerType, - addEventListener, - getEventListeners, - setEventListeners, +} from '@joincolony/blocks'; +import { setupListenerForOneTxPaymentExtensions, setupListenersForStagedExpenditureExtensions, } from '~eventListeners'; +import eventManager from '~eventManager'; import { ExtensionFragment, ListExtensionsDocument, ListExtensionsQuery, ListExtensionsQueryVariables, -} from '~graphql'; -import { query } from '~amplifyClient'; +} from '@joincolony/graphql'; +import amplifyClient from '~amplifyClient'; import { notNull } from '~utils'; import { addNetworkEventListener } from '../network'; @@ -44,7 +45,7 @@ export const addExtensionEventListener = ( colonyAddress: string, handler: EventHandler, ): void => { - addEventListener({ + eventManager.addEventListener({ type: EventListenerType.Extension, eventSignature, address: extensionAddress, @@ -58,8 +59,8 @@ export const addExtensionEventListener = ( export const removeExtensionEventListeners = ( extensionAddress: string, ): void => { - const existingListeners = getEventListeners(); - setEventListeners( + const existingListeners = eventManager.getEventListeners(); + eventManager.setEventListeners( existingListeners.filter((listener) => { if (listener.type !== EventListenerType.Extension) { return true; @@ -103,13 +104,13 @@ export const fetchExistingExtensions = async ( do { const { data } = - (await query( - ListExtensionsDocument, - { - nextToken, - hash: extensionHash, - }, - )) ?? {}; + (await amplifyClient.query< + ListExtensionsQuery, + ListExtensionsQueryVariables + >(ListExtensionsDocument, { + nextToken, + hash: extensionHash, + })) ?? {}; const { items } = data?.getExtensionsByHash ?? {}; extensions.push(...(items ?? [])); diff --git a/src/eventListeners/extension/multiSig.ts b/apps/main-chain/src/eventListeners/extension/multiSig.ts similarity index 91% rename from src/eventListeners/extension/multiSig.ts rename to apps/main-chain/src/eventListeners/extension/multiSig.ts index cafde45d3..859dd14e6 100644 --- a/src/eventListeners/extension/multiSig.ts +++ b/apps/main-chain/src/eventListeners/extension/multiSig.ts @@ -9,7 +9,7 @@ import { handleMultiSigMotionCreated, handleMultiSigMotionExecuted, } from '~handlers/multiSig'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetActiveColonyMultisigsDocument, GetActiveColonyMultisigsQuery, @@ -20,12 +20,12 @@ import { RemoveMultiSigRoleDocument, RemoveMultiSigRoleMutation, RemoveMultiSigRoleMutationVariables, -} from '~graphql'; +} from '@joincolony/graphql'; -import { ContractEventsSignatures } from '~types'; +import { ContractEventsSignatures } from '@joincolony/blocks'; import { notNull } from '~utils'; import { addMultiSigParamsToDB } from '~utils/extensions/multiSig'; -import { output } from '~utils/logger'; +import { output } from '@joincolony/utils'; import { addExtensionEventListener, fetchExistingExtensions } from './index'; import { updateMultiSigInDB } from '~handlers/multiSig/helpers'; @@ -51,7 +51,7 @@ export const handleMultiSigInstalled = async ( export const handleMultiSigUninstalled = async ( colonyAddress: string, ): Promise => { - const multiSigRolesQuery = await query< + const multiSigRolesQuery = await amplifyClient.query< GetAllMultiSigRolesQuery, GetAllMultiSigRolesQueryVariables >(GetAllMultiSigRolesDocument, { @@ -62,7 +62,7 @@ export const handleMultiSigUninstalled = async ( await Promise.all( roleEntries.filter(notNull).map(async (entry) => { - await mutate< + await amplifyClient.mutate< RemoveMultiSigRoleMutation, RemoveMultiSigRoleMutationVariables >(RemoveMultiSigRoleDocument, { @@ -71,7 +71,7 @@ export const handleMultiSigUninstalled = async ( }), ); - const activeMultiSigsQuery = await query< + const activeMultiSigsQuery = await amplifyClient.query< GetActiveColonyMultisigsQuery, GetActiveColonyMultisigsQueryVariables >(GetActiveColonyMultisigsDocument, { diff --git a/src/eventListeners/extension/oneTxPayment.ts b/apps/main-chain/src/eventListeners/extension/oneTxPayment.ts similarity index 89% rename from src/eventListeners/extension/oneTxPayment.ts rename to apps/main-chain/src/eventListeners/extension/oneTxPayment.ts index edc93cb32..c1404904a 100644 --- a/src/eventListeners/extension/oneTxPayment.ts +++ b/apps/main-chain/src/eventListeners/extension/oneTxPayment.ts @@ -1,6 +1,6 @@ import { Extension, getExtensionHash } from '@colony/colony-js'; -import { output } from '~utils'; -import { ContractEventsSignatures } from '~types'; +import { output } from '@joincolony/utils'; +import { ContractEventsSignatures } from '@joincolony/blocks'; import { addExtensionEventListener, fetchExistingExtensions } from '.'; import { handleOneTxPaymentAction } from '~handlers'; diff --git a/src/eventListeners/extension/stagedExpenditure.ts b/apps/main-chain/src/eventListeners/extension/stagedExpenditure.ts similarity index 92% rename from src/eventListeners/extension/stagedExpenditure.ts rename to apps/main-chain/src/eventListeners/extension/stagedExpenditure.ts index 36b5662ed..aac9edcf4 100644 --- a/src/eventListeners/extension/stagedExpenditure.ts +++ b/apps/main-chain/src/eventListeners/extension/stagedExpenditure.ts @@ -4,8 +4,8 @@ import { handleStagedPaymentReleased, } from '~handlers'; -import { ContractEventsSignatures } from '~types'; -import { output } from '~utils'; +import { ContractEventsSignatures } from '@joincolony/blocks'; +import { output } from '@joincolony/utils'; import { addExtensionEventListener, fetchExistingExtensions } from './index'; diff --git a/src/eventListeners/extension/stakedExpenditure.ts b/apps/main-chain/src/eventListeners/extension/stakedExpenditure.ts similarity index 94% rename from src/eventListeners/extension/stakedExpenditure.ts rename to apps/main-chain/src/eventListeners/extension/stakedExpenditure.ts index d41cf7cd5..b6e940ddc 100644 --- a/src/eventListeners/extension/stakedExpenditure.ts +++ b/apps/main-chain/src/eventListeners/extension/stakedExpenditure.ts @@ -8,8 +8,8 @@ import { handleStakeReclaimed, } from '~handlers'; -import { ContractEventsSignatures } from '~types'; -import { output } from '~utils'; +import { ContractEventsSignatures } from '@joincolony/blocks'; +import { output } from '@joincolony/utils'; import { addExtensionEventListener, fetchExistingExtensions } from './index'; diff --git a/src/eventListeners/extension/streamingPayments.ts b/apps/main-chain/src/eventListeners/extension/streamingPayments.ts similarity index 92% rename from src/eventListeners/extension/streamingPayments.ts rename to apps/main-chain/src/eventListeners/extension/streamingPayments.ts index 4edf0d01d..b444f5136 100644 --- a/src/eventListeners/extension/streamingPayments.ts +++ b/apps/main-chain/src/eventListeners/extension/streamingPayments.ts @@ -4,8 +4,8 @@ import { handleStreamingPaymentCreated, } from '~handlers'; -import { ContractEventsSignatures } from '~types'; -import { output } from '~utils'; +import { ContractEventsSignatures } from '@joincolony/blocks'; +import { output } from '@joincolony/utils'; import { addExtensionEventListener, fetchExistingExtensions } from './index'; diff --git a/src/eventListeners/extension/votingReputation.ts b/apps/main-chain/src/eventListeners/extension/votingReputation.ts similarity index 95% rename from src/eventListeners/extension/votingReputation.ts rename to apps/main-chain/src/eventListeners/extension/votingReputation.ts index b8da73034..9be131571 100644 --- a/src/eventListeners/extension/votingReputation.ts +++ b/apps/main-chain/src/eventListeners/extension/votingReputation.ts @@ -10,8 +10,8 @@ import { handleMotionVoteSubmitted, } from '~handlers'; -import { ContractEventsSignatures } from '~types'; -import { output } from '~utils'; +import { ContractEventsSignatures } from '@joincolony/blocks'; +import { output } from '@joincolony/utils'; import { addExtensionEventListener, fetchExistingExtensions } from './index'; diff --git a/src/eventListeners/index.ts b/apps/main-chain/src/eventListeners/index.ts similarity index 64% rename from src/eventListeners/index.ts rename to apps/main-chain/src/eventListeners/index.ts index a4d169dec..57148d63e 100644 --- a/src/eventListeners/index.ts +++ b/apps/main-chain/src/eventListeners/index.ts @@ -1,5 +1,3 @@ -export * from './eventListeners'; -export * from './types'; export * from './colony'; export * from './network'; export * from './extension'; diff --git a/src/eventListeners/network.ts b/apps/main-chain/src/eventListeners/network.ts similarity index 53% rename from src/eventListeners/network.ts rename to apps/main-chain/src/eventListeners/network.ts index a515f04f9..f237c6153 100644 --- a/src/eventListeners/network.ts +++ b/apps/main-chain/src/eventListeners/network.ts @@ -1,16 +1,20 @@ +import { + EventListenerType, + ContractEventsSignatures, + EventHandler, +} from '@joincolony/blocks'; import { utils } from 'ethers'; -import { EventListenerType, addEventListener } from '~eventListeners'; -import { ContractEventsSignatures, EventHandler } from '~types'; +import eventManager from '~eventManager'; export const addNetworkEventListener = ( eventSignature: ContractEventsSignatures, handler: EventHandler, ): void => - addEventListener({ + eventManager.addEventListener({ type: EventListenerType.Network, eventSignature, topics: [utils.id(eventSignature)], - address: process.env.CHAIN_CONTRACT_ADDRESS ?? '', + address: process.env.CHAIN_NETWORK_CONTRACT ?? '', handler, }); diff --git a/apps/main-chain/src/eventListeners/proxyColonies.ts b/apps/main-chain/src/eventListeners/proxyColonies.ts new file mode 100644 index 000000000..6b7212438 --- /dev/null +++ b/apps/main-chain/src/eventListeners/proxyColonies.ts @@ -0,0 +1,22 @@ +import { utils } from 'ethers'; + +import { + ContractEventsSignatures, + EventHandler, + EventListenerType, +} from '@joincolony/blocks'; +import eventManager from '~eventManager'; + +export const addProxyColoniesEventListener = ( + eventSignature: ContractEventsSignatures, + colonyAddress: string, + handler: EventHandler, +): void => + eventManager.addEventListener({ + type: EventListenerType.ProxyColonies, + eventSignature, + topics: [utils.id(eventSignature)], + address: colonyAddress, + colonyAddress, + handler, + }); diff --git a/src/eventListeners/token.ts b/apps/main-chain/src/eventListeners/token.ts similarity index 71% rename from src/eventListeners/token.ts rename to apps/main-chain/src/eventListeners/token.ts index 119ad5367..de3964d01 100644 --- a/src/eventListeners/token.ts +++ b/apps/main-chain/src/eventListeners/token.ts @@ -1,6 +1,5 @@ -import { ContractEventsSignatures, EventHandler } from '~types'; -import { addEventListener, getEventListeners } from '~eventListeners'; -import { EventListenerType, EventListener } from './types'; +import { ContractEventsSignatures, EventHandler , EventListenerType, EventListener } from '@joincolony/blocks'; +import eventManager from '~eventManager'; import { utils } from 'ethers'; import isEqual from 'lodash/isEqual'; @@ -32,12 +31,12 @@ export const addTokenEventListener = ( * As a general rule, this will only *NOT* apply to the token Transfer event * as that's the only one treated differently. */ - const listenerExists = getEventListeners().some((existingListener) => - isEqual(existingListener, tokenListener), - ); + const listenerExists = eventManager + .getEventListeners() + .some((existingListener) => isEqual(existingListener, tokenListener)); if (listenerExists) { return; } - return addEventListener(tokenListener); + return eventManager.addEventListener(tokenListener); }; diff --git a/apps/main-chain/src/eventManager.ts b/apps/main-chain/src/eventManager.ts new file mode 100644 index 000000000..b57b8481f --- /dev/null +++ b/apps/main-chain/src/eventManager.ts @@ -0,0 +1,6 @@ +import { EventManager } from '@joincolony/blocks'; +import rpcProvider from '~provider'; + +const eventManager = new EventManager(rpcProvider); + +export default eventManager; diff --git a/src/handlers/actions/annotateTransaction.ts b/apps/main-chain/src/handlers/actions/annotateTransaction.ts similarity index 87% rename from src/handlers/actions/annotateTransaction.ts rename to apps/main-chain/src/handlers/actions/annotateTransaction.ts index e58bd8ed0..838f85cb4 100644 --- a/src/handlers/actions/annotateTransaction.ts +++ b/apps/main-chain/src/handlers/actions/annotateTransaction.ts @@ -1,4 +1,4 @@ -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetActionIdFromAnnotationDocument, GetActionIdFromAnnotationQuery, @@ -12,15 +12,15 @@ import { UpdateColonyMotionDocument, UpdateColonyMotionMutation, UpdateColonyMotionMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; -import { verbose } from '~utils'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; +import { verbose } from '@joincolony/utils'; export default async ({ args }: ContractEvent): Promise => { const [, txHash] = args; const { data } = - (await query< + (await amplifyClient.query< GetActionIdFromAnnotationQuery, GetActionIdFromAnnotationQueryVariables >(GetActionIdFromAnnotationDocument, { id: txHash })) ?? {}; @@ -45,7 +45,7 @@ export default async ({ args }: ContractEvent): Promise => { if (isMotionObjection) { const { data } = - (await query< + (await amplifyClient.query< GetMotionIdFromActionQuery, GetMotionIdFromActionQueryVariables >(GetMotionIdFromActionDocument, { id: actionId })) ?? {}; @@ -60,7 +60,7 @@ export default async ({ args }: ContractEvent): Promise => { return; } - await mutate< + await amplifyClient.mutate< UpdateColonyMotionMutation, UpdateColonyMotionMutationVariables >(UpdateColonyMotionDocument, { @@ -70,7 +70,7 @@ export default async ({ args }: ContractEvent): Promise => { }, }); } else { - await mutate< + await amplifyClient.mutate< UpdateColonyActionMutation, UpdateColonyActionMutationVariables >(UpdateColonyActionDocument, { diff --git a/src/handlers/actions/colonyUpgrade.ts b/apps/main-chain/src/handlers/actions/colonyUpgrade.ts similarity index 68% rename from src/handlers/actions/colonyUpgrade.ts rename to apps/main-chain/src/handlers/actions/colonyUpgrade.ts index d5bf9b4d8..b819965e8 100644 --- a/src/handlers/actions/colonyUpgrade.ts +++ b/apps/main-chain/src/handlers/actions/colonyUpgrade.ts @@ -1,14 +1,15 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, UpdateColonyDocument, UpdateColonyMutation, UpdateColonyMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { NotificationCategory } from '~types/notifications'; -import { toNumber, verbose, writeActionFromEvent } from '~utils'; +import { toNumber, writeActionFromEvent } from '~utils'; import { sendPermissionsActionNotifications } from '~utils/notifications'; +import { verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress, transactionHash } = event; @@ -18,15 +19,15 @@ export default async (event: ContractEvent): Promise => { verbose('Colony:', colonyAddress, `upgraded to version ${convertedVersion}`); // Update colony version in the db - await mutate( - UpdateColonyDocument, - { - input: { - id: event.contractAddress, - version: convertedVersion, - }, + await amplifyClient.mutate< + UpdateColonyMutation, + UpdateColonyMutationVariables + >(UpdateColonyDocument, { + input: { + id: event.contractAddress, + version: convertedVersion, }, - ); + }); await writeActionFromEvent(event, colonyAddress, { type: ColonyActionType.VersionUpgrade, diff --git a/src/handlers/actions/createDomain.ts b/apps/main-chain/src/handlers/actions/createDomain.ts similarity index 73% rename from src/handlers/actions/createDomain.ts rename to apps/main-chain/src/handlers/actions/createDomain.ts index 175ce9b93..452ff3171 100644 --- a/src/handlers/actions/createDomain.ts +++ b/apps/main-chain/src/handlers/actions/createDomain.ts @@ -1,11 +1,11 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, CreateDomainDocument, CreateDomainMutation, CreateDomainMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { NotificationCategory } from '~types/notifications'; import { toNumber, @@ -35,19 +35,19 @@ export default async (event: ContractEvent): Promise => { blockTag: blockNumber, }); - await mutate( - CreateDomainDocument, - { - input: { - id: databaseDomainId, - colonyId: colonyAddress, - nativeId: nativeDomainId, - isRoot: false, - nativeFundingPotId: toNumber(fundingPotId), - nativeSkillId: skillId.toString(), - }, + await amplifyClient.mutate< + CreateDomainMutation, + CreateDomainMutationVariables + >(CreateDomainDocument, { + input: { + id: databaseDomainId, + colonyId: colonyAddress, + nativeId: nativeDomainId, + isRoot: false, + nativeFundingPotId: toNumber(fundingPotId), + nativeSkillId: skillId.toString(), }, - ); + }); await writeActionFromEvent(event, colonyAddress, { type: ColonyActionType.CreateDomain, diff --git a/src/handlers/actions/editColony.ts b/apps/main-chain/src/handlers/actions/editColony.ts similarity index 88% rename from src/handlers/actions/editColony.ts rename to apps/main-chain/src/handlers/actions/editColony.ts index f5457abf5..8af448e52 100644 --- a/src/handlers/actions/editColony.ts +++ b/apps/main-chain/src/handlers/actions/editColony.ts @@ -1,7 +1,7 @@ import { Id } from '@colony/colony-js'; -import { ColonyActionType } from '~graphql'; -import { ContractEvent } from '~types'; +import { ColonyActionType } from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { NotificationCategory } from '~types/notifications'; import { getDomainDatabaseId, writeActionFromEvent } from '~utils'; import { sendPermissionsActionNotifications } from '~utils/notifications'; diff --git a/src/handlers/actions/editDomain.ts b/apps/main-chain/src/handlers/actions/editDomain.ts similarity index 86% rename from src/handlers/actions/editDomain.ts rename to apps/main-chain/src/handlers/actions/editDomain.ts index 4b46541f1..92fea325d 100644 --- a/src/handlers/actions/editDomain.ts +++ b/apps/main-chain/src/handlers/actions/editDomain.ts @@ -1,9 +1,9 @@ -import { ColonyActionType } from '~graphql'; -import { ContractEvent, ContractEventsSignatures } from '~types'; +import { ColonyActionType } from '@joincolony/graphql'; +import { verbose } from '@joincolony/utils'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; import { NotificationCategory } from '~types/notifications'; import { toNumber, - verbose, writeActionFromEvent, getDomainDatabaseId, transactionHasEvent, diff --git a/src/handlers/actions/emitDomainReputation.ts b/apps/main-chain/src/handlers/actions/emitDomainReputation.ts similarity index 83% rename from src/handlers/actions/emitDomainReputation.ts rename to apps/main-chain/src/handlers/actions/emitDomainReputation.ts index dc97f75bb..e151e7caf 100644 --- a/src/handlers/actions/emitDomainReputation.ts +++ b/apps/main-chain/src/handlers/actions/emitDomainReputation.ts @@ -1,21 +1,17 @@ import { BigNumber } from 'ethers'; -import { ContractEvent, ContractEventsSignatures } from '~types'; -import { - writeActionFromEvent, - verbose, - notNull, - transactionHasEvent, -} from '~utils'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; +import { writeActionFromEvent, notNull, transactionHasEvent } from '~utils'; import { ColonyActionType, GetColonyDocument, GetColonyQuery, GetColonyQueryVariables, -} from '~graphql'; -import { query } from '~amplifyClient'; +} from '@joincolony/graphql'; +import amplifyClient from '~amplifyClient'; import { sendPermissionsActionNotifications } from '~utils/notifications'; import { NotificationCategory } from '~types/notifications'; +import { verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress, transactionHash } = event; @@ -56,10 +52,13 @@ export default async (event: ContractEvent): Promise => { */ do { const { data } = - (await query(GetColonyDocument, { - id: colonyAddress, - nextToken, - })) ?? {}; + (await amplifyClient.query( + GetColonyDocument, + { + id: colonyAddress, + nextToken, + }, + )) ?? {}; domain = data?.getColony?.domains?.items .filter(notNull) .find( diff --git a/src/handlers/actions/index.ts b/apps/main-chain/src/handlers/actions/index.ts similarity index 100% rename from src/handlers/actions/index.ts rename to apps/main-chain/src/handlers/actions/index.ts diff --git a/src/handlers/actions/makeArbitraryTransaction.ts b/apps/main-chain/src/handlers/actions/makeArbitraryTransaction.ts similarity index 90% rename from src/handlers/actions/makeArbitraryTransaction.ts rename to apps/main-chain/src/handlers/actions/makeArbitraryTransaction.ts index 9c4400885..40335793e 100644 --- a/src/handlers/actions/makeArbitraryTransaction.ts +++ b/apps/main-chain/src/handlers/actions/makeArbitraryTransaction.ts @@ -8,14 +8,14 @@ import { UpdateColonyActionDocument, UpdateColonyActionMutation, UpdateColonyActionMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { ArbitraryTransaction, getDomainDatabaseId, writeActionFromEvent, } from '~utils'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress, transactionHash } = event; @@ -30,7 +30,7 @@ export default async (event: ContractEvent): Promise => { encodedFunction, }; const { data } = - (await query< + (await amplifyClient.query< GetColonyArbitraryTransactionActionQuery, GetColonyArbitraryTransactionActionQueryVariables >(GetColonyArbitraryTransactionActionDocument, { transactionHash })) ?? {}; @@ -39,7 +39,7 @@ export default async (event: ContractEvent): Promise => { if (data?.getColonyAction?.id) { const prevArbitraryTransactions = data.getColonyAction.arbitraryTransactions ?? []; - await mutate< + await amplifyClient.mutate< UpdateColonyActionMutation, UpdateColonyActionMutationVariables >(UpdateColonyActionDocument, { diff --git a/src/handlers/actions/managePermissions.ts b/apps/main-chain/src/handlers/actions/managePermissions.ts similarity index 90% rename from src/handlers/actions/managePermissions.ts rename to apps/main-chain/src/handlers/actions/managePermissions.ts index 1c1f52d33..193315e96 100644 --- a/src/handlers/actions/managePermissions.ts +++ b/apps/main-chain/src/handlers/actions/managePermissions.ts @@ -1,7 +1,11 @@ import { BigNumber } from 'ethers'; import { Id } from '@colony/colony-js'; -import { mutate, query } from '~amplifyClient'; -import { ContractEventsSignatures, EventHandler } from '~types'; +import amplifyClient from '~amplifyClient'; +import { + ContractEventsSignatures, + EventHandler, + ExtensionEventListener, +} from '@joincolony/blocks'; import { getColonyRolesDatabaseId, getDomainDatabaseId, @@ -9,7 +13,6 @@ import { createColonyHistoricRoleDatabaseEntry, getAllRoleEventsFromTransaction, getRolesMapFromEvents, - verbose, writeActionFromEvent, isAddressExtension, getAllMultiSigRoleEventsFromTransaction, @@ -25,12 +28,12 @@ import { UpdateColonyRoleMutationVariables, UpdateColonyRoleDocument, ColonyActionType, -} from '~graphql'; -import provider from '~provider'; +} from '@joincolony/graphql'; +import rpcProvider from '~provider'; import { updateColonyContributor } from '~utils/contributors'; -import { ExtensionEventListener } from '~eventListeners'; import { sendPermissionsActionNotifications } from '~utils/notifications'; import { NotificationCategory } from '~types/notifications'; +import { verbose } from '@joincolony/utils'; export const handleManagePermissionsAction: EventHandler = async ( event, @@ -83,7 +86,7 @@ export const handleManagePermissionsAction: EventHandler = async ( __typename, ...existingRoles } = ( - await query( + await amplifyClient.query( GetColonyRoleDocument, { id }, ) @@ -110,9 +113,9 @@ export const handleManagePermissionsAction: EventHandler = async ( // We can get the msg.sender from the transaction receipt. if (!agent) { - const { from = '' } = await provider.getTransactionReceipt( - transactionHash, - ); + const { from = '' } = await rpcProvider + .getProviderInstance() + .getTransactionReceipt(transactionHash); agent = from; } const allRoleEventsUpdates = isMultiSig @@ -130,16 +133,16 @@ export const handleManagePermissionsAction: EventHandler = async ( ? getMultiSigRolesMapFromEvents(allRoleEventsUpdates, false) : getRolesMapFromEvents(allRoleEventsUpdates, false); - await mutate( - UpdateColonyRoleDocument, - { - input: { - id, - latestBlock: blockNumber, - ...rolesFromAllUpdateEvents, - }, + await amplifyClient.mutate< + UpdateColonyRoleMutation, + UpdateColonyRoleMutationVariables + >(UpdateColonyRoleDocument, { + input: { + id, + latestBlock: blockNumber, + ...rolesFromAllUpdateEvents, }, - ); + }); verbose( `Update the${ diff --git a/src/handlers/actions/mintTokens.ts b/apps/main-chain/src/handlers/actions/mintTokens.ts similarity index 89% rename from src/handlers/actions/mintTokens.ts rename to apps/main-chain/src/handlers/actions/mintTokens.ts index 321a30be7..33b206106 100644 --- a/src/handlers/actions/mintTokens.ts +++ b/apps/main-chain/src/handlers/actions/mintTokens.ts @@ -1,13 +1,13 @@ import { Id } from '@colony/colony-js'; -import { ColonyActionType } from '~graphql'; -import { ContractEvent } from '~types'; +import { ColonyActionType } from '@joincolony/graphql'; +import { verbose } from '@joincolony/utils'; +import { ContractEvent } from '@joincolony/blocks'; import { NotificationCategory } from '~types/notifications'; import { writeActionFromEvent, getColonyTokenAddress, getDomainDatabaseId, - verbose, } from '~utils'; import { sendPermissionsActionNotifications } from '~utils/notifications'; diff --git a/src/handlers/actions/moveFunds.ts b/apps/main-chain/src/handlers/actions/moveFunds.ts similarity index 92% rename from src/handlers/actions/moveFunds.ts rename to apps/main-chain/src/handlers/actions/moveFunds.ts index 6274afcd3..45de520d1 100644 --- a/src/handlers/actions/moveFunds.ts +++ b/apps/main-chain/src/handlers/actions/moveFunds.ts @@ -1,6 +1,6 @@ import { BigNumber } from 'ethers'; -import { ContractEvent, ContractEventsSignatures } from '~types'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; import { toNumber, writeActionFromEvent, @@ -10,7 +10,6 @@ import { getUpdatedExpenditureBalances, transactionHasEvent, getExpenditureByFundingPot, - verbose, } from '~utils'; import { ColonyActionType, @@ -20,13 +19,14 @@ import { UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { mutate } from '~amplifyClient'; +} from '@joincolony/graphql'; +import amplifyClient from '~amplifyClient'; import { sendExpenditureUpdateNotifications, sendPermissionsActionNotifications, } from '~utils/notifications'; import { NotificationCategory } from '~types/notifications'; +import { verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { @@ -140,15 +140,15 @@ const updateExpenditureBalances = async ({ amount, ); - await mutate( - UpdateExpenditureDocument, - { - input: { - id: expenditure.id, - balances: updatedBalances, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: expenditure.id, + balances: updatedBalances, }, - ); + }); if ( !isPartOfOneTxPayment && diff --git a/src/handlers/actions/oneTxPayment.ts b/apps/main-chain/src/handlers/actions/oneTxPayment.ts similarity index 93% rename from src/handlers/actions/oneTxPayment.ts rename to apps/main-chain/src/handlers/actions/oneTxPayment.ts index 0071d1d3b..17bdbc2ba 100644 --- a/src/handlers/actions/oneTxPayment.ts +++ b/apps/main-chain/src/handlers/actions/oneTxPayment.ts @@ -1,14 +1,14 @@ import { AnyColonyClient } from '@colony/colony-js'; import { BigNumber, utils } from 'ethers'; -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, GetColonyExtensionDocument, GetColonyExtensionQuery, GetColonyExtensionQueryVariables, -} from '~graphql'; -import provider from '~provider'; -import { ContractEvent, ContractEventsSignatures } from '~types'; +} from '@joincolony/graphql'; +import rpcProvider from '~provider'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; import { NotificationCategory } from '~types/notifications'; import { getCachedColonyClient, @@ -66,10 +66,10 @@ export default async (oneTxPaymentEvent: ContractEvent): Promise => { const { contractAddress: extensionAddress } = oneTxPaymentEvent; const { data } = - (await query( - GetColonyExtensionDocument, - { id: extensionAddress }, - )) ?? {}; + (await amplifyClient.query< + GetColonyExtensionQuery, + GetColonyExtensionQueryVariables + >(GetColonyExtensionDocument, { id: extensionAddress })) ?? {}; const { colonyId: colonyAddress = '', version } = data?.getColonyExtension ?? {}; @@ -123,7 +123,9 @@ const handlerV1ToV5 = async ( ): Promise => { const { blockNumber } = event; const [initiatorAddress, paymentOrExpenditureId, nPayments] = event.args; - const receipt = await provider.getTransactionReceipt(event.transactionHash); + const receipt = await rpcProvider + .getProviderInstance() + .getTransactionReceipt(event.transactionHash); if ((nPayments as BigNumber).eq(1)) { const [payoutClaimedLog] = receipt.logs.filter( @@ -228,7 +230,9 @@ const handlerV6 = async ( ): Promise => { const { blockNumber, transactionHash } = event; const [initiatorAddress, expenditureId] = event.args; - const receipt = await provider.getTransactionReceipt(event.transactionHash); + const receipt = await rpcProvider + .getProviderInstance() + .getTransactionReceipt(event.transactionHash); // multiple OneTxPayments use expenditures at the contract level const expenditure: Expenditure = await colonyClient.getExpenditure( diff --git a/src/handlers/actions/unlockToken.ts b/apps/main-chain/src/handlers/actions/unlockToken.ts similarity index 92% rename from src/handlers/actions/unlockToken.ts rename to apps/main-chain/src/handlers/actions/unlockToken.ts index 88e9ffd16..21a864b43 100644 --- a/src/handlers/actions/unlockToken.ts +++ b/apps/main-chain/src/handlers/actions/unlockToken.ts @@ -1,7 +1,7 @@ import { Id } from '@colony/colony-js'; -import { ColonyActionType } from '~graphql'; -import { ContractEvent } from '~types'; +import { ColonyActionType } from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { NotificationCategory } from '~types/notifications'; import { writeActionFromEvent, diff --git a/src/handlers/colonies/colonyAdded.ts b/apps/main-chain/src/handlers/colonies/colonyAdded.ts similarity index 81% rename from src/handlers/colonies/colonyAdded.ts rename to apps/main-chain/src/handlers/colonies/colonyAdded.ts index 90e745338..d74678772 100644 --- a/src/handlers/colonies/colonyAdded.ts +++ b/apps/main-chain/src/handlers/colonies/colonyAdded.ts @@ -1,27 +1,28 @@ import { utils } from 'ethers'; -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { setupListenersForColony } from '~eventListeners'; import { UpdateColonyContributorDocument, UpdateColonyContributorMutation, UpdateColonyContributorMutationVariables, GetColonyMetadataDocument, -} from '~graphql'; +} from '@joincolony/graphql'; import { coloniesSet } from '~stats'; -import { ContractEvent, ContractEventsSignatures } from '~types'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; import { - output, - updateStats, createColonyFounderInitialRoleEntry, getAllRoleEventsFromTransaction, } from '~utils'; +import statsManager from '~statsManager'; import { getColonyContributorId } from '~utils/contributors'; import { tryFetchGraphqlQuery } from '~utils/graphql'; import { createUniqueColony } from './helpers/createUniqueColony'; +import { output } from '@joincolony/utils'; +import { getColonyCreationSalt } from './helpers/validateCreationSalt'; export default async (event: ContractEvent): Promise => { - const { transactionHash, args } = event; + const { transactionHash, args, blockNumber } = event; const { colonyAddress, token: tokenAddress } = args ?? {}; /* @@ -50,8 +51,9 @@ export default async (event: ContractEvent): Promise => { /* * Add it to the Set */ + // @NOTE seems to not be working, is it borken on master too? coloniesSet.add(JSON.stringify({ colonyAddress, tokenAddress })); - await updateStats({ trackedColonies: coloniesSet.size }); + await statsManager.updateStats({ trackedColonies: coloniesSet.size }); output( 'Found new Colony:', @@ -69,13 +71,22 @@ export default async (event: ContractEvent): Promise => { 0, ContractEventsSignatures.ColonyRoleSet.indexOf('('), ); - const { args: { user: colonyFounderAddress }, } = events.find((event) => event?.name === ColonyRoleSetEventName) ?? { args: { user: '' }, }; + let generatedColonySalt = ''; + + // We don't really want to block colony creation if there's something wrong with salt calculation + try { + generatedColonySalt = + (await getColonyCreationSalt(blockNumber, transactionHash)) || ''; + } catch (error) { + // Most likely there was an error retrieving this transaction + } + try { /* * Create the colony entry in the database @@ -85,6 +96,10 @@ export default async (event: ContractEvent): Promise => { tokenAddress: utils.getAddress(tokenAddress), transactionHash, initiatorAddress: utils.getAddress(colonyFounderAddress), + colonyCreateEvent: { + blockNumber, + creationSalt: generatedColonySalt, + }, }); } catch (error) { console.error(error); @@ -119,7 +134,7 @@ export default async (event: ContractEvent): Promise => { * check whether the contributor has already been created in the front end, and perform an update or a create mutation * accordingly. */ - await mutate< + await amplifyClient.mutate< UpdateColonyContributorMutation, UpdateColonyContributorMutationVariables >(UpdateColonyContributorDocument, { diff --git a/src/handlers/colonies/colonyFundsClaimed.ts b/apps/main-chain/src/handlers/colonies/colonyFundsClaimed.ts similarity index 90% rename from src/handlers/colonies/colonyFundsClaimed.ts rename to apps/main-chain/src/handlers/colonies/colonyFundsClaimed.ts index 4d41380a6..fc7809ae6 100644 --- a/src/handlers/colonies/colonyFundsClaimed.ts +++ b/apps/main-chain/src/handlers/colonies/colonyFundsClaimed.ts @@ -1,8 +1,8 @@ import { constants } from 'ethers'; -import { mutate, query } from '~amplifyClient'; -import { ContractEvent } from '~types'; -import { output, saveEvent, notNull } from '~utils'; +import amplifyClient from '~amplifyClient'; +import { ContractEvent } from '@joincolony/blocks'; +import { saveEvent, notNull } from '~utils'; import { UpdateColonyFundsClaimDocument, UpdateColonyFundsClaimMutation, @@ -10,8 +10,9 @@ import { GetColonyUnclaimedFundsDocument, GetColonyUnclaimedFundsQuery, GetColonyUnclaimedFundsQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import { sendFundsClaimedNotifications } from '~utils/notifications'; +import { output } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress, blockNumber } = event; @@ -24,7 +25,7 @@ export default async (event: ContractEvent): Promise => { if (tokenAddress !== constants.AddressZero) { const { items: unclaimedFunds } = ( - await query< + await amplifyClient.query< GetColonyUnclaimedFundsQuery, GetColonyUnclaimedFundsQueryVariables >(GetColonyUnclaimedFundsDocument, { @@ -55,7 +56,7 @@ export default async (event: ContractEvent): Promise => { if (colonyHasUnclaimedFunds) { await Promise.all( unclaimedFunds.filter(notNull).map(async ({ id, token, amount }) => { - await mutate< + await amplifyClient.mutate< UpdateColonyFundsClaimMutation, UpdateColonyFundsClaimMutationVariables >(UpdateColonyFundsClaimDocument, { diff --git a/src/handlers/colonies/colonyVersionAdded.ts b/apps/main-chain/src/handlers/colonies/colonyVersionAdded.ts similarity index 83% rename from src/handlers/colonies/colonyVersionAdded.ts rename to apps/main-chain/src/handlers/colonies/colonyVersionAdded.ts index 4e6398403..4c8146386 100644 --- a/src/handlers/colonies/colonyVersionAdded.ts +++ b/apps/main-chain/src/handlers/colonies/colonyVersionAdded.ts @@ -1,6 +1,7 @@ +import { verbose } from '@joincolony/utils'; import { COLONY_CURRENT_VERSION_KEY } from '~constants'; -import { ContractEvent } from '~types'; -import { toNumber, verbose } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; +import { toNumber } from '~utils'; import { updateCurrentVersion } from '~utils/currentVersion'; import { sendColonyVersionAddedNotifications } from '~utils/notifications'; diff --git a/src/handlers/colonies/helpers/createUniqueColony.ts b/apps/main-chain/src/handlers/colonies/helpers/createUniqueColony.ts similarity index 82% rename from src/handlers/colonies/helpers/createUniqueColony.ts rename to apps/main-chain/src/handlers/colonies/helpers/createUniqueColony.ts index f6b09a162..4de52091e 100644 --- a/src/handlers/colonies/helpers/createUniqueColony.ts +++ b/apps/main-chain/src/handlers/colonies/helpers/createUniqueColony.ts @@ -1,7 +1,7 @@ import { Id } from '@colony/colony-js'; import { utils } from 'ethers'; import { randomUUID } from 'crypto'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyType, CreateColonyDocument, @@ -38,8 +38,9 @@ import { GetTokenFromEverywhereDocument, GetTokenFromEverywhereQuery, GetTokenFromEverywhereQueryVariables, -} from '~graphql'; -import { getChainId } from '~provider'; + ColonyCreateEvent, +} from '@joincolony/graphql'; +import rpcProvider from '~provider'; import { getCachedColonyClient } from '~utils/clients/colony'; import { RESERVED_ROUTES } from '~constants'; @@ -48,11 +49,13 @@ export const createUniqueColony = async ({ tokenAddress, transactionHash, initiatorAddress, + colonyCreateEvent, }: { colonyAddress: string; tokenAddress: string; transactionHash: string; initiatorAddress: string; + colonyCreateEvent: ColonyCreateEvent; }): Promise => { /* * Validate Colony and Token addresses @@ -85,9 +88,12 @@ export const createUniqueColony = async ({ * Via it's address */ const colonyQuery = - (await query(GetColonyDocument, { - id: checksummedAddress, - })) ?? {}; + (await amplifyClient.query( + GetColonyDocument, + { + id: checksummedAddress, + }, + )) ?? {}; if (!colonyQuery.data) { throw new Error('Could not fetch colony data'); @@ -106,12 +112,12 @@ export const createUniqueColony = async ({ * Get metadata, determine if it's the correct one, and if we should proceed */ const metadataQuery = - (await query( - GetColonyMetadataDocument, - { - id: `etherealcolonymetadata-${transactionHash}`, - }, - )) ?? {}; + (await amplifyClient.query< + GetColonyMetadataQuery, + GetColonyMetadataQueryVariables + >(GetColonyMetadataDocument, { + id: `etherealcolonymetadata-${transactionHash}`, + })) ?? {}; if (!metadataQuery.data) { throw new Error('Could not fetch metadata data'); @@ -138,10 +144,10 @@ export const createUniqueColony = async ({ * Ensure the colony name doesn't already exist in the database */ const colonyNameQuery = - (await query( - GetColonyByNameDocument, - { name: colonyName }, - )) ?? {}; + (await amplifyClient.query< + GetColonyByNameQuery, + GetColonyByNameQueryVariables + >(GetColonyByNameDocument, { name: colonyName })) ?? {}; if (!colonyNameQuery) { throw new Error(); @@ -174,7 +180,7 @@ export const createUniqueColony = async ({ /* * Create token in the database */ - const tokenQuery = await query< + const tokenQuery = await amplifyClient.query< GetTokenFromEverywhereQuery, GetTokenFromEverywhereQueryVariables >(GetTokenFromEverywhereDocument, { @@ -199,7 +205,7 @@ export const createUniqueColony = async ({ const memberInviteCode = randomUUID(); - const chainId = getChainId(); + const chainId = rpcProvider.getChainId(); const version = await colonyClient.version(); let isTokenLocked; @@ -207,7 +213,7 @@ export const createUniqueColony = async ({ isTokenLocked = await colonyClient.tokenClient.locked(); } - const colonyMutation = await mutate< + const colonyMutation = await amplifyClient.mutate< CreateColonyMutation, CreateColonyMutationVariables >(CreateColonyDocument, { @@ -219,6 +225,7 @@ export const createUniqueColony = async ({ chainMetadata: { chainId, }, + colonyCreateEvent, version: version.toNumber(), status: { nativeToken: { @@ -243,7 +250,7 @@ export const createUniqueColony = async ({ /* * Set the actual colony metadata object */ - const colonyMetadataMutation = await mutate< + const colonyMetadataMutation = await amplifyClient.mutate< CreateColonyMetadataMutation, CreateColonyMetadataMutationVariables >(CreateColonyMetadataDocument, { @@ -262,7 +269,7 @@ export const createUniqueColony = async ({ /* * Delete the ethereal metadata entry */ - await mutate< + await amplifyClient.mutate< DeleteColonyMetadataMutation, DeleteColonyMetadataMutationVariables >(DeleteColonyMetadataDocument, { @@ -272,7 +279,7 @@ export const createUniqueColony = async ({ /* * Create the member invite */ - const inviteMutation = await mutate< + const inviteMutation = await amplifyClient.mutate< CreateColonyMemberInviteMutation, CreateColonyMemberInviteMutationVariables >(CreateColonyMemberInviteDocument, { @@ -290,20 +297,20 @@ export const createUniqueColony = async ({ /* * Add token to the colony's token list */ - await mutate( - CreateColonyTokensDocument, - { - input: { - colonyID: checksummedAddress, - tokenID: checksummedToken, - }, + await amplifyClient.mutate< + CreateColonyTokensMutation, + CreateColonyTokensMutationVariables + >(CreateColonyTokensDocument, { + input: { + colonyID: checksummedAddress, + tokenID: checksummedToken, }, - ); + }); /* * Create the root domain metadata */ - await mutate< + await amplifyClient.mutate< CreateDomainMetadataMutation, CreateDomainMetadataMutationVariables >(CreateDomainMetadataDocument, { @@ -320,17 +327,17 @@ export const createUniqueColony = async ({ /* * Create the root domain */ - await mutate( - CreateDomainDocument, - { - input: { - id: `${checksummedAddress}_${Id.RootDomain}`, - colonyId: checksummedAddress, - isRoot: true, - nativeId: Id.RootDomain, - nativeSkillId: skillId.toString(), - nativeFundingPotId: fundingPotId.toNumber(), - }, + await amplifyClient.mutate< + CreateDomainMutation, + CreateDomainMutationVariables + >(CreateDomainDocument, { + input: { + id: `${checksummedAddress}_${Id.RootDomain}`, + colonyId: checksummedAddress, + isRoot: true, + nativeId: Id.RootDomain, + nativeSkillId: skillId.toString(), + nativeFundingPotId: fundingPotId.toNumber(), }, - ); + }); }; diff --git a/apps/main-chain/src/handlers/colonies/helpers/validateCreationSalt.ts b/apps/main-chain/src/handlers/colonies/helpers/validateCreationSalt.ts new file mode 100644 index 000000000..b5aed01f4 --- /dev/null +++ b/apps/main-chain/src/handlers/colonies/helpers/validateCreationSalt.ts @@ -0,0 +1,71 @@ +import { verbose } from '@joincolony/utils'; +import { utils } from 'ethers'; +import rpcProvider from '~provider'; +import networkClient from '~networkClient'; +import { getTransactionSignerAddress } from '~utils/transactions'; + +const ContractCreationEvents = { + Create3ProxyContractCreation: 'Create3ProxyContractCreation(address,bytes32)', +}; + +export const getColonyCreationSalt = async ( + blockNumber: number, + transactionHash: string, +): Promise => { + const create3ProxyLogs = await rpcProvider.getProviderInstance().getLogs({ + fromBlock: blockNumber, + toBlock: blockNumber, + topics: [utils.id(ContractCreationEvents.Create3ProxyContractCreation)], + }); + + if (create3ProxyLogs.length === 0) { + verbose(`Couldn't fetch colony proxy contract creation events`); + return null; + } + + const create3ProxySalt = create3ProxyLogs[0].topics[2]; + + if (!create3ProxySalt) { + verbose( + `The Create3ProxyContractCreation log doesn't have the salt data: ${JSON.stringify(create3ProxyLogs[0], null, 2)}`, + ); + return null; + } + + const transaction = await rpcProvider + .getProviderInstance() + .getTransaction(transactionHash); + + const signerAddress = getTransactionSignerAddress(transaction); + + if (!signerAddress) { + verbose( + `Couldn't find the signer for transaction with txHash: ${transactionHash}`, + ); + return null; + } + + const generatedColonySalt = await networkClient.getColonyCreationSalt({ + blockTag: blockNumber, + from: signerAddress, + }); + + const guardedSalt = utils.keccak256( + utils.defaultAbiCoder.encode( + ['bytes32', 'bytes32'], + [ + utils.hexZeroPad(networkClient.address, 32), + generatedColonySalt, // Actual salt + ], + ), + ); + + if (guardedSalt !== create3ProxySalt) { + verbose( + `The network salt doesn't match the salt used when creating the colony!`, + ); + return null; + } + + return generatedColonySalt; +}; diff --git a/src/handlers/colonies/index.ts b/apps/main-chain/src/handlers/colonies/index.ts similarity index 100% rename from src/handlers/colonies/index.ts rename to apps/main-chain/src/handlers/colonies/index.ts diff --git a/src/handlers/colonies/transfer.ts b/apps/main-chain/src/handlers/colonies/transfer.ts similarity index 90% rename from src/handlers/colonies/transfer.ts rename to apps/main-chain/src/handlers/colonies/transfer.ts index ee96ff568..ce58c3d04 100644 --- a/src/handlers/colonies/transfer.ts +++ b/apps/main-chain/src/handlers/colonies/transfer.ts @@ -1,7 +1,7 @@ -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import networkClient from '~networkClient'; -import { getChainId } from '~provider'; -import { ContractEvent } from '~types'; +import rpcProvider from '~provider'; +import { ContractEvent } from '@joincolony/blocks'; import { GetColonyUnclaimedFundDocument, GetColonyUnclaimedFundQuery, @@ -9,12 +9,13 @@ import { GetTokenFromEverywhereDocument, GetTokenFromEverywhereQuery, GetTokenFromEverywhereQueryVariables, -} from '~graphql'; -import { output, createFundsClaim } from '~utils'; +} from '@joincolony/graphql'; +import { createFundsClaim } from '~utils'; +import { output } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: tokenAddress, logIndex, transactionHash } = event; - const chainId = getChainId(); + const chainId = rpcProvider.getChainId(); /* * @NOTE Take the values from the "array" rather than from the named properties * This is because our native tokens differ in abi from ERC20 or SAI tokens @@ -62,7 +63,7 @@ export default async (event: ContractEvent): Promise => { if (process.env.NODE_ENV !== 'production') { const { id: existingClaimId } = ( - await query< + await amplifyClient.query< GetColonyUnclaimedFundQuery, GetColonyUnclaimedFundQueryVariables >(GetColonyUnclaimedFundDocument, { claimId }) @@ -89,7 +90,7 @@ export default async (event: ContractEvent): Promise => { * gets added to the DB if it doesn't already exist */ try { - const dbTokenQuery = await query< + const dbTokenQuery = await amplifyClient.query< GetTokenFromEverywhereQuery, GetTokenFromEverywhereQueryVariables >(GetTokenFromEverywhereDocument, { diff --git a/src/handlers/expenditures/expenditureAdded.ts b/apps/main-chain/src/handlers/expenditures/expenditureAdded.ts similarity index 74% rename from src/handlers/expenditures/expenditureAdded.ts rename to apps/main-chain/src/handlers/expenditures/expenditureAdded.ts index 8d491b5c8..63d2a3865 100644 --- a/src/handlers/expenditures/expenditureAdded.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureAdded.ts @@ -1,4 +1,4 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, CreateExpenditureDocument, @@ -7,20 +7,19 @@ import { ExpenditureStatus, ExpenditureType, NotificationType, -} from '~graphql'; -import { ContractEvent, ContractEventsSignatures } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; import { transactionHasEvent, getDomainDatabaseId, getExpenditureDatabaseId, - output, toNumber, - verbose, writeActionFromEvent, } from '~utils'; import { getExpenditure } from './helpers'; import { sendExpenditureUpdateNotifications } from '~utils/notifications'; +import { output, verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress, transactionHash } = event; @@ -53,24 +52,24 @@ export default async (event: ContractEvent): Promise => { convertedExpenditureId, ); - await mutate( - CreateExpenditureDocument, - { - input: { - id: databaseId, - type: ExpenditureType.PaymentBuilder, - colonyId: colonyAddress, - nativeId: convertedExpenditureId, - ownerAddress, - status: ExpenditureStatus.Draft, - slots: [], - nativeFundingPotId: fundingPotId, - nativeDomainId: domainId, - isStaked: false, - balances: [], - }, + await amplifyClient.mutate< + CreateExpenditureMutation, + CreateExpenditureMutationVariables + >(CreateExpenditureDocument, { + input: { + id: databaseId, + type: ExpenditureType.PaymentBuilder, + colonyId: colonyAddress, + nativeId: convertedExpenditureId, + ownerAddress, + status: ExpenditureStatus.Draft, + slots: [], + nativeFundingPotId: fundingPotId, + nativeDomainId: domainId, + isStaked: false, + balances: [], }, - ); + }); /** * @NOTE: Only create a `CREATE_EXPENDITURE` action if the expenditure was not created as part of a OneTxPayment diff --git a/src/handlers/expenditures/expenditureCancelled.ts b/apps/main-chain/src/handlers/expenditures/expenditureCancelled.ts similarity index 77% rename from src/handlers/expenditures/expenditureCancelled.ts rename to apps/main-chain/src/handlers/expenditures/expenditureCancelled.ts index 26b950eee..371d28dc7 100644 --- a/src/handlers/expenditures/expenditureCancelled.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureCancelled.ts @@ -1,11 +1,9 @@ -import { EventHandler } from '~types'; import { getExpenditureDatabaseId, toNumber, - verbose, writeActionFromEvent, } from '~utils'; -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, ExpenditureStatus, @@ -13,9 +11,10 @@ import { UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { EventListenerType } from '~eventListeners'; +} from '@joincolony/graphql'; +import { EventListenerType, EventHandler } from '@joincolony/blocks'; import { sendExpenditureUpdateNotifications } from '~utils/notifications'; +import { verbose } from '@joincolony/utils'; export const handleExpenditureCancelled: EventHandler = async ( event, @@ -45,15 +44,15 @@ export const handleExpenditureCancelled: EventHandler = async ( colonyAddress, ); - await mutate( - UpdateExpenditureDocument, - { - input: { - id: databaseId, - status: ExpenditureStatus.Cancelled, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: databaseId, + status: ExpenditureStatus.Cancelled, }, - ); + }); await writeActionFromEvent(event, colonyAddress, { type: ColonyActionType.CancelExpenditure, diff --git a/src/handlers/expenditures/expenditureClaimDelaySet.ts b/apps/main-chain/src/handlers/expenditures/expenditureClaimDelaySet.ts similarity index 72% rename from src/handlers/expenditures/expenditureClaimDelaySet.ts rename to apps/main-chain/src/handlers/expenditures/expenditureClaimDelaySet.ts index ff0f111ba..eefee4c74 100644 --- a/src/handlers/expenditures/expenditureClaimDelaySet.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureClaimDelaySet.ts @@ -1,14 +1,15 @@ import { BigNumber } from 'ethers'; -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; -import { getExpenditureDatabaseId, output, toNumber, verbose } from '~utils'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; +import { getExpenditureDatabaseId, toNumber } from '~utils'; import { getExpenditureFromDB, getUpdatedExpenditureSlots } from './helpers'; +import { output, verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress } = event; @@ -42,13 +43,13 @@ export default async (event: ContractEvent): Promise => { `Claim delay set for expenditure with ID ${convertedExpenditureId} in colony ${colonyAddress}`, ); - await mutate( - UpdateExpenditureDocument, - { - input: { - id: databaseId, - slots: updatedSlots, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: databaseId, + slots: updatedSlots, }, - ); + }); }; diff --git a/src/handlers/expenditures/expenditureFinalized.ts b/apps/main-chain/src/handlers/expenditures/expenditureFinalized.ts similarity index 76% rename from src/handlers/expenditures/expenditureFinalized.ts rename to apps/main-chain/src/handlers/expenditures/expenditureFinalized.ts index 8ee3c7b98..f31c95f32 100644 --- a/src/handlers/expenditures/expenditureFinalized.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureFinalized.ts @@ -1,4 +1,4 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, ExpenditureStatus, @@ -6,16 +6,16 @@ import { UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { ContractEvent, ContractEventsSignatures } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; import { getExpenditureDatabaseId, toNumber, transactionHasEvent, - verbose, writeActionFromEvent, } from '~utils'; import { sendExpenditureUpdateNotifications } from '~utils/notifications'; +import { verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress } = event; @@ -34,16 +34,16 @@ export default async (event: ContractEvent): Promise => { colonyAddress, ); - await mutate( - UpdateExpenditureDocument, - { - input: { - id: databaseId, - status: ExpenditureStatus.Finalized, - finalizedAt: event.timestamp, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: databaseId, + status: ExpenditureStatus.Finalized, + finalizedAt: event.timestamp, }, - ); + }); /** * @NOTE: Only create a `FINALIZE_EXPENDITURE` action if the expenditure was not created as part of a OneTxPayment diff --git a/src/handlers/expenditures/expenditureGlobalClaimDelaySet.ts b/apps/main-chain/src/handlers/expenditures/expenditureGlobalClaimDelaySet.ts similarity index 51% rename from src/handlers/expenditures/expenditureGlobalClaimDelaySet.ts rename to apps/main-chain/src/handlers/expenditures/expenditureGlobalClaimDelaySet.ts index 267eed5ec..1cfb806b5 100644 --- a/src/handlers/expenditures/expenditureGlobalClaimDelaySet.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureGlobalClaimDelaySet.ts @@ -1,24 +1,24 @@ import { BigNumber } from 'ethers'; -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { UpdateColonyDocument, UpdateColonyMutation, UpdateColonyMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress } = event; const { globalClaimDelay } = event.args; const convertedGlobalClaimDelay = BigNumber.from(globalClaimDelay).toString(); - await mutate( - UpdateColonyDocument, - { - input: { - id: colonyAddress, - expendituresGlobalClaimDelay: convertedGlobalClaimDelay, - }, + await amplifyClient.mutate< + UpdateColonyMutation, + UpdateColonyMutationVariables + >(UpdateColonyDocument, { + input: { + id: colonyAddress, + expendituresGlobalClaimDelay: convertedGlobalClaimDelay, }, - ); + }); }; diff --git a/src/handlers/expenditures/expenditureLocked.ts b/apps/main-chain/src/handlers/expenditures/expenditureLocked.ts similarity index 78% rename from src/handlers/expenditures/expenditureLocked.ts rename to apps/main-chain/src/handlers/expenditures/expenditureLocked.ts index e9c7b232d..85b7773bd 100644 --- a/src/handlers/expenditures/expenditureLocked.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureLocked.ts @@ -1,4 +1,4 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, ExpenditureStatus, @@ -6,16 +6,16 @@ import { UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { ContractEvent, ContractEventsSignatures } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; import { getExpenditureDatabaseId, toNumber, transactionHasEvent, - verbose, writeActionFromEvent, } from '~utils'; import { sendExpenditureUpdateNotifications } from '~utils/notifications'; +import { verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress } = event; @@ -34,15 +34,15 @@ export default async (event: ContractEvent): Promise => { colonyAddress, ); - await mutate( - UpdateExpenditureDocument, - { - input: { - id: databaseId, - status: ExpenditureStatus.Locked, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: databaseId, + status: ExpenditureStatus.Locked, }, - ); + }); /** * @NOTE: Only create a `LOCK_EXPENDITURE` action if the expenditure was not created as part of a OneTxPayment diff --git a/apps/main-chain/src/handlers/expenditures/expenditureMadeStaged.ts b/apps/main-chain/src/handlers/expenditures/expenditureMadeStaged.ts new file mode 100644 index 000000000..4f54855a8 --- /dev/null +++ b/apps/main-chain/src/handlers/expenditures/expenditureMadeStaged.ts @@ -0,0 +1,36 @@ +import amplifyClient from '~amplifyClient'; +import { + ExpenditureType, + UpdateExpenditureDocument, + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables, +} from '@joincolony/graphql'; +import { getExpenditureDatabaseId, toNumber } from '~utils'; +import { verbose } from '@joincolony/utils'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; + +export const handleExpenditureMadeStaged: EventHandler = async ( + event, + listener, +) => { + const { expenditureId, staged } = event.args; + const convertedExpenditureId = toNumber(expenditureId); + const { colonyAddress } = listener as ExtensionEventListener; + + verbose( + `Expenditure with ID ${convertedExpenditureId} in colony ${colonyAddress} ${ + staged ? 'set' : 'unset' + } as staged`, + ); + + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: getExpenditureDatabaseId(colonyAddress, convertedExpenditureId), + type: ExpenditureType.Staged, + stagedExpenditureAddress: event.contractAddress, + }, + }); +}; diff --git a/src/handlers/expenditures/expenditureMadeViaStake.ts b/apps/main-chain/src/handlers/expenditures/expenditureMadeViaStake.ts similarity index 51% rename from src/handlers/expenditures/expenditureMadeViaStake.ts rename to apps/main-chain/src/handlers/expenditures/expenditureMadeViaStake.ts index 9cacedd24..856d598af 100644 --- a/src/handlers/expenditures/expenditureMadeViaStake.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureMadeViaStake.ts @@ -1,5 +1,4 @@ -import { mutate } from '~amplifyClient'; -import { ExtensionEventListener } from '~eventListeners'; +import amplifyClient from '~amplifyClient'; import { CreateUserStakeDocument, CreateUserStakeMutation, @@ -11,11 +10,12 @@ import { UpdateExpenditureMutation, UpdateExpenditureMutationVariables, UserStakeType, -} from '~graphql'; -import { EventHandler } from '~types'; -import { getExpenditureDatabaseId, output, toNumber, verbose } from '~utils'; +} from '@joincolony/graphql'; +import { getExpenditureDatabaseId, toNumber } from '~utils'; import { getUserStakeDatabaseId } from '~utils/stakes'; import { getExpenditureFromDB } from './helpers'; +import { output, verbose } from '@joincolony/utils'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; export const handleExpenditureMadeViaStake: EventHandler = async ( event, @@ -45,41 +45,41 @@ export const handleExpenditureMadeViaStake: EventHandler = async ( const stakeDatabaseId = getUserStakeDatabaseId(creator, transactionHash); - await mutate( - UpdateExpenditureDocument, - { - input: { - id: databaseId, - isStaked: true, - userStakeId: stakeDatabaseId, - stakedExpenditureAddress: contractAddress, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: databaseId, + isStaked: true, + userStakeId: stakeDatabaseId, + stakedExpenditureAddress: contractAddress, }, - ); + }); - await mutate( - CreateUserStakeDocument, - { - input: { - id: stakeDatabaseId, - actionId: transactionHash, - amount: stake.toString(), - userAddress: creator, - colonyAddress, - isClaimed: false, - type: UserStakeType.StakedExpenditure, - }, + await amplifyClient.mutate< + CreateUserStakeMutation, + CreateUserStakeMutationVariables + >(CreateUserStakeDocument, { + input: { + id: stakeDatabaseId, + actionId: transactionHash, + amount: stake.toString(), + userAddress: creator, + colonyAddress, + isClaimed: false, + type: UserStakeType.StakedExpenditure, }, - ); + }); - await mutate( - UpdateColonyActionDocument, - { - input: { - id: transactionHash, - showInActionsList: true, - initiatorAddress: creator, - }, + await amplifyClient.mutate< + UpdateColonyActionMutation, + UpdateColonyActionMutationVariables + >(UpdateColonyActionDocument, { + input: { + id: transactionHash, + showInActionsList: true, + initiatorAddress: creator, }, - ); + }); }; diff --git a/src/handlers/expenditures/expenditurePayoutClaimed.ts b/apps/main-chain/src/handlers/expenditures/expenditurePayoutClaimed.ts similarity index 84% rename from src/handlers/expenditures/expenditurePayoutClaimed.ts rename to apps/main-chain/src/handlers/expenditures/expenditurePayoutClaimed.ts index e6096f530..94494ef99 100644 --- a/src/handlers/expenditures/expenditurePayoutClaimed.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditurePayoutClaimed.ts @@ -1,12 +1,10 @@ -import { ContractEvent, ContractEventsSignatures } from '~types'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; import { getExpenditureDatabaseId, getUpdatedExpenditureBalances, insertAtIndex, - output, toNumber, transactionHasEvent, - verbose, } from '~utils'; import { ExpenditurePayout, @@ -14,12 +12,13 @@ import { UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { mutate } from '~amplifyClient'; +} from '@joincolony/graphql'; +import amplifyClient from '~amplifyClient'; import { getAmountWithFee, getNetworkInverseFee } from '~utils/networkFee'; import { getExpenditureFromDB } from './helpers'; import { sendExpenditureUpdateNotifications } from '~utils/notifications'; +import { output, verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress } = event; @@ -92,18 +91,18 @@ export default async (event: ContractEvent): Promise => { const isSplitPayment = !!expenditure.metadata?.distributionType; - await mutate( - UpdateExpenditureDocument, - { - input: { - id: databaseId, - slots: updatedSlots, - balances: updatedBalances, - // Assume the send notification function will succeed to avoid extra mutations - splitPaymentPayoutClaimedNotificationSent: isSplitPayment || undefined, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: databaseId, + slots: updatedSlots, + balances: updatedBalances, + // Assume the send notification function will succeed to avoid extra mutations + splitPaymentPayoutClaimedNotificationSent: isSplitPayment || undefined, }, - ); + }); const hasOneTxPaymentEvent = await transactionHasEvent( event.transactionHash, diff --git a/src/handlers/expenditures/expenditurePayoutModifierSet.ts b/apps/main-chain/src/handlers/expenditures/expenditurePayoutModifierSet.ts similarity index 71% rename from src/handlers/expenditures/expenditurePayoutModifierSet.ts rename to apps/main-chain/src/handlers/expenditures/expenditurePayoutModifierSet.ts index c0777e608..64e60dfcf 100644 --- a/src/handlers/expenditures/expenditurePayoutModifierSet.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditurePayoutModifierSet.ts @@ -1,13 +1,14 @@ -import { ContractEvent } from '~types'; -import { getExpenditureDatabaseId, output, toNumber, verbose } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; +import { getExpenditureDatabaseId, toNumber } from '~utils'; import { UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { mutate } from '~amplifyClient'; +} from '@joincolony/graphql'; +import amplifyClient from '~amplifyClient'; import { getExpenditureFromDB, getUpdatedExpenditureSlots } from './helpers'; +import { output, verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress } = event; @@ -38,13 +39,13 @@ export default async (event: ContractEvent): Promise => { `Payout modifier set for expenditure with ID ${convertedExpenditureId} in colony ${colonyAddress}`, ); - await mutate( - UpdateExpenditureDocument, - { - input: { - id: databaseId, - slots: updatedSlots, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: databaseId, + slots: updatedSlots, }, - ); + }); }; diff --git a/src/handlers/expenditures/expenditurePayoutSet.ts b/apps/main-chain/src/handlers/expenditures/expenditurePayoutSet.ts similarity index 92% rename from src/handlers/expenditures/expenditurePayoutSet.ts rename to apps/main-chain/src/handlers/expenditures/expenditurePayoutSet.ts index f0cf4cce1..2deecc425 100644 --- a/src/handlers/expenditures/expenditurePayoutSet.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditurePayoutSet.ts @@ -1,18 +1,16 @@ -import { ContractEvent } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; import { getCachedColonyClient, getExpenditureDatabaseId, - output, toNumber, - verbose, } from '~utils'; import { ExpenditurePayout, UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { mutate } from '~amplifyClient'; +} from '@joincolony/graphql'; +import amplifyClient from '~amplifyClient'; import { splitAmountAndFee } from '~utils/networkFee'; import { @@ -21,6 +19,7 @@ import { createEditExpenditureAction, NotEditActionError, } from './helpers'; +import { output, verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress } = event; @@ -81,7 +80,7 @@ export default async (event: ContractEvent): Promise => { `Payout set for expenditure with ID ${convertedExpenditureId} in colony ${colonyAddress}`, ); - await mutate< + await amplifyClient.mutate< UpdateExpenditureMutation, UpdateExpenditureMutationVariables >(UpdateExpenditureDocument, { diff --git a/src/handlers/expenditures/expenditureRecipientSet.ts b/apps/main-chain/src/handlers/expenditures/expenditureRecipientSet.ts similarity index 82% rename from src/handlers/expenditures/expenditureRecipientSet.ts rename to apps/main-chain/src/handlers/expenditures/expenditureRecipientSet.ts index dff89ff3e..3e5abff0c 100644 --- a/src/handlers/expenditures/expenditureRecipientSet.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureRecipientSet.ts @@ -1,15 +1,16 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; -import { getExpenditureDatabaseId, output, toNumber, verbose } from '~utils'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; +import { getExpenditureDatabaseId, toNumber } from '~utils'; import { getExpenditureFromDB, getUpdatedExpenditureSlots } from './helpers'; import { sendMentionNotifications } from '~utils/notifications'; +import { output, verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress } = event; @@ -42,15 +43,15 @@ export default async (event: ContractEvent): Promise => { `Recipient set for expenditure with ID ${convertedExpenditureId} in colony ${colonyAddress}`, ); - await mutate( - UpdateExpenditureDocument, - { - input: { - id: databaseId, - slots: updatedSlots, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: databaseId, + slots: updatedSlots, }, - ); + }); const mentionRecipients: string[] = []; updatedSlots.forEach((updatedSlot) => { diff --git a/src/handlers/expenditures/expenditureStakerPunished.ts b/apps/main-chain/src/handlers/expenditures/expenditureStakerPunished.ts similarity index 78% rename from src/handlers/expenditures/expenditureStakerPunished.ts rename to apps/main-chain/src/handlers/expenditures/expenditureStakerPunished.ts index 8b308f16e..948f2a50e 100644 --- a/src/handlers/expenditures/expenditureStakerPunished.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureStakerPunished.ts @@ -1,8 +1,8 @@ -import { ExtensionEventListener } from '~eventListeners'; -import { EventHandler } from '~types'; -import { getExpenditureDatabaseId, toNumber, verbose } from '~utils'; +import { getExpenditureDatabaseId, toNumber } from '~utils'; import { updateExpenditureStake } from './helpers'; +import { verbose } from '@joincolony/utils'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; export const handleExpenditureStakerPunished: EventHandler = async ( event, diff --git a/src/handlers/expenditures/expenditureStateChanged.ts b/apps/main-chain/src/handlers/expenditures/expenditureStateChanged.ts similarity index 91% rename from src/handlers/expenditures/expenditureStateChanged.ts rename to apps/main-chain/src/handlers/expenditures/expenditureStateChanged.ts index 5f9d13434..eb93c482e 100644 --- a/src/handlers/expenditures/expenditureStateChanged.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureStateChanged.ts @@ -1,16 +1,13 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { EventHandler } from '~types'; +} from '@joincolony/graphql'; import { getCachedColonyClient, getExpenditureDatabaseId, - output, toNumber, - verbose, } from '~utils'; import { getExpenditureFromDB, @@ -20,6 +17,8 @@ import { createEditExpenditureAction, NotEditActionError, } from './helpers'; +import { output, verbose } from '@joincolony/utils'; +import { EventHandler } from '@joincolony/blocks'; export const handleExpenditureStateChanged: EventHandler = async (event) => { const { contractAddress: colonyAddress } = event; @@ -70,7 +69,7 @@ export const handleExpenditureStateChanged: EventHandler = async (event) => { verbose(`State of expenditure with ID ${databaseId} changed`); if (!!updatedSlots || !!updatedStatus) { - await mutate< + await amplifyClient.mutate< UpdateExpenditureMutation, UpdateExpenditureMutationVariables >(UpdateExpenditureDocument, { diff --git a/src/handlers/expenditures/expenditureTransferred.ts b/apps/main-chain/src/handlers/expenditures/expenditureTransferred.ts similarity index 50% rename from src/handlers/expenditures/expenditureTransferred.ts rename to apps/main-chain/src/handlers/expenditures/expenditureTransferred.ts index 127567ba6..77823c807 100644 --- a/src/handlers/expenditures/expenditureTransferred.ts +++ b/apps/main-chain/src/handlers/expenditures/expenditureTransferred.ts @@ -1,11 +1,12 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; -import { getExpenditureDatabaseId, toNumber, verbose } from '~utils'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; +import { getExpenditureDatabaseId, toNumber } from '~utils'; +import { verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: colonyAddress } = event; @@ -21,13 +22,13 @@ export default async (event: ContractEvent): Promise => { colonyAddress, ); - await mutate( - UpdateExpenditureDocument, - { - input: { - id: getExpenditureDatabaseId(colonyAddress, convertedExpenditureId), - ownerAddress: newOwnerAddress, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: getExpenditureDatabaseId(colonyAddress, convertedExpenditureId), + ownerAddress: newOwnerAddress, }, - ); + }); }; diff --git a/src/handlers/expenditures/helpers/createEditExpenditureAction.ts b/apps/main-chain/src/handlers/expenditures/helpers/createEditExpenditureAction.ts similarity index 92% rename from src/handlers/expenditures/helpers/createEditExpenditureAction.ts rename to apps/main-chain/src/handlers/expenditures/helpers/createEditExpenditureAction.ts index ec7b977e8..4bdd4339e 100644 --- a/src/handlers/expenditures/helpers/createEditExpenditureAction.ts +++ b/apps/main-chain/src/handlers/expenditures/helpers/createEditExpenditureAction.ts @@ -1,7 +1,7 @@ import { AnyColonyClient } from '@colony/colony-js'; import { utils } from 'ethers'; import { isEqual, omit } from 'lodash'; -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, ExpenditureFragment, @@ -12,9 +12,9 @@ import { UpdateExpenditureDocument, UpdateExpenditureMutation, UpdateExpenditureMutationVariables, -} from '~graphql'; -import provider from '~provider'; -import { ContractEvent, ContractEventsSignatures } from '~types'; +} from '@joincolony/graphql'; +import rpcProvider from '~provider'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; import { checkActionExists, getExpenditureDatabaseId, @@ -84,7 +84,7 @@ export const createEditExpenditureAction = async ( convertedExpenditureId, ); - const logs = await provider.getLogs({ + const logs = await rpcProvider.getProviderInstance().getLogs({ fromBlock: blockNumber, toBlock: blockNumber, topics: [ @@ -197,16 +197,16 @@ export const createEditExpenditureAction = async ( } } - await mutate( - UpdateExpenditureDocument, - { - input: { - id: databaseId, - slots: updatedSlots, - status: updatedStatus, - }, + await amplifyClient.mutate< + UpdateExpenditureMutation, + UpdateExpenditureMutationVariables + >(UpdateExpenditureDocument, { + input: { + id: databaseId, + slots: updatedSlots, + status: updatedStatus, }, - ); + }); if (shouldCreateAction) { const { agent: initiatorAddress } = event.args; diff --git a/src/handlers/expenditures/helpers/decodeSetExpenditureState.ts b/apps/main-chain/src/handlers/expenditures/helpers/decodeSetExpenditureState.ts similarity index 97% rename from src/handlers/expenditures/helpers/decodeSetExpenditureState.ts rename to apps/main-chain/src/handlers/expenditures/helpers/decodeSetExpenditureState.ts index bd3f909ae..4f847e8e6 100644 --- a/src/handlers/expenditures/helpers/decodeSetExpenditureState.ts +++ b/apps/main-chain/src/handlers/expenditures/helpers/decodeSetExpenditureState.ts @@ -3,7 +3,7 @@ import { BigNumber, BigNumberish, utils } from 'ethers'; import { ExpenditureSlotFragment as ExpenditureSlot, ExpenditureStatus, -} from '~graphql'; +} from '@joincolony/graphql'; import { toNumber } from '~utils'; import { @@ -14,7 +14,7 @@ import { EXPENDITURES_SLOT, EXPENDITURE_OWNER_AND_STATUS, } from '~constants'; -import { ContractEvent } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; interface SetExpenditureStateParams { storageSlot: BigNumberish; diff --git a/src/handlers/expenditures/helpers/getExpenditure.ts b/apps/main-chain/src/handlers/expenditures/helpers/getExpenditure.ts similarity index 90% rename from src/handlers/expenditures/helpers/getExpenditure.ts rename to apps/main-chain/src/handlers/expenditures/helpers/getExpenditure.ts index c110e8de1..7ce8e3026 100644 --- a/src/handlers/expenditures/helpers/getExpenditure.ts +++ b/apps/main-chain/src/handlers/expenditures/helpers/getExpenditure.ts @@ -1,6 +1,6 @@ import { AnyColonyClient } from '@colony/colony-js'; -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetExpenditureDocument, GetExpenditureQuery, @@ -8,13 +8,13 @@ import { GetStreamingPaymentDocument, GetStreamingPaymentQuery, GetStreamingPaymentQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import { getCachedColonyClient } from '~utils'; export const getExpenditureFromDB = async ( expenditureDatabaseId: string, ): Promise => { - const response = await query< + const response = await amplifyClient.query< GetExpenditureQuery, GetExpenditureQueryVariables >(GetExpenditureDocument, { @@ -52,7 +52,7 @@ export const getExpenditure = async ( export const getStreamingPaymentFromDB = async ( paymentDatabaseId: string, ): Promise => { - const response = await query< + const response = await amplifyClient.query< GetStreamingPaymentQuery, GetStreamingPaymentQueryVariables >(GetStreamingPaymentDocument, { diff --git a/src/handlers/expenditures/helpers/getUpdatedSlots.ts b/apps/main-chain/src/handlers/expenditures/helpers/getUpdatedSlots.ts similarity index 89% rename from src/handlers/expenditures/helpers/getUpdatedSlots.ts rename to apps/main-chain/src/handlers/expenditures/helpers/getUpdatedSlots.ts index 532917866..1680cd85b 100644 --- a/src/handlers/expenditures/helpers/getUpdatedSlots.ts +++ b/apps/main-chain/src/handlers/expenditures/helpers/getUpdatedSlots.ts @@ -1,4 +1,4 @@ -import { ExpenditureFragment, ExpenditureSlot } from '~graphql'; +import { ExpenditureFragment, ExpenditureSlot } from '@joincolony/graphql'; /** * Function that updates an expenditure slot with a given ID and fields diff --git a/src/handlers/expenditures/helpers/index.ts b/apps/main-chain/src/handlers/expenditures/helpers/index.ts similarity index 100% rename from src/handlers/expenditures/helpers/index.ts rename to apps/main-chain/src/handlers/expenditures/helpers/index.ts diff --git a/src/handlers/expenditures/helpers/updateExpenditureStake.ts b/apps/main-chain/src/handlers/expenditures/helpers/updateExpenditureStake.ts similarity index 68% rename from src/handlers/expenditures/helpers/updateExpenditureStake.ts rename to apps/main-chain/src/handlers/expenditures/helpers/updateExpenditureStake.ts index 3dcba4c64..92e090ada 100644 --- a/src/handlers/expenditures/helpers/updateExpenditureStake.ts +++ b/apps/main-chain/src/handlers/expenditures/helpers/updateExpenditureStake.ts @@ -1,12 +1,12 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { UpdateUserStakeDocument, UpdateUserStakeMutation, UpdateUserStakeMutationVariables, UpdateUserStakeInput, -} from '~graphql'; +} from '@joincolony/graphql'; import { getExpenditureFromDB } from './getExpenditure'; -import { output, verbose } from '~utils'; +import { output, verbose } from '@joincolony/utils'; export const updateExpenditureStake = async ( expenditureDatabaseId: string, @@ -21,15 +21,15 @@ export const updateExpenditureStake = async ( return; } - await mutate( - UpdateUserStakeDocument, - { - input: { - id: expenditure.userStakeId, - ...fieldsToUpdate, - }, + await amplifyClient.mutate< + UpdateUserStakeMutation, + UpdateUserStakeMutationVariables + >(UpdateUserStakeDocument, { + input: { + id: expenditure.userStakeId, + ...fieldsToUpdate, }, - ); + }); verbose( `Updated stake with ID ${expenditure.userStakeId} for expenditure ${expenditureDatabaseId}`, diff --git a/src/handlers/expenditures/index.ts b/apps/main-chain/src/handlers/expenditures/index.ts similarity index 100% rename from src/handlers/expenditures/index.ts rename to apps/main-chain/src/handlers/expenditures/index.ts diff --git a/src/handlers/expenditures/paymentTokenUpdated.ts b/apps/main-chain/src/handlers/expenditures/paymentTokenUpdated.ts similarity index 80% rename from src/handlers/expenditures/paymentTokenUpdated.ts rename to apps/main-chain/src/handlers/expenditures/paymentTokenUpdated.ts index 6d94c4b5d..2a32909a6 100644 --- a/src/handlers/expenditures/paymentTokenUpdated.ts +++ b/apps/main-chain/src/handlers/expenditures/paymentTokenUpdated.ts @@ -1,14 +1,14 @@ -import { getExpenditureDatabaseId, toNumber, verbose } from '~utils'; -import { mutate } from '~amplifyClient'; +import { getExpenditureDatabaseId, toNumber } from '~utils'; +import amplifyClient from '~amplifyClient'; import { UpdateStreamingPaymentDocument, UpdateStreamingPaymentMutation, UpdateStreamingPaymentMutationVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import { getStreamingPaymentFromDB } from './helpers'; -import { EventHandler } from '~types'; -import { ExtensionEventListener } from '~eventListeners'; +import { verbose } from '@joincolony/utils'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; export const handlePaymentTokenUpdated: EventHandler = async ( event, @@ -39,7 +39,7 @@ export const handlePaymentTokenUpdated: EventHandler = async ( verbose(`Payment token updated for streaming payment with ID ${databaseId}`); - await mutate< + await amplifyClient.mutate< UpdateStreamingPaymentMutation, UpdateStreamingPaymentMutationVariables >(UpdateStreamingPaymentDocument, { diff --git a/src/handlers/expenditures/stagedPaymentReleased.ts b/apps/main-chain/src/handlers/expenditures/stagedPaymentReleased.ts similarity index 84% rename from src/handlers/expenditures/stagedPaymentReleased.ts rename to apps/main-chain/src/handlers/expenditures/stagedPaymentReleased.ts index 03d7735b1..d4adab270 100644 --- a/src/handlers/expenditures/stagedPaymentReleased.ts +++ b/apps/main-chain/src/handlers/expenditures/stagedPaymentReleased.ts @@ -1,9 +1,11 @@ import { utils } from 'ethers'; -import { ExtensionEventListener } from '~eventListeners'; -import { ColonyActionType } from '~graphql'; -import { getInterfaceByListener } from '~interfaces'; -import provider from '~provider'; -import { ContractEventsSignatures, EventHandler } from '~types'; +import { ColonyActionType } from '@joincolony/graphql'; +import rpcProvider from '~provider'; +import { + ContractEventsSignatures, + EventHandler, + ExtensionEventListener, +} from '@joincolony/blocks'; import { checkActionExists, getCachedColonyClient, @@ -12,6 +14,7 @@ import { toNumber, writeActionFromEvent, } from '~utils'; +import eventManager from '~eventManager'; export const handleStagedPaymentReleased: EventHandler = async ( event, @@ -41,13 +44,13 @@ export const handleStagedPaymentReleased: EventHandler = async ( const releasedSlotIds = []; - const logs = await provider.getLogs({ + const logs = await rpcProvider.getProviderInstance().getLogs({ fromBlock: blockNumber, toBlock: blockNumber, topics: [utils.id(ContractEventsSignatures.StagedPaymentReleased)], }); - const iface = getInterfaceByListener(listener); + const iface = eventManager.getInterfaceByListener(listener); if (!iface) { return; } diff --git a/src/handlers/expenditures/stakeFractionSet.ts b/apps/main-chain/src/handlers/expenditures/stakeFractionSet.ts similarity index 91% rename from src/handlers/expenditures/stakeFractionSet.ts rename to apps/main-chain/src/handlers/expenditures/stakeFractionSet.ts index 1aff0213c..02586b6b9 100644 --- a/src/handlers/expenditures/stakeFractionSet.ts +++ b/apps/main-chain/src/handlers/expenditures/stakeFractionSet.ts @@ -1,9 +1,9 @@ import { constants } from 'ethers'; -import { NotificationType } from '~graphql'; +import { NotificationType } from '@joincolony/graphql'; import networkClient from '~networkClient'; -import { EventHandler } from '~types'; import { updateExtension } from '~utils/extensions/updateExtension'; import { sendExtensionUpdateNotifications } from '~utils/notifications'; +import { EventHandler } from '@joincolony/blocks'; export const handleStakeFractionSet: EventHandler = async ( event, diff --git a/src/handlers/expenditures/stakeReclaimed.ts b/apps/main-chain/src/handlers/expenditures/stakeReclaimed.ts similarity index 76% rename from src/handlers/expenditures/stakeReclaimed.ts rename to apps/main-chain/src/handlers/expenditures/stakeReclaimed.ts index abd393587..4f8b130ee 100644 --- a/src/handlers/expenditures/stakeReclaimed.ts +++ b/apps/main-chain/src/handlers/expenditures/stakeReclaimed.ts @@ -1,8 +1,8 @@ -import { ExtensionEventListener } from '~eventListeners'; -import { EventHandler } from '~types'; -import { getExpenditureDatabaseId, toNumber, verbose } from '~utils'; +import { getExpenditureDatabaseId, toNumber } from '~utils'; import { updateExpenditureStake } from './helpers'; +import { verbose } from '@joincolony/utils'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; export const handleStakeReclaimed: EventHandler = async (event, listener) => { const { expenditureId } = event.args; diff --git a/src/handlers/expenditures/streamingPaymentCreated.ts b/apps/main-chain/src/handlers/expenditures/streamingPaymentCreated.ts similarity index 86% rename from src/handlers/expenditures/streamingPaymentCreated.ts rename to apps/main-chain/src/handlers/expenditures/streamingPaymentCreated.ts index 27c3def63..8cb3272f8 100644 --- a/src/handlers/expenditures/streamingPaymentCreated.ts +++ b/apps/main-chain/src/handlers/expenditures/streamingPaymentCreated.ts @@ -1,17 +1,16 @@ -import { mutate } from '~amplifyClient'; -import { ExtensionEventListener } from '~eventListeners'; +import amplifyClient from '~amplifyClient'; import { CreateStreamingPaymentDocument, CreateStreamingPaymentMutation, CreateStreamingPaymentMutationVariables, -} from '~graphql'; -import { EventHandler } from '~types'; +} from '@joincolony/graphql'; import { getExpenditureDatabaseId, getStreamingPaymentsClient, toNumber, - verbose, } from '~utils'; +import { verbose } from '@joincolony/utils'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; export const handleStreamingPaymentCreated: EventHandler = async ( event, @@ -49,7 +48,7 @@ export const handleStreamingPaymentCreated: EventHandler = async ( verbose(`Streaming payment with ID ${databaseId} created`); - await mutate< + await amplifyClient.mutate< CreateStreamingPaymentMutation, CreateStreamingPaymentMutationVariables >(CreateStreamingPaymentDocument, { diff --git a/src/handlers/extensions/extensionAddedToNetwork.ts b/apps/main-chain/src/handlers/extensions/extensionAddedToNetwork.ts similarity index 76% rename from src/handlers/extensions/extensionAddedToNetwork.ts rename to apps/main-chain/src/handlers/extensions/extensionAddedToNetwork.ts index 865981744..6f8d5a46d 100644 --- a/src/handlers/extensions/extensionAddedToNetwork.ts +++ b/apps/main-chain/src/handlers/extensions/extensionAddedToNetwork.ts @@ -1,4 +1,4 @@ -import { ContractEvent } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; import { writeExtensionVersionFromEvent } from '~utils'; export default async (event: ContractEvent): Promise => { diff --git a/src/handlers/extensions/extensionDeprecated.ts b/apps/main-chain/src/handlers/extensions/extensionDeprecated.ts similarity index 87% rename from src/handlers/extensions/extensionDeprecated.ts rename to apps/main-chain/src/handlers/extensions/extensionDeprecated.ts index be7b5a265..38a3b16d8 100644 --- a/src/handlers/extensions/extensionDeprecated.ts +++ b/apps/main-chain/src/handlers/extensions/extensionDeprecated.ts @@ -1,14 +1,14 @@ import { constants } from 'ethers'; -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetColonyExtensionByHashAndColonyDocument, GetColonyExtensionByHashAndColonyQuery, GetColonyExtensionByHashAndColonyQueryVariables, NotificationType, -} from '~graphql'; +} from '@joincolony/graphql'; import networkClient from '~networkClient'; -import { ContractEvent } from '~types'; -import { verbose } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; +import { verbose } from '@joincolony/utils'; import { updateExtension } from '~utils/extensions/updateExtension'; import { sendExtensionUpdateNotifications } from '~utils/notifications'; @@ -38,7 +38,7 @@ export default async (event: ContractEvent): Promise => { }); const { data } = - (await query< + (await amplifyClient.query< GetColonyExtensionByHashAndColonyQuery, GetColonyExtensionByHashAndColonyQueryVariables >(GetColonyExtensionByHashAndColonyDocument, { diff --git a/src/handlers/extensions/extensionInitialised.ts b/apps/main-chain/src/handlers/extensions/extensionInitialised.ts similarity index 88% rename from src/handlers/extensions/extensionInitialised.ts rename to apps/main-chain/src/handlers/extensions/extensionInitialised.ts index 741935be8..3b9dbdd1e 100644 --- a/src/handlers/extensions/extensionInitialised.ts +++ b/apps/main-chain/src/handlers/extensions/extensionInitialised.ts @@ -1,7 +1,7 @@ import { Extension, getExtensionHash } from '@colony/colony-js'; -import { ContractEvent } from '~types'; -import { verbose, addVotingReputationParamsToDB } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; +import { addVotingReputationParamsToDB } from '~utils'; import { setupListenersForStakedExpenditure, setupMotionsListeners, @@ -10,7 +10,8 @@ import { sendExtensionUpdateNotifications } from '~utils/notifications'; import networkClient from '~networkClient'; import { constants } from 'ethers'; import { updateExtension } from '~utils/extensions/updateExtension'; -import { NotificationType } from '~graphql'; +import { NotificationType } from '@joincolony/graphql'; +import { verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { contractAddress: extensionAddress, transactionHash } = event; diff --git a/src/handlers/extensions/extensionInstalled.ts b/apps/main-chain/src/handlers/extensions/extensionInstalled.ts similarity index 97% rename from src/handlers/extensions/extensionInstalled.ts rename to apps/main-chain/src/handlers/extensions/extensionInstalled.ts index 84ed3855e..b26b31c75 100644 --- a/src/handlers/extensions/extensionInstalled.ts +++ b/apps/main-chain/src/handlers/extensions/extensionInstalled.ts @@ -9,7 +9,7 @@ import { import { handleMultiSigInstalled } from '~eventListeners/extension/multiSig'; import { setupListenersForStreamingPayments } from '~eventListeners/extension/streamingPayments'; import networkClient from '~networkClient'; -import { ContractEvent } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; import { writeExtensionFromEvent } from '~utils'; import { updateExtensionCount } from '~utils/extensions'; diff --git a/src/handlers/extensions/extensionUninstalled.ts b/apps/main-chain/src/handlers/extensions/extensionUninstalled.ts similarity index 91% rename from src/handlers/extensions/extensionUninstalled.ts rename to apps/main-chain/src/handlers/extensions/extensionUninstalled.ts index bc46cd5bd..f60b79136 100644 --- a/src/handlers/extensions/extensionUninstalled.ts +++ b/apps/main-chain/src/handlers/extensions/extensionUninstalled.ts @@ -2,9 +2,9 @@ import { Extension, getExtensionHash } from '@colony/colony-js'; import { constants } from 'ethers'; import { removeExtensionEventListeners } from '~eventListeners'; import { handleMultiSigUninstalled } from '~eventListeners/extension/multiSig'; -import { NotificationType } from '~graphql'; +import { NotificationType } from '@joincolony/graphql'; import networkClient from '~networkClient'; -import { ContractEvent } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; import { deleteExtensionFromEvent } from '~utils'; import { sendExtensionUpdateNotifications } from '~utils/notifications'; diff --git a/src/handlers/extensions/extensionUpgraded.ts b/apps/main-chain/src/handlers/extensions/extensionUpgraded.ts similarity index 79% rename from src/handlers/extensions/extensionUpgraded.ts rename to apps/main-chain/src/handlers/extensions/extensionUpgraded.ts index 7eddc7fcb..5d84a2daf 100644 --- a/src/handlers/extensions/extensionUpgraded.ts +++ b/apps/main-chain/src/handlers/extensions/extensionUpgraded.ts @@ -1,12 +1,13 @@ -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetColonyExtensionByHashAndColonyDocument, GetColonyExtensionByHashAndColonyQuery, GetColonyExtensionByHashAndColonyQueryVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; -import { toNumber, verbose } from '~utils'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; +import { toNumber } from '~utils'; import { updateExtension } from '~utils/extensions/updateExtension'; +import { verbose } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { extensionId: extensionHash, colony, version } = event.args; @@ -22,7 +23,7 @@ export default async (event: ContractEvent): Promise => { ); const { data } = - (await query< + (await amplifyClient.query< GetColonyExtensionByHashAndColonyQuery, GetColonyExtensionByHashAndColonyQueryVariables >(GetColonyExtensionByHashAndColonyDocument, { diff --git a/src/handlers/extensions/index.ts b/apps/main-chain/src/handlers/extensions/index.ts similarity index 100% rename from src/handlers/extensions/index.ts rename to apps/main-chain/src/handlers/extensions/index.ts diff --git a/src/handlers/index.ts b/apps/main-chain/src/handlers/index.ts similarity index 100% rename from src/handlers/index.ts rename to apps/main-chain/src/handlers/index.ts diff --git a/src/handlers/metadataDelta/handlers/addVerifiedMembers.ts b/apps/main-chain/src/handlers/metadataDelta/handlers/addVerifiedMembers.ts similarity index 92% rename from src/handlers/metadataDelta/handlers/addVerifiedMembers.ts rename to apps/main-chain/src/handlers/metadataDelta/handlers/addVerifiedMembers.ts index 112b32730..0285eb5c0 100644 --- a/src/handlers/metadataDelta/handlers/addVerifiedMembers.ts +++ b/apps/main-chain/src/handlers/metadataDelta/handlers/addVerifiedMembers.ts @@ -1,6 +1,6 @@ import { Id } from '@colony/colony-js'; import { utils } from 'ethers'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, GetColonyContributorDocument, @@ -9,8 +9,8 @@ import { UpdateColonyContributorDocument, UpdateColonyContributorMutation, UpdateColonyContributorMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { NotificationCategory } from '~types/notifications'; import { AddVerifiedMembersOperation, @@ -41,7 +41,7 @@ export const handleAddVerifiedMembers = async ( return; } - const item = await query< + const item = await amplifyClient.query< GetColonyContributorQuery, GetColonyContributorQueryVariables >(GetColonyContributorDocument, { @@ -67,7 +67,7 @@ export const handleAddVerifiedMembers = async ( return; } - await mutate< + await amplifyClient.mutate< UpdateColonyContributorMutation, UpdateColonyContributorMutationVariables >(UpdateColonyContributorDocument, { diff --git a/apps/main-chain/src/handlers/metadataDelta/handlers/disableProxyColony.ts b/apps/main-chain/src/handlers/metadataDelta/handlers/disableProxyColony.ts new file mode 100644 index 000000000..a3ee26b6a --- /dev/null +++ b/apps/main-chain/src/handlers/metadataDelta/handlers/disableProxyColony.ts @@ -0,0 +1,64 @@ +import { Id } from '@colony/colony-js'; +import { + ColonyActionType, + GetProxyColonyDocument, + GetProxyColonyQuery, + GetProxyColonyQueryVariables, + UpdateProxyColonyDocument, + UpdateProxyColonyMutation, + UpdateProxyColonyMutationVariables, +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; +import { + DisableProxyColonyOperation, + getColonyFromDB, + getDomainDatabaseId, + writeActionFromEvent, +} from '~utils'; +import amplifyClient from '~amplifyClient'; + +export const handleDisableProxyColony = async ( + event: ContractEvent, + operation: DisableProxyColonyOperation, +): Promise => { + const { contractAddress: colonyAddress } = event; + const { agent: initiatorAddress } = event.args; + + const foreignChainId = operation.payload[0]; + + const colony = await getColonyFromDB(colonyAddress); + if (!colony) { + return; + } + + const proxyColonyId = `${colonyAddress}_${foreignChainId}`; + + const item = await amplifyClient.query< + GetProxyColonyQuery, + GetProxyColonyQueryVariables + >(GetProxyColonyDocument, { + id: proxyColonyId, + }); + + // If the proxy colony is already disabled, we early-return + if (!item?.data?.getProxyColony?.isActive) { + return; + } + + await amplifyClient.mutate< + UpdateProxyColonyMutation, + UpdateProxyColonyMutationVariables + >(UpdateProxyColonyDocument, { + input: { + id: proxyColonyId, + isActive: false, + }, + }); + + await writeActionFromEvent(event, colonyAddress, { + type: ColonyActionType.RemoveProxyColony, + initiatorAddress, + targetChainId: Number(foreignChainId), + fromDomainId: getDomainDatabaseId(colonyAddress, Id.RootDomain), + }); +}; diff --git a/apps/main-chain/src/handlers/metadataDelta/handlers/enableProxyColony.ts b/apps/main-chain/src/handlers/metadataDelta/handlers/enableProxyColony.ts new file mode 100644 index 000000000..878888e18 --- /dev/null +++ b/apps/main-chain/src/handlers/metadataDelta/handlers/enableProxyColony.ts @@ -0,0 +1,64 @@ +import { Id } from '@colony/colony-js'; +import { + ColonyActionType, + GetProxyColonyDocument, + GetProxyColonyQuery, + GetProxyColonyQueryVariables, + UpdateProxyColonyDocument, + UpdateProxyColonyMutation, + UpdateProxyColonyMutationVariables, +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; +import { + EnableProxyColonyOperation, + getColonyFromDB, + getDomainDatabaseId, + writeActionFromEvent, +} from '~utils'; +import amplifyClient from '~amplifyClient'; + +export const handleEnableProxyColony = async ( + event: ContractEvent, + operation: EnableProxyColonyOperation, +): Promise => { + const { contractAddress: colonyAddress } = event; + const { agent: initiatorAddress } = event.args; + + const foreignChainId = operation.payload[0]; + + const colony = await getColonyFromDB(colonyAddress); + if (!colony) { + return; + } + + const proxyColonyId = `${colonyAddress}_${foreignChainId}`; + + const item = await amplifyClient.query< + GetProxyColonyQuery, + GetProxyColonyQueryVariables + >(GetProxyColonyDocument, { + id: proxyColonyId, + }); + + // If the proxy colony is already enabled, we early-return + if (item?.data?.getProxyColony?.isActive) { + return; + } + + await amplifyClient.mutate< + UpdateProxyColonyMutation, + UpdateProxyColonyMutationVariables + >(UpdateProxyColonyDocument, { + input: { + id: proxyColonyId, + isActive: true, + }, + }); + + await writeActionFromEvent(event, colonyAddress, { + type: ColonyActionType.AddProxyColony, + initiatorAddress, + targetChainId: Number(foreignChainId), + fromDomainId: getDomainDatabaseId(colonyAddress, Id.RootDomain), + }); +}; diff --git a/src/handlers/metadataDelta/handlers/manageTokens.ts b/apps/main-chain/src/handlers/metadataDelta/handlers/manageTokens.ts similarity index 93% rename from src/handlers/metadataDelta/handlers/manageTokens.ts rename to apps/main-chain/src/handlers/metadataDelta/handlers/manageTokens.ts index 215435c98..f1bcef270 100644 --- a/src/handlers/metadataDelta/handlers/manageTokens.ts +++ b/apps/main-chain/src/handlers/metadataDelta/handlers/manageTokens.ts @@ -1,6 +1,6 @@ import { Id } from '@colony/colony-js'; -import { ColonyActionType } from '~graphql'; -import { ContractEvent } from '~types'; +import { ColonyActionType } from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { NotificationCategory } from '~types/notifications'; import { ManageTokensOperation, diff --git a/src/handlers/metadataDelta/handlers/removeVerifiedMembers.ts b/apps/main-chain/src/handlers/metadataDelta/handlers/removeVerifiedMembers.ts similarity index 91% rename from src/handlers/metadataDelta/handlers/removeVerifiedMembers.ts rename to apps/main-chain/src/handlers/metadataDelta/handlers/removeVerifiedMembers.ts index 14c5d028e..8972fcc6d 100644 --- a/src/handlers/metadataDelta/handlers/removeVerifiedMembers.ts +++ b/apps/main-chain/src/handlers/metadataDelta/handlers/removeVerifiedMembers.ts @@ -1,6 +1,6 @@ import { Id } from '@colony/colony-js'; import { utils } from 'ethers'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, GetColonyContributorDocument, @@ -9,8 +9,8 @@ import { UpdateColonyContributorDocument, UpdateColonyContributorMutation, UpdateColonyContributorMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { NotificationCategory } from '~types/notifications'; import { getDomainDatabaseId, @@ -38,7 +38,7 @@ export const handleRemoveVerifiedMembers = async ( return; } - const item = await query< + const item = await amplifyClient.query< GetColonyContributorQuery, GetColonyContributorQueryVariables >(GetColonyContributorDocument, { @@ -50,7 +50,7 @@ export const handleRemoveVerifiedMembers = async ( return; } - await mutate< + await amplifyClient.mutate< UpdateColonyContributorMutation, UpdateColonyContributorMutationVariables >(UpdateColonyContributorDocument, { diff --git a/src/handlers/metadataDelta/index.ts b/apps/main-chain/src/handlers/metadataDelta/index.ts similarity index 100% rename from src/handlers/metadataDelta/index.ts rename to apps/main-chain/src/handlers/metadataDelta/index.ts diff --git a/src/handlers/metadataDelta/metadataDelta.ts b/apps/main-chain/src/handlers/metadataDelta/metadataDelta.ts similarity index 64% rename from src/handlers/metadataDelta/metadataDelta.ts rename to apps/main-chain/src/handlers/metadataDelta/metadataDelta.ts index 396f287e9..8f5e7771e 100644 --- a/src/handlers/metadataDelta/metadataDelta.ts +++ b/apps/main-chain/src/handlers/metadataDelta/metadataDelta.ts @@ -1,14 +1,18 @@ -import { ContractEvent } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; import { isAddVerifiedMembersOperation, + isDisableProxyColonyOperation, + isEnableProxyColonyOperation, isManageTokensOperation, isRemoveVerifiedMembersOperation, parseMetadataDeltaOperation, - verbose, } from '~utils'; import { handleAddVerifiedMembers } from './handlers/addVerifiedMembers'; import { handleRemoveVerifiedMembers } from './handlers/removeVerifiedMembers'; import { handleManageTokens } from './handlers/manageTokens'; +import { verbose } from '@joincolony/utils'; +import { handleDisableProxyColony } from './handlers/disableProxyColony'; +import { handleEnableProxyColony } from './handlers/enableProxyColony'; export default async (event: ContractEvent): Promise => { const operationString = event.args.metadata; @@ -33,5 +37,15 @@ export default async (event: ContractEvent): Promise => { return; } + if (isDisableProxyColonyOperation(operation)) { + await handleDisableProxyColony(event, operation); + return; + } + + if (isEnableProxyColonyOperation(operation)) { + await handleEnableProxyColony(event, operation); + return; + } + verbose('Unknown operation type: ', operation); }; diff --git a/src/handlers/motions/helpers.ts b/apps/main-chain/src/handlers/motions/helpers.ts similarity index 90% rename from src/handlers/motions/helpers.ts rename to apps/main-chain/src/handlers/motions/helpers.ts index b2faa43a8..e48a930b8 100644 --- a/src/handlers/motions/helpers.ts +++ b/apps/main-chain/src/handlers/motions/helpers.ts @@ -1,5 +1,4 @@ import { BigNumber } from 'ethers'; -import { mutate, query } from '~amplifyClient'; import { ColonyActionType, ColonyMotion, @@ -11,9 +10,9 @@ import { NotificationType, UpdateColonyActionDocument, UpdateColonyMotionDocument, -} from '~graphql'; +} from '@joincolony/graphql'; import { MotionSide, MotionVote } from '~types'; -import { verbose, output } from '~utils'; +import { output, verbose } from '@joincolony/utils'; import { getActionByMotionId } from '~utils/actions'; import { updateDecisionInDB } from '~utils/decisions'; import { @@ -21,6 +20,7 @@ import { sendMentionNotifications, sendMotionNotifications, } from '~utils/notifications'; +import amplifyClient from '~amplifyClient'; export * from './motionStaked/helpers'; @@ -32,7 +32,7 @@ export const updateMotionInDB = async ( newMotionMessages?: CreateMotionMessageInput[], showInActionsList?: boolean, ): Promise => { - await mutate(UpdateColonyMotionDocument, { + await amplifyClient.mutate(UpdateColonyMotionDocument, { input: { ...motionData, }, @@ -40,7 +40,7 @@ export const updateMotionInDB = async ( if (newMotionMessages?.length) { for (const message of newMotionMessages) { - await mutate(CreateMotionMessageDocument, { + await amplifyClient.mutate(CreateMotionMessageDocument, { input: { ...message, }, @@ -56,7 +56,7 @@ export const updateMotionInDB = async ( 'Could not find the action in the db. This is a bug and needs investigating.', ); } else { - await mutate(UpdateColonyActionDocument, { + await amplifyClient.mutate(UpdateColonyActionDocument, { input: { id: colonyAction.id, showInActionsList, @@ -151,12 +151,12 @@ export const getMotionFromDB = async ( databaseMotionId: string, ): Promise => { const { data } = - (await query( - GetColonyMotionDocument, - { - id: databaseMotionId, - }, - )) ?? {}; + (await amplifyClient.query< + GetColonyMotionQuery, + GetColonyMotionQueryVariables + >(GetColonyMotionDocument, { + id: databaseMotionId, + })) ?? {}; const motion = data?.getColonyMotion; diff --git a/src/handlers/motions/index.ts b/apps/main-chain/src/handlers/motions/index.ts similarity index 100% rename from src/handlers/motions/index.ts rename to apps/main-chain/src/handlers/motions/index.ts diff --git a/src/handlers/motions/motionCreated/handlers/addDomain.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/addDomain.ts similarity index 87% rename from src/handlers/motions/motionCreated/handlers/addDomain.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/addDomain.ts index 8d96006be..3204b3fa5 100644 --- a/src/handlers/motions/motionCreated/handlers/addDomain.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/addDomain.ts @@ -1,7 +1,8 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { getPendingMetadataDatabaseId } from '~utils'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleAddDomainMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/editColony.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/editColony.ts similarity index 86% rename from src/handlers/motions/motionCreated/handlers/editColony.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/editColony.ts index 233e86400..6b8c36b99 100644 --- a/src/handlers/motions/motionCreated/handlers/editColony.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/editColony.ts @@ -1,7 +1,8 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { getPendingMetadataDatabaseId } from '~utils'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleEditColonyMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/editDomain.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/editDomain.ts similarity index 89% rename from src/handlers/motions/motionCreated/handlers/editDomain.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/editDomain.ts index dbea4bc41..4dd652512 100644 --- a/src/handlers/motions/motionCreated/handlers/editDomain.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/editDomain.ts @@ -1,7 +1,8 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { getDomainDatabaseId, getPendingMetadataDatabaseId } from '~utils'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleEditDomainMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/expenditures/cancelExpenditureViaArbitration.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/cancelExpenditureViaArbitration.ts similarity index 89% rename from src/handlers/motions/motionCreated/handlers/expenditures/cancelExpenditureViaArbitration.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/cancelExpenditureViaArbitration.ts index 50b424aff..4f60d96a0 100644 --- a/src/handlers/motions/motionCreated/handlers/expenditures/cancelExpenditureViaArbitration.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/cancelExpenditureViaArbitration.ts @@ -1,11 +1,12 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { createMotionInDB } from '../../helpers'; import { getDomainDatabaseId, getExpenditureDatabaseId, toNumber, } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; export default async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/expenditures/cancelStakedExpenditures.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/cancelStakedExpenditures.ts similarity index 88% rename from src/handlers/motions/motionCreated/handlers/expenditures/cancelStakedExpenditures.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/cancelStakedExpenditures.ts index 35fd79b5c..00100ab54 100644 --- a/src/handlers/motions/motionCreated/handlers/expenditures/cancelStakedExpenditures.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/cancelStakedExpenditures.ts @@ -1,11 +1,12 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { createMotionInDB } from '../../helpers'; import { getDomainDatabaseId, getExpenditureDatabaseId, toNumber, } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; export default async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/expenditures/finalizeExpenditureViaArbitration.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/finalizeExpenditureViaArbitration.ts similarity index 89% rename from src/handlers/motions/motionCreated/handlers/expenditures/finalizeExpenditureViaArbitration.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/finalizeExpenditureViaArbitration.ts index 50b424aff..4f60d96a0 100644 --- a/src/handlers/motions/motionCreated/handlers/expenditures/finalizeExpenditureViaArbitration.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/finalizeExpenditureViaArbitration.ts @@ -1,11 +1,12 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { createMotionInDB } from '../../helpers'; import { getDomainDatabaseId, getExpenditureDatabaseId, toNumber, } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; export default async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/expenditures/index.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/index.ts similarity index 100% rename from src/handlers/motions/motionCreated/handlers/expenditures/index.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/index.ts diff --git a/src/handlers/motions/motionCreated/handlers/expenditures/releaseStagedPaymentViaArbitration.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/releaseStagedPaymentViaArbitration.ts similarity index 89% rename from src/handlers/motions/motionCreated/handlers/expenditures/releaseStagedPaymentViaArbitration.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/releaseStagedPaymentViaArbitration.ts index 4decaf6f9..78ff1d027 100644 --- a/src/handlers/motions/motionCreated/handlers/expenditures/releaseStagedPaymentViaArbitration.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/expenditures/releaseStagedPaymentViaArbitration.ts @@ -1,11 +1,12 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { createMotionInDB } from '../../helpers'; import { getDomainDatabaseId, getExpenditureDatabaseId, toNumber, } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; export default async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/index.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/index.ts similarity index 100% rename from src/handlers/motions/motionCreated/handlers/index.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/index.ts diff --git a/src/handlers/motions/motionCreated/handlers/makeArbitraryTransactions.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/makeArbitraryTransactions.ts similarity index 90% rename from src/handlers/motions/motionCreated/handlers/makeArbitraryTransactions.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/makeArbitraryTransactions.ts index c6c7729b5..c13b23594 100644 --- a/src/handlers/motions/motionCreated/handlers/makeArbitraryTransactions.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/makeArbitraryTransactions.ts @@ -1,9 +1,10 @@ import { TransactionDescription } from 'ethers/lib/utils'; import { Id } from '@colony/colony-js'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { generateArbitraryTxsFromArrays, getDomainDatabaseId } from '~utils'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleMakeArbitraryTransactionsMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/metadataDelta.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/metadataDelta.ts similarity index 67% rename from src/handlers/motions/motionCreated/handlers/metadataDelta.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/metadataDelta.ts index b44141388..086391799 100644 --- a/src/handlers/motions/motionCreated/handlers/metadataDelta.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/metadataDelta.ts @@ -1,15 +1,17 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ColonyActionType } from '~graphql'; -import { ContractEvent } from '~types'; +import { ColonyActionType } from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { isAddVerifiedMembersOperation, + isDisableProxyColonyOperation, + isEnableProxyColonyOperation, isManageTokensOperation, isRemoveVerifiedMembersOperation, parseMetadataDeltaOperation, - verbose, } from '~utils'; import { createMotionInDB } from '../helpers'; import { manageTokensMotionHandler } from './metadataDeltaHandlers/manageTokens'; +import { verbose } from '@joincolony/utils'; export const handleMetadataDeltaMotion = async ( colonyAddress: string, @@ -51,6 +53,24 @@ export const handleMetadataDeltaMotion = async ( operation, }); } + + if ( + isDisableProxyColonyOperation(operation) || + isEnableProxyColonyOperation(operation) + ) { + const targetChainId = operation.payload[0]; + + if (!targetChainId) { + return; + } + + await createMotionInDB(colonyAddress, event, { + type: isDisableProxyColonyOperation(operation) + ? ColonyActionType.RemoveProxyColonyMotion + : ColonyActionType.AddProxyColonyMotion, + targetChainId: Number(targetChainId), + }); + } } catch (error) { verbose('Error while handling metadata delta motion created', error); } diff --git a/src/handlers/motions/motionCreated/handlers/metadataDeltaHandlers/manageTokens.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/metadataDeltaHandlers/manageTokens.ts similarity index 89% rename from src/handlers/motions/motionCreated/handlers/metadataDeltaHandlers/manageTokens.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/metadataDeltaHandlers/manageTokens.ts index cf33ab129..5ffa35578 100644 --- a/src/handlers/motions/motionCreated/handlers/metadataDeltaHandlers/manageTokens.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/metadataDeltaHandlers/manageTokens.ts @@ -4,8 +4,8 @@ import { getColonyFromDB, } from '~utils'; import { createMotionInDB } from '../../helpers'; -import { ColonyActionType } from '~graphql'; -import { ContractEvent } from '~types'; +import { ColonyActionType } from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; export const manageTokensMotionHandler = async ({ colonyAddress, diff --git a/src/handlers/motions/motionCreated/handlers/mintTokens.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/mintTokens.ts similarity index 89% rename from src/handlers/motions/motionCreated/handlers/mintTokens.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/mintTokens.ts index 6c651334b..8e9c2b047 100644 --- a/src/handlers/motions/motionCreated/handlers/mintTokens.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/mintTokens.ts @@ -1,7 +1,8 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { getColonyTokenAddress, getDomainDatabaseId } from '~utils'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleMintTokensMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/moveFunds.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/moveFunds.ts similarity index 95% rename from src/handlers/motions/motionCreated/handlers/moveFunds.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/moveFunds.ts index 49a0688d5..1ee27f88d 100644 --- a/src/handlers/motions/motionCreated/handlers/moveFunds.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/moveFunds.ts @@ -1,7 +1,7 @@ import { TransactionDescription } from 'ethers/lib/utils'; import { BigNumber } from 'ethers'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { getCachedColonyClient, getDomainDatabaseId, @@ -11,6 +11,7 @@ import { } from '~utils'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleMoveFundsMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/multicall/index.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/index.ts similarity index 100% rename from src/handlers/motions/motionCreated/handlers/multicall/index.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/index.ts diff --git a/src/handlers/motions/motionCreated/handlers/multicall/multicall.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicall.ts similarity index 86% rename from src/handlers/motions/motionCreated/handlers/multicall/multicall.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicall.ts index d79da0851..11f8d7b61 100644 --- a/src/handlers/motions/motionCreated/handlers/multicall/multicall.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicall.ts @@ -1,8 +1,9 @@ import { TransactionDescription } from 'ethers/lib/utils'; import { utils } from 'ethers'; -import { decodeFunctions, getCachedColonyClient, output } from '~utils'; -import { ContractEvent } from '~types'; +import { decodeFunctions, getCachedColonyClient } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; import { multicallHandlers } from './multicallHandlers'; +import { output } from '@joincolony/utils'; export const handleMulticallMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/editLockedExpenditureMotion.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/editLockedExpenditureMotion.ts similarity index 97% rename from src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/editLockedExpenditureMotion.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/editLockedExpenditureMotion.ts index 483d85280..0ba5f3064 100644 --- a/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/editLockedExpenditureMotion.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/editLockedExpenditureMotion.ts @@ -1,4 +1,4 @@ -import { ColonyActionType, ExpenditurePayout } from '~graphql'; +import { ColonyActionType, ExpenditurePayout } from '@joincolony/graphql'; import { toNumber } from 'lodash'; import { BigNumber } from 'ethers'; import { diff --git a/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/fundExpenditureMotion.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/fundExpenditureMotion.ts similarity index 94% rename from src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/fundExpenditureMotion.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/fundExpenditureMotion.ts index 1d2761148..34c67fe96 100644 --- a/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/fundExpenditureMotion.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/fundExpenditureMotion.ts @@ -1,11 +1,11 @@ -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, ExpenditureFundingItem, GetExpenditureByNativeFundingPotIdAndColonyDocument, GetExpenditureByNativeFundingPotIdAndColonyQuery, GetExpenditureByNativeFundingPotIdAndColonyQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import { createMotionInDB } from '~handlers/motions/motionCreated/helpers'; import { ContractMethodSignatures } from '~types'; import { notNull, toNumber } from '~utils'; @@ -30,7 +30,7 @@ export const fundExpenditureMotionHandler: MulticallHandler = async ({ // This means if the multicall funds multiple expenditures, we will only create a motion for the first one const targetPotId = decodedFunctions[0]?.args._toPot; - const response = await query< + const response = await amplifyClient.query< GetExpenditureByNativeFundingPotIdAndColonyQuery, GetExpenditureByNativeFundingPotIdAndColonyQueryVariables >(GetExpenditureByNativeFundingPotIdAndColonyDocument, { diff --git a/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/index.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/index.ts similarity index 100% rename from src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/index.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/index.ts diff --git a/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/releaseStagedPaymentsMotion.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/releaseStagedPaymentsMotion.ts similarity index 95% rename from src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/releaseStagedPaymentsMotion.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/releaseStagedPaymentsMotion.ts index 357e9c524..cb2ccb2fa 100644 --- a/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/releaseStagedPaymentsMotion.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/releaseStagedPaymentsMotion.ts @@ -1,4 +1,4 @@ -import { ColonyActionType } from '~graphql'; +import { ColonyActionType } from '@joincolony/graphql'; import { createMotionInDB } from '~handlers/motions/motionCreated/helpers'; import { ContractMethodSignatures } from '~types'; import { diff --git a/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/types.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/types.ts similarity index 89% rename from src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/types.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/types.ts index 4d2750d37..0241ac0ba 100644 --- a/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/types.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/multicall/multicallHandlers/types.ts @@ -1,5 +1,5 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; interface MulticallHandlerParams { colonyAddress: string; diff --git a/src/handlers/motions/motionCreated/handlers/networkUpgrade.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/networkUpgrade.ts similarity index 84% rename from src/handlers/motions/motionCreated/handlers/networkUpgrade.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/networkUpgrade.ts index 063c1383c..aa0126512 100644 --- a/src/handlers/motions/motionCreated/handlers/networkUpgrade.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/networkUpgrade.ts @@ -1,9 +1,10 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { toNumber } from '~utils'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleNetworkUpgradeMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/payment.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/payment.ts similarity index 89% rename from src/handlers/motions/motionCreated/handlers/payment.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/payment.ts index cb3bd30cc..2db463457 100644 --- a/src/handlers/motions/motionCreated/handlers/payment.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/payment.ts @@ -1,12 +1,13 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { getDomainDatabaseId, toNumber } from '~utils'; -import { ColonyActionType } from '~graphql'; +import { ColonyActionType } from '@joincolony/graphql'; import { MultiPayment } from '~handlers/actions/oneTxPayment'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handlePaymentMotion = async ( colonyAddress: string, diff --git a/apps/main-chain/src/handlers/motions/motionCreated/handlers/proxyColonies/createProxyColony.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/proxyColonies/createProxyColony.ts new file mode 100644 index 000000000..d0a853b3b --- /dev/null +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/proxyColonies/createProxyColony.ts @@ -0,0 +1,20 @@ +import { TransactionDescription } from 'ethers/lib/utils'; +import { createMotionInDB } from '../../helpers'; +import { ContractEvent } from '@joincolony/blocks'; +import { motionNameMapping } from '~types'; + +export const handleCreateProxyColonyMotion = async ( + colonyAddress: string, + event: ContractEvent, + parsedAction: TransactionDescription, +): Promise => { + const { _destinationChainId: destinationChainId } = parsedAction.args; + if (!destinationChainId) { + return; + } + + await createMotionInDB(colonyAddress, event, { + type: motionNameMapping[parsedAction.name], + targetChainId: destinationChainId.toNumber(), + }); +}; diff --git a/src/handlers/motions/motionCreated/handlers/reputation.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/reputation.ts similarity index 87% rename from src/handlers/motions/motionCreated/handlers/reputation.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/reputation.ts index 643fd06a4..691f01b8d 100644 --- a/src/handlers/motions/motionCreated/handlers/reputation.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/reputation.ts @@ -1,8 +1,9 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { getDomainDatabaseId } from '~utils'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleDomainEditReputationMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/setUserRoles.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/setUserRoles.ts similarity index 90% rename from src/handlers/motions/motionCreated/handlers/setUserRoles.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/setUserRoles.ts index 2da44194c..06d8ff48f 100644 --- a/src/handlers/motions/motionCreated/handlers/setUserRoles.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/setUserRoles.ts @@ -1,10 +1,11 @@ import { TransactionDescription } from 'ethers/lib/utils'; import { constants } from 'ethers'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { getDomainDatabaseId, getRolesMapFromHexString } from '~utils'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleSetUserRolesMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/simpleDecision.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/simpleDecision.ts similarity index 85% rename from src/handlers/motions/motionCreated/handlers/simpleDecision.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/simpleDecision.ts index 0326c4668..7d88b9d65 100644 --- a/src/handlers/motions/motionCreated/handlers/simpleDecision.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/simpleDecision.ts @@ -1,8 +1,9 @@ -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { SimpleTransactionDescription } from '~utils'; import { getColonyDecisionId } from '~utils/decisions'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleSimpleDecisionMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/handlers/unlockToken.ts b/apps/main-chain/src/handlers/motions/motionCreated/handlers/unlockToken.ts similarity index 87% rename from src/handlers/motions/motionCreated/handlers/unlockToken.ts rename to apps/main-chain/src/handlers/motions/motionCreated/handlers/unlockToken.ts index 8ff70a8c4..dc9ed6296 100644 --- a/src/handlers/motions/motionCreated/handlers/unlockToken.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/handlers/unlockToken.ts @@ -1,8 +1,9 @@ import { Id } from '@colony/colony-js'; import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, motionNameMapping } from '~types'; +import { motionNameMapping } from '~types'; import { getColonyTokenAddress, getDomainDatabaseId } from '~utils'; import { createMotionInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleUnlockTokenMotion = async ( colonyAddress: string, diff --git a/src/handlers/motions/motionCreated/helpers.ts b/apps/main-chain/src/handlers/motions/motionCreated/helpers.ts similarity index 92% rename from src/handlers/motions/motionCreated/helpers.ts rename to apps/main-chain/src/handlers/motions/motionCreated/helpers.ts index 7148188dd..50837c878 100644 --- a/src/handlers/motions/motionCreated/helpers.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/helpers.ts @@ -1,13 +1,13 @@ import { BigNumber } from 'ethers'; import { AnyVotingReputationClient } from '@colony/colony-js'; -import { ContractEvent, MotionEvents } from '~types'; +import { MotionEvents } from '~types'; import { createColonyAction, getDomainDatabaseId, getVotingClient, } from '~utils'; -import { GraphQLFnReturn, mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyMotion, CreateColonyActionInput, @@ -19,7 +19,7 @@ import { CreateMotionMessageInput, CreateMotionMessageMutation, CreateMotionMessageMutationVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import networkClient from '~networkClient'; import { @@ -28,6 +28,8 @@ import { getUserMinStake, getMessageKey, } from '../helpers'; +import { type GraphQLFnReturn } from '@joincolony/clients'; +import { ContractEvent } from '@joincolony/blocks'; interface GetMotionDataArgs { transactionHash: string; @@ -140,20 +142,20 @@ const getInitialMotionMessage = async ( const createColonyMotion = async ( motionData: CreateColonyMotionInput, ): Promise => { - await mutate( - CreateColonyMotionDocument, - { - input: { - ...motionData, - }, + await amplifyClient.mutate< + CreateColonyMotionMutation, + CreateColonyMotionMutationVariables + >(CreateColonyMotionDocument, { + input: { + ...motionData, }, - ); + }); }; const createMotionMessage = async ( initialMotionMessage: CreateMotionMessageInput, ): Promise => { - await mutate< + await amplifyClient.mutate< CreateMotionMessageMutation, CreateMotionMessageMutationVariables >(CreateMotionMessageDocument, { diff --git a/src/handlers/motions/motionCreated/index.ts b/apps/main-chain/src/handlers/motions/motionCreated/index.ts similarity index 100% rename from src/handlers/motions/motionCreated/index.ts rename to apps/main-chain/src/handlers/motions/motionCreated/index.ts diff --git a/src/handlers/motions/motionCreated/motionCreated.ts b/apps/main-chain/src/handlers/motions/motionCreated/motionCreated.ts similarity index 91% rename from src/handlers/motions/motionCreated/motionCreated.ts rename to apps/main-chain/src/handlers/motions/motionCreated/motionCreated.ts index d42c18a6f..c279c5f8d 100644 --- a/src/handlers/motions/motionCreated/motionCreated.ts +++ b/apps/main-chain/src/handlers/motions/motionCreated/motionCreated.ts @@ -1,14 +1,12 @@ import { utils } from 'ethers'; -import { ColonyOperations, EventHandler } from '~types'; +import { ColonyOperations } from '~types'; import { getCachedColonyClient, getStakedExpenditureClient, getStagedExpenditureClient, getOneTxPaymentClient, getVotingClient, - verbose, - output, SimpleTransactionDescription, parseMotionAction, } from '~utils'; @@ -32,7 +30,14 @@ import { handleFinalizeExpenditureViaArbitrationMotion, handleReleaseStagedPaymentViaArbitration, } from './handlers'; -import { ExtensionEventListener } from '~eventListeners'; +import { output, verbose } from '@joincolony/utils'; +import { + EventHandler, + ExtensionEventListener, + ProxyColonyEvents, +} from '@joincolony/blocks'; +import networkClient from '~networkClient'; +import { handleCreateProxyColonyMotion } from './handlers/proxyColonies/createProxyColony'; export const handleMotionCreated: EventHandler = async ( event, @@ -74,6 +79,8 @@ export const handleMotionCreated: EventHandler = async ( oneTxPaymentClient?.interface, stakedExpenditureClient?.interface, stagedExpenditureClient?.interface, + networkClient.interface, + ProxyColonyEvents, ].filter(Boolean) as utils.Interface[]; // Casting seems necessary as TS does not pick up the .filter() const parsedAction = parseMotionAction(motion.action, interfaces); @@ -216,6 +223,11 @@ export const handleMotionCreated: EventHandler = async ( break; } + case ColonyOperations.CreateProxyColony: { + await handleCreateProxyColonyMotion(colonyAddress, event, parsedAction); + break; + } + default: { break; } diff --git a/src/handlers/motions/motionEventSet/index.ts b/apps/main-chain/src/handlers/motions/motionEventSet/index.ts similarity index 88% rename from src/handlers/motions/motionEventSet/index.ts rename to apps/main-chain/src/handlers/motions/motionEventSet/index.ts index a1870dba4..36b99f088 100644 --- a/src/handlers/motions/motionEventSet/index.ts +++ b/apps/main-chain/src/handlers/motions/motionEventSet/index.ts @@ -1,6 +1,5 @@ -import { ExtensionEventListener } from '~eventListeners'; -import { EventHandler } from '~types'; -import { verbose, getVotingClient } from '~utils'; +import { ExtensionEventListener, EventHandler } from '@joincolony/blocks'; +import { getVotingClient } from '~utils'; import { getBlockChainTimestampISODate } from '~utils/dates'; import { @@ -8,6 +7,7 @@ import { getMotionFromDB, updateMotionInDB, } from '../helpers'; +import { verbose } from '@joincolony/utils'; export const handleMotionEventSet: EventHandler = async (event, listener) => { const { diff --git a/src/handlers/motions/motionFinalized/helpers.ts b/apps/main-chain/src/handlers/motions/motionFinalized/helpers.ts similarity index 95% rename from src/handlers/motions/motionFinalized/helpers.ts rename to apps/main-chain/src/handlers/motions/motionFinalized/helpers.ts index 5e03004ea..70c9d44d4 100644 --- a/src/handlers/motions/motionFinalized/helpers.ts +++ b/apps/main-chain/src/handlers/motions/motionFinalized/helpers.ts @@ -6,10 +6,9 @@ import { ColonyOperations, MotionVote } from '~types'; import { getCachedColonyClient, getColonyFromDB, - output, parseFunctionData, } from '~utils'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, ColonyMotion, @@ -21,8 +20,9 @@ import { UpdateColonyActionMutation, UpdateColonyActionMutationVariables, UpdateColonyDocument, -} from '~graphql'; +} from '@joincolony/graphql'; import { getAmountLessFee, getNetworkInverseFee } from '~utils/networkFee'; +import { output } from '@joincolony/utils'; export const getStakerReward = async ( motionId: string, @@ -99,7 +99,7 @@ export const updateColonyUnclaimedStakes = async ( motionsWithUnclaimedStakes = [unclaimedMotionStake]; } - await mutate(UpdateColonyDocument, { + await amplifyClient.mutate(UpdateColonyDocument, { input: { id: colonyAddress, motionsWithUnclaimedStakes, @@ -137,7 +137,7 @@ export const updateAmountToExcludeNetworkFee = async ( } const { data } = - (await query< + (await amplifyClient.query< GetColonyActionByMotionIdQuery, GetColonyActionByMotionIdQueryVariables >(GetColonyActionByMotionIdDocument, { @@ -172,7 +172,7 @@ export const updateAmountToExcludeNetworkFee = async ( const amountLessFee = getAmountLessFee(amountWithFee, networkInverseFee); const networkFee = BigNumber.from(amountWithFee).sub(amountLessFee); - await mutate< + await amplifyClient.mutate< UpdateColonyActionMutation, UpdateColonyActionMutationVariables >(UpdateColonyActionDocument, { diff --git a/src/handlers/motions/motionFinalized/index.ts b/apps/main-chain/src/handlers/motions/motionFinalized/index.ts similarity index 100% rename from src/handlers/motions/motionFinalized/index.ts rename to apps/main-chain/src/handlers/motions/motionFinalized/index.ts diff --git a/src/handlers/motions/motionFinalized/motionFinalized.ts b/apps/main-chain/src/handlers/motions/motionFinalized/motionFinalized.ts similarity index 95% rename from src/handlers/motions/motionFinalized/motionFinalized.ts rename to apps/main-chain/src/handlers/motions/motionFinalized/motionFinalized.ts index fb57abc68..2e24e244f 100644 --- a/src/handlers/motions/motionFinalized/motionFinalized.ts +++ b/apps/main-chain/src/handlers/motions/motionFinalized/motionFinalized.ts @@ -1,7 +1,7 @@ import { BigNumber, constants } from 'ethers'; -import { ExtensionEventListener } from '~eventListeners'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; -import { EventHandler, MotionEvents } from '~types'; +import { MotionEvents } from '~types'; import { getActionByMotionId, getVotingClient } from '~utils'; import { linkPendingMetadata } from '~utils/colonyMetadata'; import { getBlockChainTimestampISODate } from '~utils/dates'; @@ -22,7 +22,7 @@ import { getNotificationCategory, sendMotionNotifications, } from '~utils/notifications'; -import { NotificationType } from '~graphql'; +import { NotificationType } from '@joincolony/graphql'; export const handleMotionFinalized: EventHandler = async (event, listener) => { const { diff --git a/src/handlers/motions/motionRewardClaimed/helpers.ts b/apps/main-chain/src/handlers/motions/motionRewardClaimed/helpers.ts similarity index 72% rename from src/handlers/motions/motionRewardClaimed/helpers.ts rename to apps/main-chain/src/handlers/motions/motionRewardClaimed/helpers.ts index b0e4d3063..cabedfd5b 100644 --- a/src/handlers/motions/motionRewardClaimed/helpers.ts +++ b/apps/main-chain/src/handlers/motions/motionRewardClaimed/helpers.ts @@ -1,4 +1,4 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { StakerReward, UpdateColonyDocument, @@ -7,9 +7,10 @@ import { UpdateUserStakeDocument, UpdateUserStakeMutation, UpdateUserStakeMutationVariables, -} from '~graphql'; -import { getColonyFromDB, output } from '~utils'; +} from '@joincolony/graphql'; +import { getColonyFromDB } from '~utils'; import { getUserStakeDatabaseId } from '~utils/stakes'; +import { output } from '@joincolony/utils'; export const getUpdatedStakerRewards = ( stakerRewards: StakerReward[], @@ -54,15 +55,15 @@ export const updateColonyUnclaimedStakes = async ( /* If we still have some unclaimed stakes, update the array */ if (unclaimedRewards.length) { motionWithUnclaimedStakes.unclaimedRewards = unclaimedRewards; - await mutate( - UpdateColonyDocument, - { - input: { - id: colonyAddress, - motionsWithUnclaimedStakes, - }, + await amplifyClient.mutate< + UpdateColonyMutation, + UpdateColonyMutationVariables + >(UpdateColonyDocument, { + input: { + id: colonyAddress, + motionsWithUnclaimedStakes, }, - ); + }); } else { /* If there are no more unclaimed stakes, remove this motion from the array of motions with unclaimed stakes */ @@ -70,15 +71,15 @@ export const updateColonyUnclaimedStakes = async ( motionsWithUnclaimedStakes?.filter( ({ motionId }) => motionDatabaseId !== motionId, ); - await mutate( - UpdateColonyDocument, - { - input: { - id: colonyAddress, - motionsWithUnclaimedStakes: updatedMotionsWithUnclaimedStakes, - }, + await amplifyClient.mutate< + UpdateColonyMutation, + UpdateColonyMutationVariables + >(UpdateColonyDocument, { + input: { + id: colonyAddress, + motionsWithUnclaimedStakes: updatedMotionsWithUnclaimedStakes, }, - ); + }); } } else { output( @@ -99,13 +100,13 @@ export const reclaimUserStake = async ( motionTransactionHash: string, ): Promise => { // Update user stake status - await mutate( - UpdateUserStakeDocument, - { - input: { - id: getUserStakeDatabaseId(userAddress, motionTransactionHash), - isClaimed: true, - }, + await amplifyClient.mutate< + UpdateUserStakeMutation, + UpdateUserStakeMutationVariables + >(UpdateUserStakeDocument, { + input: { + id: getUserStakeDatabaseId(userAddress, motionTransactionHash), + isClaimed: true, }, - ); + }); }; diff --git a/src/handlers/motions/motionRewardClaimed/index.ts b/apps/main-chain/src/handlers/motions/motionRewardClaimed/index.ts similarity index 100% rename from src/handlers/motions/motionRewardClaimed/index.ts rename to apps/main-chain/src/handlers/motions/motionRewardClaimed/index.ts diff --git a/src/handlers/motions/motionRewardClaimed/motionRewardClaimed.ts b/apps/main-chain/src/handlers/motions/motionRewardClaimed/motionRewardClaimed.ts similarity index 90% rename from src/handlers/motions/motionRewardClaimed/motionRewardClaimed.ts rename to apps/main-chain/src/handlers/motions/motionRewardClaimed/motionRewardClaimed.ts index a7ab809dd..73b49c0c5 100644 --- a/src/handlers/motions/motionRewardClaimed/motionRewardClaimed.ts +++ b/apps/main-chain/src/handlers/motions/motionRewardClaimed/motionRewardClaimed.ts @@ -1,4 +1,4 @@ -import { EventHandler, MotionEvents } from '~types'; +import { MotionEvents } from '~types'; import { getVotingClient } from '~utils'; import { getMotionDatabaseId, @@ -11,8 +11,8 @@ import { reclaimUserStake, getUpdatedStakerRewards, } from './helpers'; -import { ColonyMotion } from '~graphql'; -import { ExtensionEventListener } from '~eventListeners'; +import { ColonyMotion } from '@joincolony/graphql'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; export const handleMotionRewardClaimed: EventHandler = async ( event, diff --git a/src/handlers/motions/motionStaked/helpers.ts b/apps/main-chain/src/handlers/motions/motionStaked/helpers.ts similarity index 91% rename from src/handlers/motions/motionStaked/helpers.ts rename to apps/main-chain/src/handlers/motions/motionStaked/helpers.ts index 9169c0f88..5cabefa86 100644 --- a/src/handlers/motions/motionStaked/helpers.ts +++ b/apps/main-chain/src/handlers/motions/motionStaked/helpers.ts @@ -15,8 +15,8 @@ import { UpdateUserStakeMutationVariables, UserMotionStakes, UserStakeType, -} from '~graphql'; -import { mutate, query } from '~amplifyClient'; +} from '@joincolony/graphql'; +import amplifyClient from '~amplifyClient'; import { getUserStakeDatabaseId } from '~utils/stakes'; import { getMotionSide } from '../helpers'; import { getBlockChainTimestampISODate } from '~utils/dates'; @@ -302,7 +302,7 @@ export const updateUserStake = async ( ): Promise => { const userStakeId = getUserStakeDatabaseId(userAddress, transactionHash); const { data } = - (await query( + (await amplifyClient.query( GetUserStakeDocument, { id: userStakeId, @@ -313,30 +313,30 @@ export const updateUserStake = async ( if (existingUserStake) { const { amount: existingAmount } = existingUserStake; - await mutate( - UpdateUserStakeDocument, - { - input: { - id: userStakeId, - amount: BigNumber.from(existingAmount).add(amount).toString(), - }, + await amplifyClient.mutate< + UpdateUserStakeMutation, + UpdateUserStakeMutationVariables + >(UpdateUserStakeDocument, { + input: { + id: userStakeId, + amount: BigNumber.from(existingAmount).add(amount).toString(), }, - ); + }); } else { - await mutate( - CreateUserStakeDocument, - { - input: { - id: userStakeId, - userAddress, - colonyAddress, - actionId: transactionHash, - amount: amount.toString(), - isClaimed: false, - createdAt: getBlockChainTimestampISODate(timestamp), - type: UserStakeType.Motion, - }, + await amplifyClient.mutate< + CreateUserStakeMutation, + CreateUserStakeMutationVariables + >(CreateUserStakeDocument, { + input: { + id: userStakeId, + userAddress, + colonyAddress, + actionId: transactionHash, + amount: amount.toString(), + isClaimed: false, + createdAt: getBlockChainTimestampISODate(timestamp), + type: UserStakeType.Motion, }, - ); + }); } }; diff --git a/src/handlers/motions/motionStaked/index.ts b/apps/main-chain/src/handlers/motions/motionStaked/index.ts similarity index 100% rename from src/handlers/motions/motionStaked/index.ts rename to apps/main-chain/src/handlers/motions/motionStaked/index.ts diff --git a/src/handlers/motions/motionStaked/motionStaked.ts b/apps/main-chain/src/handlers/motions/motionStaked/motionStaked.ts similarity index 94% rename from src/handlers/motions/motionStaked/motionStaked.ts rename to apps/main-chain/src/handlers/motions/motionStaked/motionStaked.ts index 78dc5b0e7..6dab4e903 100644 --- a/src/handlers/motions/motionStaked/motionStaked.ts +++ b/apps/main-chain/src/handlers/motions/motionStaked/motionStaked.ts @@ -1,6 +1,5 @@ -import { ExtensionEventListener } from '~eventListeners'; -import { EventHandler, MotionSide } from '~types'; -import { verbose, getVotingClient, getActionByMotionId } from '~utils'; +import { MotionSide } from '~types'; +import { getVotingClient, getActionByMotionId } from '~utils'; import { getBlockChainTimestampISODate } from '~utils/dates'; import { getMotionDatabaseId, @@ -20,7 +19,9 @@ import { sendMotionNotifications, } from '~utils/notifications'; import { MotionNotificationVariables } from '~types/notifications'; -import { NotificationType } from '~graphql'; +import { NotificationType } from '@joincolony/graphql'; +import { verbose } from '@joincolony/utils'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; export const handleMotionStaked: EventHandler = async ( event, diff --git a/src/handlers/motions/motionVoteRevealed/helpers.ts b/apps/main-chain/src/handlers/motions/motionVoteRevealed/helpers.ts similarity index 72% rename from src/handlers/motions/motionVoteRevealed/helpers.ts rename to apps/main-chain/src/handlers/motions/motionVoteRevealed/helpers.ts index ca8eae0c7..095823454 100644 --- a/src/handlers/motions/motionVoteRevealed/helpers.ts +++ b/apps/main-chain/src/handlers/motions/motionVoteRevealed/helpers.ts @@ -1,5 +1,5 @@ import { BigNumber } from 'ethers'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { CreateUserVoterRewardDocument, CreateUserVoterRewardMutation, @@ -7,7 +7,7 @@ import { GetVoterRewardsDocument, GetVoterRewardsQuery, GetVoterRewardsQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; export const createUserReward = async ({ colonyAddress, @@ -27,18 +27,18 @@ export const createUserReward = async ({ // Get rewards for voters on the winning side const { data } = - (await query( - GetVoterRewardsDocument, - { - input: { - rootHash, - motionId, - colonyAddress, - nativeMotionDomainId, - voterAddress: userAddress, - }, + (await amplifyClient.query< + GetVoterRewardsQuery, + GetVoterRewardsQueryVariables + >(GetVoterRewardsDocument, { + input: { + rootHash, + motionId, + colonyAddress, + nativeMotionDomainId, + voterAddress: userAddress, }, - )) ?? {}; + })) ?? {}; const { reward: voterReward } = data?.getVoterRewards ?? {}; @@ -46,7 +46,7 @@ export const createUserReward = async ({ return; } - await mutate< + await amplifyClient.mutate< CreateUserVoterRewardMutation, CreateUserVoterRewardMutationVariables >(CreateUserVoterRewardDocument, { diff --git a/src/handlers/motions/motionVoteRevealed/index.ts b/apps/main-chain/src/handlers/motions/motionVoteRevealed/index.ts similarity index 90% rename from src/handlers/motions/motionVoteRevealed/index.ts rename to apps/main-chain/src/handlers/motions/motionVoteRevealed/index.ts index 29b8c90ae..a082d103a 100644 --- a/src/handlers/motions/motionVoteRevealed/index.ts +++ b/apps/main-chain/src/handlers/motions/motionVoteRevealed/index.ts @@ -1,15 +1,16 @@ -import { EventHandler, MotionSide } from '~types'; -import { getVotingClient, verbose } from '~utils'; +import { MotionSide } from '~types'; +import { getVotingClient } from '~utils'; import { getMotionDatabaseId, getMotionFromDB, updateMotionInDB, } from '../helpers'; -import { VoterRecord } from '~graphql'; -import { ExtensionEventListener } from '~eventListeners'; +import { VoterRecord } from '@joincolony/graphql'; import { createUserReward } from './helpers'; import networkClient from '~networkClient'; import { BigNumber } from 'ethers'; +import { verbose } from '@joincolony/utils'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; export const handleMotionVoteRevealed: EventHandler = async ( event, diff --git a/src/handlers/motions/motionVoteSubmitted/helpers.ts b/apps/main-chain/src/handlers/motions/motionVoteSubmitted/helpers.ts similarity index 94% rename from src/handlers/motions/motionVoteSubmitted/helpers.ts rename to apps/main-chain/src/handlers/motions/motionVoteSubmitted/helpers.ts index ce2f4b53c..18df73d06 100644 --- a/src/handlers/motions/motionVoteSubmitted/helpers.ts +++ b/apps/main-chain/src/handlers/motions/motionVoteSubmitted/helpers.ts @@ -1,5 +1,5 @@ import { BigNumber } from 'ethers'; -import { VoterRecord } from '~graphql'; +import { VoterRecord } from '@joincolony/graphql'; export const getUpdatedVoterRecord = ( voterRecord: VoterRecord[], diff --git a/src/handlers/motions/motionVoteSubmitted/index.ts b/apps/main-chain/src/handlers/motions/motionVoteSubmitted/index.ts similarity index 90% rename from src/handlers/motions/motionVoteSubmitted/index.ts rename to apps/main-chain/src/handlers/motions/motionVoteSubmitted/index.ts index ce459b3b7..a33cdf996 100644 --- a/src/handlers/motions/motionVoteSubmitted/index.ts +++ b/apps/main-chain/src/handlers/motions/motionVoteSubmitted/index.ts @@ -1,6 +1,5 @@ -import { ExtensionEventListener } from '~eventListeners'; -import { EventHandler } from '~types'; -import { getActionByMotionId, getVotingClient, verbose } from '~utils'; +import { ExtensionEventListener, EventHandler } from '@joincolony/blocks'; +import { getActionByMotionId, getVotingClient } from '~utils'; import { getMotionDatabaseId, getMotionFromDB, @@ -12,7 +11,8 @@ import { getNotificationCategory, sendMotionNotifications, } from '~utils/notifications'; -import { NotificationType } from '~graphql'; +import { NotificationType } from '@joincolony/graphql'; +import { verbose } from '@joincolony/utils'; export const handleMotionVoteSubmitted: EventHandler = async ( event, diff --git a/src/handlers/multiSig/approvalChanged/approvalChanged.ts b/apps/main-chain/src/handlers/multiSig/approvalChanged/approvalChanged.ts similarity index 93% rename from src/handlers/multiSig/approvalChanged/approvalChanged.ts rename to apps/main-chain/src/handlers/multiSig/approvalChanged/approvalChanged.ts index 5d03fe83e..738947d7d 100644 --- a/src/handlers/multiSig/approvalChanged/approvalChanged.ts +++ b/apps/main-chain/src/handlers/multiSig/approvalChanged/approvalChanged.ts @@ -1,8 +1,6 @@ import { BigNumber } from 'ethers'; -import { ExtensionEventListener } from '~eventListeners'; -import { MultiSigVote, NotificationType } from '~graphql'; -import { getChainId } from '~provider'; -import { EventHandler } from '~types'; +import { MultiSigVote, NotificationType } from '@joincolony/graphql'; +import rpcProvider from '~provider'; import { addMultiSigVote, getMultiSigDatabaseId, @@ -15,6 +13,7 @@ import { getNotificationCategory, sendMultisigActionNotifications, } from '~utils/notifications'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; export const handleMultiSigApprovalChanged: EventHandler = async ( event, @@ -24,7 +23,7 @@ export const handleMultiSigApprovalChanged: EventHandler = async ( const { colonyAddress } = listener as ExtensionEventListener; - const chainId = getChainId(); + const chainId = rpcProvider.getChainId(); const { agent: userAddress, motionId, role, approval } = event.args; const multiSigClient = await getMultiSigClient(colonyAddress); diff --git a/src/handlers/multiSig/domainSkillThresholdSet.ts b/apps/main-chain/src/handlers/multiSig/domainSkillThresholdSet.ts similarity index 90% rename from src/handlers/multiSig/domainSkillThresholdSet.ts rename to apps/main-chain/src/handlers/multiSig/domainSkillThresholdSet.ts index 1a518a70b..fa2d08852 100644 --- a/src/handlers/multiSig/domainSkillThresholdSet.ts +++ b/apps/main-chain/src/handlers/multiSig/domainSkillThresholdSet.ts @@ -1,4 +1,4 @@ -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetColonyExtensionByAddressDocument, GetColonyExtensionByAddressQuery, @@ -6,8 +6,8 @@ import { GetDomainsByExtensionAddressDocument, GetDomainsByExtensionAddressQuery, GetDomainsByExtensionAddressQueryVariables, -} from '~graphql'; -import { ContractEvent, EventHandler } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent, EventHandler } from '@joincolony/blocks'; import { getCachedColonyClient, toNumber } from '~utils'; import { updateExtension } from '~utils/extensions/updateExtension'; @@ -17,7 +17,7 @@ export const handleMultiSigDomainSkillThresholdSet: EventHandler = async ( const { contractAddress: multiSigAddress } = event; const { domainSkillId, threshold } = event.args; - const colonyExtensionsResponse = await query< + const colonyExtensionsResponse = await amplifyClient.query< GetColonyExtensionByAddressQuery, GetColonyExtensionByAddressQueryVariables >(GetColonyExtensionByAddressDocument, { @@ -28,7 +28,7 @@ export const handleMultiSigDomainSkillThresholdSet: EventHandler = async ( colonyExtensionsResponse?.data?.getColonyExtension?.params ?? {}; if (multiSig) { - const domainsResponse = await query< + const domainsResponse = await amplifyClient.query< GetDomainsByExtensionAddressQuery, GetDomainsByExtensionAddressQueryVariables >(GetDomainsByExtensionAddressDocument, { diff --git a/src/handlers/multiSig/globalThresholdSet.ts b/apps/main-chain/src/handlers/multiSig/globalThresholdSet.ts similarity index 89% rename from src/handlers/multiSig/globalThresholdSet.ts rename to apps/main-chain/src/handlers/multiSig/globalThresholdSet.ts index 5c017aee9..deeac81ea 100644 --- a/src/handlers/multiSig/globalThresholdSet.ts +++ b/apps/main-chain/src/handlers/multiSig/globalThresholdSet.ts @@ -1,13 +1,13 @@ import { constants } from 'ethers'; -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetColonyExtensionByAddressDocument, GetColonyExtensionByAddressQuery, GetColonyExtensionByAddressQueryVariables, NotificationType, -} from '~graphql'; +} from '@joincolony/graphql'; import networkClient from '~networkClient'; -import { EventHandler } from '~types'; +import { EventHandler } from '@joincolony/blocks'; import { updateExtension } from '~utils/extensions/updateExtension'; import { sendExtensionUpdateNotifications } from '~utils/notifications'; @@ -15,7 +15,7 @@ export const handleMultiSigGlobalThresholdSet: EventHandler = async (event) => { const { contractAddress: multiSigAddress, transactionHash } = event; const { globalThreshold } = event.args; - const colonyExtensionsResponse = await query< + const colonyExtensionsResponse = await amplifyClient.query< GetColonyExtensionByAddressQuery, GetColonyExtensionByAddressQueryVariables >(GetColonyExtensionByAddressDocument, { diff --git a/src/handlers/multiSig/helpers.ts b/apps/main-chain/src/handlers/multiSig/helpers.ts similarity index 74% rename from src/handlers/multiSig/helpers.ts rename to apps/main-chain/src/handlers/multiSig/helpers.ts index 762a2af6d..a1aefc1bb 100644 --- a/src/handlers/multiSig/helpers.ts +++ b/apps/main-chain/src/handlers/multiSig/helpers.ts @@ -1,5 +1,5 @@ import { BigNumber } from 'ethers'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetUserMultiSigSignatureDocument, GetUserMultiSigSignatureQuery, @@ -18,9 +18,9 @@ import { CreateMultiSigVoteMutation, CreateMultiSigVoteMutationVariables, CreateMultiSigVoteDocument, -} from '~graphql'; +} from '@joincolony/graphql'; import { getBlockChainTimestampISODate } from '~utils/dates'; -import { output } from '~utils/logger'; +import { output } from '@joincolony/utils'; export const getMultiSigDatabaseId = ( chainId: string, @@ -40,7 +40,7 @@ export const getUserMultiSigSignature = async ({ vote, role, }: GetUserMultiSigSignatureParams): Promise => { - const response = await query< + const response = await amplifyClient.query< GetUserMultiSigSignatureQuery, GetUserMultiSigSignatureQueryVariables >(GetUserMultiSigSignatureDocument, { @@ -64,12 +64,12 @@ export const getMultiSigFromDB = async ( databaseMultiSigId: string, ): Promise => { const { data } = - (await query( - GetColonyMultiSigDocument, - { - id: databaseMultiSigId, - }, - )) ?? {}; + (await amplifyClient.query< + GetColonyMultiSigQuery, + GetColonyMultiSigQueryVariables + >(GetColonyMultiSigDocument, { + id: databaseMultiSigId, + })) ?? {}; const multiSig = data?.getColonyMultiSig; @@ -85,7 +85,7 @@ export const getMultiSigFromDB = async ( export const updateMultiSigInDB = async ( multiSigData: UpdateColonyMultiSigInput, ): Promise => { - await mutate(UpdateColonyMultiSigDocument, { + await amplifyClient.mutate(UpdateColonyMultiSigDocument, { input: { ...multiSigData, }, @@ -109,24 +109,24 @@ export const addMultiSigVote = async ({ vote, timestamp, }: addMultiSigVoteParams): Promise => { - await mutate( - CreateMultiSigVoteDocument, - { - input: { - colonyAddress, - multiSigId, - userAddress, - role, - vote, - createdAt: getBlockChainTimestampISODate(timestamp), - }, + await amplifyClient.mutate< + CreateMultiSigVoteMutation, + CreateMultiSigVoteMutationVariables + >(CreateMultiSigVoteDocument, { + input: { + colonyAddress, + multiSigId, + userAddress, + role, + vote, + createdAt: getBlockChainTimestampISODate(timestamp), }, - ); + }); }; export const removeMultiSigVote = async (id: string): Promise => { - await mutate( - RemoveMultiSigVoteDocument, - { id }, - ); + await amplifyClient.mutate< + RemoveMultiSigVoteMutation, + RemoveMultiSigVoteMutationVariables + >(RemoveMultiSigVoteDocument, { id }); }; diff --git a/src/handlers/multiSig/index.ts b/apps/main-chain/src/handlers/multiSig/index.ts similarity index 100% rename from src/handlers/multiSig/index.ts rename to apps/main-chain/src/handlers/multiSig/index.ts diff --git a/src/handlers/multiSig/multiSigCancelled.ts b/apps/main-chain/src/handlers/multiSig/multiSigCancelled.ts similarity index 84% rename from src/handlers/multiSig/multiSigCancelled.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCancelled.ts index 4b945c24e..7411cf602 100644 --- a/src/handlers/multiSig/multiSigCancelled.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCancelled.ts @@ -1,20 +1,19 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { NotificationType, UpdateColonyMultiSigDocument, UpdateColonyMultiSigInput, UpdateColonyMultiSigMutationVariables, -} from '~graphql'; -import { EventHandler } from '~types'; -import { verbose } from '~utils'; +} from '@joincolony/graphql'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; +import { verbose } from '@joincolony/utils'; import { getMultiSigDatabaseId, getMultiSigFromDB } from './helpers'; -import { getChainId } from '~provider'; +import rpcProvider from '~provider'; import { getBlockChainTimestampISODate } from '~utils/dates'; import { getNotificationCategory, sendMultisigActionNotifications, } from '~utils/notifications'; -import { ExtensionEventListener } from '~eventListeners'; export const handleMultiSigMotionCancelled: EventHandler = async ( event, @@ -28,7 +27,7 @@ export const handleMultiSigMotionCancelled: EventHandler = async ( const { colonyAddress } = listener as ExtensionEventListener; - const chainId = getChainId(); + const chainId = rpcProvider.getChainId(); const multiSigDatabaseId = getMultiSigDatabaseId( chainId, @@ -38,7 +37,7 @@ export const handleMultiSigMotionCancelled: EventHandler = async ( verbose(`MultiSig motion: ${motionId} has been rejected`); - await mutate< + await amplifyClient.mutate< UpdateColonyMultiSigInput, UpdateColonyMultiSigMutationVariables >(UpdateColonyMultiSigDocument, { diff --git a/src/handlers/multiSig/multiSigCreated/handlers/addOrEditDomain.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/addOrEditDomain.ts similarity index 89% rename from src/handlers/multiSig/multiSigCreated/handlers/addOrEditDomain.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/addOrEditDomain.ts index 9eee61f9b..888efc5b4 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/addOrEditDomain.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/addOrEditDomain.ts @@ -1,7 +1,8 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, multiSigNameMapping } from '~types'; +import { multiSigNameMapping } from '~types'; import { createMultiSigInDB } from '../helpers'; import { getDomainDatabaseId, getPendingMetadataDatabaseId } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; export const handleAddOrEditDomainMultiSig = async ( colonyAddress: string, diff --git a/src/handlers/multiSig/multiSigCreated/handlers/colonyVersionUpgrade.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/colonyVersionUpgrade.ts similarity index 85% rename from src/handlers/multiSig/multiSigCreated/handlers/colonyVersionUpgrade.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/colonyVersionUpgrade.ts index b99c515c7..a7726516e 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/colonyVersionUpgrade.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/colonyVersionUpgrade.ts @@ -1,7 +1,8 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, multiSigNameMapping } from '~types'; +import { multiSigNameMapping } from '~types'; import { createMultiSigInDB } from '../helpers'; import { toNumber } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; export const handleColonyVersionUpgrade = async ( colonyAddress: string, diff --git a/src/handlers/multiSig/multiSigCreated/handlers/editColony.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/editColony.ts similarity index 86% rename from src/handlers/multiSig/multiSigCreated/handlers/editColony.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/editColony.ts index fe28a4afb..bcc51c6c9 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/editColony.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/editColony.ts @@ -1,7 +1,8 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, multiSigNameMapping } from '~types'; +import { multiSigNameMapping } from '~types'; import { getPendingMetadataDatabaseId } from '~utils'; import { createMultiSigInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleEditColonyMultiSig = async ( colonyAddress: string, diff --git a/src/handlers/multiSig/multiSigCreated/handlers/index.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/index.ts similarity index 100% rename from src/handlers/multiSig/multiSigCreated/handlers/index.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/index.ts diff --git a/src/handlers/multiSig/multiSigCreated/handlers/makeArbitraryTransactions.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/makeArbitraryTransactions.ts similarity index 89% rename from src/handlers/multiSig/multiSigCreated/handlers/makeArbitraryTransactions.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/makeArbitraryTransactions.ts index afcc4f899..a06c70e0c 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/makeArbitraryTransactions.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/makeArbitraryTransactions.ts @@ -1,7 +1,8 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, multiSigNameMapping } from '~types'; +import { multiSigNameMapping } from '~types'; import { generateArbitraryTxsFromArrays } from '~utils'; import { createMultiSigInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleMakeArbitraryTxsMultiSig = async ( colonyAddress: string, diff --git a/src/handlers/multiSig/multiSigCreated/handlers/manageReputation.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/manageReputation.ts similarity index 90% rename from src/handlers/multiSig/multiSigCreated/handlers/manageReputation.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/manageReputation.ts index 3db172244..2ca808b1d 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/manageReputation.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/manageReputation.ts @@ -1,8 +1,9 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, multiSigNameMapping } from '~types'; +import { multiSigNameMapping } from '~types'; import { createMultiSigInDB } from '../helpers'; import { getDomainDatabaseId } from '~utils'; import { sendMentionNotifications } from '~utils/notifications'; +import { ContractEvent } from '@joincolony/blocks'; export const handleManageReputationMultiSig = async ( colonyAddress: string, diff --git a/src/handlers/multiSig/multiSigCreated/handlers/metadataDelta.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/metadataDelta.ts similarity index 67% rename from src/handlers/multiSig/multiSigCreated/handlers/metadataDelta.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/metadataDelta.ts index b93ef4e58..16392b5d6 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/metadataDelta.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/metadataDelta.ts @@ -1,15 +1,17 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ColonyActionType } from '~graphql'; -import { ContractEvent } from '~types'; +import { ColonyActionType } from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { isAddVerifiedMembersOperation, + isDisableProxyColonyOperation, + isEnableProxyColonyOperation, isManageTokensOperation, isRemoveVerifiedMembersOperation, parseMetadataDeltaOperation, - verbose, } from '~utils'; import { createMultiSigInDB } from '../helpers'; import { manageTokensMultisigHandler } from './metadataDeltaHandlers/manageTokens'; +import { verbose } from '@joincolony/utils'; export const handleMetadataDeltaMultiSig = async ( colonyAddress: string, @@ -51,6 +53,23 @@ export const handleMetadataDeltaMultiSig = async ( operation, }); } + if ( + isDisableProxyColonyOperation(operation) || + isEnableProxyColonyOperation(operation) + ) { + const targetChainId = operation.payload[0]; + + if (!targetChainId) { + return; + } + + await createMultiSigInDB(colonyAddress, event, { + type: isDisableProxyColonyOperation(operation) + ? ColonyActionType.RemoveProxyColonyMultisig + : ColonyActionType.AddProxyColonyMultisig, + targetChainId: Number(targetChainId), + }); + } } catch (error) { verbose('Error while handling metadata delta motion created', error); } diff --git a/src/handlers/multiSig/multiSigCreated/handlers/metadataDeltaHandlers/manageTokens.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/metadataDeltaHandlers/manageTokens.ts similarity index 89% rename from src/handlers/multiSig/multiSigCreated/handlers/metadataDeltaHandlers/manageTokens.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/metadataDeltaHandlers/manageTokens.ts index b30defa6e..05739096e 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/metadataDeltaHandlers/manageTokens.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/metadataDeltaHandlers/manageTokens.ts @@ -4,8 +4,8 @@ import { getColonyFromDB, } from '~utils'; import { createMultiSigInDB } from '../../helpers'; -import { ColonyActionType } from '~graphql'; -import { ContractEvent } from '~types'; +import { ColonyActionType } from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; export const manageTokensMultisigHandler = async ({ colonyAddress, diff --git a/src/handlers/multiSig/multiSigCreated/handlers/mintTokens.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/mintTokens.ts similarity index 87% rename from src/handlers/multiSig/multiSigCreated/handlers/mintTokens.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/mintTokens.ts index aecabe59a..e6cec2f54 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/mintTokens.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/mintTokens.ts @@ -1,7 +1,8 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, multiSigNameMapping } from '~types'; +import { multiSigNameMapping } from '~types'; import { getColonyTokenAddress } from '~utils'; import { createMultiSigInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleMintTokensMultiSig = async ( colonyAddress: string, diff --git a/src/handlers/multiSig/multiSigCreated/handlers/moveFunds.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/moveFunds.ts similarity index 95% rename from src/handlers/multiSig/multiSigCreated/handlers/moveFunds.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/moveFunds.ts index 7a0912128..c59db10d0 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/moveFunds.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/moveFunds.ts @@ -1,5 +1,5 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, multiSigNameMapping } from '~types'; +import { multiSigNameMapping } from '~types'; import { getCachedColonyClient, getDomainDatabaseId, @@ -8,11 +8,12 @@ import { toNumber, } from '~utils'; import { createMultiSigInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; import { BigNumber } from 'ethers'; import { sendMultisigActionNotifications } from '~utils/notifications'; import { NotificationCategory } from '~types/notifications'; -import { NotificationType } from '~graphql'; import { fundExpenditureMultisigHandler } from './multipleFunctionsHandlers/fundExpenditure'; +import { NotificationType } from '@joincolony/graphql'; export const handleMoveFundsMultiSig = async ( colonyAddress: string, diff --git a/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/fundExpenditure.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/fundExpenditure.ts similarity index 95% rename from src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/fundExpenditure.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/fundExpenditure.ts index 9f217fe81..0d4667f1d 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/fundExpenditure.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/fundExpenditure.ts @@ -1,5 +1,5 @@ import { BigNumber } from 'ethers'; -import { ColonyActionType, ExpenditureFundingItem } from '~graphql'; +import { ColonyActionType, ExpenditureFundingItem } from '@joincolony/graphql'; import { ContractMethodSignatures } from '~types'; import { getExpenditureByFundingPot } from '~utils/expenditures'; import { createMultiSigInDB } from '../../helpers'; diff --git a/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/index.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/index.ts similarity index 100% rename from src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/index.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/index.ts diff --git a/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/types.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/types.ts similarity index 89% rename from src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/types.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/types.ts index e58850357..17d5b11cb 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/types.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/multipleFunctionsHandlers/types.ts @@ -1,5 +1,5 @@ +import { ContractEvent } from '@joincolony/blocks'; import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent } from '~types'; interface MultipleFunctionsHandlerParams { colonyAddress: string; diff --git a/src/handlers/multiSig/multiSigCreated/handlers/payment.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/payment.ts similarity index 91% rename from src/handlers/multiSig/multiSigCreated/handlers/payment.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/payment.ts index 7df014939..df4d62b3d 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/payment.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/payment.ts @@ -1,13 +1,14 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, multiSigNameMapping } from '~types'; +import { multiSigNameMapping } from '~types'; import { getDomainDatabaseId, toNumber } from '~utils'; -import { ColonyActionType } from '~graphql'; +import { ColonyActionType } from '@joincolony/graphql'; import { MultiPayment } from '~handlers/actions/oneTxPayment'; import { createMultiSigInDB } from '../helpers'; import { sendMentionNotifications } from '~utils/notifications'; +import { ContractEvent } from '@joincolony/blocks'; export const handlePaymentMultiSig = async ( colonyAddress: string, diff --git a/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/proxyColonies/createProxyColony.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/proxyColonies/createProxyColony.ts new file mode 100644 index 000000000..7aa24ac79 --- /dev/null +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/proxyColonies/createProxyColony.ts @@ -0,0 +1,27 @@ +import { TransactionDescription } from 'ethers/lib/utils'; +import { multiSigNameMapping } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; +import { createMultiSigInDB } from '../../helpers'; + +export const handleCreateProxyColonyMultiSig = async ( + colonyAddress: string, + event: ContractEvent, + parsedAction: TransactionDescription, +): Promise => { + if (!colonyAddress) { + return; + } + + const { args, name } = parsedAction; + + const { _destinationChainId: destinationChainId } = args; + + if (!destinationChainId) { + return; + } + + await createMultiSigInDB(colonyAddress, event, { + type: multiSigNameMapping[name], + targetChainId: destinationChainId.toNumber(), + }); +}; diff --git a/src/handlers/multiSig/multiSigCreated/handlers/setUserRoles.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/setUserRoles.ts similarity index 93% rename from src/handlers/multiSig/multiSigCreated/handlers/setUserRoles.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/setUserRoles.ts index 30d243636..cd8a6f5ab 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/setUserRoles.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/setUserRoles.ts @@ -1,6 +1,7 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, multiSigNameMapping } from '~types'; +import { multiSigNameMapping } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; import { getDomainDatabaseId, getRolesMapFromHexString } from '~utils'; import { createMultiSigInDB } from '../helpers'; import { sendMentionNotifications } from '~utils/notifications'; diff --git a/src/handlers/multiSig/multiSigCreated/handlers/unlockToken.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/unlockToken.ts similarity index 86% rename from src/handlers/multiSig/multiSigCreated/handlers/unlockToken.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/unlockToken.ts index fb11ac2d4..8f44512c1 100644 --- a/src/handlers/multiSig/multiSigCreated/handlers/unlockToken.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/handlers/unlockToken.ts @@ -1,7 +1,8 @@ import { TransactionDescription } from 'ethers/lib/utils'; -import { ContractEvent, multiSigNameMapping } from '~types'; +import { multiSigNameMapping } from '~types'; import { getColonyTokenAddress } from '~utils'; import { createMultiSigInDB } from '../helpers'; +import { ContractEvent } from '@joincolony/blocks'; export const handleUnlockTokenMultiSig = async ( colonyAddress: string, diff --git a/src/handlers/multiSig/multiSigCreated/helpers.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/helpers.ts similarity index 91% rename from src/handlers/multiSig/multiSigCreated/helpers.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/helpers.ts index 080cb2d55..c4372bcd0 100644 --- a/src/handlers/multiSig/multiSigCreated/helpers.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/helpers.ts @@ -1,6 +1,6 @@ import { AnyMultisigPermissionsClient } from '@colony/colony-js'; import { BigNumber } from 'ethers'; -import { GraphQLFnReturn, mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyMultiSig, CreateColonyActionInput, @@ -10,23 +10,24 @@ import { GetDomainByNativeSkillIdDocument, GetDomainByNativeSkillIdQuery, GetDomainByNativeSkillIdQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import networkClient from '~networkClient'; -import { getChainId } from '~provider'; -import { ContractEvent } from '~types'; +import rpcProvider from '~provider'; +import { ContractEvent } from '@joincolony/blocks'; import { getDomainDatabaseId, getMultiSigClient, - output, createColonyAction, } from '~utils'; import { getBlockChainTimestampISODate } from '~utils/dates'; import { getMultiSigDatabaseId } from '../helpers'; +import { output } from '@joincolony/utils'; +import { type GraphQLFnReturn } from '@joincolony/clients'; const createColonyMultiSig = async ( motionData: CreateColonyMultiSigInput, ): Promise => { - await mutate< + await amplifyClient.mutate< CreateColonyMultiSigInput, CreateColonyMultiSigMutationVariables >(CreateColonyMultiSigDocument, { @@ -57,7 +58,7 @@ export const getMultiSigData = async ({ isDecision = false, timestamp, }: GetMultiSigDataArgs): Promise => { - const chainId = getChainId(); + const chainId = rpcProvider.getChainId(); const multiSigDatabaseId = getMultiSigDatabaseId( chainId, multiSigClient.address, @@ -84,7 +85,7 @@ const getDomainIdByNativeSkillId = async ( colonyAddress: string, nativeSkillId: string, ): Promise => { - const result = await query< + const result = await amplifyClient.query< GetDomainByNativeSkillIdQuery, GetDomainByNativeSkillIdQueryVariables >(GetDomainByNativeSkillIdDocument, { diff --git a/src/handlers/multiSig/multiSigCreated/multiSigCreated.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/multiSigCreated.ts similarity index 89% rename from src/handlers/multiSig/multiSigCreated/multiSigCreated.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/multiSigCreated.ts index a4fcc8e29..496ca7c72 100644 --- a/src/handlers/multiSig/multiSigCreated/multiSigCreated.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/multiSigCreated.ts @@ -1,5 +1,4 @@ -import { ExtensionEventListener } from '~eventListeners'; -import { ColonyOperations, EventHandler } from '~types'; +import { ColonyOperations } from '~types'; import { getCachedColonyClient, getMultiSigClient, @@ -7,7 +6,6 @@ import { getStagedExpenditureClient, getStakedExpenditureClient, parseMotionAction, - verbose, } from '~utils'; import { handleMultisigMultipleFunctions } from './multipleFunctions'; import { @@ -25,8 +23,16 @@ import { } from './handlers/index'; import { sendMultisigActionNotifications } from '~utils/notifications'; import { NotificationCategory } from '~types/notifications'; -import { NotificationType } from '~graphql'; import { utils } from 'ethers'; +import { NotificationType } from '@joincolony/graphql'; +import { verbose } from '@joincolony/utils'; +import { + EventHandler, + ExtensionEventListener, + ProxyColonyEvents, +} from '@joincolony/blocks'; +import networkClient from '~networkClient'; +import { handleCreateProxyColonyMultiSig } from './handlers/proxyColonies/createProxyColony'; export const handleMultiSigMotionCreated: EventHandler = async ( event, @@ -66,6 +72,8 @@ export const handleMultiSigMotionCreated: EventHandler = async ( oneTxPaymentClient?.interface, stakedExpenditureClient?.interface, stagedExpenditureClient?.interface, + networkClient.interface, + ProxyColonyEvents, ].filter(Boolean) as utils.Interface[]; // Casting seems necessary as TS does not pick up the .filter() const motion = await multiSigClient.getMotion(motionId, { @@ -89,8 +97,7 @@ export const handleMultiSigMotionCreated: EventHandler = async ( if (!parsedOperation) { return; } - - let notificationCategory: NotificationCategory | null; + let notificationCategory: NotificationCategory | null = null; const contractOperation = parsedOperation.name; /* Handle the action type-specific mutation here */ @@ -180,6 +187,14 @@ export const handleMultiSigMotionCreated: EventHandler = async ( event, parsedOperation, ); + break; + } + case ColonyOperations.CreateProxyColony: { + await handleCreateProxyColonyMultiSig( + colonyAddress, + event, + parsedOperation, + ); notificationCategory = NotificationCategory.Admin; break; } diff --git a/src/handlers/multiSig/multiSigCreated/multipleFunctions.ts b/apps/main-chain/src/handlers/multiSig/multiSigCreated/multipleFunctions.ts similarity index 95% rename from src/handlers/multiSig/multiSigCreated/multipleFunctions.ts rename to apps/main-chain/src/handlers/multiSig/multiSigCreated/multipleFunctions.ts index 82d895bc3..cea39cf98 100644 --- a/src/handlers/multiSig/multiSigCreated/multipleFunctions.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigCreated/multipleFunctions.ts @@ -1,5 +1,5 @@ import { utils } from 'ethers'; -import { ContractEvent } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; import { decodeFunctions, getCachedColonyClient, @@ -7,9 +7,9 @@ import { getOneTxPaymentClient, getStagedExpenditureClient, getStakedExpenditureClient, - output, } from '~utils'; import { multipleFunctionsHandlers } from './handlers/multipleFunctionsHandlers'; +import { output } from '@joincolony/utils'; interface HandleMultisigMultipleFunctionsParams { event: ContractEvent; diff --git a/src/handlers/multiSig/multiSigExecuted/multiSigExecuted.ts b/apps/main-chain/src/handlers/multiSig/multiSigExecuted/multiSigExecuted.ts similarity index 88% rename from src/handlers/multiSig/multiSigExecuted/multiSigExecuted.ts rename to apps/main-chain/src/handlers/multiSig/multiSigExecuted/multiSigExecuted.ts index 9431cdc8c..1a6a075cd 100644 --- a/src/handlers/multiSig/multiSigExecuted/multiSigExecuted.ts +++ b/apps/main-chain/src/handlers/multiSig/multiSigExecuted/multiSigExecuted.ts @@ -1,7 +1,5 @@ -import { ExtensionEventListener } from '~eventListeners'; -import { getChainId } from '~provider'; - -import { EventHandler } from '~types'; +import rpcProvider from '~provider'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; // import { linkPendingMetadata } from '~utils/colonyMetadata'; import { @@ -9,14 +7,15 @@ import { getMultiSigFromDB, updateMultiSigInDB, } from '../helpers'; -import { getMultiSigClient, verbose } from '~utils'; +import { getMultiSigClient } from '~utils'; import { linkPendingMetadata } from '~utils/colonyMetadata'; import { getBlockChainTimestampISODate } from '~utils/dates'; import { getNotificationCategory, sendMultisigActionNotifications, } from '~utils/notifications'; -import { NotificationType } from '~graphql'; +import { NotificationType } from '@joincolony/graphql'; +import { verbose } from '@joincolony/utils'; export const handleMultiSigMotionExecuted: EventHandler = async ( event, @@ -34,7 +33,7 @@ export const handleMultiSigMotionExecuted: EventHandler = async ( return; } - const chainId = getChainId(); + const chainId = rpcProvider.getChainId(); const multiSigDatabaseId = getMultiSigDatabaseId( chainId, multiSigExtensionAddress, diff --git a/src/handlers/multiSig/rejectionChanged/rejectionChanged.ts b/apps/main-chain/src/handlers/multiSig/rejectionChanged/rejectionChanged.ts similarity index 83% rename from src/handlers/multiSig/rejectionChanged/rejectionChanged.ts rename to apps/main-chain/src/handlers/multiSig/rejectionChanged/rejectionChanged.ts index bbd2f775c..fad60f484 100644 --- a/src/handlers/multiSig/rejectionChanged/rejectionChanged.ts +++ b/apps/main-chain/src/handlers/multiSig/rejectionChanged/rejectionChanged.ts @@ -1,13 +1,12 @@ -import { MultiSigVote } from '~graphql'; -import { getChainId } from '~provider'; -import { EventHandler } from '~types'; +import { MultiSigVote } from '@joincolony/graphql'; +import rpcProvider from '~provider'; import { addMultiSigVote, getMultiSigDatabaseId, getUserMultiSigSignature, removeMultiSigVote, } from '../helpers'; -import { ExtensionEventListener } from '~eventListeners'; +import { EventHandler, ExtensionEventListener } from '@joincolony/blocks'; export const handleMultiSigRejectionChanged: EventHandler = async ( event, @@ -21,7 +20,7 @@ export const handleMultiSigRejectionChanged: EventHandler = async ( return; } - const chainId = getChainId(); + const chainId = rpcProvider.getChainId(); const { agent: userAddress, motionId, role, approval } = event.args; const multiSigId = getMultiSigDatabaseId( diff --git a/src/handlers/network/index.ts b/apps/main-chain/src/handlers/network/index.ts similarity index 100% rename from src/handlers/network/index.ts rename to apps/main-chain/src/handlers/network/index.ts diff --git a/src/handlers/network/networkFeeInverseSet.ts b/apps/main-chain/src/handlers/network/networkFeeInverseSet.ts similarity index 76% rename from src/handlers/network/networkFeeInverseSet.ts rename to apps/main-chain/src/handlers/network/networkFeeInverseSet.ts index 50b20ae36..6b1d07c17 100644 --- a/src/handlers/network/networkFeeInverseSet.ts +++ b/apps/main-chain/src/handlers/network/networkFeeInverseSet.ts @@ -1,18 +1,18 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { NETWORK_INVERSE_FEE_DATABASE_ID } from '~constants'; import { UpdateCurrentNetworkInverseFeeDocument, UpdateCurrentNetworkInverseFeeMutation, UpdateCurrentNetworkInverseFeeMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; -import { output } from '~utils'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; +import { output } from '@joincolony/utils'; export default async (event: ContractEvent): Promise => { const { feeInverse } = event.args; const convertedFee = feeInverse.toString(); - await mutate< + await amplifyClient.mutate< UpdateCurrentNetworkInverseFeeMutation, UpdateCurrentNetworkInverseFeeMutationVariables >(UpdateCurrentNetworkInverseFeeDocument, { diff --git a/apps/main-chain/src/handlers/proxyColonies/index.ts b/apps/main-chain/src/handlers/proxyColonies/index.ts new file mode 100644 index 000000000..5282aec59 --- /dev/null +++ b/apps/main-chain/src/handlers/proxyColonies/index.ts @@ -0,0 +1,2 @@ +export * from './proxyColonyRequested'; +export * from './proxyColonyFundsClaimed'; diff --git a/apps/main-chain/src/handlers/proxyColonies/proxyColonyFundsClaimed.ts b/apps/main-chain/src/handlers/proxyColonies/proxyColonyFundsClaimed.ts new file mode 100644 index 000000000..878b46b9b --- /dev/null +++ b/apps/main-chain/src/handlers/proxyColonies/proxyColonyFundsClaimed.ts @@ -0,0 +1,104 @@ +import { constants } from 'ethers'; + +import amplifyClient from '~amplifyClient'; +import { ContractEvent, EventHandler } from '@joincolony/blocks'; +import { saveEvent, notNull } from '~utils'; +import { + UpdateColonyFundsClaimDocument, + UpdateColonyFundsClaimMutation, + UpdateColonyFundsClaimMutationVariables, + GetColonyUnclaimedFundsDocument, + GetColonyUnclaimedFundsQuery, + GetColonyUnclaimedFundsQueryVariables, +} from '@joincolony/graphql'; +import { output } from '@joincolony/utils'; + +export const handleProxyColonyFundsClaimed: EventHandler = async ( + event: ContractEvent, +): Promise => { + const { contractAddress: colonyAddress, blockNumber } = event; + const { + _chainId: chainId, + _token: tokenAddress, + _amount: amount, + } = event.args; + + const chainIdValue = chainId.toNumber(); + + // @TODO this needs to be updated as the native chain token claims will have a token address different than constants.AddressZero + /* + * We're not handling native chain token claims from here, so no point + * in running through the whole logic just to end up with the same result + */ + if (tokenAddress !== constants.AddressZero) { + const { items: unclaimedFunds } = + ( + await amplifyClient.query< + GetColonyUnclaimedFundsQuery, + GetColonyUnclaimedFundsQueryVariables + >(GetColonyUnclaimedFundsDocument, { + colonyAddress, + tokenAddress, + upToBlock: blockNumber, + }) + )?.data?.listColonyFundsClaims ?? {}; + /* + * This check is actually required since anybody can make payout claims + * for any colony, any time, even if there's nothing left to claim + * (basically do claims for 0) + */ + const colonyHasUnclaimedFunds = unclaimedFunds?.length; + output( + 'Found new Transfer Claim for Token:', + tokenAddress, + 'by Colony:', + colonyAddress, + 'on Chain:', + chainIdValue, + !colonyHasUnclaimedFunds + ? 'but not acting upon it since all existing non-zero transactions were claimed for this token' + : '', + ); + /* + * Colony needs to exist (this should not happen, but a safety check nontheless) + * and to have unclaimed transactions for this token + */ + if (colonyHasUnclaimedFunds) { + await Promise.all( + unclaimedFunds.filter(notNull).map(async ({ id, token, amount }) => { + await amplifyClient.mutate< + UpdateColonyFundsClaimMutation, + UpdateColonyFundsClaimMutationVariables + >(UpdateColonyFundsClaimDocument, { + input: { id, isClaimed: true }, + }); + + // @TODO this will need to be uncommented and check for the initiator address as we don't get this information from the event + // await sendFundsClaimedNotifications({ + // tokenSymbol: token.symbol, + // tokenAmount: amount, + // tokenAddress, + // creator: initiatorAddress, + // colonyAddress, + // }); + }), + ); + } + } else { + output( + 'Found new Transfer Claim for Token:', + tokenAddress, + 'by Colony:', + colonyAddress, + "but not acting upon it since it's a chain native token claim, and we're not handling these from here", + ); + } + + /* + * Save the event to the database, but only if the claim was greater than zero + * No point in filling the database with useless data + */ + if (!amount.isZero()) { + await saveEvent(event); + } +}; diff --git a/apps/main-chain/src/handlers/proxyColonies/proxyColonyRequested.ts b/apps/main-chain/src/handlers/proxyColonies/proxyColonyRequested.ts new file mode 100644 index 000000000..49e96564a --- /dev/null +++ b/apps/main-chain/src/handlers/proxyColonies/proxyColonyRequested.ts @@ -0,0 +1,118 @@ +import { + ContractEventsSignatures, + EventHandler, + ProxyColoniesListener, + ProxyColonyEvents, +} from '@joincolony/blocks'; +import { + getMultiChainInfoId, + output, + upsertMultiChainInfo, +} from '@joincolony/utils'; +import { utils } from 'ethers'; +import blockManager from '~blockManager'; +import rpcProvider from '~provider'; +import { writeActionFromEvent } from '~utils/actions/writeAction'; +import { + ColonyActionType, + CreateMultiChainInfoInput, + UpdateMultiChainInfoInput, +} from '@joincolony/graphql'; +import amplifyClient from '~amplifyClient'; + +// @NOTE this one listens to the ProxyColonyRequested event on the colony, not the network! +export const handleProxyColonyRequested: EventHandler = async ( + event, + listener, +) => { + const { colonyAddress } = listener as ProxyColoniesListener; + if (!colonyAddress) { + output(`No colony address passed to handleProxyColonyRequested listener.`); + return; + } + const { blockNumber, transactionHash } = event; + + const { agent, destinationChainId } = event.args; + + const logs = await rpcProvider.getProviderInstance().getLogs({ + fromBlock: blockNumber, + toBlock: blockNumber, + topics: [ + [ + utils.id(ContractEventsSignatures.ProxyColonyRequested), + utils.id(ContractEventsSignatures.LogMessagePublished), + ], + ], + }); + + const events = await Promise.all( + logs.map((log) => + blockManager.mapLogToContractEvent(log, ProxyColonyEvents), + ), + ); + + const wormholeEvent = events.find( + (event) => + ContractEventsSignatures.LogMessagePublished === event?.signature, + ); + const proxyRequestedEvent = events.find( + (event) => + ContractEventsSignatures.ProxyColonyRequested === event?.signature, + ); + + if (!wormholeEvent || !proxyRequestedEvent) { + output( + `ProxyColonyRequested or LogMessagePublished are not present in the same block`, + ); + + return; + } + + const { sender, sequence } = wormholeEvent.args; + const emitterAddress = sender.toString(); + const emitterSequence = sequence.toString(); + + if (!emitterAddress || !sequence) { + output('Missing arguments on the LogMessagePublished events'); + return; + } + + // we could technically use this one, but we should use the one of the created one, just so we have all the core logic in the upsertMultiChainInfo helper + const existingMultiChainInfoId = getMultiChainInfoId( + transactionHash, + destinationChainId.toNumber(), + ); + + const createMultiChainInfoInput: CreateMultiChainInfoInput = { + id: existingMultiChainInfoId, + completedOnMainChain: true, + completedOnProxyChain: false, + wormholeInfo: { + sequence: emitterSequence, + emitterAddress, + }, + }; + + const updateMultiChainInfoInput: UpdateMultiChainInfoInput = { + id: existingMultiChainInfoId, + completedOnMainChain: true, + wormholeInfo: { + sequence: emitterSequence, + emitterAddress, + }, + }; + + const multiChainInfoId = await upsertMultiChainInfo( + amplifyClient, + existingMultiChainInfoId, + createMultiChainInfoInput, + updateMultiChainInfoInput, + ); + + await writeActionFromEvent(event, colonyAddress, { + type: ColonyActionType.AddProxyColony, + initiatorAddress: agent, + targetChainId: destinationChainId.toNumber(), + multiChainInfoId, + }); +}; diff --git a/src/handlers/reputationMiningCycle/index.ts b/apps/main-chain/src/handlers/reputationMiningCycle/index.ts similarity index 100% rename from src/handlers/reputationMiningCycle/index.ts rename to apps/main-chain/src/handlers/reputationMiningCycle/index.ts diff --git a/src/handlers/reputationMiningCycle/reputationMiningCycleComplete.ts b/apps/main-chain/src/handlers/reputationMiningCycle/reputationMiningCycleComplete.ts similarity index 91% rename from src/handlers/reputationMiningCycle/reputationMiningCycleComplete.ts rename to apps/main-chain/src/handlers/reputationMiningCycle/reputationMiningCycleComplete.ts index bb60d6515..e6a0a0ba1 100644 --- a/src/handlers/reputationMiningCycle/reputationMiningCycleComplete.ts +++ b/apps/main-chain/src/handlers/reputationMiningCycle/reputationMiningCycleComplete.ts @@ -1,4 +1,4 @@ -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { CreateReputationMiningCycleMetadataDocument, CreateReputationMiningCycleMetadataMutation, @@ -9,8 +9,8 @@ import { UpdateReputationMiningCycleMetadataDocument, UpdateReputationMiningCycleMetadataMutation, UpdateReputationMiningCycleMetadataMutationVariables, -} from '~graphql'; -import { ContractEvent } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; import { reputationMiningCycleMetadataId } from './utils'; export default async (event: ContractEvent): Promise => { @@ -33,7 +33,7 @@ export default async (event: ContractEvent): Promise => { // for it, basically the time it got to process it, meaning the UI will "lie" at that point const { data } = - (await query< + (await amplifyClient.query< GetReputationMiningCycleMetadataQuery, GetReputationMiningCycleMetadataQueryVariables >(GetReputationMiningCycleMetadataDocument, { @@ -43,7 +43,7 @@ export default async (event: ContractEvent): Promise => { const dbEntryExists = !!data?.getReputationMiningCycleMetadata; if (dbEntryExists) { - await mutate< + await amplifyClient.mutate< UpdateReputationMiningCycleMetadataMutation, UpdateReputationMiningCycleMetadataMutationVariables >(UpdateReputationMiningCycleMetadataDocument, { @@ -53,7 +53,7 @@ export default async (event: ContractEvent): Promise => { }, }); } else { - await mutate< + await amplifyClient.mutate< CreateReputationMiningCycleMetadataMutation, CreateReputationMiningCycleMetadataMutationVariables >(CreateReputationMiningCycleMetadataDocument, { diff --git a/src/handlers/reputationMiningCycle/utils.ts b/apps/main-chain/src/handlers/reputationMiningCycle/utils.ts similarity index 100% rename from src/handlers/reputationMiningCycle/utils.ts rename to apps/main-chain/src/handlers/reputationMiningCycle/utils.ts diff --git a/src/handlers/tokens/index.ts b/apps/main-chain/src/handlers/tokens/index.ts similarity index 100% rename from src/handlers/tokens/index.ts rename to apps/main-chain/src/handlers/tokens/index.ts diff --git a/src/handlers/tokens/setTokenAuthority.ts b/apps/main-chain/src/handlers/tokens/setTokenAuthority.ts similarity index 97% rename from src/handlers/tokens/setTokenAuthority.ts rename to apps/main-chain/src/handlers/tokens/setTokenAuthority.ts index 65c898a5f..d30d05bb7 100644 --- a/src/handlers/tokens/setTokenAuthority.ts +++ b/apps/main-chain/src/handlers/tokens/setTokenAuthority.ts @@ -1,6 +1,6 @@ import { TokenClientType } from '@colony/colony-js'; -import { ContractEvent } from '~types'; +import { ContractEvent } from '@joincolony/blocks'; import { getCachedTokenClient, fetchColoniesByNativeToken, diff --git a/src/index.ts b/apps/main-chain/src/index.ts similarity index 85% rename from src/index.ts rename to apps/main-chain/src/index.ts index 8bc739989..8150b9d4b 100644 --- a/src/index.ts +++ b/apps/main-chain/src/index.ts @@ -3,25 +3,25 @@ import dotenv from 'dotenv'; dotenv.config(); import 'cross-fetch/polyfill'; - import { utils } from 'ethers'; -import { startBlockListener } from '~blockListener'; -import amplifyClientSetup from '~amplifyClient'; -import { initialiseProvider } from '~provider'; +import '~amplifyClient'; +import '~statsManager'; +import '~eventManager'; +import blockManager from '~blockManager'; import { startStatsServer } from '~stats'; import { setupListenersForColonies, setupListenersForExtensions, } from '~eventListeners'; import { seedDB } from '~utils'; +import rpcProvider from './provider'; import { setupNotificationsClient } from '~utils/notifications'; utils.Logger.setLogLevel(utils.Logger.levels.ERROR); const start = async (): Promise => { - amplifyClientSetup(); - + await rpcProvider.initialiseProvider(); /** * Setup the notifications provider so that notifications can be sent when needed */ @@ -42,9 +42,7 @@ const start = async (): Promise => { /** * Start the main block listener */ - startBlockListener(); - - await initialiseProvider(); + blockManager.startBlockListener(); /** * In development, where both the chain and the DB gets reset everytime, diff --git a/src/interfaces.ts b/apps/main-chain/src/interfaces.ts similarity index 77% rename from src/interfaces.ts rename to apps/main-chain/src/interfaces.ts index 8ca7b469c..cd32328fb 100644 --- a/src/interfaces.ts +++ b/apps/main-chain/src/interfaces.ts @@ -13,13 +13,21 @@ import { Extension, getExtensionHash } from '@colony/colony-js'; import networkClient from '~networkClient'; import provider from '~provider'; -import { EventListener, EventListenerType } from '~eventListeners'; +import { + EventListener, + EventListenerType, + colonyAbi, +} from '@joincolony/blocks'; import { Interface } from 'ethers/lib/utils'; -import { colonyAbi } from '~constants/abis'; // @NOTE: Temporary interface for development until a proper colonyJS release const _tempColonyInterface = new Interface(colonyAbi); +// @TODO @chmanie is gonna make this better, for now let's just hardcode the proxy colony events +const ProxyColonyEvents = new utils.Interface([ + 'event ProxyColonyRequested(uint256 destinationChainId, bytes32 salt)', +]); + /** * Function returning ABI-derived interface for a given event listener type, * which is later used for parsing event logs @@ -28,11 +36,15 @@ export const getInterfaceByListener = ( listener: EventListener, ): utils.Interface | null => { const { type: listenerType } = listener; + const providerInstance = provider.getProviderInstance(); switch (listenerType) { case EventListenerType.Network: { return networkClient.interface; } + case EventListenerType.ProxyColonies: { + return ProxyColonyEvents; + } case EventListenerType.Colony: { return _tempColonyInterface; } @@ -40,7 +52,7 @@ export const getInterfaceByListener = ( return getInterfaceByExtensionHash(listener.extensionHash); } case EventListenerType.Token: { - return TokenEventsFactory.connect(constants.AddressZero, provider) + return TokenEventsFactory.connect(constants.AddressZero, providerInstance) .interface; } default: { @@ -52,39 +64,43 @@ export const getInterfaceByListener = ( const getInterfaceByExtensionHash = ( extensionHash: string, ): utils.Interface | null => { + const providerInstance = provider.getProviderInstance(); + switch (extensionHash) { case getExtensionHash(Extension.OneTxPayment): { - return OneTxPaymentEventsFactory.connect(constants.AddressZero, provider) - .interface; + return OneTxPaymentEventsFactory.connect( + constants.AddressZero, + providerInstance, + ).interface; } case getExtensionHash(Extension.VotingReputation): { return VotingReputationEventsFactory.connect( constants.AddressZero, - provider, + providerInstance, ).interface; } case getExtensionHash(Extension.MultisigPermissions): { return MultisigPermissionsEventsFactory.connect( constants.AddressZero, - provider, + providerInstance, ).interface; } case getExtensionHash(Extension.StakedExpenditure): { return StakedExpenditureEventsFactory.connect( constants.AddressZero, - provider, + providerInstance, ).interface; } case getExtensionHash(Extension.StagedExpenditure): { return StagedExpenditureEventsFactory.connect( constants.AddressZero, - provider, + providerInstance, ).interface; } case getExtensionHash(Extension.StreamingPayments): { return StreamingPaymentsEventsFactory.connect( constants.AddressZero, - provider, + providerInstance, ).interface; } default: { diff --git a/apps/main-chain/src/multiChainBridgeClient.ts b/apps/main-chain/src/multiChainBridgeClient.ts new file mode 100644 index 000000000..4739b8c83 --- /dev/null +++ b/apps/main-chain/src/multiChainBridgeClient.ts @@ -0,0 +1,7 @@ +import { WormholeClient } from "@joincolony/clients"; + +const bridgeEndpoint = process.env.MULTI_CHAIN_BRIDGE_ENDPOINT ?? ''; + +const client = new WormholeClient(bridgeEndpoint); + +export default client; \ No newline at end of file diff --git a/apps/main-chain/src/networkClient.ts b/apps/main-chain/src/networkClient.ts new file mode 100644 index 000000000..d9f351999 --- /dev/null +++ b/apps/main-chain/src/networkClient.ts @@ -0,0 +1,11 @@ +import { Network } from '@colony/colony-js'; + +import rpcProvider from '~provider'; + +import { NetworkClient } from '@joincolony/clients'; + +export default (new NetworkClient( + rpcProvider, + (process.env.CHAIN_NETWORK as Network) || Network.Custom, + process.env.CHAIN_NETWORK_CONTRACT || '', +)).getInstance(); diff --git a/apps/main-chain/src/provider.ts b/apps/main-chain/src/provider.ts new file mode 100644 index 000000000..eed068b14 --- /dev/null +++ b/apps/main-chain/src/provider.ts @@ -0,0 +1,4 @@ +import { RpcProvider } from '@joincolony/clients'; + +const rpcProvider = new RpcProvider(process.env.CHAIN_RPC_ENDPOINT); +export default rpcProvider; diff --git a/src/stats.ts b/apps/main-chain/src/stats.ts similarity index 63% rename from src/stats.ts rename to apps/main-chain/src/stats.ts index 141d40e4c..44fbca078 100644 --- a/src/stats.ts +++ b/apps/main-chain/src/stats.ts @@ -1,11 +1,14 @@ import express from 'express'; -import { getLastBlockNumber, getStats, initStats, output } from '~utils'; -import { getChainId } from '~provider'; -import { getListenersStats } from '~eventListeners'; +import eventManager from '~eventManager'; +import rpcProvider from '~provider'; +import { output } from '@joincolony/utils'; +import statsManager from '~statsManager'; +// @NOTE this can probably be moved to the colonyAdded handler export const coloniesSet = new Set(); +// @NOTE just copy this entire file later on for now const app = express(); const port = process.env.STATS_PORT; @@ -24,7 +27,7 @@ app.get('/liveness', (_, res) => res.sendStatus(200)); * Use to check various service stats */ app.get('/stats', async (_, res) => { - const stats = getStats(); + const stats = statsManager.getStats(); res.type('json').send(stats); }); @@ -32,7 +35,7 @@ app.get('/stats', async (_, res) => { * Use to check currently active listeners */ app.get('/listeners', async (_, res) => { - res.type('json').send(getListenersStats()); + res.type('json').send(eventManager.getListenersStats()); }); export const startStatsServer = async (): Promise => { @@ -40,11 +43,11 @@ export const startStatsServer = async (): Promise => { return; } - await initStats(); - const lastBlockNumber = getLastBlockNumber(); + await statsManager.initStats(); + const lastBlockNumber = statsManager.getLastBlockNumber(); app.listen(port, async () => { - output('Block Ingestor started on chain', getChainId()); + output('Block Ingestor started on chain', rpcProvider.getChainId()); output(`Stats available at http://localhost:${port}/stats`); output(`Liveness check available at http://localhost:${port}/liveness`); output(`Last processed block number: ${lastBlockNumber}`); diff --git a/apps/main-chain/src/statsManager.ts b/apps/main-chain/src/statsManager.ts new file mode 100644 index 000000000..65a7a19b9 --- /dev/null +++ b/apps/main-chain/src/statsManager.ts @@ -0,0 +1,7 @@ +import { StatsManager } from '@joincolony/blocks'; +import amplifyClient from './amplifyClient'; +import rpcProvider from '~provider'; + +const statsManager = new StatsManager(amplifyClient, rpcProvider); + +export default statsManager; diff --git a/src/types/actions.ts b/apps/main-chain/src/types/actions.ts similarity index 59% rename from src/types/actions.ts rename to apps/main-chain/src/types/actions.ts index d8ec9c374..1a4e5e66a 100644 --- a/src/types/actions.ts +++ b/apps/main-chain/src/types/actions.ts @@ -1,3 +1,3 @@ -import { ContractEvent } from './events'; +import { ContractEvent } from '@joincolony/blocks'; export type ColonyActionHandler = (event: ContractEvent) => Promise; diff --git a/src/types/index.ts b/apps/main-chain/src/types/index.ts similarity index 75% rename from src/types/index.ts rename to apps/main-chain/src/types/index.ts index fae0484f7..9ea273236 100644 --- a/src/types/index.ts +++ b/apps/main-chain/src/types/index.ts @@ -1,4 +1,3 @@ -export * from './events'; export * from './actions'; export * from './methods'; export * from './motions'; diff --git a/src/types/methods.ts b/apps/main-chain/src/types/methods.ts similarity index 100% rename from src/types/methods.ts rename to apps/main-chain/src/types/methods.ts diff --git a/src/types/motions.ts b/apps/main-chain/src/types/motions.ts similarity index 94% rename from src/types/motions.ts rename to apps/main-chain/src/types/motions.ts index ed543b387..f90eb22d4 100644 --- a/src/types/motions.ts +++ b/apps/main-chain/src/types/motions.ts @@ -1,4 +1,4 @@ -import { ColonyActionType } from '~graphql'; +import { ColonyActionType } from '@joincolony/graphql'; /* * Contract calls @@ -24,6 +24,7 @@ export enum ColonyOperations { CancelExpenditureViaArbitration = 'cancelExpenditureViaArbitration', FinalizeExpenditureViaArbitration = 'finalizeExpenditureViaArbitration', ReleaseStagedPaymentViaArbitration = 'releaseStagedPaymentViaArbitration', + CreateProxyColony = 'createProxyColony', } export enum MotionEvents { @@ -69,6 +70,7 @@ export const motionNameMapping: { [key: string]: ColonyActionType } = { ColonyActionType.SetExpenditureStateMotion, [ColonyOperations.ReleaseStagedPaymentViaArbitration]: ColonyActionType.ReleaseStagedPaymentsMotion, + [ColonyOperations.CreateProxyColony]: ColonyActionType.AddProxyColonyMotion, }; export enum MotionSide { @@ -103,4 +105,5 @@ export const multiSigNameMapping: { [key: string]: ColonyActionType } = { ColonyActionType.CancelStakedExpenditureMultisig, [ColonyOperations.SetExpenditureState]: ColonyActionType.SetExpenditureStateMultisig, + [ColonyOperations.CreateProxyColony]: ColonyActionType.AddProxyColonyMultisig, }; diff --git a/src/types/notifications.ts b/apps/main-chain/src/types/notifications.ts similarity index 98% rename from src/types/notifications.ts rename to apps/main-chain/src/types/notifications.ts index dceef93b9..821edc9e3 100644 --- a/src/types/notifications.ts +++ b/apps/main-chain/src/types/notifications.ts @@ -1,4 +1,4 @@ -import { NotificationType } from '~graphql'; +import { NotificationType } from '@joincolony/graphql'; export enum NotificationCategory { Mention = 'Mention', diff --git a/src/utils/actionExists.ts b/apps/main-chain/src/utils/actionExists.ts similarity index 73% rename from src/utils/actionExists.ts rename to apps/main-chain/src/utils/actionExists.ts index d3aade129..042725c57 100644 --- a/src/utils/actionExists.ts +++ b/apps/main-chain/src/utils/actionExists.ts @@ -1,14 +1,14 @@ -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetActionByIdDocument, GetActionByIdQuery, GetActionByIdQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; export const checkActionExists = async ( transactionHash: string, ): Promise => { - const existingActionQuery = await query< + const existingActionQuery = await amplifyClient.query< GetActionByIdQuery, GetActionByIdQueryVariables >(GetActionByIdDocument, { diff --git a/src/utils/actions/getAction.ts b/apps/main-chain/src/utils/actions/getAction.ts similarity index 86% rename from src/utils/actions/getAction.ts rename to apps/main-chain/src/utils/actions/getAction.ts index 99e6ebe5c..e962a57d3 100644 --- a/src/utils/actions/getAction.ts +++ b/apps/main-chain/src/utils/actions/getAction.ts @@ -1,4 +1,4 @@ -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ActionMetadataInfoFragment, GetColonyActionByMotionIdDocument, @@ -7,12 +7,12 @@ import { GetColonyActionByMultiSigIdDocument, GetColonyActionByMultiSigIdQuery, GetColonyActionByMultiSigIdQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; export const getActionByMotionId = async ( motionId: string, ): Promise => { - const response = await query< + const response = await amplifyClient.query< GetColonyActionByMotionIdQuery, GetColonyActionByMotionIdQueryVariables >(GetColonyActionByMotionIdDocument, { @@ -27,7 +27,7 @@ export const getActionByMotionId = async ( export const getActionByMultiSigId = async ( multiSigId: string, ): Promise => { - const response = await query< + const response = await amplifyClient.query< GetColonyActionByMultiSigIdQuery, GetColonyActionByMultiSigIdQueryVariables >(GetColonyActionByMultiSigIdDocument, { diff --git a/src/utils/actions/index.ts b/apps/main-chain/src/utils/actions/index.ts similarity index 100% rename from src/utils/actions/index.ts rename to apps/main-chain/src/utils/actions/index.ts diff --git a/apps/main-chain/src/utils/actions/motions.ts b/apps/main-chain/src/utils/actions/motions.ts new file mode 100644 index 000000000..93ee0f881 --- /dev/null +++ b/apps/main-chain/src/utils/actions/motions.ts @@ -0,0 +1,91 @@ +import { ContractEventsSignatures } from '@joincolony/blocks'; +import { output } from '@joincolony/utils'; +import { constants } from 'ethers'; +import { getMotionDatabaseId } from '~handlers/motions/helpers'; +import { getMultiSigDatabaseId } from '~handlers/multiSig/helpers'; +// @NOTE this thing uses the networkClient and rpcProveider of the main chain!!! if you are making this reusable, networkClient and rpcProvider will need to be passed as arguments +import networkClient from '~networkClient'; +import rpcProvider from '~provider'; +import { + VotingReputationEvents__factory as VotingReputationEventsFactory, + MultisigPermissionsEvents__factory as MultisigPermissionsEventsFactory, +} from '@colony/events'; + +export const getFinalizationMotionId = async ( + txHash: string, + votingReputationExtensionAddress: string, +): Promise => { + const chainId = rpcProvider.getChainId(); + const receipt = await networkClient.provider.getTransactionReceipt(txHash); + const logInterface = VotingReputationEventsFactory.connect( + constants.AddressZero, + rpcProvider.getProviderInstance(), + ).interface; + + for (const log of receipt.logs) { + try { + const parsedLog = logInterface?.parseLog(log); + if (!parsedLog) { + continue; + } + + // if it's a voting reputation motion + if (parsedLog.signature === ContractEventsSignatures.MotionFinalized) { + const { motionId } = parsedLog.args; + + const motionDatabaseId = getMotionDatabaseId( + Number(chainId), + votingReputationExtensionAddress, + motionId, + ); + + return motionDatabaseId; + } + } catch (error) { + // Log could not be parsed, continue to next log + } + } + + output(`The txHash: ${txHash} doesn't have any MotionFinalized logs.`); + return undefined; +}; + +export const getFinalizationMultiSigId = async ( + txHash: string, + multiSigExtensionAddress: string, +): Promise => { + const chainId = rpcProvider.getChainId(); + const receipt = await networkClient.provider.getTransactionReceipt(txHash); + const logInterface = MultisigPermissionsEventsFactory.connect( + constants.AddressZero, + rpcProvider.getProviderInstance(), + ).interface; + + for (const log of receipt.logs) { + try { + const parsedLog = logInterface?.parseLog(log); + if (!parsedLog) { + continue; + } + + // if it's a multisig motion + if ( + parsedLog.signature === ContractEventsSignatures.MultisigMotionExecuted + ) { + const { motionId } = parsedLog.args; + const multiSigDatabaseId = getMultiSigDatabaseId( + chainId, + multiSigExtensionAddress, + motionId, + ); + + return multiSigDatabaseId; + } + } catch (error) { + // Log could not be parsed, continue to next log + } + } + + output(`The txHash: ${txHash} doesn't have any MultisigMotionExecuted logs.`); + return undefined; +}; diff --git a/src/utils/actions/parseAction.ts b/apps/main-chain/src/utils/actions/parseAction.ts similarity index 100% rename from src/utils/actions/parseAction.ts rename to apps/main-chain/src/utils/actions/parseAction.ts diff --git a/src/utils/actions/writeAction.ts b/apps/main-chain/src/utils/actions/writeAction.ts similarity index 54% rename from src/utils/actions/writeAction.ts rename to apps/main-chain/src/utils/actions/writeAction.ts index 6aba9471e..80724eb9b 100644 --- a/src/utils/actions/writeAction.ts +++ b/apps/main-chain/src/utils/actions/writeAction.ts @@ -1,5 +1,5 @@ import { Extension, getExtensionHash } from '@colony/colony-js'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, CreateColonyActionDocument, @@ -10,11 +10,21 @@ import { GetExpenditureByNativeFundingPotIdAndColonyDocument, GetExpenditureByNativeFundingPotIdAndColonyQuery, GetExpenditureByNativeFundingPotIdAndColonyQueryVariables, -} from '~graphql'; -import { toNumber, verbose, getColonyExtensions } from '~utils'; -import { ContractEvent } from '~types'; + UpdateColonyMotionDocument, + UpdateColonyMotionMutation, + UpdateColonyMotionMutationVariables, + UpdateColonyMultiSigDocument, + UpdateColonyMultiSigMutation, + UpdateColonyMultiSigMutationVariables, +} from '@joincolony/graphql'; +import { toNumber, getColonyExtensions } from '~utils'; +import { ContractEvent } from '@joincolony/blocks'; import networkClient from '~networkClient'; import { getBlockChainTimestampISODate } from '~utils/dates'; +import { verbose } from '@joincolony/utils'; +import { getFinalizationMotionId, getFinalizationMultiSigId } from './motions'; +import { getMotionFromDB } from '~handlers/motions/helpers'; +import { getMultiSigFromDB } from '~handlers/multiSig/helpers'; export type ActionFields = Omit< CreateColonyActionInput, @@ -41,6 +51,57 @@ export const writeActionFromEvent = async ( colonyExtensions, ); + const isMultiSigFinalization = await isActionMultiSigFinalization( + actionFields.initiatorAddress, + colonyExtensions, + ); + + let finalizedActionId = null; + + if (isMotionFinalization) { + const motionDatabaseId = await getFinalizationMotionId( + transactionHash, + actionFields.initiatorAddress, + ); + + if (motionDatabaseId) { + const finalizedMotion = await getMotionFromDB(motionDatabaseId); + finalizedActionId = finalizedMotion?.transactionHash; + + await amplifyClient.mutate< + UpdateColonyMotionMutation, + UpdateColonyMotionMutationVariables + >(UpdateColonyMotionDocument, { + input: { + id: motionDatabaseId, + finalizationActionId: transactionHash, + }, + }); + } + } + + if (isMultiSigFinalization) { + const multisigDatabaseId = await getFinalizationMultiSigId( + transactionHash, + actionFields.initiatorAddress, + ); + + if (multisigDatabaseId) { + const finalizedMultiSig = await getMultiSigFromDB(multisigDatabaseId); + finalizedActionId = finalizedMultiSig?.transactionHash; + + await amplifyClient.mutate< + UpdateColonyMultiSigMutation, + UpdateColonyMultiSigMutationVariables + >(UpdateColonyMultiSigDocument, { + input: { + id: multisigDatabaseId, + finalizationActionId: transactionHash, + }, + }); + } + } + const showInActionsList = await showActionInActionsList( event, colonyAddress, @@ -54,21 +115,22 @@ export const writeActionFromEvent = async ( verbose('Action', actionType, 'took place in Colony:', colonyAddress); - await mutate( - CreateColonyActionDocument, - { - input: { - id: transactionHash, - colonyId: colonyAddress, - blockNumber, - createdAt: getBlockChainTimestampISODate(timestamp), - showInActionsList, - rootHash, - isMotionFinalization, - ...actionFields, - }, + await amplifyClient.mutate< + CreateColonyActionMutation, + CreateColonyActionMutationVariables + >(CreateColonyActionDocument, { + input: { + id: transactionHash, + colonyId: colonyAddress, + blockNumber, + createdAt: getBlockChainTimestampISODate(timestamp), + showInActionsList, + rootHash, + isMotionFinalization: isMotionFinalization || isMultiSigFinalization, + finalizedActionId, + ...actionFields, }, - ); + }); }; const showActionInActionsList = async ( @@ -81,7 +143,7 @@ const showActionInActionsList = async ( const [, , toPot] = args; const { data } = - (await query< + (await amplifyClient.query< GetExpenditureByNativeFundingPotIdAndColonyQuery, GetExpenditureByNativeFundingPotIdAndColonyQueryVariables >(GetExpenditureByNativeFundingPotIdAndColonyDocument, { @@ -133,18 +195,35 @@ const isActionMotionFinalization = async ( getExtensionHash(Extension.MultisigPermissions)) ); }; +/** + * Determines whether the action is a result of a multisig being finalized + * by checking if its initiator was the MultiSig extension + */ +const isActionMultiSigFinalization = async ( + initiatorAddress: string, + extensions: ExtensionFragment[], +): Promise => { + const initiatorExtension = extensions.find( + (extension) => extension.id === initiatorAddress, + ); + + return ( + !!initiatorExtension && + initiatorExtension.hash === getExtensionHash(Extension.MultisigPermissions) + ); +}; export const createColonyAction = async ( actionData: CreateColonyActionInput, blockTimestamp: number, ): Promise => { - await mutate( - CreateColonyActionDocument, - { - input: { - ...actionData, - createdAt: getBlockChainTimestampISODate(blockTimestamp), - }, + await amplifyClient.mutate< + CreateColonyActionMutation, + CreateColonyActionMutationVariables + >(CreateColonyActionDocument, { + input: { + ...actionData, + createdAt: getBlockChainTimestampISODate(blockTimestamp), }, - ); + }); }; diff --git a/src/utils/arbitraryTxs.ts b/apps/main-chain/src/utils/arbitraryTxs.ts similarity index 100% rename from src/utils/arbitraryTxs.ts rename to apps/main-chain/src/utils/arbitraryTxs.ts diff --git a/src/utils/argsByTypeToString.ts b/apps/main-chain/src/utils/argsByTypeToString.ts similarity index 100% rename from src/utils/argsByTypeToString.ts rename to apps/main-chain/src/utils/argsByTypeToString.ts diff --git a/src/utils/arrays.ts b/apps/main-chain/src/utils/arrays.ts similarity index 100% rename from src/utils/arrays.ts rename to apps/main-chain/src/utils/arrays.ts diff --git a/src/utils/clients/colony.ts b/apps/main-chain/src/utils/clients/colony.ts similarity index 100% rename from src/utils/clients/colony.ts rename to apps/main-chain/src/utils/clients/colony.ts diff --git a/src/utils/clients/index.ts b/apps/main-chain/src/utils/clients/index.ts similarity index 81% rename from src/utils/clients/index.ts rename to apps/main-chain/src/utils/clients/index.ts index c0d26f7e8..b79f3c132 100644 --- a/src/utils/clients/index.ts +++ b/apps/main-chain/src/utils/clients/index.ts @@ -1,7 +1,12 @@ -import { ClientType } from '@colony/colony-js'; +import { + AnyColonyClient, + AnyVotingReputationClient, + ClientType, + ColonyNetworkClient, + TokenClient, +} from '@colony/colony-js'; import networkClient from '~networkClient'; -import { NetworkClients } from '~types'; import { getCachedColonyClient } from './colony'; import { getVotingClient } from './voting'; @@ -14,6 +19,12 @@ export * from './streamingPayments'; export * from './oneTxPayment'; export * from './token'; +type NetworkClients = + | ColonyNetworkClient + | TokenClient + | AnyColonyClient + | AnyVotingReputationClient; + /** * Function returning a (hopefully) cached client for the given type and colony address * Currently, it supports colony and voting clients, for other client types it returns the network client diff --git a/src/utils/clients/oneTxPayment.ts b/apps/main-chain/src/utils/clients/oneTxPayment.ts similarity index 100% rename from src/utils/clients/oneTxPayment.ts rename to apps/main-chain/src/utils/clients/oneTxPayment.ts diff --git a/src/utils/clients/stagedExpenditure.ts b/apps/main-chain/src/utils/clients/stagedExpenditure.ts similarity index 100% rename from src/utils/clients/stagedExpenditure.ts rename to apps/main-chain/src/utils/clients/stagedExpenditure.ts diff --git a/src/utils/clients/stakedExpenditure.ts b/apps/main-chain/src/utils/clients/stakedExpenditure.ts similarity index 100% rename from src/utils/clients/stakedExpenditure.ts rename to apps/main-chain/src/utils/clients/stakedExpenditure.ts diff --git a/src/utils/clients/streamingPayments.ts b/apps/main-chain/src/utils/clients/streamingPayments.ts similarity index 100% rename from src/utils/clients/streamingPayments.ts rename to apps/main-chain/src/utils/clients/streamingPayments.ts diff --git a/src/utils/clients/token.ts b/apps/main-chain/src/utils/clients/token.ts similarity index 100% rename from src/utils/clients/token.ts rename to apps/main-chain/src/utils/clients/token.ts diff --git a/src/utils/clients/voting.ts b/apps/main-chain/src/utils/clients/voting.ts similarity index 100% rename from src/utils/clients/voting.ts rename to apps/main-chain/src/utils/clients/voting.ts diff --git a/src/utils/colony.ts b/apps/main-chain/src/utils/colony.ts similarity index 87% rename from src/utils/colony.ts rename to apps/main-chain/src/utils/colony.ts index 524148085..bc7de3a36 100644 --- a/src/utils/colony.ts +++ b/apps/main-chain/src/utils/colony.ts @@ -1,10 +1,10 @@ -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyWithRootRolesFragment, ListColoniesWithRootPermissionHoldersDocument, ListColoniesWithRootPermissionHoldersQuery, ListColoniesWithRootPermissionHoldersQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import { notNull } from './arrays'; import { getAllPagesOfData, GetDataFn } from './graphql'; @@ -12,7 +12,7 @@ const getColoniesData: GetDataFn< ColonyWithRootRolesFragment, undefined > = async (_params, nextToken) => { - const response = await query< + const response = await amplifyClient.query< ListColoniesWithRootPermissionHoldersQuery, ListColoniesWithRootPermissionHoldersQueryVariables >(ListColoniesWithRootPermissionHoldersDocument, { diff --git a/src/utils/colonyClient.ts b/apps/main-chain/src/utils/colonyClient.ts similarity index 64% rename from src/utils/colonyClient.ts rename to apps/main-chain/src/utils/colonyClient.ts index 6c1afd5ea..151ff2126 100644 --- a/src/utils/colonyClient.ts +++ b/apps/main-chain/src/utils/colonyClient.ts @@ -1,20 +1,23 @@ -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { Colony, GetColonyDocument, GetColonyQuery, GetColonyQueryVariables, -} from '~graphql'; -import { output } from './logger'; +} from '@joincolony/graphql'; +import { output } from '@joincolony/utils'; // @TODO: Consider refactoring this as it doesn't feel like it's in the right place export const getColonyFromDB = async ( colonyAddress: string, ): Promise => { const { data } = - (await query(GetColonyDocument, { - id: colonyAddress, - })) ?? {}; + (await amplifyClient.query( + GetColonyDocument, + { + id: colonyAddress, + }, + )) ?? {}; const colony = data?.getColony; diff --git a/src/utils/colonyMetadata.ts b/apps/main-chain/src/utils/colonyMetadata.ts similarity index 90% rename from src/utils/colonyMetadata.ts rename to apps/main-chain/src/utils/colonyMetadata.ts index 4b6cc2f8e..a12fd9983 100644 --- a/src/utils/colonyMetadata.ts +++ b/apps/main-chain/src/utils/colonyMetadata.ts @@ -1,7 +1,7 @@ import { TransactionDescription } from 'ethers/lib/utils'; import { ColonyOperations } from '~types'; -import { query, mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyMetadata, CreateDomainMetadataDocument, @@ -14,9 +14,9 @@ import { GetDomainMetadataQueryVariables, UpdateColonyMetadataDocument, UpdateDomainMetadataDocument, -} from '~graphql'; +} from '@joincolony/graphql'; import { getDomainDatabaseId } from './domains'; -import { output } from './logger'; +import { output } from '@joincolony/utils'; import { getCachedColonyClient } from './clients'; import { getActionByMotionId, getActionByMultiSigId } from './actions'; import { parseFunctionData } from './parseFunction'; @@ -39,7 +39,7 @@ const linkPendingDomainMetadataWithDomain = async ( // and use that as an id to link the pending metadata. const nativeDomainId = domainCount.toNumber(); - await mutate(CreateDomainMetadataDocument, { + await amplifyClient.mutate(CreateDomainMetadataDocument, { input: { ...pendingDomainMetadata, id: getDomainDatabaseId(colonyAddress, nativeDomainId), @@ -50,12 +50,12 @@ const linkPendingDomainMetadataWithDomain = async ( const databaseDomainId = getDomainDatabaseId(colonyAddress, nativeDomainId); const { data } = - (await query( - GetDomainMetadataDocument, - { - id: databaseDomainId, - }, - )) ?? {}; + (await amplifyClient.query< + GetDomainMetadataQuery, + GetDomainMetadataQueryVariables + >(GetDomainMetadataDocument, { + id: databaseDomainId, + })) ?? {}; const currentDomainMetadata = data?.getDomainMetadata; @@ -104,7 +104,7 @@ const linkPendingDomainMetadataWithDomain = async ( updatedMetadata.name = newName; } - await mutate(UpdateDomainMetadataDocument, { + await amplifyClient.mutate(UpdateDomainMetadataDocument, { input: { ...updatedMetadata, id: databaseDomainId, @@ -118,12 +118,12 @@ const linkPendingColonyMetadataWithColony = async ( colonyAddress: string, ): Promise => { const { data } = - (await query( - GetColonyMetadataDocument, - { - id: colonyAddress, - }, - )) ?? {}; + (await amplifyClient.query< + GetColonyMetadataQuery, + GetColonyMetadataQueryVariables + >(GetColonyMetadataDocument, { + id: colonyAddress, + })) ?? {}; const currentColonyMetadata = data?.getColonyMetadata; @@ -175,7 +175,7 @@ const linkPendingColonyMetadataWithColony = async ( updatedMetadata.objective = pendingColonyMetadata.objective; } - await mutate(UpdateColonyMetadataDocument, { + await amplifyClient.mutate(UpdateColonyMetadataDocument, { input: { ...updatedMetadata, changelog: [ diff --git a/src/utils/contributors.ts b/apps/main-chain/src/utils/contributors.ts similarity index 84% rename from src/utils/contributors.ts rename to apps/main-chain/src/utils/contributors.ts index b486b252f..a60285a96 100644 --- a/src/utils/contributors.ts +++ b/apps/main-chain/src/utils/contributors.ts @@ -1,4 +1,4 @@ -import { query, mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { CreateColonyContributorDocument, CreateColonyContributorInput, @@ -13,7 +13,7 @@ import { UpdateColonyContributorDocument, UpdateColonyContributorMutation, UpdateColonyContributorMutationVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import { notNull } from './arrays'; export const getColonyContributorId = ( @@ -44,10 +44,13 @@ const getColonyContributor = async ({ contributorAddress: string; }): Promise< ReturnType< - typeof query + typeof amplifyClient.query< + GetColonyContributorQuery, + GetColonyContributorQueryVariables + > > > => { - return await query< + return await amplifyClient.query< GetColonyContributorQuery, GetColonyContributorQueryVariables >(GetColonyContributorDocument, { @@ -60,7 +63,7 @@ export const createColonyContributor = async ({ contributorAddress, ...rest }: CreateColonyContributorInput): Promise => { - await mutate< + await amplifyClient.mutate< CreateColonyContributorMutation, CreateColonyContributorMutationVariables >(CreateColonyContributorDocument, { @@ -81,13 +84,13 @@ export const updateColonyContributor = async ({ contributorAddress: string; }): Promise => { const { data } = - (await query( - GetAllColonyRolesDocument, - { - colonyAddress, - targetAddress: contributorAddress, - }, - )) ?? {}; + (await amplifyClient.query< + GetAllColonyRolesQuery, + GetAllColonyRolesQueryVariables + >(GetAllColonyRolesDocument, { + colonyAddress, + targetAddress: contributorAddress, + })) ?? {}; // Is there at least one role for which user has at least one permission? const hasAtLeastOnePermissionInColony = @@ -101,7 +104,7 @@ export const updateColonyContributor = async ({ ), ); - await mutate< + await amplifyClient.mutate< UpdateColonyContributorMutation, UpdateColonyContributorMutationVariables >(UpdateColonyContributorDocument, { diff --git a/src/utils/currentVersion.ts b/apps/main-chain/src/utils/currentVersion.ts similarity index 88% rename from src/utils/currentVersion.ts rename to apps/main-chain/src/utils/currentVersion.ts index bb0f78db7..339fb3320 100644 --- a/src/utils/currentVersion.ts +++ b/apps/main-chain/src/utils/currentVersion.ts @@ -1,4 +1,4 @@ -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { CreateCurrentVersionDocument, CreateCurrentVersionMutation, @@ -9,7 +9,7 @@ import { UpdateCurrentVersionDocument, UpdateCurrentVersionMutation, UpdateCurrentVersionMutationVariables, -} from '~graphql'; +} from '@joincolony/graphql'; /** * Util to update current version of an entity (colony, extension, etc.) in the database @@ -19,7 +19,7 @@ export const updateCurrentVersion = async ( version: number, onVersionUpdated?: () => Promise, ): Promise => { - const response = await query< + const response = await amplifyClient.query< GetCurrentVersionQuery, GetCurrentVersionQueryVariables >(GetCurrentVersionDocument, { @@ -30,7 +30,7 @@ export const updateCurrentVersion = async ( if (!currentVersion) { // If there is no DB entry for the key, create one - await mutate< + await amplifyClient.mutate< CreateCurrentVersionMutation, CreateCurrentVersionMutationVariables >(CreateCurrentVersionDocument, { @@ -44,7 +44,7 @@ export const updateCurrentVersion = async ( const databaseId = response.data?.getCurrentVersionByKey?.items[0]?.id ?? ''; - await mutate< + await amplifyClient.mutate< UpdateCurrentVersionMutation, UpdateCurrentVersionMutationVariables >(UpdateCurrentVersionDocument, { diff --git a/src/utils/dates.ts b/apps/main-chain/src/utils/dates.ts similarity index 100% rename from src/utils/dates.ts rename to apps/main-chain/src/utils/dates.ts diff --git a/src/utils/decisions.ts b/apps/main-chain/src/utils/decisions.ts similarity index 87% rename from src/utils/decisions.ts rename to apps/main-chain/src/utils/decisions.ts index bfeac6d05..72f4f8a40 100644 --- a/src/utils/decisions.ts +++ b/apps/main-chain/src/utils/decisions.ts @@ -1,4 +1,4 @@ -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetColonyDecisionByActionIdDocument, GetColonyDecisionByActionIdQuery, @@ -6,7 +6,7 @@ import { UpdateColonyDecisionDocument, UpdateColonyDecisionMutation, UpdateColonyDecisionMutationVariables, -} from '~graphql'; +} from '@joincolony/graphql'; export const getColonyDecisionId = ( colonyAddress: string, @@ -18,7 +18,7 @@ export const updateDecisionInDB = async ( decisionData: Omit, ): Promise => { const { data } = - (await query< + (await amplifyClient.query< GetColonyDecisionByActionIdQuery, GetColonyDecisionByActionIdQueryVariables >(GetColonyDecisionByActionIdDocument, { @@ -28,7 +28,7 @@ export const updateDecisionInDB = async ( const decision = data?.getColonyDecisionByActionId?.items[0]; if (decision) - await mutate< + await amplifyClient.mutate< UpdateColonyDecisionMutation, UpdateColonyDecisionMutationVariables >(UpdateColonyDecisionDocument, { diff --git a/src/utils/domains.ts b/apps/main-chain/src/utils/domains.ts similarity index 100% rename from src/utils/domains.ts rename to apps/main-chain/src/utils/domains.ts diff --git a/src/utils/events.ts b/apps/main-chain/src/utils/events.ts similarity index 86% rename from src/utils/events.ts rename to apps/main-chain/src/utils/events.ts index 432791496..ecd34f410 100644 --- a/src/utils/events.ts +++ b/apps/main-chain/src/utils/events.ts @@ -2,9 +2,8 @@ import { BigNumber, utils } from 'ethers'; import { Log } from '@ethersproject/providers'; import networkClient from '~networkClient'; -import { ContractEvent, ContractEventsSignatures } from '~types'; -import { mutate, query } from '~amplifyClient'; -import { getChainId } from '~provider'; +import amplifyClient from '~amplifyClient'; +import rpcProvider from '~provider'; import { CreateContractEventDocument, CreateContractEventMutation, @@ -13,10 +12,10 @@ import { GetContractEventQuery, GetContractEventQueryVariables, ChainMetadata, -} from '~graphql'; -import { blocksMap } from '~blockListener'; - -import { verbose } from './logger'; +} from '@joincolony/graphql'; +import blockManager from '~blockManager'; +import { verbose } from '@joincolony/utils'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; export const mapLogToContractEvent = async ( log: Log, @@ -32,10 +31,10 @@ export const mapLogToContractEvent = async ( try { // Attempt to first get a block from the map as we might have already fetched its info - let block = blocksMap.get(blockNumber); + let block = blockManager.getBlock(blockNumber); if (!block) { block = await provider.getBlock(blockNumber); - blocksMap.set(blockNumber, block); + blockManager.updateBlocksMap(blockNumber, block); } const { hash: blockHash, timestamp } = block; @@ -68,7 +67,7 @@ export const saveEvent = async (event: ContractEvent): Promise => { 'Event does not have a signature. Possibly bad event data. Refusing the save to database!', ); } - const chainId = getChainId(); + const chainId = rpcProvider.getChainId(); const { name, @@ -153,17 +152,17 @@ export const saveEvent = async (event: ContractEvent): Promise => { if (process.env.NODE_ENV !== 'production') { const { id: existingContractEventId } = ( - await query( - GetContractEventDocument, - { - id: contractEvent.id, - }, - ) + await amplifyClient.query< + GetContractEventQuery, + GetContractEventQueryVariables + >(GetContractEventDocument, { + id: contractEvent.id, + }) )?.data?.getContractEvent ?? {}; existingContractEvent = existingContractEventId; } if (!existingContractEvent) { - await mutate< + await amplifyClient.mutate< CreateContractEventMutation, CreateContractEventMutationVariables >(CreateContractEventDocument, { input: contractEvent }); diff --git a/src/utils/expenditures.ts b/apps/main-chain/src/utils/expenditures.ts similarity index 94% rename from src/utils/expenditures.ts rename to apps/main-chain/src/utils/expenditures.ts index ca0304aa7..c91a26eb8 100644 --- a/src/utils/expenditures.ts +++ b/apps/main-chain/src/utils/expenditures.ts @@ -1,5 +1,5 @@ import { BigNumber, utils } from 'ethers'; -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ExpenditureBalance, @@ -7,9 +7,9 @@ import { GetExpenditureByNativeFundingPotIdAndColonyDocument, GetExpenditureByNativeFundingPotIdAndColonyQuery, GetExpenditureByNativeFundingPotIdAndColonyQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; -import { output } from './logger'; +import { output } from '@joincolony/utils'; import { insertAtIndex } from './arrays'; export const getExpenditureDatabaseId = ( @@ -85,7 +85,7 @@ export const getExpenditureByFundingPot = async ( colonyAddress: string, fundingPotId: number, ): Promise => { - const response = await query< + const response = await amplifyClient.query< GetExpenditureByNativeFundingPotIdAndColonyQuery, GetExpenditureByNativeFundingPotIdAndColonyQueryVariables >(GetExpenditureByNativeFundingPotIdAndColonyDocument, { diff --git a/src/utils/extensions/getColonyExtensions.ts b/apps/main-chain/src/utils/extensions/getColonyExtensions.ts similarity index 83% rename from src/utils/extensions/getColonyExtensions.ts rename to apps/main-chain/src/utils/extensions/getColonyExtensions.ts index b50603fa0..34841fbec 100644 --- a/src/utils/extensions/getColonyExtensions.ts +++ b/apps/main-chain/src/utils/extensions/getColonyExtensions.ts @@ -1,16 +1,16 @@ -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ExtensionFragment, GetColonyExtensionsByColonyAddressDocument, GetColonyExtensionsByColonyAddressQuery, GetColonyExtensionsByColonyAddressQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import { notNull } from '~utils/arrays'; export const getColonyExtensions = async ( colonyAddress: string, ): Promise => { - const response = await query< + const response = await amplifyClient.query< GetColonyExtensionsByColonyAddressQuery, GetColonyExtensionsByColonyAddressQueryVariables >(GetColonyExtensionsByColonyAddressDocument, { diff --git a/src/utils/extensions/index.ts b/apps/main-chain/src/utils/extensions/index.ts similarity index 100% rename from src/utils/extensions/index.ts rename to apps/main-chain/src/utils/extensions/index.ts diff --git a/src/utils/extensions/installationCount.ts b/apps/main-chain/src/utils/extensions/installationCount.ts similarity index 89% rename from src/utils/extensions/installationCount.ts rename to apps/main-chain/src/utils/extensions/installationCount.ts index ec2f50592..88abe19a5 100644 --- a/src/utils/extensions/installationCount.ts +++ b/apps/main-chain/src/utils/extensions/installationCount.ts @@ -1,5 +1,5 @@ import { Extension, getExtensionHash } from '@colony/colony-js'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { CreateExtensionInstallationsCountDocument, CreateExtensionInstallationsCountMutation, @@ -10,8 +10,8 @@ import { UpdateExtensionInstallationsCountDocument, UpdateExtensionInstallationsCountMutation, UpdateExtensionInstallationsCountMutationVariables, -} from '~graphql'; -import provider from '~provider'; +} from '@joincolony/graphql'; +import rpcProvider from '~provider'; const extensionHashDBKeyMap = { [getExtensionHash(Extension.VotingReputation)]: 'reputationWeighted', @@ -23,8 +23,10 @@ const extensionHashDBKeyMap = { }; const getExtensionCount = async (extensionHash: string): Promise => { + const provider = rpcProvider.getProviderInstance(); + const { data } = - (await query< + (await amplifyClient.query< GetExtensionInstallationsCountQuery, GetExtensionInstallationsCountQueryVariables >(GetExtensionInstallationsCountDocument, { @@ -32,7 +34,7 @@ const getExtensionCount = async (extensionHash: string): Promise => { })) ?? {}; if (!data?.getExtensionInstallationsCount) { - await mutate< + await amplifyClient.mutate< CreateExtensionInstallationsCountMutation, CreateExtensionInstallationsCountMutationVariables >(CreateExtensionInstallationsCountDocument, { @@ -76,12 +78,12 @@ export const updateExtensionCount = async ( const key = extensionHashDBKeyMap[extensionHash]; - await mutate< + await amplifyClient.mutate< UpdateExtensionInstallationsCountMutation, UpdateExtensionInstallationsCountMutationVariables >(UpdateExtensionInstallationsCountDocument, { input: { - id: provider.network.chainId.toString(), + id: rpcProvider.getProviderInstance().network.chainId.toString(), [key]: count + 1, }, }); diff --git a/src/utils/extensions/isAddressExtension.ts b/apps/main-chain/src/utils/extensions/isAddressExtension.ts similarity index 74% rename from src/utils/extensions/isAddressExtension.ts rename to apps/main-chain/src/utils/extensions/isAddressExtension.ts index dabc3886c..c6df86ded 100644 --- a/src/utils/extensions/isAddressExtension.ts +++ b/apps/main-chain/src/utils/extensions/isAddressExtension.ts @@ -2,11 +2,11 @@ import { GetColonyExtensionDocument, GetColonyExtensionQuery, GetColonyExtensionQueryVariables, -} from '~graphql'; -import { query } from '~amplifyClient'; +} from '@joincolony/graphql'; +import amplifyClient from '~amplifyClient'; export const isAddressExtension = async (address: string): Promise => { - const response = await query< + const response = await amplifyClient.query< GetColonyExtensionQuery, GetColonyExtensionQueryVariables >(GetColonyExtensionDocument, { diff --git a/src/utils/extensions/multiSig.ts b/apps/main-chain/src/utils/extensions/multiSig.ts similarity index 91% rename from src/utils/extensions/multiSig.ts rename to apps/main-chain/src/utils/extensions/multiSig.ts index 32db21679..f3bff4b58 100644 --- a/src/utils/extensions/multiSig.ts +++ b/apps/main-chain/src/utils/extensions/multiSig.ts @@ -1,11 +1,11 @@ import { AnyMultisigPermissionsClient } from '@colony/colony-js'; -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ExtensionParams, UpdateColonyExtensionByAddressDocument, UpdateColonyExtensionByAddressMutation, UpdateColonyExtensionByAddressMutationVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import { getMultiSigClient } from '~utils/clients'; const getInitialMultiSigParams = async ( @@ -31,7 +31,7 @@ export const addMultiSigParamsToDB = async ( } const params = await getInitialMultiSigParams(multiSigClient); - await mutate< + await amplifyClient.mutate< UpdateColonyExtensionByAddressMutation, UpdateColonyExtensionByAddressMutationVariables >(UpdateColonyExtensionByAddressDocument, { diff --git a/src/utils/extensions/updateExtension.ts b/apps/main-chain/src/utils/extensions/updateExtension.ts similarity index 83% rename from src/utils/extensions/updateExtension.ts rename to apps/main-chain/src/utils/extensions/updateExtension.ts index b7568b582..87c32c88d 100644 --- a/src/utils/extensions/updateExtension.ts +++ b/apps/main-chain/src/utils/extensions/updateExtension.ts @@ -1,16 +1,16 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { UpdateColonyExtensionByAddressDocument, UpdateColonyExtensionByAddressMutation, UpdateColonyExtensionByAddressMutationVariables, UpdateColonyExtensionInput, -} from '~graphql'; +} from '@joincolony/graphql'; export const updateExtension = async ( extensionAddress: string, fieldsToUpdate: Omit, ): Promise => { - const result = await mutate< + const result = await amplifyClient.mutate< UpdateColonyExtensionByAddressMutation, UpdateColonyExtensionByAddressMutationVariables >(UpdateColonyExtensionByAddressDocument, { diff --git a/src/utils/extensions/votingRep.ts b/apps/main-chain/src/utils/extensions/votingRep.ts similarity index 96% rename from src/utils/extensions/votingRep.ts rename to apps/main-chain/src/utils/extensions/votingRep.ts index fe5d87d9f..c38fabcba 100644 --- a/src/utils/extensions/votingRep.ts +++ b/apps/main-chain/src/utils/extensions/votingRep.ts @@ -1,5 +1,5 @@ import { AnyVotingReputationClient } from '@colony/colony-js'; -import { ExtensionParams } from '~graphql'; +import { ExtensionParams } from '@joincolony/graphql'; import { getVotingClient } from '~utils'; import { updateExtension } from './updateExtension'; diff --git a/src/utils/extensions/writeExtension.ts b/apps/main-chain/src/utils/extensions/writeExtension.ts similarity index 91% rename from src/utils/extensions/writeExtension.ts rename to apps/main-chain/src/utils/extensions/writeExtension.ts index 186747ba2..0ebaeede1 100644 --- a/src/utils/extensions/writeExtension.ts +++ b/apps/main-chain/src/utils/extensions/writeExtension.ts @@ -1,9 +1,9 @@ import { constants } from 'ethers'; import networkClient from '~networkClient'; -import { mutate, query } from '~amplifyClient'; -import { ContractEvent } from '~types'; -import { verbose, toNumber } from '~utils'; +import amplifyClient from '~amplifyClient'; +import { ContractEvent } from '@joincolony/blocks'; +import { toNumber } from '~utils'; import { CreateColonyExtensionDocument, CreateColonyExtensionMutation, @@ -16,7 +16,7 @@ import { GetColonyExtensionByHashAndColonyQueryVariables, CreateColonyExtensionInput, NotificationType, -} from '~graphql'; +} from '@joincolony/graphql'; import { updateCurrentVersion } from '~utils/currentVersion'; import { sendExtensionUpdateNotifications, @@ -24,6 +24,7 @@ import { } from '~utils/notifications'; import { updateExtension } from './updateExtension'; import { Extension, getExtensionHash } from '@colony/colony-js'; +import { verbose } from '@joincolony/utils'; const EXTENSION_SUPPORTING_NOTIFICATIONS = [ Extension.OneTxPayment, @@ -120,7 +121,7 @@ export const deleteExtensionFromEvent = async ( verbose('Extension:', extensionHash, 'uninstalled in Colony:', colony); const { data } = - (await query< + (await amplifyClient.query< GetColonyExtensionByHashAndColonyQuery, GetColonyExtensionByHashAndColonyQueryVariables >(GetColonyExtensionByHashAndColonyDocument, { @@ -144,12 +145,12 @@ const createOrUpdateColonyExtension = async ( const { isDeprecated, isDeleted, isInitialized, version } = input; const { data } = - (await query( - GetColonyExtensionDocument, - { - id: extensionAddress, - }, - )) ?? {}; + (await amplifyClient.query< + GetColonyExtensionQuery, + GetColonyExtensionQueryVariables + >(GetColonyExtensionDocument, { + id: extensionAddress, + })) ?? {}; const extension = data?.getColonyExtension?.colonyId; @@ -162,7 +163,7 @@ const createOrUpdateColonyExtension = async ( extensionHash: input.hash, }); - await mutate< + await amplifyClient.mutate< CreateColonyExtensionMutation, CreateColonyExtensionMutationVariables >(CreateColonyExtensionDocument, { diff --git a/src/utils/fundsClaims.ts b/apps/main-chain/src/utils/fundsClaims.ts similarity index 80% rename from src/utils/fundsClaims.ts rename to apps/main-chain/src/utils/fundsClaims.ts index 8e3d59a2e..31b2807f2 100644 --- a/src/utils/fundsClaims.ts +++ b/apps/main-chain/src/utils/fundsClaims.ts @@ -1,11 +1,11 @@ -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { CreateColonyFundsClaimDocument, CreateColonyFundsClaimMutation, CreateColonyFundsClaimMutationVariables, -} from '~graphql'; -import { getChainId } from '~provider'; -import { ContractEvent } from '~types'; +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; +import rpcProvider from '~provider'; interface CreateFundsClaimsParams { event: ContractEvent; @@ -20,9 +20,9 @@ export const createFundsClaim = async ({ amount, event: { transactionHash, logIndex, blockNumber }, }: CreateFundsClaimsParams): Promise => { - const chainId = getChainId(); + const chainId = rpcProvider.getChainId(); - await mutate< + await amplifyClient.mutate< CreateColonyFundsClaimMutation, CreateColonyFundsClaimMutationVariables >(CreateColonyFundsClaimDocument, { diff --git a/src/utils/graphql.ts b/apps/main-chain/src/utils/graphql.ts similarity index 91% rename from src/utils/graphql.ts rename to apps/main-chain/src/utils/graphql.ts index e939854c9..1635c3005 100644 --- a/src/utils/graphql.ts +++ b/apps/main-chain/src/utils/graphql.ts @@ -1,9 +1,6 @@ -import dotenv from 'dotenv'; import { DocumentNode, Kind, isExecutableDefinitionNode } from 'graphql'; -import { query } from '~amplifyClient'; - -dotenv.config(); +import amplifyClient from '~amplifyClient'; interface GetDataResponse { items: Array | undefined; @@ -55,10 +52,10 @@ export const tryFetchGraphqlQuery = async < let currentTry = 0; while (true) { - const result = await query, TVariables>( - queryString, - variables, - ); + const result = await amplifyClient.query< + Record, + TVariables + >(queryString, variables); /* * @NOTE That this limits to only fetching one operation at a time diff --git a/src/utils/index.ts b/apps/main-chain/src/utils/index.ts similarity index 92% rename from src/utils/index.ts rename to apps/main-chain/src/utils/index.ts index 0bf9573e2..90fd4f8ec 100644 --- a/src/utils/index.ts +++ b/apps/main-chain/src/utils/index.ts @@ -1,6 +1,4 @@ -export * from './logger'; export * from './events'; -export * from './stats'; export * from './extensions'; export * from './numbers'; export * from './tokens'; diff --git a/src/utils/isColonyAddress.ts b/apps/main-chain/src/utils/isColonyAddress.ts similarity index 100% rename from src/utils/isColonyAddress.ts rename to apps/main-chain/src/utils/isColonyAddress.ts diff --git a/src/utils/metadataDelta/index.ts b/apps/main-chain/src/utils/metadataDelta/index.ts similarity index 100% rename from src/utils/metadataDelta/index.ts rename to apps/main-chain/src/utils/metadataDelta/index.ts diff --git a/src/utils/metadataDelta/types.ts b/apps/main-chain/src/utils/metadataDelta/types.ts similarity index 60% rename from src/utils/metadataDelta/types.ts rename to apps/main-chain/src/utils/metadataDelta/types.ts index 6ffbcbf2b..9cf5b0c3b 100644 --- a/src/utils/metadataDelta/types.ts +++ b/apps/main-chain/src/utils/metadataDelta/types.ts @@ -2,6 +2,8 @@ export enum MetadataDeltaOperationType { ADD_VERIFIED_MEMBERS = 'ADD_VERIFIED_MEMBERS', REMOVE_VERIFIED_MEMBERS = 'REMOVE_VERIFIED_MEMBERS', MANAGE_TOKENS = 'MANAGE_TOKENS', + DISABLE_PROXY_COLONY = 'DISABLE_PROXY_COLONY', + ENABLE_PROXY_COLONY = 'ENABLE_PROXY_COLONY', } export interface AddVerifiedMembersOperation { @@ -19,7 +21,19 @@ export interface ManageTokensOperation { payload: string[]; } +export interface DisableProxyColonyOperation { + type: MetadataDeltaOperationType.DISABLE_PROXY_COLONY; + payload: string[]; +} + +export interface EnableProxyColonyOperation { + type: MetadataDeltaOperationType.ENABLE_PROXY_COLONY; + payload: string[]; +} + export type MetadataDeltaOperation = | AddVerifiedMembersOperation | RemoveVerifiedMembersOperation - | ManageTokensOperation; + | ManageTokensOperation + | DisableProxyColonyOperation + | EnableProxyColonyOperation; diff --git a/src/utils/metadataDelta/utils.ts b/apps/main-chain/src/utils/metadataDelta/utils.ts similarity index 72% rename from src/utils/metadataDelta/utils.ts rename to apps/main-chain/src/utils/metadataDelta/utils.ts index d7de41f6d..4002d14a2 100644 --- a/src/utils/metadataDelta/utils.ts +++ b/apps/main-chain/src/utils/metadataDelta/utils.ts @@ -1,10 +1,12 @@ -import { verbose } from '~utils'; +import { verbose } from '@joincolony/utils'; import { AddVerifiedMembersOperation, RemoveVerifiedMembersOperation, MetadataDeltaOperation, MetadataDeltaOperationType, ManageTokensOperation, + DisableProxyColonyOperation, + EnableProxyColonyOperation, } from './types'; export const isAddVerifiedMembersOperation = ( @@ -40,6 +42,28 @@ export const isManageTokensOperation = ( ); }; +export const isDisableProxyColonyOperation = ( + operation: MetadataDeltaOperation, +): operation is DisableProxyColonyOperation => { + return ( + operation.type === MetadataDeltaOperationType.DISABLE_PROXY_COLONY && + operation.payload !== undefined && + Array.isArray(operation.payload) && + operation.payload.every((item) => typeof item === 'string') + ); +}; + +export const isEnableProxyColonyOperation = ( + operation: MetadataDeltaOperation, +): operation is EnableProxyColonyOperation => { + return ( + operation.type === MetadataDeltaOperationType.ENABLE_PROXY_COLONY && + operation.payload !== undefined && + Array.isArray(operation.payload) && + operation.payload.every((item) => typeof item === 'string') + ); +}; + const isMetadataDeltaOperation = ( operation: any, ): operation is MetadataDeltaOperation => { diff --git a/src/utils/networkFee.ts b/apps/main-chain/src/utils/networkFee.ts similarity index 94% rename from src/utils/networkFee.ts rename to apps/main-chain/src/utils/networkFee.ts index 5504e229b..da0bbe327 100644 --- a/src/utils/networkFee.ts +++ b/apps/main-chain/src/utils/networkFee.ts @@ -1,10 +1,10 @@ import { BigNumber, BigNumberish } from 'ethers'; -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { GetCurrentNetworkInverseFeeDocument, GetCurrentNetworkInverseFeeQuery, GetCurrentNetworkInverseFeeQueryVariables, -} from '~graphql'; +} from '@joincolony/graphql'; export const getAmountLessFee = ( amount: BigNumberish, @@ -41,7 +41,7 @@ export const getAmountWithFee = ( export const getNetworkInverseFee = async (): Promise => { const { data: networkFeeData } = - (await query< + (await amplifyClient.query< GetCurrentNetworkInverseFeeQuery, GetCurrentNetworkInverseFeeQueryVariables >(GetCurrentNetworkInverseFeeDocument)) ?? {}; diff --git a/src/utils/notifications.ts b/apps/main-chain/src/utils/notifications.ts similarity index 98% rename from src/utils/notifications.ts rename to apps/main-chain/src/utils/notifications.ts index 09410fd3e..75a7f2ca6 100644 --- a/src/utils/notifications.ts +++ b/apps/main-chain/src/utils/notifications.ts @@ -1,5 +1,5 @@ import MagicBellClient, { Notification } from '@magicbell/core'; -import { query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { ColonyActionType, GetColonyContributorsNotificationDataDocument, @@ -11,7 +11,7 @@ import { NotificationsDataFragment, NotificationType, NotificationUserFragment, -} from '~graphql'; +} from '@joincolony/graphql'; import { getAllColoniesWithRootPermissionHolders } from './colony'; import { getAllPagesOfData, GetDataFn } from './graphql'; import { isAddressExtension } from './extensions'; @@ -70,7 +70,7 @@ const getMembersData: GetDataFn< NotificationUserFragment, { colonyAddress: string } > = async ({ colonyAddress }, nextToken) => { - const response = await query< + const response = await amplifyClient.query< GetColonyContributorsNotificationDataQuery, GetColonyContributorsNotificationDataQueryVariables >(GetColonyContributorsNotificationDataDocument, { @@ -291,7 +291,7 @@ export const sendMentionNotifications = async ({ return; } - const response = await query< + const response = await amplifyClient.query< GetNotificationUsersQuery, GetNotificationUsersQueryVariables >(GetNotificationUsersDocument, { @@ -305,7 +305,7 @@ export const sendMentionNotifications = async ({ const validRecipients: Recipient[] = []; - (response?.data?.listUsers?.items ?? []).forEach((user) => { + (response?.data?.listUsers?.items ?? []).forEach((user: any) => { if ( user?.notificationsData && shouldSendNotificationToRecipient( diff --git a/src/utils/numbers.ts b/apps/main-chain/src/utils/numbers.ts similarity index 100% rename from src/utils/numbers.ts rename to apps/main-chain/src/utils/numbers.ts diff --git a/src/utils/parseFunction.ts b/apps/main-chain/src/utils/parseFunction.ts similarity index 96% rename from src/utils/parseFunction.ts rename to apps/main-chain/src/utils/parseFunction.ts index f1c1424a5..50b83b69c 100644 --- a/src/utils/parseFunction.ts +++ b/apps/main-chain/src/utils/parseFunction.ts @@ -1,6 +1,6 @@ +import { output } from '@joincolony/utils'; import { utils } from 'ethers'; import { TransactionDescription } from 'ethers/lib/utils'; -import { output } from './logger'; /** * Helper attempting to decode function data by trying to parse it with different contract ABIs diff --git a/src/utils/permissions.ts b/apps/main-chain/src/utils/permissions.ts similarity index 87% rename from src/utils/permissions.ts rename to apps/main-chain/src/utils/permissions.ts index af11dc9fb..6043d5348 100644 --- a/src/utils/permissions.ts +++ b/apps/main-chain/src/utils/permissions.ts @@ -3,10 +3,9 @@ import { ColonyRole, Id } from '@colony/colony-js'; import { hexStripZeros } from 'ethers/lib/utils'; -import { mutate, query } from '~amplifyClient'; -import { ContractEvent, ContractEventsSignatures } from '~types'; +import amplifyClient from '~amplifyClient'; +import { ContractEvent, ContractEventsSignatures } from '@joincolony/blocks'; import { - verbose, getCachedColonyClient, getDomainDatabaseId, mapLogToContractEvent, @@ -26,10 +25,11 @@ import { CreateColonyHistoricRoleMutationVariables, CreateColonyHistoricRoleDocument, ColonyActionType, -} from '~graphql'; +} from '@joincolony/graphql'; import { createColonyContributor, isAlreadyContributor } from './contributors'; import { sendPermissionsActionNotifications } from './notifications'; import { NotificationCategory } from '~types/notifications'; +import { verbose } from '@joincolony/utils'; export const BASE_ROLES_MAP = { [`role_${ColonyRole.Recovery}`]: null, @@ -296,44 +296,44 @@ export const createInitialColonyRolesDatabaseEntry = async ( ); const blockNumber = firstRoleSetEvent?.blockNumber ?? 0; - await mutate( - CreateColonyRoleDocument, - { - input: { - id: rolesDatabaseId, - latestBlock: blockNumber, - // Link the Domain Model - domainId: domainDatabaseId, - // Link the Colony Model - colonyRolesId: colonyAddress, - colonyAddress, - /* - * @NOTE Link the target - * - * Note that this handler will fire even for events where the target - * is something or someone not in the database. - * - * We try to account for this, by linking address to either a user, colony, or - * extension via the target address, but it can happen regardless as the - * address can be totally random - * - * Make sure to be aware of that when fetching the query (you can still fetch - * the "targetAddress" value manually, and linking it yourself to the - * appropriate entity) - */ - targetAddress, - - // Set the permissions - ...BASE_ROLES_MAP, - role_0, - role_1, - role_2, - role_3, - role_5, - role_6, - }, + await amplifyClient.mutate< + CreateColonyRoleMutation, + CreateColonyRoleMutationVariables + >(CreateColonyRoleDocument, { + input: { + id: rolesDatabaseId, + latestBlock: blockNumber, + // Link the Domain Model + domainId: domainDatabaseId, + // Link the Colony Model + colonyRolesId: colonyAddress, + colonyAddress, + /* + * @NOTE Link the target + * + * Note that this handler will fire even for events where the target + * is something or someone not in the database. + * + * We try to account for this, by linking address to either a user, colony, or + * extension via the target address, but it can happen regardless as the + * address can be totally random + * + * Make sure to be aware of that when fetching the query (you can still fetch + * the "targetAddress" value manually, and linking it yourself to the + * appropriate entity) + */ + targetAddress, + + // Set the permissions + ...BASE_ROLES_MAP, + role_0, + role_1, + role_2, + role_3, + role_5, + role_6, }, - ); + }); verbose( `Create new Roles entry for ${targetAddress} in colony ${colonyAddress}, under domain ${nativeDomainId}`, @@ -480,45 +480,45 @@ export const createInitialMultiSigRolesDatabaseEntry = async ( ); const blockNumber = firstRoleSetEvent?.blockNumber ?? 0; - await mutate( - CreateColonyRoleDocument, - { - input: { - id: rolesDatabaseId, - latestBlock: blockNumber, - // Link the Domain Model - domainId: domainDatabaseId, - // Link the Colony Model - colonyRolesId: colonyAddress, - colonyAddress, - /* - * @NOTE Link the target - * - * Note that this handler will fire even for events where the target - * is something or someone not in the database. - * - * We try to account for this, by linking address to either a user, colony, or - * extension via the target address, but it can happen regardless as the - * address can be totally random - * - * Make sure to be aware of that when fetching the query (you can still fetch - * the "targetAddress" value manually, and linking it yourself to the - * appropriate entity) - */ - targetAddress, - - // Set the permissions - ...BASE_ROLES_MAP, - role_0, - role_1, - role_2, - role_3, - role_5, - role_6, - isMultiSig: true, - }, + await amplifyClient.mutate< + CreateColonyRoleMutation, + CreateColonyRoleMutationVariables + >(CreateColonyRoleDocument, { + input: { + id: rolesDatabaseId, + latestBlock: blockNumber, + // Link the Domain Model + domainId: domainDatabaseId, + // Link the Colony Model + colonyRolesId: colonyAddress, + colonyAddress, + /* + * @NOTE Link the target + * + * Note that this handler will fire even for events where the target + * is something or someone not in the database. + * + * We try to account for this, by linking address to either a user, colony, or + * extension via the target address, but it can happen regardless as the + * address can be totally random + * + * Make sure to be aware of that when fetching the query (you can still fetch + * the "targetAddress" value manually, and linking it yourself to the + * appropriate entity) + */ + targetAddress, + + // Set the permissions + ...BASE_ROLES_MAP, + role_0, + role_1, + role_2, + role_3, + role_5, + role_6, + isMultiSig: true, }, - ); + }); verbose( `Create new multi sig Roles entry for ${targetAddress} in colony ${colonyAddress}, under domain ${nativeDomainId}`, @@ -667,14 +667,14 @@ export const createColonyHistoricRoleDatabaseEntry = async ( const { id: existingColonyRoleId } = ( - await query< + await amplifyClient.query< GetColonyHistoricRoleQuery, GetColonyHistoricRoleQueryVariables >(GetColonyHistoricRoleDocument, { id }) )?.data?.getColonyHistoricRole ?? {}; if (!existingColonyRoleId) { - await mutate< + await amplifyClient.mutate< CreateColonyHistoricRoleMutation, CreateColonyHistoricRoleMutationVariables >(CreateColonyHistoricRoleDocument, { diff --git a/src/utils/seedDB.ts b/apps/main-chain/src/utils/seedDB.ts similarity index 95% rename from src/utils/seedDB.ts rename to apps/main-chain/src/utils/seedDB.ts index 8b9d11f2f..ba758e35f 100644 --- a/src/utils/seedDB.ts +++ b/apps/main-chain/src/utils/seedDB.ts @@ -1,5 +1,5 @@ import { getExtensionHash, getLogs } from '@colony/colony-js'; -import { mutate } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { COLONY_CURRENT_VERSION_KEY, NETWORK_INVERSE_FEE_DATABASE_ID, @@ -9,7 +9,7 @@ import { CreateCurrentNetworkInverseFeeDocument, CreateCurrentNetworkInverseFeeMutation, CreateCurrentNetworkInverseFeeMutationVariables, -} from '~graphql'; +} from '@joincolony/graphql'; import networkClient from '~networkClient'; import { updateCurrentVersion } from './currentVersion'; @@ -22,7 +22,7 @@ const seedNetworkFee = async (): Promise => { const networkInverseFee = await networkClient.getFeeInverse(); const convertedFee = networkInverseFee.toString(); - await mutate< + await amplifyClient.mutate< CreateCurrentNetworkInverseFeeMutation, CreateCurrentNetworkInverseFeeMutationVariables >(CreateCurrentNetworkInverseFeeDocument, { diff --git a/src/utils/stakes.ts b/apps/main-chain/src/utils/stakes.ts similarity index 100% rename from src/utils/stakes.ts rename to apps/main-chain/src/utils/stakes.ts diff --git a/src/utils/tokens.ts b/apps/main-chain/src/utils/tokens.ts similarity index 92% rename from src/utils/tokens.ts rename to apps/main-chain/src/utils/tokens.ts index 66e5d9b7d..d0ec80f0f 100644 --- a/src/utils/tokens.ts +++ b/apps/main-chain/src/utils/tokens.ts @@ -1,7 +1,7 @@ import { constants } from 'ethers'; import { BlockTag } from '@ethersproject/abstract-provider'; -import { mutate, query } from '~amplifyClient'; +import amplifyClient from '~amplifyClient'; import { getCachedColonyClient } from './clients'; import { notNull } from './arrays'; @@ -13,6 +13,7 @@ import { DeleteColonyTokensDocument, DeleteColonyTokensMutation, DeleteColonyTokensMutationVariables, + FullColony, GetTokenFromEverywhereDocument, GetTokenFromEverywhereQuery, GetTokenFromEverywhereQueryVariables, @@ -23,8 +24,7 @@ import { UpdateColonyMutation, UpdateColonyMutationVariables, NativeTokenStatus, -} from '~graphql'; -import { Colony as FullColony } from '~graphql/generated'; +} from '@joincolony/graphql'; export const getColonyTokenAddress = async ( colonyAddress: string, @@ -136,7 +136,7 @@ export const updateColonyTokens = async ( * Call the GetTokenFromEverywhere query to ensure the token * gets added to the DB if it doesn't already exist */ - await query< + await amplifyClient.query< GetTokenFromEverywhereQuery, GetTokenFromEverywhereQueryVariables >(GetTokenFromEverywhereDocument, { @@ -149,7 +149,7 @@ export const updateColonyTokens = async ( * Only create colony/token entry in the DB if the token data was returned by the GetTokenFromEverywhereQuery. * Otherwise, it will cause any query referencing it to fail */ - await mutate< + await amplifyClient.mutate< CreateColonyTokensMutation, CreateColonyTokensMutationVariables >(CreateColonyTokensDocument, { @@ -171,7 +171,7 @@ export const updateColonyTokens = async ( // If we can't find it, e.g. because it has already been removed by another motion, do nothing. if (colonyTokenId) { - await mutate< + await amplifyClient.mutate< DeleteColonyTokensMutation, DeleteColonyTokensMutationVariables >(DeleteColonyTokensDocument, { @@ -201,7 +201,7 @@ export const fetchColoniesByNativeToken = async ( }; const { data } = - (await query< + (await amplifyClient.query< GetColonyByNativeTokenIdQuery, GetColonyByNativeTokenIdQueryVariables >(GetColonyByNativeTokenIdDocument, queryVariables)) ?? {}; @@ -212,7 +212,7 @@ export const fetchColoniesByNativeToken = async ( while (queryVariables.nextToken) { const { data: nextData } = - (await query< + (await amplifyClient.query< GetColonyByNativeTokenIdQuery, GetColonyByNativeTokenIdQueryVariables >(GetColonyByNativeTokenIdDocument, queryVariables)) ?? {}; @@ -232,21 +232,21 @@ export const updateSingleColonyNativeTokenStatuses = async ( colony: Pick, nativeTokenStatus: Omit, ): Promise => { - await mutate( - UpdateColonyDocument, - { - input: { - id: colony.id, - status: { - ...colony.status, - nativeToken: { - ...colony.status?.nativeToken, - ...nativeTokenStatus, - }, + await amplifyClient.mutate< + UpdateColonyMutation, + UpdateColonyMutationVariables + >(UpdateColonyDocument, { + input: { + id: colony.id, + status: { + ...colony.status, + nativeToken: { + ...colony.status?.nativeToken, + ...nativeTokenStatus, }, }, }, - ); + }); }; /* diff --git a/src/utils/transactionHasEvent.ts b/apps/main-chain/src/utils/transactionHasEvent.ts similarity index 63% rename from src/utils/transactionHasEvent.ts rename to apps/main-chain/src/utils/transactionHasEvent.ts index 821965fdb..ad53ffd7f 100644 --- a/src/utils/transactionHasEvent.ts +++ b/apps/main-chain/src/utils/transactionHasEvent.ts @@ -1,7 +1,8 @@ import { utils } from 'ethers'; -import provider from '~provider'; -import { ContractEventsSignatures } from '~types'; +import rpcProvider from '~provider'; + +import { ContractEventsSignatures } from '@joincolony/blocks'; /** * For a given tx hash, checks whether the transaction contains a matching event @@ -10,7 +11,9 @@ export const transactionHasEvent = async ( transactionHash: string, eventSignature: ContractEventsSignatures, ): Promise => { - const receipt = await provider.getTransactionReceipt(transactionHash); + const receipt = await rpcProvider + .getProviderInstance() + .getTransactionReceipt(transactionHash); return receipt.logs.some((log) => log.topics.includes(utils.id(eventSignature)), ); diff --git a/apps/main-chain/src/utils/transactions.ts b/apps/main-chain/src/utils/transactions.ts new file mode 100644 index 000000000..19bdcf3e5 --- /dev/null +++ b/apps/main-chain/src/utils/transactions.ts @@ -0,0 +1,23 @@ +import { utils, Transaction } from 'ethers'; + +const MetatransactionInterface = new utils.Interface([ + 'function executeMetaTransaction(address userAddress, bytes memory payload, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory)', +]); + +export const getTransactionSignerAddress = ( + transaction: Transaction, +): string | undefined => { + let signerAddress = transaction.from; + + try { + const metaTx = MetatransactionInterface.parseTransaction({ + data: transaction.data, + value: transaction.value, + }); + signerAddress = metaTx.args[0]; + } catch (error) { + // if it's an error, it just means it's not a metatransaction + } + + return signerAddress; +}; diff --git a/apps/main-chain/tsconfig.json b/apps/main-chain/tsconfig.json new file mode 100644 index 000000000..83cb002d5 --- /dev/null +++ b/apps/main-chain/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "~*": ["src/*"] + }, + "outDir": "./dist" + }, + "include": ["src"] +} \ No newline at end of file diff --git a/apps/proxy-chain/.env.example b/apps/proxy-chain/.env.example new file mode 100644 index 000000000..3a340963c --- /dev/null +++ b/apps/proxy-chain/.env.example @@ -0,0 +1,4 @@ +# for another app, just add an env filed called .env.proxy2 +CHAIN_RPC_ENDPOINT=http://localhost:8546 +CHAIN_NETWORK_CONTRACT=0x777760996135F0791E2e1a74aFAa060711197777 +STATS_PORT=10002 diff --git a/apps/proxy-chain/package.json b/apps/proxy-chain/package.json new file mode 100644 index 000000000..65a2a49ec --- /dev/null +++ b/apps/proxy-chain/package.json @@ -0,0 +1,18 @@ +{ + "name": "@joincolony/proxy-chain", + "version": "1.0.0", + "main": "src/index.ts", + "scripts": { + "build": "rm -rf dist/* && npx tsc", + "start": "node -r ts-node/register/transpile-only -r tsconfig-paths/register -r ./dist/env.js dist/index.js", + "dev": "NODE_ENV=development ts-node-dev -r tsconfig-paths/register -r ./src/env.ts src/index.ts", + "prod": "pnpm run build && NODE_ENV=production pnpm run start", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@joincolony/blocks": "workspace:^", + "@joincolony/clients": "workspace:^", + "@joincolony/graphql": "workspace:*", + "@joincolony/utils": "workspace:^" + } +} diff --git a/apps/proxy-chain/src/amplifyClient.ts b/apps/proxy-chain/src/amplifyClient.ts new file mode 100644 index 000000000..381535806 --- /dev/null +++ b/apps/proxy-chain/src/amplifyClient.ts @@ -0,0 +1,8 @@ +import { AmplifyClient } from '@joincolony/clients'; + +const amplifyClient = new AmplifyClient( + process.env.AWS_APPSYNC_ENDPOINT || '', + process.env.AWS_APPSYNC_KEY || '', +); + +export default amplifyClient; diff --git a/apps/proxy-chain/src/blockManager.ts b/apps/proxy-chain/src/blockManager.ts new file mode 100644 index 000000000..bbaac0e00 --- /dev/null +++ b/apps/proxy-chain/src/blockManager.ts @@ -0,0 +1,8 @@ +import { BlockManager } from '@joincolony/blocks'; +import eventManager from '~eventManager'; +import rpcProvider from '~provider'; +import statsManager from '~statsManager'; + +const blockManager = new BlockManager(eventManager, rpcProvider, statsManager); + +export default blockManager; diff --git a/apps/proxy-chain/src/env.ts b/apps/proxy-chain/src/env.ts new file mode 100644 index 000000000..4cc0180df --- /dev/null +++ b/apps/proxy-chain/src/env.ts @@ -0,0 +1,6 @@ +import path from 'path'; +import dotenv from 'dotenv'; + +const appEnvFile = process.env.ENV_FILE || '.env'; +dotenv.config({ path: path.resolve(__dirname, `../${appEnvFile}`) }); +dotenv.config({ path: path.resolve(__dirname, '../../../.env') }); diff --git a/apps/proxy-chain/src/eventListeners/colony.ts b/apps/proxy-chain/src/eventListeners/colony.ts new file mode 100644 index 000000000..aab1cc4e3 --- /dev/null +++ b/apps/proxy-chain/src/eventListeners/colony.ts @@ -0,0 +1,33 @@ +import { ContractEventsSignatures } from '@joincolony/blocks'; +import { addProxyColoniesNetworkEventListener } from './proxyColonies'; +import { + handleProxyColonyDeployed, + handleTransfer, +} from '~handlers/proxyColonies'; +import { addTokenEventListener } from './token'; +import { getAllColoniesOnCurrentChain } from '~utils/getAllColoniesOnCurrentChain'; + +export const setupListenersForColonies = async (): Promise => { + addProxyColoniesNetworkEventListener( + ContractEventsSignatures.ProxyColonyDeployed, + handleProxyColonyDeployed, + ); + + const colonies = await getAllColoniesOnCurrentChain(); + colonies.forEach(({ colonyAddress }) => { + setupListenersForColony(colonyAddress); + }); +}; + +export const setupListenersForColony = async ( + colonyAddress: string, +): Promise => { + console.log(`Setting up listeners for proxy colony ${colonyAddress}`); + + addTokenEventListener( + ContractEventsSignatures.Transfer, + handleTransfer, + undefined, + colonyAddress, + ); +}; \ No newline at end of file diff --git a/apps/proxy-chain/src/eventListeners/index.ts b/apps/proxy-chain/src/eventListeners/index.ts new file mode 100644 index 000000000..5881d9c3e --- /dev/null +++ b/apps/proxy-chain/src/eventListeners/index.ts @@ -0,0 +1,4 @@ +export * from './network'; +export * from './proxyColonies'; +export * from './colony'; +export * from './token'; diff --git a/apps/proxy-chain/src/eventListeners/network.ts b/apps/proxy-chain/src/eventListeners/network.ts new file mode 100644 index 000000000..f237c6153 --- /dev/null +++ b/apps/proxy-chain/src/eventListeners/network.ts @@ -0,0 +1,20 @@ +import { + EventListenerType, + ContractEventsSignatures, + EventHandler, +} from '@joincolony/blocks'; +import { utils } from 'ethers'; + +import eventManager from '~eventManager'; + +export const addNetworkEventListener = ( + eventSignature: ContractEventsSignatures, + handler: EventHandler, +): void => + eventManager.addEventListener({ + type: EventListenerType.Network, + eventSignature, + topics: [utils.id(eventSignature)], + address: process.env.CHAIN_NETWORK_CONTRACT ?? '', + handler, + }); diff --git a/apps/proxy-chain/src/eventListeners/proxyColonies.ts b/apps/proxy-chain/src/eventListeners/proxyColonies.ts new file mode 100644 index 000000000..87fa299ca --- /dev/null +++ b/apps/proxy-chain/src/eventListeners/proxyColonies.ts @@ -0,0 +1,34 @@ +import { utils } from 'ethers'; + +import { + ContractEventsSignatures, + EventHandler, + EventListenerType, +} from '@joincolony/blocks'; +import eventManager from '~eventManager'; + +export const addProxyColoniesNetworkEventListener = ( + eventSignature: ContractEventsSignatures, + handler: EventHandler, +): void => + eventManager.addEventListener({ + type: EventListenerType.ProxyColonies, + eventSignature, + topics: [utils.id(eventSignature)], + address: process.env.CHAIN_NETWORK_CONTRACT ?? '', + handler, + }); + +export const addProxyColoniesEventListener = ( + eventSignature: ContractEventsSignatures, + colonyAddress: string, + handler: EventHandler, +): void => + eventManager.addEventListener({ + type: EventListenerType.ProxyColonies, + eventSignature, + topics: [utils.id(eventSignature)], + address: colonyAddress, + colonyAddress, + handler, + }); diff --git a/apps/proxy-chain/src/eventListeners/token.ts b/apps/proxy-chain/src/eventListeners/token.ts new file mode 100644 index 000000000..3699d6c25 --- /dev/null +++ b/apps/proxy-chain/src/eventListeners/token.ts @@ -0,0 +1,47 @@ +import { + ContractEventsSignatures, + EventHandler, + EventListenerType, + EventListener, +} from '@joincolony/blocks'; +import eventManager from '~eventManager'; +import { utils } from 'ethers'; +import isEqual from 'lodash/isEqual'; + +export const addTokenEventListener = ( + eventSignature: ContractEventsSignatures, + handler: EventHandler, + tokenAddress?: string, + recipientAddress?: string, +): void => { + const tokenListener: EventListener = { + type: EventListenerType.Token, + eventSignature, + address: tokenAddress, + topics: [utils.id(eventSignature)], + handler, + }; + + if (recipientAddress) { + /* + * Filter transfer events for the recipient address + */ + tokenListener.topics.push(null, utils.hexZeroPad(recipientAddress, 32)); + } + + /* + * @NOTE This only applies to contract listeners + * + * Ie: any listener that has and address property. + * As a general rule, this will only *NOT* apply to the token Transfer event + * as that's the only one treated differently. + */ + const listenerExists = eventManager + .getEventListeners() + .some((existingListener) => isEqual(existingListener, tokenListener)); + if (listenerExists) { + return; + } + + return eventManager.addEventListener(tokenListener); +}; diff --git a/apps/proxy-chain/src/eventManager.ts b/apps/proxy-chain/src/eventManager.ts new file mode 100644 index 000000000..b57b8481f --- /dev/null +++ b/apps/proxy-chain/src/eventManager.ts @@ -0,0 +1,6 @@ +import { EventManager } from '@joincolony/blocks'; +import rpcProvider from '~provider'; + +const eventManager = new EventManager(rpcProvider); + +export default eventManager; diff --git a/apps/proxy-chain/src/handlers/proxyColonies/index.ts b/apps/proxy-chain/src/handlers/proxyColonies/index.ts new file mode 100644 index 000000000..5c7214755 --- /dev/null +++ b/apps/proxy-chain/src/handlers/proxyColonies/index.ts @@ -0,0 +1,2 @@ +export * from './proxyColonyDeployed'; +export { default as handleTransfer } from './transfer'; \ No newline at end of file diff --git a/apps/proxy-chain/src/handlers/proxyColonies/proxyColonyDeployed.ts b/apps/proxy-chain/src/handlers/proxyColonies/proxyColonyDeployed.ts new file mode 100644 index 000000000..1cd4e2afb --- /dev/null +++ b/apps/proxy-chain/src/handlers/proxyColonies/proxyColonyDeployed.ts @@ -0,0 +1,159 @@ +import { + CreateMultiChainInfoInput, + CreateProxyColonyDocument, + CreateProxyColonyMutation, + CreateProxyColonyMutationVariables, + UpdateMultiChainInfoInput, +} from '@joincolony/graphql'; +import { + ContractEvent, + ContractEventsSignatures, + ProxyColonyEvents, +} from '@joincolony/blocks'; +import amplifyClient from '~amplifyClient'; +import rpcProvider from '~provider'; +import { + getMultiChainInfoId, + output, + upsertMultiChainInfo, +} from '@joincolony/utils'; +import { utils } from 'ethers'; +import blockManager from '~blockManager'; +import multiChainBridgeClient from '~multiChainBridgeClient'; +import { setupListenersForColony } from '~eventListeners'; + +export const handleProxyColonyDeployed = async ( + event: ContractEvent, +): Promise => { + const { + blockNumber, + args: { proxyColony: proxyColonyAddress }, + } = event; + + if (!proxyColonyAddress) { + output('No proxyColony emitted!'); + return; + } + + const logs = await rpcProvider.getProviderInstance().getLogs({ + fromBlock: blockNumber, + toBlock: blockNumber, + topics: [ + [ + utils.id(ContractEventsSignatures.ProxyColonyDeployed), + utils.id(ContractEventsSignatures.WormholeMessageReceived), + ], + ], + }); + + const events = await Promise.all( + logs.map((log) => + blockManager.mapLogToContractEvent(log, ProxyColonyEvents), + ), + ); + + const wormholeEvent = events.find( + (event) => + ContractEventsSignatures.WormholeMessageReceived === event?.signature, + ); + const proxyDeployedEvent = events.find( + (event) => + ContractEventsSignatures.ProxyColonyDeployed === event?.signature, + ); + + if (!wormholeEvent || !proxyDeployedEvent) { + output( + `ProxyColonyDeployed or WormholeMessageReceived are not present in the same block`, + ); + + return; + } + + console.log(`RPC provider chain id`, rpcProvider.getChainId()); + console.log( + `Mapped wormhole chain id`, + multiChainBridgeClient.getWormholeChainId(rpcProvider.getChainId()), + ); + + const { emitterChainId, emitterAddress, sequence } = wormholeEvent.args; + const chainId = rpcProvider.getChainId(); + let sourceChainTxHash; + let isDeploymentCompleted = false; + + try { + const multiChainBridgeOperationsData = + await multiChainBridgeClient.fetchOperationDetails({ + emitterAddress, + emitterChainId, + sequence, + }); + + sourceChainTxHash = + multiChainBridgeOperationsData?.sourceChain?.transaction?.txHash; + const sourceChainOperationStatus = + multiChainBridgeOperationsData?.sourceChain?.status; + isDeploymentCompleted = + sourceChainOperationStatus === + multiChainBridgeClient.REQ_STATUS.CONFIRMED; + } catch (error) { + output( + `Error while fetching multi-chain bridge operations details: ${ + (error as Error).message + }.`, + ); + } + + if (!sourceChainTxHash) { + output(`Missing source chain txHash`); + return; + } + + // if this event was fired we NEED to save it in the database, even if the action doesn't exist + await amplifyClient.mutate< + CreateProxyColonyMutation, + CreateProxyColonyMutationVariables + >(CreateProxyColonyDocument, { + input: { + id: `${proxyColonyAddress}_${chainId}`, + colonyAddress: proxyColonyAddress, + chainId, + isActive: true, + }, + }); + + // we could technically use this one, but we should use the one of the created one, just so we have all the core logic in the upsertMultiChainInfo helper + const existingMultiChainInfoId = getMultiChainInfoId( + sourceChainTxHash, + Number(chainId), + ); + + const createMultiChainInfoInput: CreateMultiChainInfoInput = { + id: existingMultiChainInfoId, + completedOnMainChain: false, + completedOnProxyChain: isDeploymentCompleted, + wormholeInfo: { + emitterAddress: emitterAddress.toString(), + emitterChainId, + sequence: sequence.toString(), + }, + }; + + const updateMultiChainInfoInput: UpdateMultiChainInfoInput = { + id: existingMultiChainInfoId, + completedOnProxyChain: isDeploymentCompleted, + wormholeInfo: { + emitterAddress: emitterAddress.toString(), + emitterChainId, + sequence: sequence.toString(), + }, + }; + + await upsertMultiChainInfo( + amplifyClient, + existingMultiChainInfoId, + createMultiChainInfoInput, + updateMultiChainInfoInput, + ); + + setupListenersForColony(proxyColonyAddress); +}; diff --git a/apps/proxy-chain/src/handlers/proxyColonies/transfer.ts b/apps/proxy-chain/src/handlers/proxyColonies/transfer.ts new file mode 100644 index 000000000..ce58c3d04 --- /dev/null +++ b/apps/proxy-chain/src/handlers/proxyColonies/transfer.ts @@ -0,0 +1,124 @@ +import amplifyClient from '~amplifyClient'; +import networkClient from '~networkClient'; +import rpcProvider from '~provider'; +import { ContractEvent } from '@joincolony/blocks'; +import { + GetColonyUnclaimedFundDocument, + GetColonyUnclaimedFundQuery, + GetColonyUnclaimedFundQueryVariables, + GetTokenFromEverywhereDocument, + GetTokenFromEverywhereQuery, + GetTokenFromEverywhereQueryVariables, +} from '@joincolony/graphql'; +import { createFundsClaim } from '~utils'; +import { output } from '@joincolony/utils'; + +export default async (event: ContractEvent): Promise => { + const { contractAddress: tokenAddress, logIndex, transactionHash } = event; + const chainId = rpcProvider.getChainId(); + /* + * @NOTE Take the values from the "array" rather than from the named properties + * This is because our native tokens differ in abi from ERC20 or SAI tokens + * + * Here's the mapping: + * + * Ours ERC20 + * --- --- + * src from + * dest to + * wad value + * + * But if we take the values from the array, they will always be in the + * same order: 0->from, 1->to, 2->value + * + * This way we can always be sure that get the correct values for the various + * tokens all the time + */ + const [source, dst, wad] = event.args; + + /* + * Determine if this transfer was generated by the reputation mining cycle + * If that's the case, we need to filter it out. + */ + const isMiningCycleTransfer = + source === networkClient.address && wad.isZero(); + + if (!isMiningCycleTransfer) { + let existingClaim; + const amount = wad.toString(); + const claimId = `${chainId}_${transactionHash}_${logIndex}`; + /* + * @NOTE That this check is only required for local development where + * the chain does not mine a new block automatically, so you'll most likely + * run parsing / events listener on the same block over and over + * So as to not mess up your data / database, only create the event + * if it does not exist + * + * @TODO an idea of how to reduce queries is to wrap this in a try catch block + * and just send out the mutation + * If it succeeds, great, the event is created, if it fails, assume the event + * already existed in the database + */ + + if (process.env.NODE_ENV !== 'production') { + const { id: existingClaimId } = + ( + await amplifyClient.query< + GetColonyUnclaimedFundQuery, + GetColonyUnclaimedFundQueryVariables + >(GetColonyUnclaimedFundDocument, { claimId }) + )?.data?.getColonyFundsClaim ?? {}; + existingClaim = existingClaimId; + } + + output( + 'Found new Transfer of:', + amount, + 'into Colony:', + dst, + !!existingClaim || amount === '0' + ? `but not acting upon it since ${ + existingClaim ? 'it already exists in the database' : '' + }${amount === '0' ? "it's value is zero" : ''}` + : '', + ); + + let tokenAddressFromDb: string | undefined; + + /** + * Call the GetTokenFromEverywhere query to ensure the token + * gets added to the DB if it doesn't already exist + */ + try { + const dbTokenQuery = await amplifyClient.query< + GetTokenFromEverywhereQuery, + GetTokenFromEverywhereQueryVariables + >(GetTokenFromEverywhereDocument, { + input: { + tokenAddress, + }, + }); + const [dbToken] = dbTokenQuery?.data?.getTokenFromEverywhere?.items ?? []; + tokenAddressFromDb = dbToken?.id; + } catch { + output( + `Token ${tokenAddress} not found on chain while handling Transfer event to colony ${dst}`, + ); + } + + /* + * 1. Don't add claims that are already in the database + * 2. Don't add claims that are zero + * 3. Don't add claims that don't have a token address in the database -- this is important since it prevents spam tokens (or contracts mascarading as tokens) + * from being added to the database, breaking the colony query + */ + if (!existingClaim && amount !== '0' && tokenAddressFromDb) { + createFundsClaim({ + colonyAddress: dst, + tokenAddress, + amount, + event, + }); + } + } +}; diff --git a/apps/proxy-chain/src/index.ts b/apps/proxy-chain/src/index.ts new file mode 100644 index 000000000..619933a2a --- /dev/null +++ b/apps/proxy-chain/src/index.ts @@ -0,0 +1,38 @@ +import 'cross-fetch/polyfill'; +import { utils } from 'ethers'; + +import '~utils/cleanup'; +import '~amplifyClient'; +import '~eventManager'; +import blockManager from '~blockManager'; +import rpcProvider from '~provider'; +import { startStatsServer } from '~stats'; +import { setupListenersForColonies } from '~eventListeners'; +import { addChainToDB } from '~utils/addChainToDB'; + +utils.Logger.setLogLevel(utils.Logger.levels.ERROR); + +const start = async (): Promise => { + await rpcProvider.initialiseProvider(); + + await addChainToDB(); + /** + * Start express server providing stats and fetch existing stats from the DB + */ + await startStatsServer(); + + /** + * Setup the listeners we care about for existing colonies + * This has to be done before the block listener is started to ensure the events are not missed + */ + await setupListenersForColonies(); + + /** + * Start the main block listener + */ + blockManager.startBlockListener(); + + console.log('started'); +}; + +start(); diff --git a/apps/proxy-chain/src/multiChainBridgeClient.ts b/apps/proxy-chain/src/multiChainBridgeClient.ts new file mode 100644 index 000000000..4739b8c83 --- /dev/null +++ b/apps/proxy-chain/src/multiChainBridgeClient.ts @@ -0,0 +1,7 @@ +import { WormholeClient } from "@joincolony/clients"; + +const bridgeEndpoint = process.env.MULTI_CHAIN_BRIDGE_ENDPOINT ?? ''; + +const client = new WormholeClient(bridgeEndpoint); + +export default client; \ No newline at end of file diff --git a/apps/proxy-chain/src/networkClient.ts b/apps/proxy-chain/src/networkClient.ts new file mode 100644 index 000000000..d9f351999 --- /dev/null +++ b/apps/proxy-chain/src/networkClient.ts @@ -0,0 +1,11 @@ +import { Network } from '@colony/colony-js'; + +import rpcProvider from '~provider'; + +import { NetworkClient } from '@joincolony/clients'; + +export default (new NetworkClient( + rpcProvider, + (process.env.CHAIN_NETWORK as Network) || Network.Custom, + process.env.CHAIN_NETWORK_CONTRACT || '', +)).getInstance(); diff --git a/apps/proxy-chain/src/provider.ts b/apps/proxy-chain/src/provider.ts new file mode 100644 index 000000000..eed068b14 --- /dev/null +++ b/apps/proxy-chain/src/provider.ts @@ -0,0 +1,4 @@ +import { RpcProvider } from '@joincolony/clients'; + +const rpcProvider = new RpcProvider(process.env.CHAIN_RPC_ENDPOINT); +export default rpcProvider; diff --git a/apps/proxy-chain/src/stats.ts b/apps/proxy-chain/src/stats.ts new file mode 100644 index 000000000..44fbca078 --- /dev/null +++ b/apps/proxy-chain/src/stats.ts @@ -0,0 +1,55 @@ +import express from 'express'; + +import eventManager from '~eventManager'; +import rpcProvider from '~provider'; +import { output } from '@joincolony/utils'; +import statsManager from '~statsManager'; + +// @NOTE this can probably be moved to the colonyAdded handler +export const coloniesSet = new Set(); + +// @NOTE just copy this entire file later on for now +const app = express(); +const port = process.env.STATS_PORT; + +app.get('/', (_, res) => { + res + .type('text/plain') + .send(process.env.NODE_ENV !== 'production' ? 'Block Ingestor' : ''); +}); + +/* + * Use to check if service is alive + */ +app.get('/liveness', (_, res) => res.sendStatus(200)); + +/* + * Use to check various service stats + */ +app.get('/stats', async (_, res) => { + const stats = statsManager.getStats(); + res.type('json').send(stats); +}); + +/** + * Use to check currently active listeners + */ +app.get('/listeners', async (_, res) => { + res.type('json').send(eventManager.getListenersStats()); +}); + +export const startStatsServer = async (): Promise => { + if (!port) { + return; + } + + await statsManager.initStats(); + const lastBlockNumber = statsManager.getLastBlockNumber(); + + app.listen(port, async () => { + output('Block Ingestor started on chain', rpcProvider.getChainId()); + output(`Stats available at http://localhost:${port}/stats`); + output(`Liveness check available at http://localhost:${port}/liveness`); + output(`Last processed block number: ${lastBlockNumber}`); + }); +}; diff --git a/apps/proxy-chain/src/statsManager.ts b/apps/proxy-chain/src/statsManager.ts new file mode 100644 index 000000000..65a7a19b9 --- /dev/null +++ b/apps/proxy-chain/src/statsManager.ts @@ -0,0 +1,7 @@ +import { StatsManager } from '@joincolony/blocks'; +import amplifyClient from './amplifyClient'; +import rpcProvider from '~provider'; + +const statsManager = new StatsManager(amplifyClient, rpcProvider); + +export default statsManager; diff --git a/apps/proxy-chain/src/utils/addChainToDB.ts b/apps/proxy-chain/src/utils/addChainToDB.ts new file mode 100644 index 000000000..cee29a736 --- /dev/null +++ b/apps/proxy-chain/src/utils/addChainToDB.ts @@ -0,0 +1,52 @@ +import { + CreateSupportedChainDocument, + CreateSupportedChainMutation, + CreateSupportedChainMutationVariables, + GetSupportedChainDocument, + GetSupportedChainQuery, + GetSupportedChainQueryVariables, + UpdateSupportedChainDocument, + UpdateSupportedChainMutation, + UpdateSupportedChainMutationVariables, +} from '@joincolony/graphql'; +import { output } from '@joincolony/utils'; +import amplifyClient from '~amplifyClient'; +import rpcProvider from '~provider'; + +export const addChainToDB = async (): Promise => { + const chainId = rpcProvider.getChainId(); + + if (!chainId) { + return; + } + + const supportedChain = await amplifyClient.query< + GetSupportedChainQuery, + GetSupportedChainQueryVariables + >(GetSupportedChainDocument, { + id: chainId.toString(), + }); + + const mutationPayload = { + input: { + id: chainId.toString(), + isActive: true, + }, + }; + + if (supportedChain?.data?.getSupportedChain?.id) { + output( + `Supported chain with id ${chainId} already exists in the db. Will be enabled.`, + ); + await amplifyClient.mutate< + UpdateSupportedChainMutation, + UpdateSupportedChainMutationVariables + >(UpdateSupportedChainDocument, mutationPayload); + return; + } + + await amplifyClient.mutate< + CreateSupportedChainMutation, + CreateSupportedChainMutationVariables + >(CreateSupportedChainDocument, mutationPayload); +}; diff --git a/apps/proxy-chain/src/utils/cleanup.ts b/apps/proxy-chain/src/utils/cleanup.ts new file mode 100644 index 000000000..4a51805d4 --- /dev/null +++ b/apps/proxy-chain/src/utils/cleanup.ts @@ -0,0 +1,53 @@ +import { + UpdateSupportedChainMutation, + UpdateSupportedChainMutationVariables, + UpdateSupportedChainDocument, +} from '@joincolony/graphql'; +import { output } from '@joincolony/utils/src/logger'; +import amplifyClient from '~amplifyClient'; +import rpcProvider from '~provider'; + +const cleanup = async (): Promise => { + const chainId = rpcProvider.getChainId(); + try { + if (chainId) { + await amplifyClient.mutate< + UpdateSupportedChainMutation, + UpdateSupportedChainMutationVariables + >(UpdateSupportedChainDocument, { + input: { + id: chainId.toString(), + isActive: false, + }, + }); + } + } catch { + // There might have been an error upon disabling a supported chain + } +}; + +// Here we listen for process events and in case one is intercepted, we perform the cleanup +[ + { + name: 'SIGTERM', + exitCode: 0, + }, + { + name: 'SIGINT', + exitCode: 0, + }, + { + name: 'uncaughtException', + exitCode: 1, + }, + { + name: 'unhandledRejection', + exitCode: 1, + }, +].forEach((signalConfig) => + process.on(signalConfig.name, async () => { + output('Performing cleanup before exiting.'); + await cleanup(); + process.exit(signalConfig.exitCode); + }), +); diff --git a/apps/proxy-chain/src/utils/fundsClaims.ts b/apps/proxy-chain/src/utils/fundsClaims.ts new file mode 100644 index 000000000..31b2807f2 --- /dev/null +++ b/apps/proxy-chain/src/utils/fundsClaims.ts @@ -0,0 +1,44 @@ +import amplifyClient from '~amplifyClient'; +import { + CreateColonyFundsClaimDocument, + CreateColonyFundsClaimMutation, + CreateColonyFundsClaimMutationVariables, +} from '@joincolony/graphql'; +import { ContractEvent } from '@joincolony/blocks'; +import rpcProvider from '~provider'; + +interface CreateFundsClaimsParams { + event: ContractEvent; + colonyAddress: string; + tokenAddress: string; + amount: string; +} + +export const createFundsClaim = async ({ + colonyAddress, + tokenAddress, + amount, + event: { transactionHash, logIndex, blockNumber }, +}: CreateFundsClaimsParams): Promise => { + const chainId = rpcProvider.getChainId(); + + await amplifyClient.mutate< + CreateColonyFundsClaimMutation, + CreateColonyFundsClaimMutationVariables + >(CreateColonyFundsClaimDocument, { + input: { + id: getFundsClaimDatabaseId(chainId, transactionHash, logIndex), + colonyFundsClaimsId: colonyAddress, + colonyFundsClaimTokenId: tokenAddress, + createdAtBlock: blockNumber, + isClaimed: false, + amount, + }, + }); +}; + +export const getFundsClaimDatabaseId = ( + chainId: string, + transactionHash: string, + logIndex: number, +): string => `${chainId}_${transactionHash}_${logIndex}`; diff --git a/apps/proxy-chain/src/utils/getAllColoniesOnCurrentChain.ts b/apps/proxy-chain/src/utils/getAllColoniesOnCurrentChain.ts new file mode 100644 index 000000000..4cb2d4c83 --- /dev/null +++ b/apps/proxy-chain/src/utils/getAllColoniesOnCurrentChain.ts @@ -0,0 +1,38 @@ +import { + GetProxyColoniesDocument, + GetProxyColoniesQuery, + GetProxyColoniesQueryVariables, + ProxyColonyFragment, +} from '@joincolony/graphql'; +import amplifyClient from '~amplifyClient'; +import { getAllPagesOfData, GetDataFn } from './graphql'; +import rpcProvider from '~provider'; + +// @TODO move this and the graphql helpers in a utils package +export const notNull = (x: T | null): x is T => x !== null; + +const getProxyColoniesData: GetDataFn = async ( + _params, + nextToken, +) => { + const response = await amplifyClient.query< + GetProxyColoniesQuery, + GetProxyColoniesQueryVariables + >(GetProxyColoniesDocument, { + ...(nextToken ? { nextToken } : {}), + chainId: rpcProvider.getChainId(), + }); + + return response?.data?.listProxyColonies; +}; + +export const getAllColoniesOnCurrentChain = async (): Promise< + ProxyColonyFragment[] +> => { + const allProxyColonies = await getAllPagesOfData( + getProxyColoniesData, + undefined, + ); + + return allProxyColonies.filter(notNull); +}; diff --git a/apps/proxy-chain/src/utils/graphql.ts b/apps/proxy-chain/src/utils/graphql.ts new file mode 100644 index 000000000..29f0f6a73 --- /dev/null +++ b/apps/proxy-chain/src/utils/graphql.ts @@ -0,0 +1,30 @@ +interface GetDataResponse { + items: Array | undefined; + nextToken?: string | null; +} + +export type GetDataFn = ( + params: K, + nextToken?: string | null, +) => Promise | null | undefined>; + +export const getAllPagesOfData = async ( + getDataFunc: GetDataFn, + params: K, +): Promise> => { + const items = []; + let nextToken = null; + + do { + const data: GetDataResponse | null | undefined = await getDataFunc( + { ...params }, + nextToken, + ); + nextToken = data?.nextToken; + if (data?.items) { + items.push(...data.items); + } + } while (nextToken); + + return items; +}; diff --git a/apps/proxy-chain/src/utils/index.ts b/apps/proxy-chain/src/utils/index.ts new file mode 100644 index 000000000..5684999e7 --- /dev/null +++ b/apps/proxy-chain/src/utils/index.ts @@ -0,0 +1 @@ +export * from './fundsClaims'; diff --git a/apps/proxy-chain/tsconfig.json b/apps/proxy-chain/tsconfig.json new file mode 100644 index 000000000..74d15bca4 --- /dev/null +++ b/apps/proxy-chain/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "~*": ["src/*"] + }, + "outDir": "./dist" + }, + "include": ["src"] +} diff --git a/package-lock.json b/package-lock.json index e1eb8cf97..5277daf22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { - "name": "block-ingestor", + "name": "@joincolony/block-ingestor", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "block-ingestor", + "name": "@joincolony/block-ingestor", "version": "1.0.0", "hasInstallScript": true, "license": "GPL-3.0", "dependencies": { "@colony/abis": "^1.6.0", - "@colony/colony-js": "^8.0.0-next.0", - "@colony/events": "^4.0.0-next.0", + "@colony/colony-js": "^8.0.0-next.1", + "@colony/events": "^4.0.0-next.1", "@magicbell/core": "^5.0.16", "@wagmi/cli": "^2.1.17", "aws-amplify": "^4.3.43", @@ -7421,32 +7421,13 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", - "license": "GPL-3.0-only", - "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" - }, - "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" - }, - "peerDependencies": { - "ethers": "^5.1.3" - } - }, - "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0-next.1", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0-next.1.tgz", - "integrity": "sha512-Mcy8YMKzyFxH5QHBTPlPMmP3lm5S8ITNr2vv2UUy9iQNT7wGMqc2kqZtwtuN5KA0nW1HwvBkgfaFmiKjR5hlIg==", - "license": "GPL-3.0-only", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0.tgz", + "integrity": "sha512-FMJKgoxh+XzrFdEW+ChS/unH5wr3RtduBYz1Y4mRdC+TgkGqTii0sWug2vKZZJUsiSgjvfSGuKtLXk3IU9oORg==", "dependencies": { - "@colony/core": "^3.0.0-next.1", - "fetch-retry": "^5.0.4", - "typia": "^3.8.3" + "@colony/core": "^3.0.0", + "@colony/events": "^4.0.0", + "@colony/tokens": "^1.0.0" }, "engines": { "node": "^16 || ^18 || ^20", @@ -7470,12 +7451,11 @@ } }, "node_modules/@colony/events": { - "version": "4.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0-next.0.tgz", - "integrity": "sha512-u89fmH6RlQWW8IeejfkZITsdptCm8zGx1a9qJ6F/p4ILY+EBnWdYkSdTZXITACU1r6sNSm4GkochTIjAy0R0ag==", - "license": "GPL-3.0-only", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", + "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", "dependencies": { - "@colony/core": "^3.0.0-next.0", + "@colony/core": "^3.0.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, @@ -7488,10 +7468,9 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0-next.1", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0-next.1.tgz", - "integrity": "sha512-vP4SD4lv4o3H160uE1PgWKt1d1zCd7H9W5lAu+XzKNJvd+OVVL5OSxu7XxVpo978tqQW1EgzWLNTbtP/Vl2oJQ==", - "license": "GPL-3.0-only", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", + "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", "engines": { "node": "^16 || ^18 || ^20", "pnpm": "^8" @@ -11750,8 +11729,7 @@ "node_modules/array-timsort": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "license": "MIT" + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==" }, "node_modules/array-union": { "version": "2.1.0", @@ -12961,7 +12939,6 @@ "version": "4.2.5", "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", - "license": "MIT", "dependencies": { "array-timsort": "^1.0.3", "core-util-is": "^1.0.3", @@ -13483,7 +13460,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", - "license": "MIT", "engines": { "node": ">=4" } @@ -14691,8 +14667,7 @@ "node_modules/fetch-retry": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", - "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==", - "license": "MIT" + "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==" }, "node_modules/fflate": { "version": "0.7.3", @@ -15300,7 +15275,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -18884,7 +18858,6 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", - "license": "MIT", "dependencies": { "drange": "^1.0.2", "ret": "^0.2.0" @@ -18897,7 +18870,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", - "license": "MIT", "engines": { "node": ">=4" } @@ -20798,7 +20770,6 @@ "version": "3.8.9", "resolved": "https://registry.npmjs.org/typia/-/typia-3.8.9.tgz", "integrity": "sha512-yvQ67nhtzme+rnEUZfSOIgxBOHYrrQ3WBU1J4SrAhI3ntBhSelYwGiJkeaCvqchzK6O1RoIs3kCBS4XHIlp2NA==", - "license": "MIT", "dependencies": { "commander": "^10.0.0", "comment-json": "^4.2.3", @@ -20816,7 +20787,6 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", "engines": { "node": ">=14" } diff --git a/package.json b/package.json index ea9478c0a..24becfab2 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "block-ingestor", + "name": "@joincolony/block-ingestor", "version": "1.0.0", "description": "Microservice that ingests ERC20 transactions for Colony Network Contracts", "main": "index.ts", @@ -8,12 +8,18 @@ "start": "node -r ts-node/register/transpile-only -r tsconfig-paths/register dist/index.js", "dev": "NODE_ENV=development ts-node-dev -r tsconfig-paths/register src/index.ts", "prod": "npm run build && NODE_ENV=production npm run start", - "typecheck": "tsc --noEmit", - "lint": "eslint src/ --ext .ts", + "dev:main-chain": "pnpm --filter @joincolony/main-chain run dev", + "start:main-chain": "pnpm --filter @joincolony/main-chain run start", + "dev:proxy-chain": "pnpm --filter @joincolony/proxy-chain run dev", + "dev:proxy-chain-2": "ENV_FILE=.env.proxy-2 pnpm --filter @joincolony/proxy-chain run dev", + "dev:all-proxies": "pnpm run dev:proxy-chain & pnpm run dev:proxy-chain-2", + "start:proxy-chain": "pnpm --filter @joincolony/proxy-chain run start", + "typecheck": "pnpm -r run typecheck", + "lint": "eslint . --ext .ts", "preinstall": "bash scripts/generate-temp-files.sh", "prepare": "husky install", - "codegen": "graphql-codegen -w \"src/**/*.graphql\"", - "generate-abis": "wagmi generate" + "generate-abis": "wagmi generate", + "codegen": "pnpm --filter graphql run codegen" }, "repository": { "type": "git", @@ -27,8 +33,8 @@ "homepage": "https://github.com/JoinColony/tx-ingestor", "dependencies": { "@colony/abis": "^1.6.0", - "@colony/colony-js": "^8.0.0-next.0", - "@colony/events": "^4.0.0-next.0", + "@colony/colony-js": "^8.1.0", + "@colony/events": "^4.0.0-next.1", "@magicbell/core": "^5.0.16", "@wagmi/cli": "^2.1.17", "aws-amplify": "^4.3.43", diff --git a/packages/blocks/package.json b/packages/blocks/package.json new file mode 100644 index 000000000..1df7ae5d4 --- /dev/null +++ b/packages/blocks/package.json @@ -0,0 +1,10 @@ +{ + "name": "@joincolony/blocks", + "main": "src/index.ts", + "version": "1.0.0", + "dependencies": { + "@joincolony/clients": "workspace:*", + "@joincolony/graphql": "workspace:*", + "@joincolony/utils": "workspace:*" + } +} diff --git a/packages/blocks/src/blocks/blockManager.ts b/packages/blocks/src/blocks/blockManager.ts new file mode 100644 index 000000000..a84f15c00 --- /dev/null +++ b/packages/blocks/src/blocks/blockManager.ts @@ -0,0 +1,341 @@ +import { Log } from '@ethersproject/abstract-provider'; +import { output, verbose } from '@joincolony/utils'; +import { EventManager, ContractEvent, EthersObserverEvents } from '../events'; +import { Block, BlockWithTransactions } from './types'; +import { RpcProvider } from '@joincolony/clients'; +import { utils } from 'ethers'; +import { StatsManager } from '../stats/statsManager'; + +export const BLOCK_PAGING_SIZE = process.env.BLOCK_PAGING_SIZE + ? parseInt(process.env.BLOCK_PAGING_SIZE, 10) + : 1000; + +export class BlockManager { + private readonly blocksMap = new Map(); + private readonly blockLogs = new Map(); + private latestSeenBlockNumber = 0; + private isProcessing = false; + private readonly eventManager: EventManager; + private readonly rpcProvider: RpcProvider; + private readonly statsManager: StatsManager; + private timeNow = Date.now(); + private timePrev = 0; + + constructor( + eventManager: EventManager, + rpcProvider: RpcProvider, + statsManager: StatsManager, + ) { + this.eventManager = eventManager; + this.rpcProvider = rpcProvider; + this.statsManager = statsManager; + } + + public getBlock(blockNumber: number): Block | BlockWithTransactions { + return this.blocksMap.get(blockNumber); + } + + public updateBlocksMap( + blockNumber: number, + block: Block | BlockWithTransactions, + ): void { + this.blocksMap.set(blockNumber, block); + } + + public getLatestSeenBlockNumber(): number { + return this.latestSeenBlockNumber; + } + + public startBlockListener(): void { + this.rpcProvider + .getProviderInstance() + .on(EthersObserverEvents.Block, async (blockNumber: number) => { + try { + this.latestSeenBlockNumber = Math.max( + this.latestSeenBlockNumber, + blockNumber, + ); + output(`Block ${blockNumber} added to the queue`); + await this.processNextBlock(); + } catch (error) { + throw new Error( + `Observed block ${blockNumber} but failed to get its data: ${error}`, + ); + } + }); + + output('Block listener started'); + this.trackMissedBlocks(); + } + + private async trackMissedBlocks(): Promise { + const lastBlockNumber = this.statsManager.getLastBlockNumber(); + const currentBlockNumber = await this.rpcProvider + .getProviderInstance() + .getBlockNumber(); + + if (lastBlockNumber >= currentBlockNumber) return; + + output( + `Processing blocks from ${lastBlockNumber + 1} to ${currentBlockNumber}`, + ); + this.latestSeenBlockNumber = Math.max( + this.latestSeenBlockNumber, + currentBlockNumber, + ); + await this.processNextBlock(); + } + + private async processNextBlock(): Promise { + if (this.isProcessing) { + return; + } + + // Only allow one instance of the function to run at any given time + this.isProcessing = true; + + let lastBlockNumber = this.statsManager.getLastBlockNumber(); + + // Process as many blocks as are available sequentially + while (lastBlockNumber < this.getLatestSeenBlockNumber()) { + const currentBlockNumber = lastBlockNumber + 1; + if (currentBlockNumber % BLOCK_PAGING_SIZE === 0) { + if (this.timePrev > 0) { + this.timePrev = this.timeNow; + this.timeNow = Date.now(); + output( + `Time taken for last ${BLOCK_PAGING_SIZE} blocks: ${ + this.timeNow - this.timePrev + }ms`, + ); + output( + `Estimated time to sync: ${ + ((this.timeNow - this.timePrev) * + (this.getLatestSeenBlockNumber() - + this.statsManager.getLastBlockNumber())) / + 1000 + }ms`, + ); + output( + `Overall progress: ${currentBlockNumber} / ${this.getLatestSeenBlockNumber()}`, + ); + } else { + this.timePrev = this.timeNow; + } + } + + if (!this.blockLogs.get(currentBlockNumber)) { + // BLOCK_PAGING_SIZE - 1 thanks to fenceposts + const nMoreBlocks = Math.min( + this.getLatestSeenBlockNumber() - currentBlockNumber, + BLOCK_PAGING_SIZE - 1, + ); + + verbose( + 'Querying for logs', + currentBlockNumber, + 'to', + currentBlockNumber + nMoreBlocks, + ); + + const logs = await this.rpcProvider.getProviderInstance().getLogs({ + fromBlock: currentBlockNumber, + toBlock: currentBlockNumber + nMoreBlocks, + }); + + verbose( + `Fetched ${logs.length} logs`, + currentBlockNumber, + 'to', + currentBlockNumber + nMoreBlocks, + ); + + // initialize blockLogs + for ( + let i = currentBlockNumber; + i <= currentBlockNumber + nMoreBlocks; + i += 1 + ) { + this.blockLogs.set(i, []); + } + + let logIndex = 0; + let pushingBlock = 0; + let pushingLogs: Log[] = []; + + logs.forEach((log) => { + // As we push logs in to blockLogs, check they're in order + // (They should be...) + if (log.blockNumber !== pushingBlock) { + if (pushingBlock > log.blockNumber) { + output( + `Blocks (that logs from query are in) are not monotonically increasing`, + ); + process.exit(1); + } + this.blockLogs.set(pushingBlock, [...pushingLogs]); + pushingBlock = log.blockNumber; + pushingLogs = []; + logIndex = 0; + } + if (log.logIndex !== logIndex) { + output(`Logs are out of order for block ${log.blockNumber}`); + process.exit(1); + } + pushingLogs.push(log); + logIndex += 1; + }); + // Push the logs in the last block + this.blockLogs.set(pushingBlock, [...pushingLogs]); + } + + // Get logs contained in the current block + const logs = this.blockLogs.get(currentBlockNumber); + if (!logs) { + throw new Error( + `Could not find logs for block ${currentBlockNumber}, but should have been fetched`, + ); + } + + /* + * Logic needed to account for blocks that get emmited, but which don't have the logs indexed yet + * This happens in networks with very fast block times, like arbitrum (<=250ms block times) + * See: https://github.com/ethers-io/ethers.js/issues/3486 + * + * Basically, the change that @area implemented here is to try and detect if a block actually has + * logs, but which don't get retrived using the `getLogs` call. + * If that happens, it means the block was emitted, but the logs weren't indexed yet, at which point + * we just short-circuit and re-process the block. + * We do this enough times, until the logs are actually indexed. + */ + if (logs.length === 0) { + verbose('No logs seen in block', currentBlockNumber); + // Check whether block actually has no logs + let block = this.blocksMap.get(currentBlockNumber); + if ( + !block || + (block.transactions as string[]).every((tx) => typeof tx === 'string') + ) { + block = await this.rpcProvider + .getProviderInstance() + .getBlockWithTransactions(currentBlockNumber); + // May as well save this block in the blocksMap in case it turns out we need it in mapLogToContractEvent + this.blocksMap.set(currentBlockNumber, block); + } + + let mustReindex = false; + for (const tx of block.transactions) { + if (typeof tx === 'string') { + throw Error('tx was a string, but should have been a TxResponse'); + } + const txReceipt = await this.rpcProvider + .getProviderInstance() + .getTransactionReceipt(tx.hash); + if (txReceipt.logs.length > 0) { + verbose( + `Proved ${currentBlockNumber} has logs, but weren't given any, will reindex`, + ); + mustReindex = true; + // Then the block has events, and they've not been indexed yet. + // We exit out of this handler, and wait until they've been indexed. + // We remove the empty array from blockLogs to cause the getLogs call to be made again + this.blockLogs.delete(currentBlockNumber); + // Now we've proved we're missing events, don't need to look at any other transactions in + // this block. + break; + } + } + if (mustReindex) { + continue; + } + } + + for (const log of logs) { + // Find listeners that match the log + const listeners = this.eventManager.getMatchingListeners( + log.topics, + log.address, + ); + if (!listeners.length) { + continue; + } + + for (const listener of listeners) { + // In order to parse the log, we need an ethers interface + const iface = this.eventManager.getInterfaceByListener(listener); + if (!iface) { + output( + `Failed to get an interface for a log with listener type ${listener.type}`, + ); + continue; + } + + const event = await this.mapLogToContractEvent(log, iface); + if (!event) { + output( + `Failed to map log describing event ${listener.eventSignature} in transaction ${log.transactionHash} `, + ); + continue; + } + + // Call the handler in a blocking way to ensure events get processed sequentially + await listener.handler(event, listener); + } + } + + verbose('processed block', currentBlockNumber); + + lastBlockNumber = currentBlockNumber; + this.statsManager.setLastBlockNumber(currentBlockNumber); + this.blockLogs.delete(currentBlockNumber); + this.blocksMap.delete(currentBlockNumber); + } + + this.isProcessing = false; + } + + public mapLogToContractEvent = async ( + log: Log, + iface: utils.Interface, + ): Promise => { + const { + transactionHash, + logIndex, + blockNumber, + address: eventContractAddress, + } = log; + + try { + // Attempt to first get a block from the map as we might have already fetched its info + let block = this.blocksMap.get(blockNumber); + if (!block) { + block = await this.rpcProvider + .getProviderInstance() + .getBlock(blockNumber); + this.blocksMap.set(blockNumber, block); + } + + const { hash: blockHash, timestamp } = block; + const parsedLog = iface.parseLog(log); + + return { + ...parsedLog, + blockNumber, + transactionHash, + logIndex, + contractAddress: eventContractAddress, + blockHash, + timestamp, + }; + } catch (error) { + /* + * Silent Error + * + * This does not need to be loud since, at times, you'll map through a whole + * lot of events which might not know how to interface with since they were + * generated by other contracts + */ + return null; + } + }; +} diff --git a/packages/blocks/src/blocks/index.ts b/packages/blocks/src/blocks/index.ts new file mode 100644 index 000000000..c0b9249f3 --- /dev/null +++ b/packages/blocks/src/blocks/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './blockManager'; \ No newline at end of file diff --git a/packages/blocks/src/blocks/types.ts b/packages/blocks/src/blocks/types.ts new file mode 100644 index 000000000..7746c8762 --- /dev/null +++ b/packages/blocks/src/blocks/types.ts @@ -0,0 +1,6 @@ +export type ChainID = string; + +export type Block = Awaited; +// @TODO ReturnType +export type BlockWithTransactions = Awaited; +// @TODO ReturnType \ No newline at end of file diff --git a/src/constants/abis.ts b/packages/blocks/src/constants/abis.ts similarity index 62% rename from src/constants/abis.ts rename to packages/blocks/src/constants/abis.ts index f1b092936..ac0848191 100644 --- a/src/constants/abis.ts +++ b/packages/blocks/src/constants/abis.ts @@ -80,69 +80,6 @@ export const colonyAbi = [ ], name: 'ArbitraryTransaction', }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'auction', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'token', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'quantity', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - ], - name: 'AuctionCreated', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'bridgeAddress', - internalType: 'address', - type: 'address', - indexed: false, - }, - ], - name: 'BridgeSet', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'colonyId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, - { - name: 'colonyAddress', - internalType: 'address', - type: 'address', - indexed: true, - }, - { - name: 'token', - internalType: 'address', - type: 'address', - indexed: false, - }, - ], - name: 'ColonyAdded', - }, { type: 'event', anonymous: false, @@ -256,25 +193,6 @@ export const colonyAbi = [ ], name: 'ColonyInitialised', }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'colony', - internalType: 'address', - type: 'address', - indexed: true, - }, - { - name: 'label', - internalType: 'bytes32', - type: 'bytes32', - indexed: false, - }, - ], - name: 'ColonyLabelRegistered', - }, { type: 'event', anonymous: false, @@ -313,19 +231,6 @@ export const colonyAbi = [ ], name: 'ColonyMetadataDelta', }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'resolver', - internalType: 'address', - type: 'address', - indexed: false, - }, - ], - name: 'ColonyNetworkInitialised', - }, { type: 'event', anonymous: false, @@ -397,19 +302,19 @@ export const colonyAbi = [ anonymous: false, inputs: [ { - name: 'version', - internalType: 'uint256', - type: 'uint256', + name: 'agent', + internalType: 'address', + type: 'address', indexed: false, }, { - name: 'resolver', - internalType: 'address', - type: 'address', + name: 'domainId', + internalType: 'uint256', + type: 'uint256', indexed: false, }, ], - name: 'ColonyVersionAdded', + name: 'DomainAdded', }, { type: 'event', @@ -425,10 +330,16 @@ export const colonyAbi = [ name: 'domainId', internalType: 'uint256', type: 'uint256', + indexed: true, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', indexed: false, }, ], - name: 'DomainAdded', + name: 'DomainDeprecated', }, { type: 'event', @@ -440,20 +351,27 @@ export const colonyAbi = [ type: 'address', indexed: false, }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, { name: 'domainId', internalType: 'uint256', type: 'uint256', - indexed: true, + indexed: false, }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, { - name: 'deprecated', - internalType: 'bool', - type: 'bool', + name: 'payoutRemainder', + internalType: 'uint256', + type: 'uint256', indexed: false, }, ], - name: 'DomainDeprecated', + name: 'DomainFundsClaimed', }, { type: 'event', @@ -804,126 +722,122 @@ export const colonyAbi = [ anonymous: false, inputs: [ { - name: 'extensionId', - internalType: 'bytes32', - type: 'bytes32', - indexed: true, - }, - { - name: 'version', + name: 'fundingPotId', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'ExtensionAddedToNetwork', + name: 'FundingPotAdded', }, { type: 'event', anonymous: false, inputs: [ { - name: 'extensionId', - internalType: 'bytes32', - type: 'bytes32', - indexed: true, - }, - { - name: 'colony', + name: 'agent', internalType: 'address', type: 'address', - indexed: true, + indexed: false, }, { - name: 'deprecated', - internalType: 'bool', - type: 'bool', + name: 'localSkillId', + internalType: 'uint256', + type: 'uint256', indexed: false, }, ], - name: 'ExtensionDeprecated', + name: 'LocalSkillAdded', }, { type: 'event', anonymous: false, inputs: [ { - name: 'extensionId', - internalType: 'bytes32', - type: 'bytes32', - indexed: true, - }, - { - name: 'colony', + name: 'agent', internalType: 'address', type: 'address', - indexed: true, + indexed: false, }, { - name: 'version', + name: 'localSkillId', internalType: 'uint256', type: 'uint256', indexed: false, }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, ], - name: 'ExtensionInstalled', + name: 'LocalSkillDeprecated', }, { type: 'event', anonymous: false, inputs: [ { - name: 'extensionId', - internalType: 'bytes32', - type: 'bytes32', - indexed: true, - }, - { - name: 'colony', + name: 'authority', internalType: 'address', type: 'address', indexed: true, }, ], - name: 'ExtensionUninstalled', + name: 'LogSetAuthority', }, { type: 'event', anonymous: false, inputs: [ { - name: 'extensionId', - internalType: 'bytes32', - type: 'bytes32', + name: 'owner', + internalType: 'address', + type: 'address', indexed: true, }, + ], + name: 'LogSetOwner', + }, + { + type: 'event', + anonymous: false, + inputs: [ { - name: 'colony', + name: 'userAddress', internalType: 'address', type: 'address', - indexed: true, + indexed: false, }, { - name: 'version', - internalType: 'uint256', - type: 'uint256', + name: 'relayerAddress', + internalType: 'address payable', + type: 'address', indexed: false, }, + { name: 'payload', internalType: 'bytes', type: 'bytes', indexed: false }, ], - name: 'ExtensionUpgraded', + name: 'MetaTransactionExecuted', }, { type: 'event', anonymous: false, inputs: [ { - name: 'fundingPotId', + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'FundingPotAdded', + name: 'PaymentAdded', }, { type: 'event', @@ -936,13 +850,13 @@ export const colonyAbi = [ indexed: false, }, { - name: 'localSkillId', + name: 'paymentId', internalType: 'uint256', type: 'uint256', - indexed: false, + indexed: true, }, ], - name: 'LocalSkillAdded', + name: 'PaymentFinalized', }, { type: 'event', @@ -955,116 +869,106 @@ export const colonyAbi = [ indexed: false, }, { - name: 'localSkillId', + name: 'paymentId', internalType: 'uint256', type: 'uint256', + indexed: true, + }, + { + name: 'token', + internalType: 'address', + type: 'address', indexed: false, }, { - name: 'deprecated', - internalType: 'bool', - type: 'bool', + name: 'amount', + internalType: 'uint256', + type: 'uint256', indexed: false, }, ], - name: 'LocalSkillDeprecated', + name: 'PaymentPayoutSet', }, { type: 'event', anonymous: false, inputs: [ { - name: 'authority', + name: 'agent', internalType: 'address', type: 'address', - indexed: true, + indexed: false, }, - ], - name: 'LogSetAuthority', - }, - { - type: 'event', - anonymous: false, - inputs: [ { - name: 'owner', + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'recipient', internalType: 'address', type: 'address', - indexed: true, + indexed: false, }, ], - name: 'LogSetOwner', + name: 'PaymentRecipientSet', }, { type: 'event', anonymous: false, inputs: [ { - name: 'metaColony', + name: 'agent', internalType: 'address', type: 'address', indexed: false, }, { - name: 'token', - internalType: 'address', - type: 'address', - indexed: false, + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, }, { - name: 'rootSkillId', + name: 'skillId', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'MetaColonyCreated', + name: 'PaymentSkillSet', }, { type: 'event', anonymous: false, inputs: [ { - name: 'userAddress', + name: 'agent', internalType: 'address', type: 'address', indexed: false, }, { - name: 'relayerAddress', - internalType: 'address payable', - type: 'address', - indexed: false, + name: 'fundingPotId', + internalType: 'uint256', + type: 'uint256', + indexed: true, }, - { name: 'payload', internalType: 'bytes', type: 'bytes', indexed: false }, - ], - name: 'MetaTransactionExecuted', - }, - { - type: 'event', - anonymous: false, - inputs: [ { - name: 'miningCycleResolver', + name: 'token', internalType: 'address', type: 'address', indexed: false, }, - ], - name: 'MiningCycleResolverSet', - }, - { - type: 'event', - anonymous: false, - inputs: [ { - name: 'feeInverse', + name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'NetworkFeeInverseSet', + name: 'PayoutClaimed', }, { type: 'event', @@ -1076,64 +980,52 @@ export const colonyAbi = [ type: 'address', indexed: false, }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false }, { - name: 'paymentId', + name: 'slot', internalType: 'uint256', type: 'uint256', indexed: false, }, - ], - name: 'PaymentAdded', - }, - { - type: 'event', - anonymous: false, - inputs: [ { - name: 'agent', + name: 'token', internalType: 'address', type: 'address', indexed: false, }, { - name: 'paymentId', + name: 'tokenPayout', internalType: 'uint256', type: 'uint256', - indexed: true, + indexed: false, }, ], - name: 'PaymentFinalized', + name: 'PayoutClaimed', }, { type: 'event', anonymous: false, inputs: [ { - name: 'agent', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'paymentId', + name: '_chainId', internalType: 'uint256', type: 'uint256', - indexed: true, + indexed: false, }, { - name: 'token', + name: '_token', internalType: 'address', type: 'address', indexed: false, }, { - name: 'amount', + name: '_amount', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'PaymentPayoutSet', + name: 'ProxyColonyFundsClaimed', }, { type: 'event', @@ -1146,44 +1038,45 @@ export const colonyAbi = [ indexed: false, }, { - name: 'paymentId', + name: 'destinationChainId', internalType: 'uint256', type: 'uint256', - indexed: true, + indexed: false, }, { - name: 'recipient', - internalType: 'address', - type: 'address', + name: 'salt', + internalType: 'bytes32', + type: 'bytes32', indexed: false, }, ], - name: 'PaymentRecipientSet', + name: 'ProxyColonyRequested', }, { type: 'event', anonymous: false, inputs: [ { - name: 'agent', - internalType: 'address', - type: 'address', + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', indexed: false, }, { - name: 'paymentId', - internalType: 'uint256', - type: 'uint256', - indexed: true, + name: 'user', + internalType: 'address', + type: 'address', + indexed: false, }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, { - name: 'skillId', + name: 'rewardRemainder', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'PaymentSkillSet', + name: 'RewardPayoutClaimed', }, { type: 'event', @@ -1196,25 +1089,13 @@ export const colonyAbi = [ indexed: false, }, { - name: 'fundingPotId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, - { - name: 'token', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'amount', + name: 'rewardPayoutId', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'PayoutClaimed', + name: 'RewardPayoutCycleEnded', }, { type: 'event', @@ -1226,269 +1107,230 @@ export const colonyAbi = [ type: 'address', indexed: false, }, - { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false }, { - name: 'slot', + name: 'rewardPayoutId', internalType: 'uint256', type: 'uint256', indexed: false, }, + ], + name: 'RewardPayoutCycleStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [ { - name: 'token', + name: 'agent', internalType: 'address', type: 'address', indexed: false, }, { - name: 'tokenPayout', + name: 'taskId', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'PayoutClaimed', + name: 'TaskAdded', }, { type: 'event', anonymous: false, inputs: [ - { name: 'ens', internalType: 'address', type: 'address', indexed: false }, { - name: 'rootNode', + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'specificationHash', internalType: 'bytes32', type: 'bytes32', indexed: false, }, ], - name: 'RegistrarInitialised', + name: 'TaskBriefSet', }, { type: 'event', anonymous: false, inputs: [ { - name: 'miner', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'tokensLost', + name: 'taskId', internalType: 'uint256', type: 'uint256', - indexed: false, + indexed: true, }, ], - name: 'ReputationMinerPenalised', + name: 'TaskCanceled', }, { type: 'event', anonymous: false, inputs: [ { - name: 'hash', - internalType: 'bytes32', - type: 'bytes32', - indexed: false, - }, - { - name: 'nLeaves', - internalType: 'uint256', - type: 'uint256', + name: 'reviewerAddresses', + internalType: 'address[]', + type: 'address[]', indexed: false, }, ], - name: 'ReputationMiningCycleComplete', + name: 'TaskChangedViaSignatures', }, { type: 'event', anonymous: false, inputs: [ { - name: 'inactiveReputationMiningCycle', + name: 'agent', internalType: 'address', type: 'address', indexed: false, }, - ], - name: 'ReputationMiningInitialised', - }, - { - type: 'event', - anonymous: false, - inputs: [ { - name: 'amount', + name: 'taskId', internalType: 'uint256', type: 'uint256', - indexed: false, + indexed: true, }, ], - name: 'ReputationMiningRewardSet', + name: 'TaskCompleted', }, { type: 'event', anonymous: false, inputs: [ { - name: 'newHash', - internalType: 'bytes32', - type: 'bytes32', + name: 'agent', + internalType: 'address', + type: 'address', indexed: false, }, { - name: 'newNLeaves', + name: 'taskId', internalType: 'uint256', type: 'uint256', - indexed: false, - }, - { - name: 'stakers', - internalType: 'address[]', - type: 'address[]', - indexed: false, + indexed: true, }, { - name: 'reward', - internalType: 'uint256', - type: 'uint256', + name: 'deliverableHash', + internalType: 'bytes32', + type: 'bytes32', indexed: false, }, ], - name: 'ReputationRootHashSet', + name: 'TaskDeliverableSubmitted', }, { type: 'event', anonymous: false, inputs: [ { - name: 'chainId', + name: 'taskId', internalType: 'uint256', type: 'uint256', - indexed: false, - }, - { - name: 'colony', - internalType: 'address', - type: 'address', - indexed: false, + indexed: true, }, { - name: 'updateNumber', + name: 'dueDate', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'ReputationUpdateAddedFromBridge', + name: 'TaskDueDateSet', }, { type: 'event', anonymous: false, inputs: [ { - name: 'colony', + name: 'agent', internalType: 'address', type: 'address', indexed: false, }, { - name: 'count', + name: 'taskId', internalType: 'uint256', type: 'uint256', - indexed: false, + indexed: true, }, ], - name: 'ReputationUpdateSentToBridge', + name: 'TaskFinalized', }, { type: 'event', anonymous: false, inputs: [ { - name: 'colony', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'count', + name: 'taskId', internalType: 'uint256', type: 'uint256', - indexed: false, + indexed: true, }, - ], - name: 'ReputationUpdateStored', - }, - { - type: 'event', - anonymous: false, - inputs: [ { - name: 'chainId', - internalType: 'uint256', - type: 'uint256', + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', indexed: false, }, { - name: 'colony', + name: 'token', internalType: 'address', type: 'address', indexed: false, }, { - name: 'updateNumber', + name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'ReputationUpdateStoredFromBridge', + name: 'TaskPayoutSet', }, { type: 'event', anonymous: false, inputs: [ { - name: 'rewardPayoutId', + name: 'taskId', internalType: 'uint256', type: 'uint256', - indexed: false, - }, - { - name: 'user', - internalType: 'address', - type: 'address', - indexed: false, + indexed: true, }, - { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, { - name: 'rewardRemainder', - internalType: 'uint256', - type: 'uint256', + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', indexed: false, }, + { name: 'user', internalType: 'address', type: 'address', indexed: true }, ], - name: 'RewardPayoutClaimed', + name: 'TaskRoleUserSet', }, { type: 'event', anonymous: false, inputs: [ { - name: 'agent', - internalType: 'address', - type: 'address', - indexed: false, + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, }, { - name: 'rewardPayoutId', + name: 'skillId', internalType: 'uint256', type: 'uint256', - indexed: false, + indexed: true, }, ], - name: 'RewardPayoutCycleEnded', + name: 'TaskSkillSet', }, { type: 'event', @@ -1501,71 +1343,58 @@ export const colonyAbi = [ indexed: false, }, { - name: 'rewardPayoutId', + name: 'taskId', internalType: 'uint256', type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', indexed: false, }, + { name: 'rating', internalType: 'uint8', type: 'uint8', indexed: false }, ], - name: 'RewardPayoutCycleStarted', + name: 'TaskWorkRatingRevealed', }, { type: 'event', anonymous: false, inputs: [ { - name: 'skillId', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - { - name: 'parentSkillId', - internalType: 'uint256', - type: 'uint256', + name: 'agent', + internalType: 'address', + type: 'address', indexed: false, }, ], - name: 'SkillAdded', + name: 'TokenUnlocked', }, { type: 'event', anonymous: false, inputs: [ { - name: 'skillId', - internalType: 'uint256', - type: 'uint256', + name: 'agent', + internalType: 'address', + type: 'address', indexed: false, }, - ], - name: 'SkillAddedFromBridge', - }, - { - type: 'event', - anonymous: false, - inputs: [ { - name: 'skillId', - internalType: 'uint256', - type: 'uint256', + name: 'token', + internalType: 'address', + type: 'address', indexed: false, }, - ], - name: 'SkillCreationStored', - }, - { - type: 'event', - anonymous: false, - inputs: [ { - name: 'skillId', + name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'SkillStoredFromBridge', + name: 'TokensBurned', }, { type: 'event', @@ -1577,549 +1406,212 @@ export const colonyAbi = [ type: 'address', indexed: false, }, + { name: 'who', internalType: 'address', type: 'address', indexed: false }, { - name: 'taskId', + name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'TaskAdded', + name: 'TokensMinted', }, { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'taskId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, - { - name: 'specificationHash', - internalType: 'bytes32', - type: 'bytes32', - indexed: false, - }, + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'DEPRECATED_taskWorkRatings', + outputs: [ + { name: 'count', internalType: 'uint256', type: 'uint256' }, + { name: 'timestamp', internalType: 'uint256', type: 'uint256' }, ], - name: 'TaskBriefSet', + stateMutability: 'view', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'taskId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_resolver', internalType: 'address', type: 'address' }, ], - name: 'TaskCanceled', + name: 'addExtensionToNetwork', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, + type: 'function', + inputs: [], + name: 'addLocalSkill', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', inputs: [ - { - name: 'reviewerAddresses', - internalType: 'address[]', - type: 'address[]', - indexed: false, - }, + { name: '_version', internalType: 'uint256', type: 'uint256' }, + { name: '_resolver', internalType: 'address', type: 'address' }, ], - name: 'TaskChangedViaSignatures', + name: 'addNetworkColonyVersion', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'agent', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'taskId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, + { name: '_txHash', internalType: 'bytes32', type: 'bytes32' }, + { name: '_metadata', internalType: 'string', type: 'string' }, ], - name: 'TaskCompleted', + name: 'annotateTransaction', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'agent', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'taskId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, - { - name: 'deliverableHash', - internalType: 'bytes32', - type: 'bytes32', - indexed: false, - }, + { name: '_approvee', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, ], - name: 'TaskDeliverableSubmitted', + name: 'approveStake', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'taskId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, - { - name: 'dueDate', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, + type: 'function', + inputs: [], + name: 'authority', + outputs: [ + { name: '', internalType: 'contract DSAuthority', type: 'address' }, ], - name: 'TaskDueDateSet', + stateMutability: 'view', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'agent', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'taskId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, + { name: '_users', internalType: 'address[]', type: 'address[]' }, + { name: '_amounts', internalType: 'int256[]', type: 'int256[]' }, ], - name: 'TaskFinalized', + name: 'bootstrapColony', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'taskId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, - { - name: 'role', - internalType: 'enum ColonyDataTypes.TaskRole', - type: 'uint8', - indexed: false, - }, - { - name: 'token', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'amount', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, ], - name: 'TaskPayoutSet', + name: 'burnTokens', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'taskId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, - { - name: 'role', - internalType: 'enum ColonyDataTypes.TaskRole', - type: 'uint8', - indexed: false, - }, - { name: 'user', internalType: 'address', type: 'address', indexed: true }, - ], - name: 'TaskRoleUserSet', + type: 'function', + inputs: [{ name: '_slot', internalType: 'uint256', type: 'uint256' }], + name: 'checkNotAdditionalProtectedVariable', + outputs: [], + stateMutability: 'pure', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'taskId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, - { - name: 'skillId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, + { name: '_destinationChainId', internalType: 'uint256', type: 'uint256' }, + { name: '_salt', internalType: 'bytes32', type: 'bytes32' }, ], - name: 'TaskSkillSet', + name: 'createProxyColony', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'agent', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'taskId', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, - { - name: 'role', - internalType: 'enum ColonyDataTypes.TaskRole', - type: 'uint8', - indexed: false, - }, - { name: 'rating', internalType: 'uint8', type: 'uint8', indexed: false }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, ], - name: 'TaskWorkRatingRevealed', + name: 'deobligateStake', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'tokenAuthorityAddress', - internalType: 'address', - type: 'address', - indexed: false, - }, + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_deprecated', internalType: 'bool', type: 'bool' }, ], - name: 'TokenAuthorityDeployed', + name: 'deprecateExtension', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'tokenAddress', - internalType: 'address', - type: 'address', - indexed: false, - }, + { name: '_localSkillId', internalType: 'uint256', type: 'uint256' }, + { name: '_deprecated', internalType: 'bool', type: 'bool' }, ], - name: 'TokenDeployed', + name: 'deprecateLocalSkill', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'tokenLocking', - internalType: 'address', - type: 'address', - indexed: false, - }, + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'domains', + outputs: [ + { name: 'skillId', internalType: 'uint256', type: 'uint256' }, + { name: 'fundingPotId', internalType: 'uint256', type: 'uint256' }, + { name: 'deprecated', internalType: 'bool', type: 'bool' }, ], - name: 'TokenLockingAddressSet', + stateMutability: 'view', }, { - type: 'event', - anonymous: false, + type: 'function', + inputs: [{ name: '_metadata', internalType: 'string', type: 'string' }], + name: 'editColony', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', inputs: [ - { - name: 'agent', - internalType: 'address', - type: 'address', - indexed: false, - }, + { name: '_metadataDelta', internalType: 'string', type: 'string' }, ], - name: 'TokenUnlocked', + name: 'editColonyByDelta', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'token', - internalType: 'address', - type: 'address', - indexed: false, - }, - { name: 'status', internalType: 'bool', type: 'bool', indexed: false }, + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, ], - name: 'TokenWhitelisted', + name: 'emitDomainReputationPenalty', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'agent', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'token', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'amount', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, ], - name: 'TokensBurned', + name: 'emitDomainReputationReward', + outputs: [], + stateMutability: 'nonpayable', }, { - type: 'event', - anonymous: false, + type: 'function', inputs: [ - { - name: 'agent', - internalType: 'address', - type: 'address', - indexed: false, - }, - { name: 'who', internalType: 'address', type: 'address', indexed: false }, - { - name: 'amount', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, + { name: '_skillId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, ], - name: 'TokensMinted', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { name: 'user', internalType: 'address', type: 'address', indexed: true }, - { - name: 'label', - internalType: 'bytes32', - type: 'bytes32', - indexed: false, - }, - ], - name: 'UserLabelRegistered', - }, - { - type: 'function', - inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - name: 'DEPRECATED_taskWorkRatings', - outputs: [ - { name: 'count', internalType: 'uint256', type: 'uint256' }, - { name: 'timestamp', internalType: 'uint256', type: 'uint256' }, - ], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [ - { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, - { name: '_resolver', internalType: 'address', type: 'address' }, - ], - name: 'addExtensionToNetwork', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [], - name: 'addLocalSkill', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_version', internalType: 'uint256', type: 'uint256' }, - { name: '_resolver', internalType: 'address', type: 'address' }, - ], - name: 'addNetworkColonyVersion', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_txHash', internalType: 'bytes32', type: 'bytes32' }, - { name: '_metadata', internalType: 'string', type: 'string' }, - ], - name: 'annotateTransaction', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_approvee', internalType: 'address', type: 'address' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_amount', internalType: 'uint256', type: 'uint256' }, - ], - name: 'approveStake', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [], - name: 'authority', - outputs: [ - { name: '', internalType: 'contract DSAuthority', type: 'address' }, - ], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [ - { name: '_users', internalType: 'address[]', type: 'address[]' }, - { name: '_amounts', internalType: 'int256[]', type: 'int256[]' }, - ], - name: 'bootstrapColony', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_token', internalType: 'address', type: 'address' }, - { name: '_amount', internalType: 'uint256', type: 'uint256' }, - ], - name: 'burnTokens', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [{ name: '_slot', internalType: 'uint256', type: 'uint256' }], - name: 'checkNotAdditionalProtectedVariable', - outputs: [], - stateMutability: 'pure', - }, - { - type: 'function', - inputs: [ - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_amount', internalType: 'uint256', type: 'uint256' }, - ], - name: 'deobligateStake', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, - { name: '_deprecated', internalType: 'bool', type: 'bool' }, - ], - name: 'deprecateExtension', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_localSkillId', internalType: 'uint256', type: 'uint256' }, - { name: '_deprecated', internalType: 'bool', type: 'bool' }, - ], - name: 'deprecateLocalSkill', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - name: 'domains', - outputs: [ - { name: 'skillId', internalType: 'uint256', type: 'uint256' }, - { name: 'fundingPotId', internalType: 'uint256', type: 'uint256' }, - { name: 'deprecated', internalType: 'bool', type: 'bool' }, - ], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [{ name: '_metadata', internalType: 'string', type: 'string' }], - name: 'editColony', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_metadataDelta', internalType: 'string', type: 'string' }, - ], - name: 'editColonyByDelta', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, - { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_amount', internalType: 'int256', type: 'int256' }, - ], - name: 'emitDomainReputationPenalty', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_amount', internalType: 'int256', type: 'int256' }, - ], - name: 'emitDomainReputationReward', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_skillId', internalType: 'uint256', type: 'uint256' }, - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_amount', internalType: 'int256', type: 'int256' }, - ], - name: 'emitSkillReputationPenalty', - outputs: [], - stateMutability: 'nonpayable', + name: 'emitSkillReputationPenalty', + outputs: [], + stateMutability: 'nonpayable', }, { type: 'function', @@ -2576,7 +2068,7 @@ export const colonyAbi = [ ], stateMutability: 'pure', }, -] as const; +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ColonyEvents @@ -4532,7 +4024,7 @@ export const colonyEventsAbi = [ ], name: 'ArbitraryTransaction', }, -] as const; +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ColonyFunctions @@ -4919,593 +4411,4791 @@ export const colonyFunctionsAbi = [ stateMutability: 'view', }, { - constant: true, - payable: false, - type: 'function', + constant: true, + payable: false, + type: 'function', + inputs: [ + { name: 'who', type: 'address' }, + { name: 'where', type: 'uint256' }, + ], + name: 'getUserRoles', + outputs: [{ name: '', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getChainId', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_to', internalType: 'address', type: 'address' }, + { name: '_action', internalType: 'bytes', type: 'bytes' }, + ], + name: 'makeArbitraryTransaction', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_txHash', internalType: 'bytes32', type: 'bytes32' }, + { name: '_metadata', internalType: 'string', type: 'string' }, + ], + name: 'annotateTransaction', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, + ], + name: 'emitDomainReputationReward', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_skillId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, + ], + name: 'emitSkillReputationReward', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, + ], + name: 'emitDomainReputationPenalty', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_skillId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, + ], + name: 'emitSkillReputationPenalty', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { + name: '_colonyNetworkAddress', + internalType: 'address', + type: 'address', + }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_metadata', internalType: 'string', type: 'string' }, + ], + name: 'initialiseColony', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_metadata', internalType: 'string', type: 'string' }], + name: 'editColony', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_guy', internalType: 'address', type: 'address' }, + { name: '_wad', internalType: 'uint256', type: 'uint256' }, + ], + name: 'mintTokensFor', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_status', internalType: 'bool', type: 'bool' }, + ], + name: 'setPayoutWhitelist', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_amount', internalType: 'uint256', type: 'uint256' }], + name: 'setReputationMiningCycleReward', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_resolver', internalType: 'address', type: 'address' }, + ], + name: 'addExtensionToNetwork', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_version', internalType: 'uint256', type: 'uint256' }, + ], + name: 'installExtension', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_newVersion', internalType: 'uint256', type: 'uint256' }, + ], + name: 'upgradeExtension', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_deprecated', internalType: 'bool', type: 'bool' }, + ], + name: 'deprecateExtension', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'uninstallExtension', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_parentDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_metadata', internalType: 'string', type: 'string' }, + ], + name: 'addDomain', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_metadata', internalType: 'string', type: 'string' }, + ], + name: 'editDomain', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_approvee', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approveStake', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'obligateStake', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'deobligateStake', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_obligator', internalType: 'address', type: 'address' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_beneficiary', internalType: 'address', type: 'address' }, + ], + name: 'transferStake', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_obligator', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getApproval', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_obligator', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getObligation', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'unlockToken', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_spender', internalType: 'address', type: 'address' }, + ], + name: 'updateApprovalAmount', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_spender', internalType: 'address', type: 'address' }, + ], + name: 'getTokenApproval', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_token', internalType: 'address', type: 'address' }], + name: 'getTotalTokenApproval', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_targets', internalType: 'address[]', type: 'address[]' }, + { name: '_actions', internalType: 'bytes[]', type: 'bytes[]' }, + { name: '_strict', internalType: 'bool', type: 'bool' }, + ], + name: 'makeArbitraryTransactions', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_to', internalType: 'address', type: 'address' }, + { name: '_action', internalType: 'bytes', type: 'bytes' }, + ], + name: 'makeSingleArbitraryTransaction', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigV', internalType: 'uint8', type: 'uint8' }, + ], + name: 'executeMetaTransaction', + outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [ + { name: '_owner', internalType: 'address', type: 'address' }, + { name: '_nonce', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigV', internalType: 'uint8', type: 'uint8' }, + ], + name: 'verify', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_metadataDelta', internalType: 'string', type: 'string' }, + ], + name: 'editColonyByDelta', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'burnTokens', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'addLocalSkill', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_localSkillId', internalType: 'uint256', type: 'uint256' }, + { name: '_deprecated', internalType: 'bool', type: 'bool' }, + ], + name: 'deprecateLocalSkill', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'getRootLocalSkill', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_user', internalType: 'address', type: 'address' }], + name: 'getMetatransactionNonce', + outputs: [{ name: 'nonce', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }], + name: 'multicall', + outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'DEPRECATED_taskWorkRatings', + outputs: [ + { name: 'count', internalType: 'uint256', type: 'uint256' }, + { name: 'timestamp', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getTaskCount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], + name: 'getTaskChangeNonce', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], + name: 'getTaskWorkRatingSecretsInfo', + outputs: [ + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_role', internalType: 'uint8', type: 'uint8' }, + ], + name: 'getTaskWorkRatingSecret', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_role', internalType: 'uint8', type: 'uint8' }, + ], + name: 'getTaskRole', + outputs: [ + { + name: 'role', + internalType: 'struct ColonyDataTypes.Role', + type: 'tuple', + components: [ + { name: 'user', internalType: 'address payable', type: 'address' }, + { name: 'rateFail', internalType: 'bool', type: 'bool' }, + { + name: 'rating', + internalType: 'enum ColonyDataTypes.TaskRatings', + type: 'uint8', + }, + ], + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], + name: 'getTask', + outputs: [ + { name: '', internalType: 'bytes32', type: 'bytes32' }, + { name: '', internalType: 'bytes32', type: 'bytes32' }, + { + name: '', + internalType: 'enum ColonyDataTypes.TaskStatus', + type: 'uint8', + }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256[]', type: 'uint256[]' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], + name: 'getPayment', + outputs: [ + { + name: '', + internalType: 'struct ColonyDataTypes.Payment', + type: 'tuple', + components: [ + { + name: 'recipient', + internalType: 'address payable', + type: 'address', + }, + { name: 'finalized', internalType: 'bool', type: 'bool' }, + { name: 'fundingPotId', internalType: 'uint256', type: 'uint256' }, + { name: 'domainId', internalType: 'uint256', type: 'uint256' }, + { name: 'skills', internalType: 'uint256[]', type: 'uint256[]' }, + ], + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getPaymentCount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'miningChainId', internalType: 'uint256', type: 'uint256' }, + { name: 'newHash', internalType: 'bytes32', type: 'bytes32' }, + { name: 'newNLeaves', internalType: 'uint256', type: 'uint256' }, + ], + name: 'initialiseReputationMining', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_bridgeAddress', internalType: 'address', type: 'address' }, + ], + name: 'setColonyBridgeAddress', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: 'childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: 'childDomainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'validateDomainInheritance', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_localSkillId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getLocalSkill', + outputs: [ + { + name: 'localSkill', + internalType: 'struct ColonyDataTypes.LocalSkill', + type: 'tuple', + components: [ + { name: 'exists', internalType: 'bool', type: 'bool' }, + { name: 'deprecated', internalType: 'bool', type: 'bool' }, + ], + }, + ], + stateMutability: 'view', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ColonyFunding +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const colonyFundingAbi = [ + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'txHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'Annotation', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'user', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + ], + name: 'ArbitraryReputationUpdate', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'target', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false }, + { name: 'success', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ArbitraryTransaction', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'users', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + { + name: 'amounts', + internalType: 'int256[]', + type: 'int256[]', + indexed: false, + }, + ], + name: 'ColonyBootstrapped', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'payoutRemainder', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'fromPot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'toPot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyFundsMovedBetweenFundingPots', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'colonyNetwork', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ColonyMetadata', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ColonyMetadataDelta', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardInverse', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyRewardInverseSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'user', internalType: 'address', type: 'address', indexed: true }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'role', internalType: 'uint8', type: 'uint8', indexed: true }, + { name: 'setTo', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ColonyRoleSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'oldVersion', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'newVersion', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'DomainAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'DomainDeprecated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'payoutRemainder', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'DomainFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'DomainMetadata', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureCancelled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'claimDelay', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureClaimDelaySet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'globalClaimDelay', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureGlobalClaimDelaySet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureLocked', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ExpenditureMetadataSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'payoutModifier', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + ], + name: 'ExpenditurePayoutModifierSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditurePayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'ExpenditureRecipientSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'storageSlot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'mask', internalType: 'bool[]', type: 'bool[]', indexed: false }, + { + name: 'keys', + internalType: 'bytes32[]', + type: 'bytes32[]', + indexed: false, + }, + { + name: 'value', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'ExpenditureStateChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'ExpenditureTransferred', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'fundingPotId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'FundingPotAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'localSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'LocalSkillAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'localSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'LocalSkillDeprecated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'authority', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetAuthority', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetOwner', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'PaymentFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentPayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'PaymentRecipientSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'fundingPotId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'slot', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'tokenPayout', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: '_chainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: '_token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: '_amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ProxyColonyFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'destinationChainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'salt', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'ProxyColonyRequested', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'user', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'rewardRemainder', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutCycleEnded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutCycleStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TaskAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'specificationHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'TaskBriefSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskCanceled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'reviewerAddresses', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + ], + name: 'TaskChangedViaSignatures', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskCompleted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'deliverableHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'TaskDeliverableSubmitted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'dueDate', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TaskDueDateSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TaskPayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', + indexed: false, + }, + { name: 'user', internalType: 'address', type: 'address', indexed: true }, + ], + name: 'TaskRoleUserSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', + indexed: false, + }, + { name: 'rating', internalType: 'uint8', type: 'uint8', indexed: false }, + ], + name: 'TaskWorkRatingRevealed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'TokenUnlocked', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TokensBurned', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'who', internalType: 'address', type: 'address', indexed: false }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TokensMinted', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'DEPRECATED_taskWorkRatings', + outputs: [ + { name: 'count', internalType: 'uint256', type: 'uint256' }, + { name: 'timestamp', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'authority', + outputs: [ + { name: '', internalType: 'contract DSAuthority', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'claimColonyFunds', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_token', internalType: 'address', type: 'address' }], + name: 'claimColonyFunds', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'claimDomainFunds', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'claimExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'claimExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'domains', + outputs: [ + { name: 'skillId', internalType: 'uint256', type: 'uint256' }, + { name: 'fundingPotId', internalType: 'uint256', type: 'uint256' }, + { name: 'deprecated', internalType: 'bool', type: 'bool' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_add', internalType: 'bool', type: 'bool' }, + ], + name: 'editAllowedDomainReputationReceipt', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_txdata', internalType: 'bytes', type: 'bytes' }, + { name: '_value', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'exchangeTokensViaLiFi', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_domainId', internalType: 'uint256', type: 'uint256' }], + name: 'getAllowedDomainReputationReceipt', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_fundingPotId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getDomainFromFundingPot', + outputs: [{ name: 'domainId', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getExpenditureSlotPayout', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: 'chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getExpenditureSlotPayout', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_potId', internalType: 'uint256', type: 'uint256' }], + name: 'getFundingPot', + outputs: [ + { + name: 'associatedType', + internalType: 'enum ColonyDataTypes.FundingPotAssociatedType', + type: 'uint8', + }, + { name: 'associatedTypeId', internalType: 'uint256', type: 'uint256' }, + { name: 'payoutsWeCannotMake', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_potId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getFundingPotBalance', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_potId', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getFundingPotBalance', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getFundingPotCount', + outputs: [{ name: 'count', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_potId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getFundingPotPayout', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_token', internalType: 'address', type: 'address' }], + name: 'getNonRewardPotsTotal', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getNonRewardPotsTotal', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getRewardInverse', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { + name: '_fromChildSkillIndex', + internalType: 'uint256', + type: 'uint256', + }, + { name: '_toChildSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_fromPot', internalType: 'uint256', type: 'uint256' }, + { name: '_toPot', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'moveFundsBetweenPots', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { + name: '_fromChildSkillIndex', + internalType: 'uint256', + type: 'uint256', + }, + { name: '_toChildSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_fromPot', internalType: 'uint256', type: 'uint256' }, + { name: '_toPot', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'moveFundsBetweenPots', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { + name: '_fromChildSkillIndex', + internalType: 'uint256', + type: 'uint256', + }, + { name: '_toChildSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_fromPot', internalType: 'uint256', type: 'uint256' }, + { name: '_toPot', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'moveFundsBetweenPots', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'recordClaimedFundsFromBridge', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { + name: 'authority_', + internalType: 'contract DSAuthority', + type: 'address', + }, + ], + name: 'setAuthority', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'setExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'setExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'setExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'setExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slots', internalType: 'uint256[]', type: 'uint256[]' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amounts', internalType: 'uint256[]', type: 'uint256[]' }, + ], + name: 'setExpenditurePayouts', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner_', internalType: 'address', type: 'address' }], + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: 'childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: 'childDomainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'validateDomainInheritance', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ColonyFundingEvents +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const colonyFundingEventsAbi = [ + { + type: 'event', + anonymous: false, + inputs: [{ name: 'resolver', type: 'address', indexed: false }], + name: 'ColonyNetworkInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'tokenLocking', type: 'address', indexed: false }], + name: 'TokenLockingAddressSet', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'miningCycleResolver', type: 'address', indexed: false }], + name: 'MiningCycleResolverSet', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'feeInverse', type: 'uint256', indexed: false }], + name: 'NetworkFeeInverseSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'version', type: 'uint256', indexed: false }, + { name: 'resolver', type: 'address', indexed: false }, + ], + name: 'ColonyVersionAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'metaColony', type: 'address', indexed: false }, + { name: 'token', type: 'address', indexed: false }, + { name: 'rootSkillId', type: 'uint256', indexed: false }, + ], + name: 'MetaColonyCreated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'colonyId', type: 'uint256', indexed: true }, + { name: 'colonyAddress', type: 'address', indexed: true }, + { name: 'token', type: 'address', indexed: false }, + ], + name: 'ColonyAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'skillId', type: 'uint256', indexed: false }, + { name: 'parentSkillId', type: 'uint256', indexed: false }, + ], + name: 'SkillAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'auction', type: 'address', indexed: false }, + { name: 'token', type: 'address', indexed: false }, + { name: 'quantity', type: 'uint256', indexed: false }, + ], + name: 'AuctionCreated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'inactiveReputationMiningCycle', + type: 'address', + indexed: false, + }, + ], + name: 'ReputationMiningInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'hash', type: 'bytes32', indexed: false }, + { name: 'nNodes', type: 'uint256', indexed: false }, + ], + name: 'ReputationMiningCycleComplete', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'newHash', type: 'bytes32', indexed: false }, + { name: 'newNNodes', type: 'uint256', indexed: false }, + { name: 'stakers', type: 'address[]', indexed: false }, + { name: 'reward', type: 'uint256', indexed: false }, + ], + name: 'ReputationRootHashSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'user', type: 'address', indexed: true }, + { name: 'label', type: 'bytes32', indexed: false }, + ], + name: 'UserLabelRegistered', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'colony', type: 'address', indexed: true }, + { name: 'label', type: 'bytes32', indexed: false }, + ], + name: 'ColonyLabelRegistered', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'colonyNetwork', type: 'address', indexed: false }, + { name: 'token', type: 'address', indexed: false }, + ], + name: 'ColonyInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'users', type: 'address[]', indexed: false }, + { name: 'amounts', type: 'int256[]', indexed: false }, + ], + name: 'ColonyBootstrapped', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'oldVersion', type: 'uint256', indexed: false }, + { name: 'newVersion', type: 'uint256', indexed: false }, + ], + name: 'ColonyUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'user', type: 'address', indexed: true }, + { name: 'domainId', type: 'uint256', indexed: true }, + { name: 'role', type: 'uint8', indexed: true }, + { name: 'setTo', type: 'bool', indexed: false }, + ], + name: 'ColonyRoleSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'fromPot', type: 'uint256', indexed: true }, + { name: 'toPot', type: 'uint256', indexed: true }, + { name: 'amount', type: 'uint256', indexed: false }, + { name: 'token', type: 'address', indexed: false }, + ], + name: 'ColonyFundsMovedBetweenFundingPots', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'token', type: 'address', indexed: false }, + { name: 'fee', type: 'uint256', indexed: false }, + { name: 'payoutRemainder', type: 'uint256', indexed: false }, + ], + name: 'ColonyFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'rewardPayoutId', type: 'uint256', indexed: false }], + name: 'RewardPayoutCycleStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'rewardPayoutId', type: 'uint256', indexed: false }], + name: 'RewardPayoutCycleEnded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'rewardPayoutId', type: 'uint256', indexed: false }, + { name: 'user', type: 'address', indexed: false }, + { name: 'fee', type: 'uint256', indexed: false }, + { name: 'rewardRemainder', type: 'uint256', indexed: false }, + ], + name: 'RewardPayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'rewardInverse', type: 'uint256', indexed: false }], + name: 'ColonyRewardInverseSet', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'paymentId', type: 'uint256', indexed: false }], + name: 'PaymentAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'taskId', type: 'uint256', indexed: false }], + name: 'TaskAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'taskId', type: 'uint256', indexed: true }, + { name: 'specificationHash', type: 'bytes32', indexed: false }, + ], + name: 'TaskBriefSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'taskId', type: 'uint256', indexed: true }, + { name: 'dueDate', type: 'uint256', indexed: false }, + ], + name: 'TaskDueDateSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'taskId', type: 'uint256', indexed: true }, + { name: 'domainId', type: 'uint256', indexed: true }, + ], + name: 'TaskDomainSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'taskId', type: 'uint256', indexed: true }, + { name: 'skillId', type: 'uint256', indexed: true }, + ], + name: 'TaskSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'taskId', type: 'uint256', indexed: true }, + { name: 'role', type: 'uint8', indexed: false }, + { name: 'user', type: 'address', indexed: true }, + ], + name: 'TaskRoleUserSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'taskId', type: 'uint256', indexed: true }, + { name: 'role', type: 'uint8', indexed: false }, + { name: 'token', type: 'address', indexed: false }, + { name: 'amount', type: 'uint256', indexed: false }, + ], + name: 'TaskPayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'taskId', type: 'uint256', indexed: true }, + { name: 'deliverableHash', type: 'bytes32', indexed: false }, + ], + name: 'TaskDeliverableSubmitted', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'taskId', type: 'uint256', indexed: true }], + name: 'TaskCompleted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'taskId', type: 'uint256', indexed: true }, + { name: 'role', type: 'uint8', indexed: false }, + { name: 'rating', type: 'uint8', indexed: false }, + ], + name: 'TaskWorkRatingRevealed', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'taskId', type: 'uint256', indexed: true }], + name: 'TaskFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'fundingPotId', type: 'uint256', indexed: true }, + { name: 'token', type: 'address', indexed: false }, + { name: 'amount', type: 'uint256', indexed: false }, + ], + name: 'PayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'taskId', type: 'uint256', indexed: true }], + name: 'TaskCanceled', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'domainId', type: 'uint256', indexed: false }], + name: 'DomainAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'fundingPotId', type: 'uint256', indexed: false }], + name: 'FundingPotAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'authority', type: 'address', indexed: true }], + name: 'LogSetAuthority', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'owner', type: 'address', indexed: true }], + name: 'LogSetOwner', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'expenditureId', type: 'uint256', indexed: false }], + name: 'ExpenditureAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'expenditureId', type: 'uint256', indexed: true }, + { name: 'owner', type: 'address', indexed: true }, + ], + name: 'ExpenditureTransferred', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'expenditureId', type: 'uint256', indexed: true }], + name: 'ExpenditureCancelled', + }, + { + type: 'event', + anonymous: false, + inputs: [{ name: 'expenditureId', type: 'uint256', indexed: true }], + name: 'ExpenditureFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'expenditureId', type: 'uint256', indexed: true }, + { name: 'slot', type: 'uint256', indexed: true }, + { name: 'recipient', type: 'address', indexed: true }, + ], + name: 'ExpenditureRecipientSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'expenditureId', type: 'uint256', indexed: true }, + { name: 'slot', type: 'uint256', indexed: true }, + { name: 'skillId', type: 'uint256', indexed: true }, + ], + name: 'ExpenditureSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'expenditureId', type: 'uint256', indexed: true }, + { name: 'slot', type: 'uint256', indexed: true }, + { name: 'token', type: 'address', indexed: true }, + { name: 'amount', type: 'uint256', indexed: false }, + ], + name: 'ExpenditurePayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'txHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'Annotation', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'users', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + { + name: 'amounts', + internalType: 'int256[]', + type: 'int256[]', + indexed: false, + }, + ], + name: 'ColonyBootstrapped', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'payoutRemainder', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'fromPot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'toPot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyFundsMovedBetweenFundingPots', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'colonyNetwork', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ColonyMetadata', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardInverse', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyRewardInverseSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'user', internalType: 'address', type: 'address', indexed: true }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'role', internalType: 'uint8', type: 'uint8', indexed: true }, + { name: 'setTo', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ColonyRoleSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'oldVersion', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'newVersion', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'DomainAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'DomainMetadata', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureCancelled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditurePayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'ExpenditureRecipientSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'ExpenditureTransferred', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionId', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'version', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExtensionAddedToNetwork', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionId', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'ExtensionDeprecated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionId', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'version', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExtensionInstalled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionId', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'ExtensionUninstalled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionId', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'version', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExtensionUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'PaymentFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentPayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'PaymentRecipientSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'fundingPotId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'ens', internalType: 'address', type: 'address', indexed: false }, + { + name: 'rootNode', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'RegistrarInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'miner', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'tokensLost', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ReputationMinerPenalised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ReputationMiningRewardSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutCycleEnded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutCycleStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TaskAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'reviewerAddresses', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + ], + name: 'TaskChangedViaSignatures', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskCompleted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'deliverableHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'TaskDeliverableSubmitted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', + indexed: false, + }, + { name: 'rating', internalType: 'uint8', type: 'uint8', indexed: false }, + ], + name: 'TaskWorkRatingRevealed', + }, + { type: 'event', anonymous: false, inputs: [], name: 'TokenUnlocked' }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'status', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'TokenWhitelisted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TokensBurned', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'who', internalType: 'address', type: 'address', indexed: false }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TokensMinted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'user', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + ], + name: 'ArbitraryReputationUpdate', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'claimDelay', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureClaimDelaySet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'globalClaimDelay', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureGlobalClaimDelaySet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureLocked', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ExpenditureMetadataSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'payoutModifier', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + ], + name: 'ExpenditurePayoutModifierSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ColonyMetadataDelta', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'DomainDeprecated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'localSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'LocalSkillAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'localSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'LocalSkillDeprecated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'tokenAuthorityAddress', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'TokenAuthorityDeployed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'tokenAddress', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'TokenDeployed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'TokenUnlocked', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'user', type: 'address', indexed: false }, + { name: 'setTo', type: 'bool', indexed: false }, + ], + name: 'ColonyFundingRoleSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'user', type: 'address', indexed: false }, + { name: 'setTo', type: 'bool', indexed: false }, + ], + name: 'ColonyAdministrationRoleSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'user', type: 'address', indexed: false }, + { name: 'setTo', type: 'bool', indexed: false }, + ], + name: 'ColonyArchitectureRoleSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'user', type: 'address', indexed: false }, + { name: 'setTo', type: 'bool', indexed: false }, + ], + name: 'ColonyRootRoleSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'storageSlot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'mask', internalType: 'bool[]', type: 'bool[]', indexed: false }, + { + name: 'keys', + internalType: 'bytes32[]', + type: 'bytes32[]', + indexed: false, + }, + { + name: 'value', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'ExpenditureStateChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'target', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false }, + { name: 'success', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ArbitraryTransaction', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'slot', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'tokenPayout', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'bridgeAddress', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'BridgeSet', + }, + { + type: 'event', + anonymous: false, inputs: [ - { name: 'who', type: 'address' }, - { name: 'where', type: 'uint256' }, + { + name: 'chainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'updateNumber', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, ], - name: 'getUserRoles', - outputs: [{ name: '', type: 'bytes32' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [], - name: 'getChainId', - outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - stateMutability: 'view', + name: 'ReputationUpdateAddedFromBridge', }, { - type: 'function', + type: 'event', + anonymous: false, inputs: [ - { name: '_to', internalType: 'address', type: 'address' }, - { name: '_action', internalType: 'bytes', type: 'bytes' }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'count', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, ], - name: 'makeArbitraryTransaction', - outputs: [{ name: '', internalType: 'bool', type: 'bool' }], - stateMutability: 'nonpayable', + name: 'ReputationUpdateSentToBridge', }, { - type: 'function', + type: 'event', + anonymous: false, inputs: [ - { name: '_txHash', internalType: 'bytes32', type: 'bytes32' }, - { name: '_metadata', internalType: 'string', type: 'string' }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'count', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, ], - name: 'annotateTransaction', - outputs: [], - stateMutability: 'nonpayable', + name: 'ReputationUpdateStored', }, { - type: 'function', + type: 'event', + anonymous: false, inputs: [ - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_amount', internalType: 'int256', type: 'int256' }, + { + name: 'chainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'updateNumber', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, ], - name: 'emitDomainReputationReward', - outputs: [], - stateMutability: 'nonpayable', + name: 'ReputationUpdateStoredFromBridge', }, { - type: 'function', + type: 'event', + anonymous: false, inputs: [ - { name: '_skillId', internalType: 'uint256', type: 'uint256' }, - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_amount', internalType: 'int256', type: 'int256' }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, ], - name: 'emitSkillReputationReward', - outputs: [], - stateMutability: 'nonpayable', + name: 'SkillAddedFromBridge', }, { - type: 'function', + type: 'event', + anonymous: false, inputs: [ - { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, - { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_amount', internalType: 'int256', type: 'int256' }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, ], - name: 'emitDomainReputationPenalty', - outputs: [], - stateMutability: 'nonpayable', + name: 'SkillCreationStored', }, { - type: 'function', + type: 'event', + anonymous: false, inputs: [ - { name: '_skillId', internalType: 'uint256', type: 'uint256' }, - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_amount', internalType: 'int256', type: 'int256' }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, ], - name: 'emitSkillReputationPenalty', - outputs: [], - stateMutability: 'nonpayable', + name: 'SkillStoredFromBridge', }, { - type: 'function', + type: 'event', + anonymous: false, inputs: [ { - name: '_colonyNetworkAddress', + name: 'agent', internalType: 'address', type: 'address', + indexed: false, }, - { name: '_token', internalType: 'address', type: 'address' }, - { name: '_metadata', internalType: 'string', type: 'string' }, + { + name: 'target', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false }, + { name: 'success', internalType: 'bool', type: 'bool', indexed: false }, ], - name: 'initialiseColony', - outputs: [], - stateMutability: 'nonpayable', + name: 'ArbitraryTransaction', }, +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ColonyFundingFunctions +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const colonyFundingFunctionsAbi = [ { + constant: false, + payable: false, type: 'function', - inputs: [{ name: '_metadata', internalType: 'string', type: 'string' }], - name: 'editColony', + inputs: [{ name: 'owner_', type: 'address' }], + name: 'setOwner', outputs: [], stateMutability: 'nonpayable', }, { + constant: true, + payable: false, type: 'function', - inputs: [ - { name: '_guy', internalType: 'address', type: 'address' }, - { name: '_wad', internalType: 'uint256', type: 'uint256' }, + inputs: [{ name: '', type: 'uint256' }], + name: 'taskWorkRatings', + outputs: [ + { name: 'count', type: 'uint256' }, + { name: 'timestamp', type: 'uint256' }, ], - name: 'mintTokensFor', - outputs: [], - stateMutability: 'nonpayable', + stateMutability: 'view', }, { + constant: true, + payable: false, type: 'function', - inputs: [ - { name: '_token', internalType: 'address', type: 'address' }, - { name: '_status', internalType: 'bool', type: 'bool' }, + inputs: [{ name: '', type: 'uint256' }], + name: 'domains', + outputs: [ + { name: 'skillId', type: 'uint256' }, + { name: 'fundingPotId', type: 'uint256' }, ], - name: 'setPayoutWhitelist', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [{ name: '_amount', internalType: 'uint256', type: 'uint256' }], - name: 'setReputationMiningCycleReward', - outputs: [], - stateMutability: 'nonpayable', + stateMutability: 'view', }, { + constant: false, + payable: false, type: 'function', - inputs: [ - { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, - { name: '_resolver', internalType: 'address', type: 'address' }, - ], - name: 'addExtensionToNetwork', + inputs: [{ name: 'authority_', type: 'address' }], + name: 'setAuthority', outputs: [], stateMutability: 'nonpayable', }, { + constant: true, + payable: false, type: 'function', - inputs: [ - { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, - { name: '_version', internalType: 'uint256', type: 'uint256' }, - ], - name: 'installExtension', - outputs: [], - stateMutability: 'nonpayable', + inputs: [], + name: 'owner', + outputs: [{ name: '', type: 'address' }], + stateMutability: 'view', }, { + constant: true, + payable: false, type: 'function', - inputs: [ - { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, - { name: '_newVersion', internalType: 'uint256', type: 'uint256' }, - ], - name: 'upgradeExtension', - outputs: [], - stateMutability: 'nonpayable', + inputs: [], + name: 'authority', + outputs: [{ name: '', type: 'address' }], + stateMutability: 'view', }, { + constant: false, + payable: false, type: 'function', inputs: [ - { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, - { name: '_deprecated', internalType: 'bool', type: 'bool' }, + { name: '_id', type: 'uint256' }, + { name: '_token', type: 'address' }, + { name: '_amount', type: 'uint256' }, ], - name: 'deprecateExtension', + name: 'setTaskManagerPayout', outputs: [], stateMutability: 'nonpayable', }, { + constant: false, + payable: false, type: 'function', inputs: [ - { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_id', type: 'uint256' }, + { name: '_token', type: 'address' }, + { name: '_amount', type: 'uint256' }, ], - name: 'uninstallExtension', + name: 'setTaskEvaluatorPayout', outputs: [], stateMutability: 'nonpayable', }, { + constant: false, + payable: false, type: 'function', inputs: [ - { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, - { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, - { name: '_parentDomainId', internalType: 'uint256', type: 'uint256' }, - { name: '_metadata', internalType: 'string', type: 'string' }, + { name: '_id', type: 'uint256' }, + { name: '_token', type: 'address' }, + { name: '_amount', type: 'uint256' }, ], - name: 'addDomain', + name: 'setTaskWorkerPayout', outputs: [], stateMutability: 'nonpayable', }, { + constant: false, + payable: false, type: 'function', inputs: [ - { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, - { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_metadata', internalType: 'string', type: 'string' }, + { name: '_id', type: 'uint256' }, + { name: '_token', type: 'address' }, + { name: '_managerAmount', type: 'uint256' }, + { name: '_evaluatorAmount', type: 'uint256' }, + { name: '_workerAmount', type: 'uint256' }, ], - name: 'editDomain', + name: 'setAllTaskPayouts', outputs: [], stateMutability: 'nonpayable', }, { + constant: true, + payable: false, type: 'function', inputs: [ - { name: '_approvee', internalType: 'address', type: 'address' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_id', type: 'uint256' }, + { name: '_role', type: 'uint8' }, + { name: '_token', type: 'address' }, ], - name: 'approveStake', - outputs: [], - stateMutability: 'nonpayable', + name: 'getTaskPayout', + outputs: [{ name: '', type: 'uint256' }], + stateMutability: 'view', }, { + constant: false, + payable: false, type: 'function', inputs: [ - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_id', type: 'uint256' }, + { name: '_role', type: 'uint8' }, + { name: '_token', type: 'address' }, ], - name: 'obligateStake', + name: 'claimTaskPayout', outputs: [], stateMutability: 'nonpayable', }, { + constant: false, + payable: false, type: 'function', inputs: [ - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_id', type: 'uint256' }, + { name: '_token', type: 'address' }, ], - name: 'deobligateStake', + name: 'claimPayment', outputs: [], stateMutability: 'nonpayable', }, { + constant: false, + payable: false, type: 'function', inputs: [ - { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, - { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, - { name: '_obligator', internalType: 'address', type: 'address' }, - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - { name: '_amount', internalType: 'uint256', type: 'uint256' }, - { name: '_beneficiary', internalType: 'address', type: 'address' }, + { name: '_permissionDomainId', type: 'uint256' }, + { name: '_childSkillIndex', type: 'uint256' }, + { name: '_id', type: 'uint256' }, + { name: '_token', type: 'address' }, + { name: '_amount', type: 'uint256' }, ], - name: 'transferStake', + name: 'setPaymentPayout', outputs: [], stateMutability: 'nonpayable', }, { + constant: true, + payable: false, type: 'function', - inputs: [ - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_obligator', internalType: 'address', type: 'address' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, - ], - name: 'getApproval', - outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + inputs: [], + name: 'getFundingPotCount', + outputs: [{ name: 'count', type: 'uint256' }], stateMutability: 'view', }, { + constant: true, + payable: false, type: 'function', inputs: [ - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_obligator', internalType: 'address', type: 'address' }, - { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_potId', type: 'uint256' }, + { name: '_token', type: 'address' }, ], - name: 'getObligation', - outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'getFundingPotBalance', + outputs: [{ name: '', type: 'uint256' }], stateMutability: 'view', }, { - type: 'function', - inputs: [], - name: 'unlockToken', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: '_token', internalType: 'address', type: 'address' }, - { name: '_spender', internalType: 'address', type: 'address' }, - ], - name: 'updateApprovalAmount', - outputs: [], - stateMutability: 'nonpayable', - }, - { + constant: true, + payable: false, type: 'function', inputs: [ - { name: '_token', internalType: 'address', type: 'address' }, - { name: '_spender', internalType: 'address', type: 'address' }, + { name: '_potId', type: 'uint256' }, + { name: '_token', type: 'address' }, ], - name: 'getTokenApproval', - outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'getFundingPotPayout', + outputs: [{ name: '', type: 'uint256' }], stateMutability: 'view', }, { + constant: true, + payable: false, type: 'function', - inputs: [{ name: '_token', internalType: 'address', type: 'address' }], - name: 'getTotalTokenApproval', - outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + inputs: [{ name: '_potId', type: 'uint256' }], + name: 'getFundingPot', + outputs: [ + { name: 'associatedType', type: 'uint8' }, + { name: 'associatedTypeId', type: 'uint256' }, + { name: 'payoutsWeCannotMake', type: 'uint256' }, + ], stateMutability: 'view', }, { + constant: false, + payable: false, type: 'function', inputs: [ - { name: '_targets', internalType: 'address[]', type: 'address[]' }, - { name: '_actions', internalType: 'bytes[]', type: 'bytes[]' }, - { name: '_strict', internalType: 'bool', type: 'bool' }, + { name: '_permissionDomainId', type: 'uint256' }, + { name: '_fromChildSkillIndex', type: 'uint256' }, + { name: '_toChildSkillIndex', type: 'uint256' }, + { name: '_fromPot', type: 'uint256' }, + { name: '_toPot', type: 'uint256' }, + { name: '_amount', type: 'uint256' }, + { name: '_token', type: 'address' }, ], - name: 'makeArbitraryTransactions', - outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + name: 'moveFundsBetweenPots', + outputs: [], stateMutability: 'nonpayable', }, { + constant: false, + payable: false, type: 'function', - inputs: [ - { name: '_to', internalType: 'address', type: 'address' }, - { name: '_action', internalType: 'bytes', type: 'bytes' }, - ], - name: 'makeSingleArbitraryTransaction', - outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + inputs: [{ name: '_token', type: 'address' }], + name: 'claimColonyFunds', + outputs: [], stateMutability: 'nonpayable', }, { + constant: true, + payable: false, type: 'function', - inputs: [ - { name: '_user', internalType: 'address', type: 'address' }, - { name: '_payload', internalType: 'bytes', type: 'bytes' }, - { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, - { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, - { name: '_sigV', internalType: 'uint8', type: 'uint8' }, - ], - name: 'executeMetaTransaction', - outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], - stateMutability: 'payable', - }, - { - type: 'function', - inputs: [ - { name: '_owner', internalType: 'address', type: 'address' }, - { name: '_nonce', internalType: 'uint256', type: 'uint256' }, - { name: '_chainId', internalType: 'uint256', type: 'uint256' }, - { name: '_payload', internalType: 'bytes', type: 'bytes' }, - { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, - { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, - { name: '_sigV', internalType: 'uint8', type: 'uint8' }, - ], - name: 'verify', - outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + inputs: [{ name: '_token', type: 'address' }], + name: 'getNonRewardPotsTotal', + outputs: [{ name: '', type: 'uint256' }], stateMutability: 'view', }, { + constant: false, + payable: false, type: 'function', inputs: [ - { name: '_metadataDelta', internalType: 'string', type: 'string' }, + { name: '_token', type: 'address' }, + { name: 'key', type: 'bytes' }, + { name: 'value', type: 'bytes' }, + { name: 'branchMask', type: 'uint256' }, + { name: 'siblings', type: 'bytes32[]' }, ], - name: 'editColonyByDelta', + name: 'startNextRewardPayout', outputs: [], stateMutability: 'nonpayable', }, { + constant: false, + payable: false, type: 'function', inputs: [ - { name: '_token', internalType: 'address', type: 'address' }, - { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_payoutId', type: 'uint256' }, + { name: '_squareRoots', type: 'uint256[7]' }, + { name: 'key', type: 'bytes' }, + { name: 'value', type: 'bytes' }, + { name: 'branchMask', type: 'uint256' }, + { name: 'siblings', type: 'bytes32[]' }, ], - name: 'burnTokens', + name: 'claimRewardPayout', outputs: [], stateMutability: 'nonpayable', }, { + constant: false, + payable: false, type: 'function', - inputs: [], - name: 'addLocalSkill', + inputs: [{ name: '_payoutId', type: 'uint256' }], + name: 'finalizeRewardPayout', outputs: [], stateMutability: 'nonpayable', }, { + constant: true, + payable: false, type: 'function', - inputs: [ - { name: '_localSkillId', internalType: 'uint256', type: 'uint256' }, - { name: '_deprecated', internalType: 'bool', type: 'bool' }, + inputs: [{ name: '_payoutId', type: 'uint256' }], + name: 'getRewardPayoutInfo', + outputs: [ + { + name: 'rewardPayoutCycle', + type: 'tuple', + components: [ + { name: 'reputationState', type: 'bytes32' }, + { name: 'colonyWideReputation', type: 'uint256' }, + { name: 'totalTokens', type: 'uint256' }, + { name: 'amount', type: 'uint256' }, + { name: 'tokenAddress', type: 'address' }, + { name: 'blockTimestamp', type: 'uint256' }, + ], + }, ], - name: 'deprecateLocalSkill', - outputs: [], - stateMutability: 'nonpayable', + stateMutability: 'view', }, { + constant: false, + payable: false, type: 'function', - inputs: [], - name: 'getRootLocalSkill', - outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - stateMutability: 'view', + inputs: [{ name: '_rewardInverse', type: 'uint256' }], + name: 'setRewardInverse', + outputs: [], + stateMutability: 'nonpayable', }, { + constant: true, + payable: false, type: 'function', - inputs: [{ name: '_user', internalType: 'address', type: 'address' }], - name: 'getMetatransactionNonce', - outputs: [{ name: 'nonce', internalType: 'uint256', type: 'uint256' }], + inputs: [], + name: 'getRewardInverse', + outputs: [{ name: '', type: 'uint256' }], stateMutability: 'view', }, { + constant: false, + payable: false, type: 'function', - inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }], - name: 'multicall', - outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }], + inputs: [ + { name: '_id', type: 'uint256' }, + { name: '_slot', type: 'uint256' }, + { name: '_token', type: 'address' }, + ], + name: 'claimExpenditurePayout', + outputs: [], stateMutability: 'nonpayable', }, { + constant: false, + payable: false, type: 'function', - inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - name: 'DEPRECATED_taskWorkRatings', - outputs: [ - { name: 'count', internalType: 'uint256', type: 'uint256' }, - { name: 'timestamp', internalType: 'uint256', type: 'uint256' }, + inputs: [ + { name: '_id', type: 'uint256' }, + { name: '_slot', type: 'uint256' }, + { name: '_token', type: 'address' }, + { name: '_amount', type: 'uint256' }, ], - stateMutability: 'view', + name: 'setExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', }, { type: 'function', inputs: [], - name: 'getTaskCount', - outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], - name: 'getTaskChangeNonce', + name: 'lockToken', outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], - name: 'getTaskWorkRatingSecretsInfo', - outputs: [ - { name: '', internalType: 'uint256', type: 'uint256' }, - { name: '', internalType: 'uint256', type: 'uint256' }, - ], - stateMutability: 'view', + stateMutability: 'nonpayable', }, { type: 'function', inputs: [ - { name: '_id', internalType: 'uint256', type: 'uint256' }, - { name: '_role', internalType: 'uint8', type: 'uint8' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_lockId', internalType: 'uint256', type: 'uint256' }, ], - name: 'getTaskWorkRatingSecret', - outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], - stateMutability: 'view', + name: 'unlockTokenForUser', + outputs: [], + stateMutability: 'nonpayable', }, { type: 'function', inputs: [ - { name: '_id', internalType: 'uint256', type: 'uint256' }, - { name: '_role', internalType: 'uint8', type: 'uint8' }, - ], - name: 'getTaskRole', - outputs: [ - { - name: 'role', - internalType: 'struct ColonyDataTypes.Role', - type: 'tuple', - components: [ - { name: 'user', internalType: 'address payable', type: 'address' }, - { name: 'rateFail', internalType: 'bool', type: 'bool' }, - { - name: 'rating', - internalType: 'enum ColonyDataTypes.TaskRatings', - type: 'uint8', - }, - ], - }, + { name: '_fundingPotId', internalType: 'uint256', type: 'uint256' }, ], + name: 'getDomainFromFundingPot', + outputs: [{ name: 'domainId', internalType: 'uint256', type: 'uint256' }], stateMutability: 'view', }, { type: 'function', - inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], - name: 'getTask', - outputs: [ - { name: '', internalType: 'bytes32', type: 'bytes32' }, - { name: '', internalType: 'bytes32', type: 'bytes32' }, - { - name: '', - internalType: 'enum ColonyDataTypes.TaskStatus', - type: 'uint8', - }, - { name: '', internalType: 'uint256', type: 'uint256' }, - { name: '', internalType: 'uint256', type: 'uint256' }, - { name: '', internalType: 'uint256', type: 'uint256' }, - { name: '', internalType: 'uint256', type: 'uint256' }, - { name: '', internalType: 'uint256[]', type: 'uint256[]' }, + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, ], - stateMutability: 'view', + name: 'burnTokens', + outputs: [], + stateMutability: 'nonpayable', }, { type: 'function', - inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], - name: 'getPayment', - outputs: [ + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, { - name: '', - internalType: 'struct ColonyDataTypes.Payment', - type: 'tuple', - components: [ - { - name: 'recipient', - internalType: 'address payable', - type: 'address', - }, - { name: 'finalized', internalType: 'bool', type: 'bool' }, - { name: 'fundingPotId', internalType: 'uint256', type: 'uint256' }, - { name: 'domainId', internalType: 'uint256', type: 'uint256' }, - { name: 'skills', internalType: 'uint256[]', type: 'uint256[]' }, - ], + name: '_fromChildSkillIndex', + internalType: 'uint256', + type: 'uint256', }, + { name: '_toChildSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_fromPot', internalType: 'uint256', type: 'uint256' }, + { name: '_toPot', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, ], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [], - name: 'getPaymentCount', - outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - stateMutability: 'view', + name: 'moveFundsBetweenPots', + outputs: [], + stateMutability: 'nonpayable', }, { type: 'function', inputs: [ - { name: 'miningChainId', internalType: 'uint256', type: 'uint256' }, - { name: 'newHash', internalType: 'bytes32', type: 'bytes32' }, - { name: 'newNLeaves', internalType: 'uint256', type: 'uint256' }, + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slots', internalType: 'uint256[]', type: 'uint256[]' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amounts', internalType: 'uint256[]', type: 'uint256[]' }, ], - name: 'initialiseReputationMining', + name: 'setExpenditurePayouts', outputs: [], stateMutability: 'nonpayable', }, { type: 'function', inputs: [ - { name: '_bridgeAddress', internalType: 'address', type: 'address' }, + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, ], - name: 'setColonyBridgeAddress', + name: 'setExpenditurePayout', outputs: [], stateMutability: 'nonpayable', }, { type: 'function', - inputs: [ - { name: 'permissionDomainId', internalType: 'uint256', type: 'uint256' }, - { name: 'childSkillIndex', internalType: 'uint256', type: 'uint256' }, - { name: 'childDomainId', internalType: 'uint256', type: 'uint256' }, + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'DEPRECATED_taskWorkRatings', + outputs: [ + { name: 'count', internalType: 'uint256', type: 'uint256' }, + { name: 'timestamp', internalType: 'uint256', type: 'uint256' }, ], - name: 'validateDomainInheritance', - outputs: [{ name: '', internalType: 'bool', type: 'bool' }], stateMutability: 'view', }, { type: 'function', inputs: [ - { name: '_localSkillId', internalType: 'uint256', type: 'uint256' }, - ], - name: 'getLocalSkill', - outputs: [ - { - name: 'localSkill', - internalType: 'struct ColonyDataTypes.LocalSkill', - type: 'tuple', - components: [ - { name: 'exists', internalType: 'bool', type: 'bool' }, - { name: 'deprecated', internalType: 'bool', type: 'bool' }, - ], - }, + { name: 'permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: 'childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: 'childDomainId', internalType: 'uint256', type: 'uint256' }, ], + name: 'validateDomainInheritance', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], stateMutability: 'view', }, -] as const; +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ColonyNetwork @@ -5836,6 +9526,31 @@ export const colonyNetworkAbi = [ ], name: 'NetworkFeeInverseSet', }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'destinationChainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'salt', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'ProxyColonyRequested', + }, { type: 'event', anonymous: false, @@ -5943,140 +9658,45 @@ export const colonyNetworkAbi = [ indexed: false, }, ], - name: 'ReputationRootHashSet', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'chainId', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - { - name: 'colony', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'updateNumber', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - ], - name: 'ReputationUpdateAddedFromBridge', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'colony', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'count', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - ], - name: 'ReputationUpdateSentToBridge', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'colony', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'count', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - ], - name: 'ReputationUpdateStored', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'chainId', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - { - name: 'colony', - internalType: 'address', - type: 'address', - indexed: false, - }, - { - name: 'updateNumber', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - ], - name: 'ReputationUpdateStoredFromBridge', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'skillId', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - { - name: 'parentSkillId', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - ], - name: 'SkillAdded', + name: 'ReputationRootHashSet', }, { type: 'event', anonymous: false, inputs: [ { - name: 'skillId', + name: 'colony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'count', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'SkillAddedFromBridge', + name: 'ReputationUpdateSentToBridge', }, { type: 'event', anonymous: false, inputs: [ { - name: 'skillId', + name: 'colony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'count', internalType: 'uint256', type: 'uint256', indexed: false, }, ], - name: 'SkillCreationStored', + name: 'ReputationUpdateStored', }, { type: 'event', @@ -6088,8 +9708,14 @@ export const colonyNetworkAbi = [ type: 'uint256', indexed: false, }, + { + name: 'parentSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, ], - name: 'SkillStoredFromBridge', + name: 'SkillAdded', }, { type: 'event', @@ -6177,6 +9803,26 @@ export const colonyNetworkAbi = [ ], stateMutability: 'view', }, + { + type: 'function', + inputs: [ + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + ], + name: 'bridgeMessage', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + ], + name: 'bridgeMessageToNetwork', + outputs: [], + stateMutability: 'nonpayable', + }, { type: 'function', inputs: [{ name: '_slot', internalType: 'uint256', type: 'uint256' }], @@ -6297,7 +9943,7 @@ export const colonyNetworkAbi = [ outputs: [ { name: 'skill', - internalType: 'struct ColonyNetworkDataTypes.Skill', + internalType: 'struct CommonDataTypes.Skill', type: 'tuple', components: [ { name: 'nParents', internalType: 'uint128', type: 'uint128' }, @@ -6421,7 +10067,7 @@ export const colonyNetworkAbi = [ outputs: [{ name: '', internalType: 'bool', type: 'bool' }], stateMutability: 'view', }, -] as const; +] as const ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ColonyNetworkEvents @@ -6926,4 +10572,223 @@ export const colonyNetworkEventsAbi = [ ], name: 'SkillStoredFromBridge', }, -] as const; +] as const + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ProxyColony +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const proxyColonyAbi = [ + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'balance', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'DomainFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'authority', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetAuthority', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetOwner', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'userAddress', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'relayerAddress', + internalType: 'address payable', + type: 'address', + indexed: false, + }, + { name: 'payload', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'MetaTransactionExecuted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'user', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TransferMade', + }, + { + type: 'function', + inputs: [], + name: 'authority', + outputs: [ + { name: '', internalType: 'contract DSAuthority', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_token', internalType: 'address', type: 'address' }], + name: 'claimColonyFunds', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'claimDomainFunds', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigV', internalType: 'uint8', type: 'uint8' }, + ], + name: 'executeMetaTransaction', + outputs: [{ name: 'returnData', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [{ name: '_user', internalType: 'address', type: 'address' }], + name: 'getMetatransactionNonce', + outputs: [{ name: 'nonce', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_target', internalType: 'address', type: 'address' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + ], + name: 'makeArbitraryTransaction', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }], + name: 'multicall', + outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'authority_', + internalType: 'contract DSAuthority', + type: 'address', + }, + ], + name: 'setAuthority', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner_', internalType: 'address', type: 'address' }], + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_recipient', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFromBridge', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_nonce', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigV', internalType: 'uint8', type: 'uint8' }, + ], + name: 'verify', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, +] as const diff --git a/packages/blocks/src/events/eventManager.ts b/packages/blocks/src/events/eventManager.ts new file mode 100644 index 000000000..6ff3cfddf --- /dev/null +++ b/packages/blocks/src/events/eventManager.ts @@ -0,0 +1,163 @@ +import { verbose } from '@joincolony/utils'; +import { EventListener, EventListenerType } from './types'; +import { RpcProvider } from '@joincolony/clients'; +import { utils, constants } from 'ethers'; +import { + IColonyEvents__factory as ColonyEventsFactory, + VotingReputationEvents__factory as VotingReputationEventsFactory, + StakedExpenditureEvents__factory as StakedExpenditureEventsFactory, + TokenEvents__factory as TokenEventsFactory, + StagedExpenditureEvents__factory as StagedExpenditureEventsFactory, + OneTxPaymentEvents__factory as OneTxPaymentEventsFactory, + StreamingPaymentsEvents__factory as StreamingPaymentsEventsFactory, + MultisigPermissionsEvents__factory as MultisigPermissionsEventsFactory, + IColonyNetworkEvents__factory as ColonyNetworkEventsFactory, +} from '@colony/events'; +import { Extension, getExtensionHash } from '@colony/colony-js'; + +// @TODO @chmanie is gonna make this better, for now let's just hardcode the proxy colony events +export const ProxyColonyEvents = new utils.Interface([ + 'event ProxyColonyRequested(address agent,uint256 destinationChainId, bytes32 salt)', + 'event ProxyColonyDeployed(address proxyColony)', + // @TODO decouple these into MultiChainBridgeEvents + 'event WormholeMessageReceived(uint16 emitterChainId, bytes32 emitterAddress, uint64 sequence)', + 'event LogMessagePublished(address indexed sender,uint64 sequence,uint32 nonce,bytes payload,uint8 consistencyLevel)', + 'event ProxyColonyFundsClaimed(uint256 _chainId, address _token, uint256 _amount)', + 'function createProxyColony(uint256 _destinationChainId, bytes32 _salt)', +]); + +export class EventManager { + private listeners: EventListener[] = []; + private readonly rpcProvider: RpcProvider; + + constructor(rpcProvider: RpcProvider) { + this.rpcProvider = rpcProvider; + } + + public getEventListeners(): EventListener[] { + return this.listeners; + } + + public setEventListeners(newListeners: EventListener[]): void { + this.listeners = newListeners; + } + + public addEventListener(listener: EventListener): void { + verbose( + `Added listener for event ${listener.eventSignature}`, + listener.address ? `filtering address ${listener.address}` : '', + ); + this.listeners.push(listener); + } + + public getMatchingListeners( + logTopics: string[], + logAddress: string, + ): EventListener[] { + return this.listeners.filter((listener) => { + if (listener.address && logAddress !== listener.address) { + return false; + } + + if (listener.topics.length > logTopics.length) { + return false; + } + + return listener.topics.every((topic, index) => { + return ( + topic === null || + topic.toLowerCase() === logTopics[index].toLowerCase() + ); + }); + }); + } + + public getListenersStats(): string { + return JSON.stringify(this.listeners); + } + + /** + * Function returning ABI-derived interface for a given event listener type, + * which is later used for parsing event logs + */ + public getInterfaceByListener( + listener: EventListener, + ): utils.Interface | null { + const provider = this.rpcProvider.getProviderInstance(); + const { type: listenerType } = listener; + + switch (listenerType) { + case EventListenerType.Network: { + return ColonyNetworkEventsFactory.connect( + constants.AddressZero, + provider, + ).interface; + } + case EventListenerType.ProxyColonies: { + return ProxyColonyEvents; + } + case EventListenerType.Colony: { + return ColonyEventsFactory.connect(constants.AddressZero, provider) + .interface; + } + case EventListenerType.Extension: { + return this.getInterfaceByExtensionHash(listener.extensionHash); + } + case EventListenerType.Token: { + return TokenEventsFactory.connect(constants.AddressZero, provider) + .interface; + } + default: { + return null; + } + } + } + + public getInterfaceByExtensionHash( + extensionHash: string, + ): utils.Interface | null { + const provider = this.rpcProvider.getProviderInstance(); + + switch (extensionHash) { + case getExtensionHash(Extension.OneTxPayment): { + return OneTxPaymentEventsFactory.connect( + constants.AddressZero, + provider, + ).interface; + } + case getExtensionHash(Extension.VotingReputation): { + return VotingReputationEventsFactory.connect( + constants.AddressZero, + provider, + ).interface; + } + case getExtensionHash(Extension.MultisigPermissions): { + return MultisigPermissionsEventsFactory.connect( + constants.AddressZero, + provider, + ).interface; + } + case getExtensionHash(Extension.StakedExpenditure): { + return StakedExpenditureEventsFactory.connect( + constants.AddressZero, + provider, + ).interface; + } + case getExtensionHash(Extension.StagedExpenditure): { + return StagedExpenditureEventsFactory.connect( + constants.AddressZero, + provider, + ).interface; + } + case getExtensionHash(Extension.StreamingPayments): { + return StreamingPaymentsEventsFactory.connect( + constants.AddressZero, + provider, + ).interface; + } + default: { + return null; + } + } + } +} diff --git a/packages/blocks/src/events/index.ts b/packages/blocks/src/events/index.ts new file mode 100644 index 000000000..5cbbe874d --- /dev/null +++ b/packages/blocks/src/events/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './eventManager'; \ No newline at end of file diff --git a/src/types/events.ts b/packages/blocks/src/events/types.ts similarity index 73% rename from src/types/events.ts rename to packages/blocks/src/events/types.ts index 5950e50e0..874d277f2 100644 --- a/src/types/events.ts +++ b/packages/blocks/src/events/types.ts @@ -1,13 +1,4 @@ -import { - AnyColonyClient, - AnyVotingReputationClient, - ColonyNetworkClient, - TokenClient, -} from '@colony/colony-js'; import { LogDescription } from '@ethersproject/abi'; -import provider from '~provider'; -import { EventListener } from '~eventListeners'; - /* * Custom contract event, since we need some log values as well */ @@ -114,6 +105,12 @@ export enum ContractEventsSignatures { ReputationMiningCycleComplete = 'ReputationMiningCycleComplete(bytes32,uint256)', // Metadata delta ColonyMetadataDelta = 'ColonyMetadataDelta(address,string)', + // Proxy colonies + ProxyColonyRequested = 'ProxyColonyRequested(address,uint256,bytes32)', + ProxyColonyDeployed = 'ProxyColonyDeployed(address)', + LogMessagePublished = 'LogMessagePublished(address,uint64,uint32,bytes,uint8)', + WormholeMessageReceived = 'WormholeMessageReceived(uint16,bytes32,uint64)', + ProxyColonyFundsClaimed = 'ProxyColonyFundsClaimed(uint256,address,uint256)', } /* @@ -124,20 +121,68 @@ export enum EthersObserverEvents { Block = 'block', } -export type ChainID = string; - -export type Block = Awaited>; -export type BlockWithTransactions = Awaited< - ReturnType ->; - -export type NetworkClients = - | ColonyNetworkClient - | TokenClient - | AnyColonyClient - | AnyVotingReputationClient; - export type EventHandler = ( event: ContractEvent, listener: EventListener, ) => Promise; + +export interface BaseEventListener { + type: EventListenerType; + eventSignature: ContractEventsSignatures; + topics: Array; + handler: EventHandler; + address?: string; +} + +export enum EventListenerType { + Colony = 'Colony', + Network = 'Network', + Extension = 'Extension', + Token = 'Token', + MultisigPermissions = 'MultisigPermissions', + ProxyColonies = 'ProxyColonies', +} + +export interface ColonyEventListener extends BaseEventListener { + type: EventListenerType.Colony; + address: string; +} + +export interface NetworkEventListener extends BaseEventListener { + type: EventListenerType.Network; + address: string; +} + +// Special listener just for Token transfers +// Due to the volume of these events, we can't process them in the same way +// as the normal events +export interface TokenTransferEventListener extends BaseEventListener { + type: EventListenerType.Token; +} + +export interface TokenEventListener extends BaseEventListener { + type: EventListenerType.Token; + address: string; +} + +export interface ProxyColoniesListener extends BaseEventListener { + type: EventListenerType.ProxyColonies; + address: string; + colonyAddress?: string; +} + +export interface ExtensionEventListener extends BaseEventListener { + type: EventListenerType.Extension; + address: string; + colonyAddress: string; + extensionHash: string; + handler: EventHandler; +} + +export type EventListener = + | ColonyEventListener + | NetworkEventListener + | TokenEventListener + | TokenTransferEventListener + | ProxyColoniesListener + | ExtensionEventListener; diff --git a/packages/blocks/src/index.ts b/packages/blocks/src/index.ts new file mode 100644 index 000000000..b943ed780 --- /dev/null +++ b/packages/blocks/src/index.ts @@ -0,0 +1,4 @@ +export * from './events'; +export * from './stats'; +export * from './blocks'; +export * from './constants/abis'; diff --git a/packages/blocks/src/stats/index.ts b/packages/blocks/src/stats/index.ts new file mode 100644 index 000000000..b4c4c5524 --- /dev/null +++ b/packages/blocks/src/stats/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './statsManager'; \ No newline at end of file diff --git a/packages/blocks/src/stats/statsManager.ts b/packages/blocks/src/stats/statsManager.ts new file mode 100644 index 000000000..7c90f3499 --- /dev/null +++ b/packages/blocks/src/stats/statsManager.ts @@ -0,0 +1,123 @@ +import { + CreateStatsDocument, + CreateStatsMutation, + CreateStatsMutationVariables, + GetStatsDocument, + GetStatsQuery, + GetStatsQueryVariables, + UpdateStatsDocument, + UpdateStatsMutation, + UpdateStatsMutationVariables, +} from '@joincolony/graphql'; +import { output, verbose } from '@joincolony/utils'; +import { type AmplifyClient, type RpcProvider } from '@joincolony/clients'; +import { ObjectOrFunction } from './types'; + +export class StatsManager { + private stats: Record = {}; + private readonly rpcProvider: RpcProvider; + private readonly amplifyClient: AmplifyClient; + private statsId: string; + + constructor(amplifyClient: AmplifyClient, rpcProvider: RpcProvider) { + this.amplifyClient = amplifyClient; + this.rpcProvider = rpcProvider; + this.statsId = ''; + } + + /** + * Update stats with a given argument. + * Accepts either an object fragment (or full object) to append to stats, + * or a callback (receives current stats) that returns the new object to write back. + */ + public async updateStats(objectOrFunction: ObjectOrFunction): Promise { + if (typeof objectOrFunction === 'function') { + this.stats = { + ...this.stats, + ...objectOrFunction(this.stats), + }; + } else { + this.stats = { + ...this.stats, + ...objectOrFunction, + }; + } + + await this.amplifyClient.mutate< + UpdateStatsMutation, + UpdateStatsMutationVariables + >(UpdateStatsDocument, { + id: this.statsId, + chainId: this.rpcProvider.getChainId(), + value: JSON.stringify(this.stats), + }); + + verbose('Stats file updated'); + } + + // Return a copy of the current stats to avoid accidental overwrites + public getStats(): typeof this.stats { + return { ...this.stats }; + } + + public getLastBlockNumber(): number { + if (Number.isInteger(this.stats.lastBlockNumber)) { + return Number(this.stats.lastBlockNumber); + } + throw new Error('Could not get last block number from stats. Aborting.'); + } + + public setLastBlockNumber(lastBlockNumber: number): void { + this.updateStats({ lastBlockNumber }); + } + + /** + * Fetch the last stored stats from the DB. + * If no stats entry is found, it will create one. + */ + public async initStats(): Promise { + // @TODO need to find a better way for this as something is messed up with the instances + if (!this.rpcProvider.isInitialised) { + output('Force RPC provider initialisation'); + await this.rpcProvider.initialiseProvider(); + } + const { value: jsonStats, id: statsId } = + ( + await this.amplifyClient.query( + GetStatsDocument, + { + chainId: this.rpcProvider.getChainId(), + }, + ) + )?.data?.getIngestorStatsByChainId?.items?.[0] ?? {}; + + if (statsId) { + this.statsId = statsId; + } + + if (!jsonStats) { + this.stats = { lastBlockNumber: 0 }; + + const statsResponse = await this.amplifyClient.mutate< + CreateStatsMutation, + CreateStatsMutationVariables + >(CreateStatsDocument, { + chainId: this.rpcProvider.getChainId(), + value: JSON.stringify(this.stats), + }); + + if (statsResponse?.data?.createIngestorStats?.id) { + this.statsId = statsResponse?.data?.createIngestorStats?.id; + } + + } else { + try { + this.stats = JSON.parse(jsonStats); + } catch { + output( + 'Could not parse stats from the DB. The value is not a valid JSON.', + ); + } + } + } +} diff --git a/packages/blocks/src/stats/types.ts b/packages/blocks/src/stats/types.ts new file mode 100644 index 000000000..750fc9494 --- /dev/null +++ b/packages/blocks/src/stats/types.ts @@ -0,0 +1,3 @@ +export type ObjectOrFunction = + | Record + | ((jsonFile: Record) => Record); \ No newline at end of file diff --git a/packages/blocks/tsconfig.json b/packages/blocks/tsconfig.json new file mode 100644 index 000000000..ea468dfe6 --- /dev/null +++ b/packages/blocks/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": {}, + "include": ["src", "./*.ts"] +} diff --git a/packages/clients/package.json b/packages/clients/package.json new file mode 100644 index 000000000..1506d6627 --- /dev/null +++ b/packages/clients/package.json @@ -0,0 +1,8 @@ +{ + "name": "@joincolony/clients", + "main": "src/index.ts", + "version": "1.0.0", + "dependencies": { + "@joincolony/utils": "workspace:*" + } +} diff --git a/packages/clients/src/amplifyClient.ts b/packages/clients/src/amplifyClient.ts new file mode 100644 index 000000000..3b89cdedd --- /dev/null +++ b/packages/clients/src/amplifyClient.ts @@ -0,0 +1,59 @@ +import { Amplify, API, graphqlOperation } from 'aws-amplify'; +import { GraphQLQuery } from '@aws-amplify/api'; +import { DocumentNode, isExecutableDefinitionNode } from 'graphql'; +import { verbose } from '@joincolony/utils'; + +export type GraphQLFnReturn = Promise< + ReturnType>> | undefined +>; + +export class AmplifyClient { + constructor(appSyncEndpoint: string, appSyncApiKey: string) { + Amplify.configure({ + aws_appsync_graphqlEndpoint: appSyncEndpoint, + aws_appsync_authenticationType: 'API_KEY', + aws_appsync_apiKey: appSyncApiKey, + }); + } + + public async query>( + queryDocument: DocumentNode, + variables?: TVariables, + ): GraphQLFnReturn { + try { + const result = await API.graphql>( + graphqlOperation(queryDocument, variables), + ); + return result; + } catch (error) { + const definitionNode = queryDocument.definitions[0]; + const queryName = isExecutableDefinitionNode(definitionNode) + ? definitionNode.name?.value + : 'Unknown'; + console.error(`Could not fetch query ${queryName}`, error); + return undefined; + } + } + + public async mutate>( + mutationDocument: DocumentNode, + variables?: TVariables, + ): GraphQLFnReturn { + try { + const result = await API.graphql>( + graphqlOperation(mutationDocument, variables), + ); + return result; + } catch (error: any) { + const definitionNode = mutationDocument.definitions[0]; + const name = isExecutableDefinitionNode(definitionNode) + ? definitionNode.name?.value + : 'Unknown'; + + const errMsg = 'errors' in error ? error.errors : error; + verbose(`Could not execute mutation ${name}. Error: `, errMsg); + console.error(`Could not execute mutation ${name}`, error); + return undefined; + } + } +} diff --git a/packages/clients/src/index.ts b/packages/clients/src/index.ts new file mode 100644 index 000000000..3fcbe7ccb --- /dev/null +++ b/packages/clients/src/index.ts @@ -0,0 +1,5 @@ +export { RpcProvider } from './rpcProvider'; +export * from './amplifyClient'; +export * from './networkClient'; +export * from './wormholeClient'; +// @TODO rename clients into providers diff --git a/packages/clients/src/networkClient.ts b/packages/clients/src/networkClient.ts new file mode 100644 index 000000000..e7b0bccab --- /dev/null +++ b/packages/clients/src/networkClient.ts @@ -0,0 +1,37 @@ +import { + ColonyNetworkClient, + Network, + NetworkClientOptions, + getColonyNetworkClient, +} from '@colony/colony-js'; + +import { RpcProvider } from './rpcProvider'; + +export class NetworkClient { + private readonly rpcProvider: RpcProvider; + private readonly network: Network; + private readonly networkAddress?: string; + + constructor( + rpcProvider: RpcProvider, + network: Network, + networkAddress?: string, + ) { + this.rpcProvider = rpcProvider; + this.network = network; + this.networkAddress = networkAddress; + } + + public getInstance( + options: NetworkClientOptions = { disableVersionCheck: true }, + ): ColonyNetworkClient { + return getColonyNetworkClient( + this.network, + this.rpcProvider.getProviderInstance(), + { + ...options, + networkAddress: this.networkAddress, + }, + ); + } +} diff --git a/packages/clients/src/rpcProvider.ts b/packages/clients/src/rpcProvider.ts new file mode 100644 index 000000000..11377c492 --- /dev/null +++ b/packages/clients/src/rpcProvider.ts @@ -0,0 +1,38 @@ +import { providers } from 'ethers'; +import { ChainID } from './types'; +import { output } from '@joincolony/utils'; + +export class RpcProvider { + public isInitialised = false; + private readonly provider: providers.StaticJsonRpcProvider; + private chainId: ChainID | null; + + constructor(rpcEndpoint?: string) { + this.provider = new providers.StaticJsonRpcProvider(rpcEndpoint); + this.chainId = null; + } + + public async initialiseProvider(): Promise { + const { chainId } = await this.provider.getNetwork(); + this.setChainId(String(chainId)); + this.isInitialised = true; + } + + public setChainId(newChainId: ChainID): void { + this.chainId = newChainId; + } + + public getChainId(): ChainID { + if (!this.chainId) { + output( + 'Chain ID has not been initialized. Call initialiseProvider() first!', + ); + } + // @TODO handle null properly + return this.chainId || 'SOME_DEFAULT_CHAIN_ID'; + } + + public getProviderInstance(): providers.StaticJsonRpcProvider { + return this.provider; + } +} diff --git a/packages/clients/src/types.ts b/packages/clients/src/types.ts new file mode 100644 index 000000000..1a2bea640 --- /dev/null +++ b/packages/clients/src/types.ts @@ -0,0 +1,20 @@ +export type ChainID = string; + +export type WormholeOperationsDetailsReturn = + | { + sourceChain: { + chainId: string; + transaction?: { + txHash: string; + }; + status: string; + }; + targetChain: { + chainId: string; + transaction?: { + txHash: string; + }; + status: string; + }; + } + | undefined; diff --git a/packages/clients/src/wormholeClient.ts b/packages/clients/src/wormholeClient.ts new file mode 100644 index 000000000..9aab3158d --- /dev/null +++ b/packages/clients/src/wormholeClient.ts @@ -0,0 +1,98 @@ +import { BigNumber } from 'ethers'; +import { ChainID, WormholeOperationsDetailsReturn } from './types'; +import { NetworkId } from '@colony/colony-js'; +import { output } from '@joincolony/utils'; + +export class WormholeClient { + private readonly bridgeEndpoint: string; + + public REQ_STATUS = { + CONFIRMED: 'confirmed', + }; + + constructor(bridgeEndpoint: string) { + this.bridgeEndpoint = bridgeEndpoint; + } + + /** + * Pads a hex string to a specific byte length. + * @param hexString - The hexadecimal string to pad. + * @param byteLength - The target byte length (default is 32). + * @returns The padded hexadecimal string. + */ + private padHexToByteLength(hexString: string, byteLength = 32): string { + let cleanHex = hexString.startsWith('0x') ? hexString.slice(2) : hexString; + + const targetHexLength = byteLength * 2; + + if (cleanHex.length < targetHexLength) { + cleanHex = cleanHex.padStart(targetHexLength, '0'); + } + + return '0x' + cleanHex; + } + + /** + * Resolves the Wormhole chain ID for a given blockchain chain ID. + * + * @param chainId - The blockchain chain ID to resolve (can be a number or string). + * @returns The corresponding Wormhole chain ID, or a default value for unmapped chains. + */ + public getWormholeChainId(chainId: ChainID): number { + const chainIdAsNumber = Number.isInteger(chainId) + ? Number.parseInt(chainId) + : ''; + + switch (chainIdAsNumber) { + // On testnet + case NetworkId.Goerli: + return 2; + case NetworkId.Mainnet: + return 5; + case NetworkId.Gnosis: + case NetworkId.Xdai: + case NetworkId.XdaiQa: + return 25; + case NetworkId.Custom: + case NetworkId.ArbitrumSepolia: + return 10003; + case NetworkId.ArbitrumOne: + return 23; + default: { + output( + `Chain with id ${chainId} is not mapped to a Wormhole chain ID. Using custom`, + ); + return 2; + } + } + } + + /** + * Converts a BigNumber to a string for compatibility with the API. + * @param bigNumber - The BigNumber to convert. + * @returns The string representation of the BigNumber. + */ + private bigNumberToString(bigNumber: BigNumber): string { + return bigNumber.toString(); + } + + /** + * Fetches operation details from the Wormhole bridge. + * @param args - The operation parameters including emitterChainId, emitterAddress, and sequence. + * @returns The response from the bridge API. + */ + public async fetchOperationDetails(args: { + emitterChainId: number; + emitterAddress: string; + sequence: BigNumber; + }): Promise { + const { emitterChainId, emitterAddress, sequence } = args; + + const paddedEmitterAddress = this.padHexToByteLength(emitterAddress); + const sequenceString = this.bigNumberToString(sequence); + + const url = `${this.bridgeEndpoint}/v1/operations/${emitterChainId}/${paddedEmitterAddress}/${sequenceString}`; + const request = await fetch(url); + return request.json(); + } +} diff --git a/packages/clients/tsconfig.json b/packages/clients/tsconfig.json new file mode 100644 index 000000000..ea468dfe6 --- /dev/null +++ b/packages/clients/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": {}, + "include": ["src", "./*.ts"] +} diff --git a/codegen.ts b/packages/graphql/codegen.ts similarity index 87% rename from codegen.ts rename to packages/graphql/codegen.ts index b47b57d06..7ae0832b8 100644 --- a/codegen.ts +++ b/packages/graphql/codegen.ts @@ -1,7 +1,9 @@ -import dotenv from 'dotenv'; import { CodegenConfig } from '@graphql-codegen/cli'; -dotenv.config(); +import path from 'path'; +import dotenv from 'dotenv'; + +dotenv.config({ path: path.resolve(__dirname, '../../.env') }); const endpoint = `${process.env.AWS_APPSYNC_ENDPOINT}`; @@ -18,7 +20,7 @@ const config: CodegenConfig = { ], documents: ['src/**/*.graphql'], generates: { - 'src/graphql/generated.ts': { + './src/generated.ts': { plugins: [ 'typescript', 'typescript-operations', diff --git a/packages/graphql/package.json b/packages/graphql/package.json new file mode 100644 index 000000000..162aa6eab --- /dev/null +++ b/packages/graphql/package.json @@ -0,0 +1,9 @@ +{ + "name": "@joincolony/graphql", + "version": "1.0.0", + "main": "src/index.ts", + "scripts": { + "codegen": "graphql-codegen -w \"src/**/*.graphql\"" + }, + "dependencies": {} +} diff --git a/src/graphql/fragments/actions.graphql b/packages/graphql/src/fragments/actions.graphql similarity index 56% rename from src/graphql/fragments/actions.graphql rename to packages/graphql/src/fragments/actions.graphql index 4413c8d54..13fb22d30 100644 --- a/src/graphql/fragments/actions.graphql +++ b/packages/graphql/src/fragments/actions.graphql @@ -1,3 +1,14 @@ +fragment MultiChainInfo on MultiChainInfo { + id + completedOnMainChain + completedOnProxyChain + wormholeInfo { + emitterChainId + emitterAddress + sequence + } +} + fragment ActionMetadataInfo on ColonyAction { id pendingDomainMetadata { @@ -18,4 +29,9 @@ fragment ActionMetadataInfo on ColonyAction { recipientAddress } members + multiChainInfoId + multiChainInfo { + ...MultiChainInfo + } + targetChainId } diff --git a/src/graphql/fragments/colony.graphql b/packages/graphql/src/fragments/colony.graphql similarity index 100% rename from src/graphql/fragments/colony.graphql rename to packages/graphql/src/fragments/colony.graphql diff --git a/src/graphql/fragments/expenditures.graphql b/packages/graphql/src/fragments/expenditures.graphql similarity index 100% rename from src/graphql/fragments/expenditures.graphql rename to packages/graphql/src/fragments/expenditures.graphql diff --git a/src/graphql/fragments/extensions.graphql b/packages/graphql/src/fragments/extensions.graphql similarity index 100% rename from src/graphql/fragments/extensions.graphql rename to packages/graphql/src/fragments/extensions.graphql diff --git a/src/graphql/fragments/motions.graphql b/packages/graphql/src/fragments/motions.graphql similarity index 100% rename from src/graphql/fragments/motions.graphql rename to packages/graphql/src/fragments/motions.graphql diff --git a/src/graphql/fragments/multiSig.graphql b/packages/graphql/src/fragments/multiSig.graphql similarity index 100% rename from src/graphql/fragments/multiSig.graphql rename to packages/graphql/src/fragments/multiSig.graphql diff --git a/packages/graphql/src/fragments/proxyColonies.graphql b/packages/graphql/src/fragments/proxyColonies.graphql new file mode 100644 index 000000000..692553803 --- /dev/null +++ b/packages/graphql/src/fragments/proxyColonies.graphql @@ -0,0 +1,6 @@ +fragment ProxyColony on ProxyColony { + id + colonyAddress + chainId + isActive +} diff --git a/src/graphql/fragments/token.graphql b/packages/graphql/src/fragments/token.graphql similarity index 100% rename from src/graphql/fragments/token.graphql rename to packages/graphql/src/fragments/token.graphql diff --git a/src/graphql/fragments/users.graphql b/packages/graphql/src/fragments/users.graphql similarity index 100% rename from src/graphql/fragments/users.graphql rename to packages/graphql/src/fragments/users.graphql diff --git a/src/graphql/generated.ts b/packages/graphql/src/generated.ts similarity index 78% rename from src/graphql/generated.ts rename to packages/graphql/src/generated.ts index 40de303ca..c18f6182e 100644 --- a/src/graphql/generated.ts +++ b/packages/graphql/src/generated.ts @@ -1,9 +1,15 @@ import gql from 'graphql-tag'; export type Maybe = T | null; export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type Exact = { + [K in keyof T]: T[K]; +}; +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; +}; +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; +}; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { ID: string; @@ -22,6 +28,19 @@ export type Scalars = { AWSURL: string; }; +export type ActionWormholeInfo = { + __typename?: 'ActionWormholeInfo'; + emitterAddress: Scalars['String']; + emitterChainId?: Maybe; + sequence: Scalars['String']; +}; + +export type ActionWormholeInfoInput = { + emitterAddress: Scalars['String']; + emitterChainId?: InputMaybe; + sequence: Scalars['String']; +}; + /** Defines an annotation for actions, motions and decisions */ export type Annotation = { __typename?: 'Annotation'; @@ -277,7 +296,7 @@ export enum ClientType { TokenLockingClient = 'TokenLockingClient', TokenSupplierClient = 'TokenSupplierClient', VotingReputationClient = 'VotingReputationClient', - WhitelistClient = 'WhitelistClient' + WhitelistClient = 'WhitelistClient', } /** Represents a Colony within the Colony Network */ @@ -290,9 +309,11 @@ export type Colony = { * Native chain token claim (e.g., Token 0x0000...0000: ETH, xDAI, etc.) * This is not an array since only a single token type can be returned */ - chainFundsClaim?: Maybe; + chainFundsClaim?: Maybe>>; /** Metadata related to the chain of the Colony */ chainMetadata: ChainMetadata; + /** Colony creation data */ + colonyCreateEvent?: Maybe; /** * The main member invite object * It is possible to create multiple member invites for a given colony @@ -324,6 +345,7 @@ export type Colony = { nativeTokenId: Scalars['ID']; /** A flag to indicate whether the colony is private */ private?: Maybe; + proxyColonies?: Maybe; /** The total reputation amount in the colony */ reputation?: Maybe; roles?: Maybe; @@ -337,7 +359,6 @@ export type Colony = { version: Scalars['Int']; }; - /** Represents a Colony within the Colony Network */ export type ColonyActionsArgs = { filter?: InputMaybe; @@ -346,7 +367,6 @@ export type ColonyActionsArgs = { sortDirection?: InputMaybe; }; - /** Represents a Colony within the Colony Network */ export type ColonyDomainsArgs = { filter?: InputMaybe; @@ -356,7 +376,6 @@ export type ColonyDomainsArgs = { sortDirection?: InputMaybe; }; - /** Represents a Colony within the Colony Network */ export type ColonyExpendituresArgs = { createdAt?: InputMaybe; @@ -366,7 +385,6 @@ export type ColonyExpendituresArgs = { sortDirection?: InputMaybe; }; - /** Represents a Colony within the Colony Network */ export type ColonyExtensionsArgs = { filter?: InputMaybe; @@ -376,7 +394,6 @@ export type ColonyExtensionsArgs = { sortDirection?: InputMaybe; }; - /** Represents a Colony within the Colony Network */ export type ColonyFundsClaimDataArgs = { createdAt?: InputMaybe; @@ -386,6 +403,13 @@ export type ColonyFundsClaimDataArgs = { sortDirection?: InputMaybe; }; +/** Represents a Colony within the Colony Network */ +export type ColonyProxyColoniesArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; + sortDirection?: InputMaybe; +}; /** Represents a Colony within the Colony Network */ export type ColonyRolesArgs = { @@ -395,7 +419,6 @@ export type ColonyRolesArgs = { sortDirection?: InputMaybe; }; - /** Represents a Colony within the Colony Network */ export type ColonyTokensArgs = { filter?: InputMaybe; @@ -443,6 +466,10 @@ export type ColonyAction = { expenditureSlotChanges?: Maybe; /** Ids of the staged payment slots released by the action, if any */ expenditureSlotIds?: Maybe>; + /** Expanded `ColonyAction` */ + finalizedActionData?: Maybe; + /** The motion action txHash that this action finalized */ + finalizedActionId?: Maybe; /** The source Domain of the action, if applicable */ fromDomain?: Maybe; /** The source Domain identifier, if applicable */ @@ -482,6 +509,10 @@ export type ColonyAction = { motionDomainId?: Maybe; /** The internal database id of the motion */ motionId?: Maybe; + /** Multichain info if the action is bridged */ + multiChainInfo?: Maybe; + /** The id of the multichain info entry */ + multiChainInfoId?: Maybe; /** Expanded `ColonyMultiSig` for the corresponding `multiSigId` */ multiSigData?: Maybe; /** The internal database id of the multiSig */ @@ -527,6 +558,8 @@ export type ColonyAction = { * Currently it is impossible to tell the reason for the action being hidden from the actions list */ showInActionsList: Scalars['Boolean']; + /** Target chain id if the action is on a proxy colony chain */ + targetChainId?: Maybe; /** The target Domain of the action, if applicable */ toDomain?: Maybe; /** The target Domain identifier, if applicable */ @@ -596,12 +629,14 @@ export type ColonyActionRolesInput = { * These can all happen in a Colony and will be interpreted by the dApp according to their types */ export enum ColonyActionType { + /** An action related to creating a proxy colony */ + AddProxyColony = 'ADD_PROXY_COLONY', + AddProxyColonyMotion = 'ADD_PROXY_COLONY_MOTION', + AddProxyColonyMultisig = 'ADD_PROXY_COLONY_MULTISIG', /** An action related to adding verified members */ AddVerifiedMembers = 'ADD_VERIFIED_MEMBERS', AddVerifiedMembersMotion = 'ADD_VERIFIED_MEMBERS_MOTION', AddVerifiedMembersMultisig = 'ADD_VERIFIED_MEMBERS_MULTISIG', - /** An action related to arbitrary transaction */ - ArbitraryTx = 'ARBITRARY_TX', /** An action related to canceling an expenditure */ CancelExpenditure = 'CANCEL_EXPENDITURE', /** An action related to a motion to cancel an expenditure */ @@ -700,6 +735,10 @@ export enum ColonyActionType { ReleaseStagedPayments = 'RELEASE_STAGED_PAYMENTS', /** An action related to a motion to release a staged payment */ ReleaseStagedPaymentsMotion = 'RELEASE_STAGED_PAYMENTS_MOTION', + /** An action related to disabling a proxy colony */ + RemoveProxyColony = 'REMOVE_PROXY_COLONY', + RemoveProxyColonyMotion = 'REMOVE_PROXY_COLONY_MOTION', + RemoveProxyColonyMultisig = 'REMOVE_PROXY_COLONY_MULTISIG', /** An action related to removing verified members */ RemoveVerifiedMembers = 'REMOVE_VERIFIED_MEMBERS', RemoveVerifiedMembersMotion = 'REMOVE_VERIFIED_MEMBERS_MOTION', @@ -727,7 +766,7 @@ export enum ColonyActionType { /** An action related to upgrading a Colony's version via multiSig */ VersionUpgradeMultisig = 'VERSION_UPGRADE_MULTISIG', /** An action unrelated to the currently viewed Colony */ - WrongColony = 'WRONG_COLONY' + WrongColony = 'WRONG_COLONY', } /** Represents a Colony balance for a specific domain and token */ @@ -827,7 +866,6 @@ export type ColonyContributor = { user?: Maybe; }; - /** The ColonyContributor model represents a contributor to the Colony. */ export type ColonyContributorReputationArgs = { colonyAddress?: InputMaybe; @@ -837,7 +875,6 @@ export type ColonyContributorReputationArgs = { sortDirection?: InputMaybe; }; - /** The ColonyContributor model represents a contributor to the Colony. */ export type ColonyContributorRolesArgs = { colonyAddress?: InputMaybe; @@ -847,6 +884,19 @@ export type ColonyContributorRolesArgs = { sortDirection?: InputMaybe; }; +export type ColonyCreateEvent = { + __typename?: 'ColonyCreateEvent'; + /** The block number the colony was created at */ + blockNumber: Scalars['Int']; + /** The salt used during creation */ + creationSalt: Scalars['String']; +}; + +export type ColonyCreateEventInput = { + blockNumber: Scalars['Int']; + creationSalt: Scalars['String']; +}; + export type ColonyDecision = { __typename?: 'ColonyDecision'; action?: Maybe; @@ -1084,6 +1134,10 @@ export type ColonyMotion = { expenditureId?: Maybe; /** Ids of the staged payment slots to be released if the motion pass, if any */ expenditureSlotIds?: Maybe>; + /** Expanded `ColonyAction` */ + finalizationActionData?: Maybe; + /** The action txHash that was triggered upon motion finalization */ + finalizationActionId?: Maybe; /** Simple flag indicating whether both sides of staking have been activated */ hasObjection: Scalars['Boolean']; /** @@ -1139,7 +1193,6 @@ export type ColonyMotion = { voterRewards?: Maybe; }; - /** Represents a Motion within a Colony */ export type ColonyMotionMessagesArgs = { createdAt?: InputMaybe; @@ -1149,7 +1202,6 @@ export type ColonyMotionMessagesArgs = { sortDirection?: InputMaybe; }; - /** Represents a Motion within a Colony */ export type ColonyMotionVoterRewardsArgs = { createdAt?: InputMaybe; @@ -1180,6 +1232,10 @@ export type ColonyMultiSig = { expenditureFunding?: Maybe>; /** Expenditure associated with the motion, if any */ expenditureId?: Maybe; + /** Expanded `ColonyAction` */ + finalizationActionData?: Maybe; + /** The action txHash that was triggered upon motion finalization */ + finalizationActionId?: Maybe; /** Whether the underlying action completed */ hasActionCompleted: Scalars['Boolean']; /** @@ -1215,7 +1271,6 @@ export type ColonyMultiSig = { updatedAt: Scalars['AWSDateTime']; }; - /** Represents a MultiSig motion within a Colony */ export type ColonyMultiSigSignaturesArgs = { filter?: InputMaybe; @@ -1326,7 +1381,7 @@ export enum ColonyType { /** A regular Colony */ Colony = 'COLONY', /** The MetaColony, which governs the entire Colony Network */ - Metacolony = 'METACOLONY' + Metacolony = 'METACOLONY', } /** Unclaimed staking rewards for a motion */ @@ -1405,7 +1460,7 @@ export enum ContributorType { Dedicated = 'DEDICATED', General = 'GENERAL', New = 'NEW', - Top = 'TOP' + Top = 'TOP', } export type CreateAnnotationInput = { @@ -1431,7 +1486,9 @@ export type CreateColonyActionInput = { amount?: InputMaybe; annotationId?: InputMaybe; approvedTokenChanges?: InputMaybe; - arbitraryTransactions?: InputMaybe>; + arbitraryTransactions?: InputMaybe< + Array + >; blockNumber: Scalars['Int']; colonyActionsId?: InputMaybe; colonyDecisionId?: InputMaybe; @@ -1440,6 +1497,7 @@ export type CreateColonyActionInput = { expenditureId?: InputMaybe; expenditureSlotChanges?: InputMaybe; expenditureSlotIds?: InputMaybe>; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; id?: InputMaybe; @@ -1451,6 +1509,7 @@ export type CreateColonyActionInput = { members?: InputMaybe>; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -1463,6 +1522,7 @@ export type CreateColonyActionInput = { rolesAreMultiSig?: InputMaybe; rootHash: Scalars['String']; showInActionsList: Scalars['Boolean']; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -1563,8 +1623,9 @@ export type CreateColonyHistoricRoleInput = { export type CreateColonyInput = { balances?: InputMaybe; - chainFundsClaim?: InputMaybe; + chainFundsClaim?: InputMaybe>>; chainMetadata: ChainMetadataInput; + colonyCreateEvent?: InputMaybe; colonyMemberInviteCode?: InputMaybe; expendituresGlobalClaimDelay?: InputMaybe; id?: InputMaybe; @@ -1604,6 +1665,7 @@ export type CreateColonyMotionInput = { expenditureFunding?: InputMaybe>; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe>; + finalizationActionId?: InputMaybe; hasObjection: Scalars['Boolean']; id?: InputMaybe; isDecision: Scalars['Boolean']; @@ -1633,6 +1695,7 @@ export type CreateColonyMultiSigInput = { executedBy?: InputMaybe; expenditureFunding?: InputMaybe>; expenditureId?: InputMaybe; + finalizationActionId?: InputMaybe; hasActionCompleted: Scalars['Boolean']; id?: InputMaybe; isDecision: Scalars['Boolean']; @@ -1763,6 +1826,7 @@ export type CreateExtensionInstallationsCountInput = { }; export type CreateIngestorStatsInput = { + chainId: Scalars['String']; id?: InputMaybe; value: Scalars['String']; }; @@ -1785,6 +1849,13 @@ export type CreateMotionMessageInput = { vote?: InputMaybe; }; +export type CreateMultiChainInfoInput = { + completedOnMainChain: Scalars['Boolean']; + completedOnProxyChain: Scalars['Boolean']; + id?: InputMaybe; + wormholeInfo?: InputMaybe; +}; + export type CreateMultiSigUserSignatureInput = { colonyAddress: Scalars['ID']; createdAt?: InputMaybe; @@ -1827,6 +1898,13 @@ export type CreateProfileInput = { website?: InputMaybe; }; +export type CreateProxyColonyInput = { + chainId: Scalars['String']; + colonyAddress: Scalars['ID']; + id?: InputMaybe; + isActive: Scalars['Boolean']; +}; + export type CreateReputationMiningCycleMetadataInput = { id?: InputMaybe; lastCompletedAt: Scalars['AWSDateTime']; @@ -1872,6 +1950,11 @@ export type CreateStreamingPaymentMetadataInput = { limitAmount?: InputMaybe; }; +export type CreateSupportedChainInput = { + id?: InputMaybe; + isActive?: InputMaybe; +}; + export type CreateTokenExchangeRateInput = { date: Scalars['AWSDateTime']; id?: InputMaybe; @@ -1893,6 +1976,7 @@ export type CreateTokenInput = { }; export type CreateTransactionInput = { + associatedActionId?: InputMaybe; blockHash?: InputMaybe; blockNumber?: InputMaybe; colonyAddress: Scalars['ID']; @@ -2108,6 +2192,10 @@ export type DeleteMotionMessageInput = { id: Scalars['ID']; }; +export type DeleteMultiChainInfoInput = { + id: Scalars['ID']; +}; + export type DeleteMultiSigUserSignatureInput = { id: Scalars['ID']; }; @@ -2124,6 +2212,10 @@ export type DeleteProfileInput = { id: Scalars['ID']; }; +export type DeleteProxyColonyInput = { + id: Scalars['ID']; +}; + export type DeleteReputationMiningCycleMetadataInput = { id: Scalars['ID']; }; @@ -2144,6 +2236,10 @@ export type DeleteStreamingPaymentMetadataInput = { id: Scalars['ID']; }; +export type DeleteSupportedChainInput = { + id: Scalars['ID']; +}; + export type DeleteTokenExchangeRateInput = { id: Scalars['ID']; }; @@ -2290,7 +2386,7 @@ export enum DomainColor { /** The default domain color for the root domain. Only used by the root by default and cannot be selected by the user. */ Root = 'ROOT', /** A yellow color */ - Yellow = 'YELLOW' + Yellow = 'YELLOW', } /** Input type for specifying a Domain */ @@ -2401,7 +2497,6 @@ export type Expenditure = { userStakeId?: Maybe; }; - export type ExpenditureActionsArgs = { filter?: InputMaybe; limit?: InputMaybe; @@ -2409,7 +2504,6 @@ export type ExpenditureActionsArgs = { sortDirection?: InputMaybe; }; - export type ExpenditureMotionsArgs = { filter?: InputMaybe; limit?: InputMaybe; @@ -2525,12 +2619,12 @@ export enum ExpenditureStatus { Cancelled = 'CANCELLED', Draft = 'DRAFT', Finalized = 'FINALIZED', - Locked = 'LOCKED' + Locked = 'LOCKED', } export enum ExpenditureType { PaymentBuilder = 'PAYMENT_BUILDER', - Staged = 'STAGED' + Staged = 'STAGED', } export enum ExtendedSupportedCurrencies { @@ -2544,7 +2638,7 @@ export enum ExtendedSupportedCurrencies { Jpy = 'JPY', Krw = 'KRW', Usd = 'USD', - Usdc = 'USDC' + Usdc = 'USDC', } export type ExtensionInstallationsCount = { @@ -2598,7 +2692,7 @@ export enum ExternalLinks { Telegram = 'Telegram', Twitter = 'Twitter', Whitepaper = 'Whitepaper', - Youtube = 'Youtube' + Youtube = 'Youtube', } export type FailedTransaction = { @@ -2613,7 +2707,7 @@ export enum FilteringMethod { /** Apply an intersection filter */ Intersection = 'INTERSECTION', /** Apply a union filter */ - Union = 'UNION' + Union = 'UNION', } export type FunctionParam = { @@ -2735,6 +2829,8 @@ export type GetVoterRewardsInput = { /** Model storing block ingestor stats, as key-value entries */ export type IngestorStats = { __typename?: 'IngestorStats'; + /** The chain id the stats are generated on */ + chainId: Scalars['String']; createdAt: Scalars['AWSDateTime']; /** Unique identifier of the ingestor stats */ id: Scalars['ID']; @@ -2759,7 +2855,7 @@ export enum KycStatus { NotStarted = 'NOT_STARTED', Pending = 'PENDING', Rejected = 'REJECTED', - UnderReview = 'UNDER_REVIEW' + UnderReview = 'UNDER_REVIEW', } /** @@ -2829,7 +2925,7 @@ export enum ModelAttributeTypes { Number = 'number', NumberSet = 'numberSet', String = 'string', - StringSet = 'stringSet' + StringSet = 'stringSet', } export type ModelBooleanInput = { @@ -2890,6 +2986,7 @@ export type ModelColonyActionConditionInput = { createdAt?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; individualEvents?: InputMaybe; @@ -2900,6 +2997,7 @@ export type ModelColonyActionConditionInput = { members?: InputMaybe; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -2912,6 +3010,7 @@ export type ModelColonyActionConditionInput = { rolesAreMultiSig?: InputMaybe; rootHash?: InputMaybe; showInActionsList?: InputMaybe; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -2935,6 +3034,7 @@ export type ModelColonyActionFilterInput = { createdAt?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; id?: InputMaybe; @@ -2946,6 +3046,7 @@ export type ModelColonyActionFilterInput = { members?: InputMaybe; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -2958,6 +3059,7 @@ export type ModelColonyActionFilterInput = { rolesAreMultiSig?: InputMaybe; rootHash?: InputMaybe; showInActionsList?: InputMaybe; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -3263,6 +3365,7 @@ export type ModelColonyMotionConditionInput = { createdBy?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizationActionId?: InputMaybe; hasObjection?: InputMaybe; isDecision?: InputMaybe; isFinalized?: InputMaybe; @@ -3291,6 +3394,7 @@ export type ModelColonyMotionFilterInput = { createdBy?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizationActionId?: InputMaybe; hasObjection?: InputMaybe; id?: InputMaybe; isDecision?: InputMaybe; @@ -3316,6 +3420,7 @@ export type ModelColonyMultiSigConditionInput = { executedAt?: InputMaybe; executedBy?: InputMaybe; expenditureId?: InputMaybe; + finalizationActionId?: InputMaybe; hasActionCompleted?: InputMaybe; isDecision?: InputMaybe; isExecuted?: InputMaybe; @@ -3344,6 +3449,7 @@ export type ModelColonyMultiSigFilterInput = { executedAt?: InputMaybe; executedBy?: InputMaybe; expenditureId?: InputMaybe; + finalizationActionId?: InputMaybe; hasActionCompleted?: InputMaybe; id?: InputMaybe; isDecision?: InputMaybe; @@ -3503,10 +3609,14 @@ export type ModelContributorTypeInput = { }; export type ModelCurrentNetworkInverseFeeConditionInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; inverseFee?: InputMaybe; not?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelCurrentNetworkInverseFeeConnection = { @@ -3696,11 +3806,15 @@ export type ModelExpenditureTypeInput = { }; export type ModelExtensionInstallationsCountConditionInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; multiSigPermissions?: InputMaybe; not?: InputMaybe; oneTxPayment?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; reputationWeighted?: InputMaybe; stagedExpenditure?: InputMaybe; stakedExpenditure?: InputMaybe; @@ -3714,12 +3828,16 @@ export type ModelExtensionInstallationsCountConnection = { }; export type ModelExtensionInstallationsCountFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; id?: InputMaybe; multiSigPermissions?: InputMaybe; not?: InputMaybe; oneTxPayment?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; reputationWeighted?: InputMaybe; stagedExpenditure?: InputMaybe; stakedExpenditure?: InputMaybe; @@ -3775,6 +3893,7 @@ export type ModelIdKeyConditionInput = { export type ModelIngestorStatsConditionInput = { and?: InputMaybe>>; + chainId?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; value?: InputMaybe; @@ -3788,6 +3907,7 @@ export type ModelIngestorStatsConnection = { export type ModelIngestorStatsFilterInput = { and?: InputMaybe>>; + chainId?: InputMaybe; id?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; @@ -3872,6 +3992,29 @@ export type ModelMotionMessageFilterInput = { vote?: InputMaybe; }; +export type ModelMultiChainInfoConditionInput = { + and?: InputMaybe>>; + completedOnMainChain?: InputMaybe; + completedOnProxyChain?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ModelMultiChainInfoConnection = { + __typename?: 'ModelMultiChainInfoConnection'; + items: Array>; + nextToken?: Maybe; +}; + +export type ModelMultiChainInfoFilterInput = { + and?: InputMaybe>>; + completedOnMainChain?: InputMaybe; + completedOnProxyChain?: InputMaybe; + id?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + export type ModelMultiSigUserSignatureConditionInput = { and?: InputMaybe>>; colonyAddress?: InputMaybe; @@ -4003,11 +4146,40 @@ export type ModelProfileFilterInput = { website?: InputMaybe; }; +export type ModelProxyColonyConditionInput = { + and?: InputMaybe>>; + chainId?: InputMaybe; + colonyAddress?: InputMaybe; + isActive?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ModelProxyColonyConnection = { + __typename?: 'ModelProxyColonyConnection'; + items: Array>; + nextToken?: Maybe; +}; + +export type ModelProxyColonyFilterInput = { + and?: InputMaybe>>; + chainId?: InputMaybe; + colonyAddress?: InputMaybe; + id?: InputMaybe; + isActive?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + export type ModelReputationMiningCycleMetadataConditionInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; lastCompletedAt?: InputMaybe; not?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelReputationMiningCycleMetadataConnection = { @@ -4017,11 +4189,15 @@ export type ModelReputationMiningCycleMetadataConnection = { }; export type ModelReputationMiningCycleMetadataFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; id?: InputMaybe; lastCompletedAt?: InputMaybe; not?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelSafeTransactionConditionInput = { @@ -4095,7 +4271,7 @@ export type ModelSizeInput = { export enum ModelSortDirection { Asc = 'ASC', - Desc = 'DESC' + Desc = 'DESC', } export type ModelSplitPaymentDistributionTypeInput = { @@ -4142,11 +4318,15 @@ export type ModelStreamingPaymentFilterInput = { }; export type ModelStreamingPaymentMetadataConditionInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; endCondition?: InputMaybe; limitAmount?: InputMaybe; not?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelStreamingPaymentMetadataConnection = { @@ -4205,12 +4385,16 @@ export type ModelSubscriptionBooleanInput = { }; export type ModelSubscriptionCacheTotalBalanceFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; colonyAddress?: InputMaybe; date?: InputMaybe; domainId?: InputMaybe; id?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; timeframePeriod?: InputMaybe; timeframeType?: InputMaybe; totalUSDC?: InputMaybe; @@ -4228,6 +4412,7 @@ export type ModelSubscriptionColonyActionFilterInput = { createdAt?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; id?: InputMaybe; @@ -4239,6 +4424,7 @@ export type ModelSubscriptionColonyActionFilterInput = { members?: InputMaybe; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -4250,6 +4436,7 @@ export type ModelSubscriptionColonyActionFilterInput = { rolesAreMultiSig?: InputMaybe; rootHash?: InputMaybe; showInActionsList?: InputMaybe; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -4257,14 +4444,20 @@ export type ModelSubscriptionColonyActionFilterInput = { }; export type ModelSubscriptionColonyActionMetadataFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; customTitle?: InputMaybe; id?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelSubscriptionColonyContributorFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; colonyAddress?: InputMaybe; colonyReputationPercentage?: InputMaybe; contributorAddress?: InputMaybe; @@ -4273,26 +4466,34 @@ export type ModelSubscriptionColonyContributorFilterInput = { id?: InputMaybe; isVerified?: InputMaybe; isWatching?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; type?: InputMaybe; }; export type ModelSubscriptionColonyDecisionFilterInput = { actionId?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; colonyAddress?: InputMaybe; createdAt?: InputMaybe; description?: InputMaybe; id?: InputMaybe; motionDomainId?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; showInDecisionsList?: InputMaybe; title?: InputMaybe; walletAddress?: InputMaybe; }; export type ModelSubscriptionColonyExtensionFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; colonyId?: InputMaybe; hash?: InputMaybe; id?: InputMaybe; @@ -4301,7 +4502,9 @@ export type ModelSubscriptionColonyExtensionFilterInput = { isDeleted?: InputMaybe; isDeprecated?: InputMaybe; isInitialized?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; version?: InputMaybe; }; @@ -4322,24 +4525,32 @@ export type ModelSubscriptionColonyFilterInput = { export type ModelSubscriptionColonyFundsClaimFilterInput = { amount?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; colonyFundsClaimsId?: InputMaybe; createdAt?: InputMaybe; createdAtBlock?: InputMaybe; id?: InputMaybe; isClaimed?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelSubscriptionColonyHistoricRoleFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; blockNumber?: InputMaybe; colonyId?: InputMaybe; createdAt?: InputMaybe; domainId?: InputMaybe; id?: InputMaybe; isMultiSig?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; role_0?: InputMaybe; role_1?: InputMaybe; role_2?: InputMaybe; @@ -4351,20 +4562,28 @@ export type ModelSubscriptionColonyHistoricRoleFilterInput = { }; export type ModelSubscriptionColonyMemberInviteFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; colonyId?: InputMaybe; id?: InputMaybe; invitesRemaining?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelSubscriptionColonyMetadataFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; avatar?: InputMaybe; description?: InputMaybe; displayName?: InputMaybe; id?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; thumbnail?: InputMaybe; }; @@ -4373,6 +4592,7 @@ export type ModelSubscriptionColonyMotionFilterInput = { createdBy?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizationActionId?: InputMaybe; hasObjection?: InputMaybe; id?: InputMaybe; isDecision?: InputMaybe; @@ -4391,12 +4611,15 @@ export type ModelSubscriptionColonyMotionFilterInput = { }; export type ModelSubscriptionColonyMultiSigFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; colonyAddress?: InputMaybe; createdAt?: InputMaybe; executedAt?: InputMaybe; executedBy?: InputMaybe; expenditureId?: InputMaybe; + finalizationActionId?: InputMaybe; hasActionCompleted?: InputMaybe; id?: InputMaybe; isDecision?: InputMaybe; @@ -4405,7 +4628,9 @@ export type ModelSubscriptionColonyMultiSigFilterInput = { multiSigDomainId?: InputMaybe; nativeMultiSigDomainId?: InputMaybe; nativeMultiSigId?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; rejectedAt?: InputMaybe; rejectedBy?: InputMaybe; requiredPermissions?: InputMaybe; @@ -4439,7 +4664,9 @@ export type ModelSubscriptionColonyTokensFilterInput = { export type ModelSubscriptionContractEventFilterInput = { agent?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; encodedArguments?: InputMaybe; id?: InputMaybe; name?: InputMaybe; @@ -4449,28 +4676,40 @@ export type ModelSubscriptionContractEventFilterInput = { }; export type ModelSubscriptionContributorReputationFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; colonyAddress?: InputMaybe; contributorAddress?: InputMaybe; domainId?: InputMaybe; id?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; reputationPercentage?: InputMaybe; reputationRaw?: InputMaybe; }; export type ModelSubscriptionCurrentNetworkInverseFeeFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; id?: InputMaybe; inverseFee?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelSubscriptionCurrentVersionFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; id?: InputMaybe; key?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; version?: InputMaybe; }; @@ -4488,12 +4727,16 @@ export type ModelSubscriptionDomainFilterInput = { }; export type ModelSubscriptionDomainMetadataFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; color?: InputMaybe; description?: InputMaybe; id?: InputMaybe; name?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelSubscriptionExpenditureFilterInput = { @@ -4518,21 +4761,29 @@ export type ModelSubscriptionExpenditureFilterInput = { }; export type ModelSubscriptionExpenditureMetadataFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; distributionType?: InputMaybe; expectedNumberOfPayouts?: InputMaybe; expectedNumberOfTokens?: InputMaybe; fundFromDomainNativeId?: InputMaybe; id?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelSubscriptionExtensionInstallationsCountFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; id?: InputMaybe; multiSigPermissions?: InputMaybe; oneTxPayment?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; reputationWeighted?: InputMaybe; stagedExpenditure?: InputMaybe; stakedExpenditure?: InputMaybe; @@ -4567,7 +4818,10 @@ export type ModelSubscriptionIdInput = { }; export type ModelSubscriptionIngestorStatsFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; + chainId?: InputMaybe; id?: InputMaybe; or?: InputMaybe>>; value?: InputMaybe; @@ -4586,17 +4840,23 @@ export type ModelSubscriptionIntInput = { }; export type ModelSubscriptionLiquidationAddressFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; chainId?: InputMaybe; id?: InputMaybe; liquidationAddress?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; userAddress?: InputMaybe; }; export type ModelSubscriptionMotionMessageFilterInput = { amount?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; createdAt?: InputMaybe; initiatorAddress?: InputMaybe; messageKey?: InputMaybe; @@ -4606,13 +4866,29 @@ export type ModelSubscriptionMotionMessageFilterInput = { vote?: InputMaybe; }; +export type ModelSubscriptionMultiChainInfoFilterInput = { + and?: InputMaybe< + Array> + >; + completedOnMainChain?: InputMaybe; + completedOnProxyChain?: InputMaybe; + id?: InputMaybe; + or?: InputMaybe< + Array> + >; +}; + export type ModelSubscriptionMultiSigUserSignatureFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; colonyAddress?: InputMaybe; createdAt?: InputMaybe; id?: InputMaybe; multiSigId?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; role?: InputMaybe; userAddress?: InputMaybe; vote?: InputMaybe; @@ -4620,20 +4896,28 @@ export type ModelSubscriptionMultiSigUserSignatureFilterInput = { export type ModelSubscriptionNotificationsDataFilterInput = { adminNotificationsDisabled?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; magicbellUserId?: InputMaybe; mentionNotificationsDisabled?: InputMaybe; mutedColonyAddresses?: InputMaybe; notificationsDisabled?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; paymentNotificationsDisabled?: InputMaybe; userAddress?: InputMaybe; }; export type ModelSubscriptionPrivateBetaInviteCodeFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; id?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; shareableInvites?: InputMaybe; userId?: InputMaybe; }; @@ -4655,21 +4939,38 @@ export type ModelSubscriptionProfileFilterInput = { website?: InputMaybe; }; +export type ModelSubscriptionProxyColonyFilterInput = { + and?: InputMaybe>>; + chainId?: InputMaybe; + colonyAddress?: InputMaybe; + id?: InputMaybe; + isActive?: InputMaybe; + or?: InputMaybe>>; +}; + export type ModelSubscriptionReputationMiningCycleMetadataFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; id?: InputMaybe; lastCompletedAt?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelSubscriptionSafeTransactionDataFilterInput = { abi?: InputMaybe; amount?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; contractFunction?: InputMaybe; data?: InputMaybe; id?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; rawAmount?: InputMaybe; tokenAddress?: InputMaybe; transactionHash?: InputMaybe; @@ -4677,30 +4978,42 @@ export type ModelSubscriptionSafeTransactionDataFilterInput = { }; export type ModelSubscriptionSafeTransactionFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; id?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelSubscriptionStreamingPaymentFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; createdAt?: InputMaybe; endTime?: InputMaybe; id?: InputMaybe; interval?: InputMaybe; nativeDomainId?: InputMaybe; nativeId?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; recipientAddress?: InputMaybe; startTime?: InputMaybe; }; export type ModelSubscriptionStreamingPaymentMetadataFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; endCondition?: InputMaybe; id?: InputMaybe; limitAmount?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; }; export type ModelSubscriptionStringInput = { @@ -4718,10 +5031,25 @@ export type ModelSubscriptionStringInput = { notIn?: InputMaybe>>; }; +export type ModelSubscriptionSupportedChainFilterInput = { + and?: InputMaybe< + Array> + >; + id?: InputMaybe; + isActive?: InputMaybe; + or?: InputMaybe< + Array> + >; +}; + export type ModelSubscriptionTokenExchangeRateFilterInput = { - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; date?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; tokenId?: InputMaybe; }; @@ -4741,6 +5069,7 @@ export type ModelSubscriptionTokenFilterInput = { export type ModelSubscriptionTransactionFilterInput = { and?: InputMaybe>>; + associatedActionId?: InputMaybe; blockHash?: InputMaybe; blockNumber?: InputMaybe; colonyAddress?: InputMaybe; @@ -4800,15 +5129,40 @@ export type ModelSubscriptionUserTokensFilterInput = { export type ModelSubscriptionVoterRewardsHistoryFilterInput = { amount?: InputMaybe; - and?: InputMaybe>>; + and?: InputMaybe< + Array> + >; colonyAddress?: InputMaybe; createdAt?: InputMaybe; id?: InputMaybe; motionId?: InputMaybe; - or?: InputMaybe>>; + or?: InputMaybe< + Array> + >; userAddress?: InputMaybe; }; +export type ModelSupportedChainConditionInput = { + and?: InputMaybe>>; + isActive?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ModelSupportedChainConnection = { + __typename?: 'ModelSupportedChainConnection'; + items: Array>; + nextToken?: Maybe; +}; + +export type ModelSupportedChainFilterInput = { + and?: InputMaybe>>; + id?: InputMaybe; + isActive?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + export type ModelSupportedCurrenciesInput = { eq?: InputMaybe; ne?: InputMaybe; @@ -4883,6 +5237,7 @@ export type ModelTokenTypeInput = { export type ModelTransactionConditionInput = { and?: InputMaybe>>; + associatedActionId?: InputMaybe; blockHash?: InputMaybe; blockNumber?: InputMaybe; colonyAddress?: InputMaybe; @@ -4918,6 +5273,7 @@ export type ModelTransactionConnection = { export type ModelTransactionFilterInput = { and?: InputMaybe>>; + associatedActionId?: InputMaybe; blockHash?: InputMaybe; blockNumber?: InputMaybe; colonyAddress?: InputMaybe; @@ -5198,6 +5554,17 @@ export type MotionStateHistoryInput = { yaySideFullyStakedAt?: InputMaybe; }; +export type MultiChainInfo = { + __typename?: 'MultiChainInfo'; + completedOnMainChain: Scalars['Boolean']; + completedOnProxyChain: Scalars['Boolean']; + createdAt: Scalars['AWSDateTime']; + /** The format is txHash_chainId */ + id: Scalars['ID']; + updatedAt: Scalars['AWSDateTime']; + wormholeInfo?: Maybe; +}; + export type MultiSigDomainConfig = { __typename?: 'MultiSigDomainConfig'; domainId: Scalars['ID']; @@ -5236,7 +5603,7 @@ export type MultiSigUserSignature = { export enum MultiSigVote { Approve = 'Approve', None = 'None', - Reject = 'Reject' + Reject = 'Reject', } /** Root mutation type */ @@ -5278,15 +5645,18 @@ export type Mutation = { createIngestorStats?: Maybe; createLiquidationAddress?: Maybe; createMotionMessage?: Maybe; + createMultiChainInfo?: Maybe; createMultiSigUserSignature?: Maybe; createNotificationsData?: Maybe; createPrivateBetaInviteCode?: Maybe; createProfile?: Maybe; + createProxyColony?: Maybe; createReputationMiningCycleMetadata?: Maybe; createSafeTransaction?: Maybe; createSafeTransactionData?: Maybe; createStreamingPayment?: Maybe; createStreamingPaymentMetadata?: Maybe; + createSupportedChain?: Maybe; createToken?: Maybe; createTokenExchangeRate?: Maybe; createTransaction?: Maybe; @@ -5326,15 +5696,18 @@ export type Mutation = { deleteIngestorStats?: Maybe; deleteLiquidationAddress?: Maybe; deleteMotionMessage?: Maybe; + deleteMultiChainInfo?: Maybe; deleteMultiSigUserSignature?: Maybe; deleteNotificationsData?: Maybe; deletePrivateBetaInviteCode?: Maybe; deleteProfile?: Maybe; + deleteProxyColony?: Maybe; deleteReputationMiningCycleMetadata?: Maybe; deleteSafeTransaction?: Maybe; deleteSafeTransactionData?: Maybe; deleteStreamingPayment?: Maybe; deleteStreamingPaymentMetadata?: Maybe; + deleteSupportedChain?: Maybe; deleteToken?: Maybe; deleteTokenExchangeRate?: Maybe; deleteTransaction?: Maybe; @@ -5374,15 +5747,18 @@ export type Mutation = { updateIngestorStats?: Maybe; updateLiquidationAddress?: Maybe; updateMotionMessage?: Maybe; + updateMultiChainInfo?: Maybe; updateMultiSigUserSignature?: Maybe; updateNotificationsData?: Maybe; updatePrivateBetaInviteCode?: Maybe; updateProfile?: Maybe; + updateProxyColony?: Maybe; updateReputationMiningCycleMetadata?: Maybe; updateSafeTransaction?: Maybe; updateSafeTransactionData?: Maybe; updateStreamingPayment?: Maybe; updateStreamingPaymentMetadata?: Maybe; + updateSupportedChain?: Maybe; updateToken?: Maybe; updateTokenExchangeRate?: Maybe; updateTransaction?: Maybe; @@ -5394,226 +5770,199 @@ export type Mutation = { validateUserInvite?: Maybe; }; - /** Root mutation type */ export type MutationBridgeCreateBankAccountArgs = { input: BridgeCreateBankAccountInput; }; - /** Root mutation type */ export type MutationBridgeUpdateBankAccountArgs = { input: BridgeUpdateBankAccountInput; }; - /** Root mutation type */ export type MutationBridgeXyzMutationArgs = { input: BridgeXyzMutationInput; }; - /** Root mutation type */ export type MutationCreateAnnotationArgs = { condition?: InputMaybe; input: CreateAnnotationInput; }; - /** Root mutation type */ export type MutationCreateCacheTotalBalanceArgs = { condition?: InputMaybe; input: CreateCacheTotalBalanceInput; }; - /** Root mutation type */ export type MutationCreateColonyArgs = { condition?: InputMaybe; input: CreateColonyInput; }; - /** Root mutation type */ export type MutationCreateColonyActionArgs = { condition?: InputMaybe; input: CreateColonyActionInput; }; - /** Root mutation type */ export type MutationCreateColonyActionMetadataArgs = { condition?: InputMaybe; input: CreateColonyActionMetadataInput; }; - /** Root mutation type */ export type MutationCreateColonyContributorArgs = { condition?: InputMaybe; input: CreateColonyContributorInput; }; - /** Root mutation type */ export type MutationCreateColonyDecisionArgs = { condition?: InputMaybe; input: CreateColonyDecisionInput; }; - /** Root mutation type */ export type MutationCreateColonyEtherealMetadataArgs = { input: CreateColonyEtherealMetadataInput; }; - /** Root mutation type */ export type MutationCreateColonyExtensionArgs = { condition?: InputMaybe; input: CreateColonyExtensionInput; }; - /** Root mutation type */ export type MutationCreateColonyFundsClaimArgs = { condition?: InputMaybe; input: CreateColonyFundsClaimInput; }; - /** Root mutation type */ export type MutationCreateColonyHistoricRoleArgs = { condition?: InputMaybe; input: CreateColonyHistoricRoleInput; }; - /** Root mutation type */ export type MutationCreateColonyMemberInviteArgs = { condition?: InputMaybe; input: CreateColonyMemberInviteInput; }; - /** Root mutation type */ export type MutationCreateColonyMetadataArgs = { condition?: InputMaybe; input: CreateColonyMetadataInput; }; - /** Root mutation type */ export type MutationCreateColonyMotionArgs = { condition?: InputMaybe; input: CreateColonyMotionInput; }; - /** Root mutation type */ export type MutationCreateColonyMultiSigArgs = { condition?: InputMaybe; input: CreateColonyMultiSigInput; }; - /** Root mutation type */ export type MutationCreateColonyRoleArgs = { condition?: InputMaybe; input: CreateColonyRoleInput; }; - /** Root mutation type */ export type MutationCreateColonyTokensArgs = { condition?: InputMaybe; input: CreateColonyTokensInput; }; - /** Root mutation type */ export type MutationCreateContractEventArgs = { condition?: InputMaybe; input: CreateContractEventInput; }; - /** Root mutation type */ export type MutationCreateContributorReputationArgs = { condition?: InputMaybe; input: CreateContributorReputationInput; }; - /** Root mutation type */ export type MutationCreateCurrentNetworkInverseFeeArgs = { condition?: InputMaybe; input: CreateCurrentNetworkInverseFeeInput; }; - /** Root mutation type */ export type MutationCreateCurrentVersionArgs = { condition?: InputMaybe; input: CreateCurrentVersionInput; }; - /** Root mutation type */ export type MutationCreateDomainArgs = { condition?: InputMaybe; input: CreateDomainInput; }; - /** Root mutation type */ export type MutationCreateDomainMetadataArgs = { condition?: InputMaybe; input: CreateDomainMetadataInput; }; - /** Root mutation type */ export type MutationCreateExpenditureArgs = { condition?: InputMaybe; input: CreateExpenditureInput; }; - /** Root mutation type */ export type MutationCreateExpenditureMetadataArgs = { condition?: InputMaybe; input: CreateExpenditureMetadataInput; }; - /** Root mutation type */ export type MutationCreateExtensionInstallationsCountArgs = { condition?: InputMaybe; input: CreateExtensionInstallationsCountInput; }; - /** Root mutation type */ export type MutationCreateIngestorStatsArgs = { condition?: InputMaybe; input: CreateIngestorStatsInput; }; - /** Root mutation type */ export type MutationCreateLiquidationAddressArgs = { condition?: InputMaybe; input: CreateLiquidationAddressInput; }; - /** Root mutation type */ export type MutationCreateMotionMessageArgs = { condition?: InputMaybe; input: CreateMotionMessageInput; }; +/** Root mutation type */ +export type MutationCreateMultiChainInfoArgs = { + condition?: InputMaybe; + input: CreateMultiChainInfoInput; +}; /** Root mutation type */ export type MutationCreateMultiSigUserSignatureArgs = { @@ -5621,27 +5970,29 @@ export type MutationCreateMultiSigUserSignatureArgs = { input: CreateMultiSigUserSignatureInput; }; - /** Root mutation type */ export type MutationCreateNotificationsDataArgs = { condition?: InputMaybe; input: CreateNotificationsDataInput; }; - /** Root mutation type */ export type MutationCreatePrivateBetaInviteCodeArgs = { condition?: InputMaybe; input: CreatePrivateBetaInviteCodeInput; }; - /** Root mutation type */ export type MutationCreateProfileArgs = { condition?: InputMaybe; input: CreateProfileInput; }; +/** Root mutation type */ +export type MutationCreateProxyColonyArgs = { + condition?: InputMaybe; + input: CreateProxyColonyInput; +}; /** Root mutation type */ export type MutationCreateReputationMiningCycleMetadataArgs = { @@ -5649,34 +6000,35 @@ export type MutationCreateReputationMiningCycleMetadataArgs = { input: CreateReputationMiningCycleMetadataInput; }; - /** Root mutation type */ export type MutationCreateSafeTransactionArgs = { condition?: InputMaybe; input: CreateSafeTransactionInput; }; - /** Root mutation type */ export type MutationCreateSafeTransactionDataArgs = { condition?: InputMaybe; input: CreateSafeTransactionDataInput; }; - /** Root mutation type */ export type MutationCreateStreamingPaymentArgs = { condition?: InputMaybe; input: CreateStreamingPaymentInput; }; - /** Root mutation type */ export type MutationCreateStreamingPaymentMetadataArgs = { condition?: InputMaybe; input: CreateStreamingPaymentMetadataInput; }; +/** Root mutation type */ +export type MutationCreateSupportedChainArgs = { + condition?: InputMaybe; + input: CreateSupportedChainInput; +}; /** Root mutation type */ export type MutationCreateTokenArgs = { @@ -5684,256 +6036,225 @@ export type MutationCreateTokenArgs = { input: CreateTokenInput; }; - /** Root mutation type */ export type MutationCreateTokenExchangeRateArgs = { condition?: InputMaybe; input: CreateTokenExchangeRateInput; }; - /** Root mutation type */ export type MutationCreateTransactionArgs = { condition?: InputMaybe; input: CreateTransactionInput; }; - /** Root mutation type */ export type MutationCreateUniqueUserArgs = { input?: InputMaybe; }; - /** Root mutation type */ export type MutationCreateUserArgs = { condition?: InputMaybe; input: CreateUserInput; }; - /** Root mutation type */ export type MutationCreateUserNotificationsDataArgs = { input: CreateUserNotificationsDataInput; }; - /** Root mutation type */ export type MutationCreateUserStakeArgs = { condition?: InputMaybe; input: CreateUserStakeInput; }; - /** Root mutation type */ export type MutationCreateUserTokensArgs = { condition?: InputMaybe; input: CreateUserTokensInput; }; - /** Root mutation type */ export type MutationCreateVoterRewardsHistoryArgs = { condition?: InputMaybe; input: CreateVoterRewardsHistoryInput; }; - /** Root mutation type */ export type MutationDeleteAnnotationArgs = { condition?: InputMaybe; input: DeleteAnnotationInput; }; - /** Root mutation type */ export type MutationDeleteCacheTotalBalanceArgs = { condition?: InputMaybe; input: DeleteCacheTotalBalanceInput; }; - /** Root mutation type */ export type MutationDeleteColonyArgs = { condition?: InputMaybe; input: DeleteColonyInput; }; - /** Root mutation type */ export type MutationDeleteColonyActionArgs = { condition?: InputMaybe; input: DeleteColonyActionInput; }; - /** Root mutation type */ export type MutationDeleteColonyActionMetadataArgs = { condition?: InputMaybe; input: DeleteColonyActionMetadataInput; }; - /** Root mutation type */ export type MutationDeleteColonyContributorArgs = { condition?: InputMaybe; input: DeleteColonyContributorInput; }; - /** Root mutation type */ export type MutationDeleteColonyDecisionArgs = { condition?: InputMaybe; input: DeleteColonyDecisionInput; }; - /** Root mutation type */ export type MutationDeleteColonyExtensionArgs = { condition?: InputMaybe; input: DeleteColonyExtensionInput; }; - /** Root mutation type */ export type MutationDeleteColonyFundsClaimArgs = { condition?: InputMaybe; input: DeleteColonyFundsClaimInput; }; - /** Root mutation type */ export type MutationDeleteColonyHistoricRoleArgs = { condition?: InputMaybe; input: DeleteColonyHistoricRoleInput; }; - /** Root mutation type */ export type MutationDeleteColonyMemberInviteArgs = { condition?: InputMaybe; input: DeleteColonyMemberInviteInput; }; - /** Root mutation type */ export type MutationDeleteColonyMetadataArgs = { condition?: InputMaybe; input: DeleteColonyMetadataInput; }; - /** Root mutation type */ export type MutationDeleteColonyMotionArgs = { condition?: InputMaybe; input: DeleteColonyMotionInput; }; - /** Root mutation type */ export type MutationDeleteColonyMultiSigArgs = { condition?: InputMaybe; input: DeleteColonyMultiSigInput; }; - /** Root mutation type */ export type MutationDeleteColonyRoleArgs = { condition?: InputMaybe; input: DeleteColonyRoleInput; }; - /** Root mutation type */ export type MutationDeleteColonyTokensArgs = { condition?: InputMaybe; input: DeleteColonyTokensInput; }; - /** Root mutation type */ export type MutationDeleteContractEventArgs = { condition?: InputMaybe; input: DeleteContractEventInput; }; - /** Root mutation type */ export type MutationDeleteContributorReputationArgs = { condition?: InputMaybe; input: DeleteContributorReputationInput; }; - /** Root mutation type */ export type MutationDeleteCurrentNetworkInverseFeeArgs = { condition?: InputMaybe; input: DeleteCurrentNetworkInverseFeeInput; }; - /** Root mutation type */ export type MutationDeleteCurrentVersionArgs = { condition?: InputMaybe; input: DeleteCurrentVersionInput; }; - /** Root mutation type */ export type MutationDeleteDomainArgs = { condition?: InputMaybe; input: DeleteDomainInput; }; - /** Root mutation type */ export type MutationDeleteDomainMetadataArgs = { condition?: InputMaybe; input: DeleteDomainMetadataInput; }; - /** Root mutation type */ export type MutationDeleteExpenditureArgs = { condition?: InputMaybe; input: DeleteExpenditureInput; }; - /** Root mutation type */ export type MutationDeleteExpenditureMetadataArgs = { condition?: InputMaybe; input: DeleteExpenditureMetadataInput; }; - /** Root mutation type */ export type MutationDeleteExtensionInstallationsCountArgs = { condition?: InputMaybe; input: DeleteExtensionInstallationsCountInput; }; - /** Root mutation type */ export type MutationDeleteIngestorStatsArgs = { condition?: InputMaybe; input: DeleteIngestorStatsInput; }; - /** Root mutation type */ export type MutationDeleteLiquidationAddressArgs = { condition?: InputMaybe; input: DeleteLiquidationAddressInput; }; - /** Root mutation type */ export type MutationDeleteMotionMessageArgs = { condition?: InputMaybe; input: DeleteMotionMessageInput; }; +/** Root mutation type */ +export type MutationDeleteMultiChainInfoArgs = { + condition?: InputMaybe; + input: DeleteMultiChainInfoInput; +}; /** Root mutation type */ export type MutationDeleteMultiSigUserSignatureArgs = { @@ -5941,27 +6262,29 @@ export type MutationDeleteMultiSigUserSignatureArgs = { input: DeleteMultiSigUserSignatureInput; }; - /** Root mutation type */ export type MutationDeleteNotificationsDataArgs = { condition?: InputMaybe; input: DeleteNotificationsDataInput; }; - /** Root mutation type */ export type MutationDeletePrivateBetaInviteCodeArgs = { condition?: InputMaybe; input: DeletePrivateBetaInviteCodeInput; }; - /** Root mutation type */ export type MutationDeleteProfileArgs = { condition?: InputMaybe; input: DeleteProfileInput; }; +/** Root mutation type */ +export type MutationDeleteProxyColonyArgs = { + condition?: InputMaybe; + input: DeleteProxyColonyInput; +}; /** Root mutation type */ export type MutationDeleteReputationMiningCycleMetadataArgs = { @@ -5969,34 +6292,35 @@ export type MutationDeleteReputationMiningCycleMetadataArgs = { input: DeleteReputationMiningCycleMetadataInput; }; - /** Root mutation type */ export type MutationDeleteSafeTransactionArgs = { condition?: InputMaybe; input: DeleteSafeTransactionInput; }; - /** Root mutation type */ export type MutationDeleteSafeTransactionDataArgs = { condition?: InputMaybe; input: DeleteSafeTransactionDataInput; }; - /** Root mutation type */ export type MutationDeleteStreamingPaymentArgs = { condition?: InputMaybe; input: DeleteStreamingPaymentInput; }; - /** Root mutation type */ export type MutationDeleteStreamingPaymentMetadataArgs = { condition?: InputMaybe; input: DeleteStreamingPaymentMetadataInput; }; +/** Root mutation type */ +export type MutationDeleteSupportedChainArgs = { + condition?: InputMaybe; + input: DeleteSupportedChainInput; +}; /** Root mutation type */ export type MutationDeleteTokenArgs = { @@ -6004,256 +6328,225 @@ export type MutationDeleteTokenArgs = { input: DeleteTokenInput; }; - /** Root mutation type */ export type MutationDeleteTokenExchangeRateArgs = { condition?: InputMaybe; input: DeleteTokenExchangeRateInput; }; - /** Root mutation type */ export type MutationDeleteTransactionArgs = { condition?: InputMaybe; input: DeleteTransactionInput; }; - /** Root mutation type */ export type MutationDeleteUserArgs = { condition?: InputMaybe; input: DeleteUserInput; }; - /** Root mutation type */ export type MutationDeleteUserStakeArgs = { condition?: InputMaybe; input: DeleteUserStakeInput; }; - /** Root mutation type */ export type MutationDeleteUserTokensArgs = { condition?: InputMaybe; input: DeleteUserTokensInput; }; - /** Root mutation type */ export type MutationDeleteVoterRewardsHistoryArgs = { condition?: InputMaybe; input: DeleteVoterRewardsHistoryInput; }; - /** Root mutation type */ export type MutationInitializeUserArgs = { input: InitializeUserInput; }; - /** Root mutation type */ export type MutationUpdateAnnotationArgs = { condition?: InputMaybe; input: UpdateAnnotationInput; }; - /** Root mutation type */ export type MutationUpdateCacheTotalBalanceArgs = { condition?: InputMaybe; input: UpdateCacheTotalBalanceInput; }; - /** Root mutation type */ export type MutationUpdateColonyArgs = { condition?: InputMaybe; input: UpdateColonyInput; }; - /** Root mutation type */ export type MutationUpdateColonyActionArgs = { condition?: InputMaybe; input: UpdateColonyActionInput; }; - /** Root mutation type */ export type MutationUpdateColonyActionMetadataArgs = { condition?: InputMaybe; input: UpdateColonyActionMetadataInput; }; - /** Root mutation type */ export type MutationUpdateColonyContributorArgs = { condition?: InputMaybe; input: UpdateColonyContributorInput; }; - /** Root mutation type */ export type MutationUpdateColonyDecisionArgs = { condition?: InputMaybe; input: UpdateColonyDecisionInput; }; - /** Root mutation type */ export type MutationUpdateColonyExtensionArgs = { condition?: InputMaybe; input: UpdateColonyExtensionInput; }; - /** Root mutation type */ export type MutationUpdateColonyFundsClaimArgs = { condition?: InputMaybe; input: UpdateColonyFundsClaimInput; }; - /** Root mutation type */ export type MutationUpdateColonyHistoricRoleArgs = { condition?: InputMaybe; input: UpdateColonyHistoricRoleInput; }; - /** Root mutation type */ export type MutationUpdateColonyMemberInviteArgs = { condition?: InputMaybe; input: UpdateColonyMemberInviteInput; }; - /** Root mutation type */ export type MutationUpdateColonyMetadataArgs = { condition?: InputMaybe; input: UpdateColonyMetadataInput; }; - /** Root mutation type */ export type MutationUpdateColonyMotionArgs = { condition?: InputMaybe; input: UpdateColonyMotionInput; }; - /** Root mutation type */ export type MutationUpdateColonyMultiSigArgs = { condition?: InputMaybe; input: UpdateColonyMultiSigInput; }; - /** Root mutation type */ export type MutationUpdateColonyRoleArgs = { condition?: InputMaybe; input: UpdateColonyRoleInput; }; - /** Root mutation type */ export type MutationUpdateColonyTokensArgs = { condition?: InputMaybe; input: UpdateColonyTokensInput; }; - /** Root mutation type */ export type MutationUpdateContractEventArgs = { condition?: InputMaybe; input: UpdateContractEventInput; }; - /** Root mutation type */ export type MutationUpdateContributorReputationArgs = { condition?: InputMaybe; input: UpdateContributorReputationInput; }; - /** Root mutation type */ export type MutationUpdateContributorsWithReputationArgs = { input: UpdateContributorsWithReputationInput; }; - /** Root mutation type */ export type MutationUpdateCurrentNetworkInverseFeeArgs = { condition?: InputMaybe; input: UpdateCurrentNetworkInverseFeeInput; }; - /** Root mutation type */ export type MutationUpdateCurrentVersionArgs = { condition?: InputMaybe; input: UpdateCurrentVersionInput; }; - /** Root mutation type */ export type MutationUpdateDomainArgs = { condition?: InputMaybe; input: UpdateDomainInput; }; - /** Root mutation type */ export type MutationUpdateDomainMetadataArgs = { condition?: InputMaybe; input: UpdateDomainMetadataInput; }; - /** Root mutation type */ export type MutationUpdateExpenditureArgs = { condition?: InputMaybe; input: UpdateExpenditureInput; }; - /** Root mutation type */ export type MutationUpdateExpenditureMetadataArgs = { condition?: InputMaybe; input: UpdateExpenditureMetadataInput; }; - /** Root mutation type */ export type MutationUpdateExtensionInstallationsCountArgs = { condition?: InputMaybe; input: UpdateExtensionInstallationsCountInput; }; - /** Root mutation type */ export type MutationUpdateIngestorStatsArgs = { condition?: InputMaybe; input: UpdateIngestorStatsInput; }; - /** Root mutation type */ export type MutationUpdateLiquidationAddressArgs = { condition?: InputMaybe; input: UpdateLiquidationAddressInput; }; - /** Root mutation type */ export type MutationUpdateMotionMessageArgs = { condition?: InputMaybe; input: UpdateMotionMessageInput; }; +/** Root mutation type */ +export type MutationUpdateMultiChainInfoArgs = { + condition?: InputMaybe; + input: UpdateMultiChainInfoInput; +}; /** Root mutation type */ export type MutationUpdateMultiSigUserSignatureArgs = { @@ -6261,27 +6554,29 @@ export type MutationUpdateMultiSigUserSignatureArgs = { input: UpdateMultiSigUserSignatureInput; }; - /** Root mutation type */ export type MutationUpdateNotificationsDataArgs = { condition?: InputMaybe; input: UpdateNotificationsDataInput; }; - /** Root mutation type */ export type MutationUpdatePrivateBetaInviteCodeArgs = { condition?: InputMaybe; input: UpdatePrivateBetaInviteCodeInput; }; - /** Root mutation type */ export type MutationUpdateProfileArgs = { condition?: InputMaybe; input: UpdateProfileInput; }; +/** Root mutation type */ +export type MutationUpdateProxyColonyArgs = { + condition?: InputMaybe; + input: UpdateProxyColonyInput; +}; /** Root mutation type */ export type MutationUpdateReputationMiningCycleMetadataArgs = { @@ -6289,34 +6584,35 @@ export type MutationUpdateReputationMiningCycleMetadataArgs = { input: UpdateReputationMiningCycleMetadataInput; }; - /** Root mutation type */ export type MutationUpdateSafeTransactionArgs = { condition?: InputMaybe; input: UpdateSafeTransactionInput; }; - /** Root mutation type */ export type MutationUpdateSafeTransactionDataArgs = { condition?: InputMaybe; input: UpdateSafeTransactionDataInput; }; - /** Root mutation type */ export type MutationUpdateStreamingPaymentArgs = { condition?: InputMaybe; input: UpdateStreamingPaymentInput; }; - /** Root mutation type */ export type MutationUpdateStreamingPaymentMetadataArgs = { condition?: InputMaybe; input: UpdateStreamingPaymentMetadataInput; }; +/** Root mutation type */ +export type MutationUpdateSupportedChainArgs = { + condition?: InputMaybe; + input: UpdateSupportedChainInput; +}; /** Root mutation type */ export type MutationUpdateTokenArgs = { @@ -6324,49 +6620,42 @@ export type MutationUpdateTokenArgs = { input: UpdateTokenInput; }; - /** Root mutation type */ export type MutationUpdateTokenExchangeRateArgs = { condition?: InputMaybe; input: UpdateTokenExchangeRateInput; }; - /** Root mutation type */ export type MutationUpdateTransactionArgs = { condition?: InputMaybe; input: UpdateTransactionInput; }; - /** Root mutation type */ export type MutationUpdateUserArgs = { condition?: InputMaybe; input: UpdateUserInput; }; - /** Root mutation type */ export type MutationUpdateUserStakeArgs = { condition?: InputMaybe; input: UpdateUserStakeInput; }; - /** Root mutation type */ export type MutationUpdateUserTokensArgs = { condition?: InputMaybe; input: UpdateUserTokensInput; }; - /** Root mutation type */ export type MutationUpdateVoterRewardsHistoryArgs = { condition?: InputMaybe; input: UpdateVoterRewardsHistoryInput; }; - /** Root mutation type */ export type MutationValidateUserInviteArgs = { input: ValidateUserInviteInput; @@ -6454,7 +6743,7 @@ export enum Network { /** Ethereum Goerli test network */ Goerli = 'GOERLI', /** Ethereum Mainnet */ - Mainnet = 'MAINNET' + Mainnet = 'MAINNET', } /** Type of notifications that can be sent */ @@ -6485,7 +6774,7 @@ export enum NotificationType { MultisigActionRejected = 'MULTISIG_ACTION_REJECTED', NewColonyVersion = 'NEW_COLONY_VERSION', NewExtensionVersion = 'NEW_EXTENSION_VERSION', - PermissionsAction = 'PERMISSIONS_ACTION' + PermissionsAction = 'PERMISSIONS_ACTION', } /** Holds the notifications data for the user, such as their unique Magicbell user id, and their notifications preferences. */ @@ -6622,6 +6911,21 @@ export type ProfileMetadataInput = { metatransactionsEnabled?: InputMaybe; }; +/** Table representing a deployed proxy colony */ +export type ProxyColony = { + __typename?: 'ProxyColony'; + /** The chainId it's deployed on */ + chainId: Scalars['String']; + /** Address of the colony on the blockchain */ + colonyAddress: Scalars['ID']; + createdAt: Scalars['AWSDateTime']; + /** id in the format of colonyAddress_chainId */ + id: Scalars['ID']; + /** A flag that tells us if the proxy is active or not */ + isActive: Scalars['Boolean']; + updatedAt: Scalars['AWSDateTime']; +}; + /** Root query type */ export type Query = { __typename?: 'Query'; @@ -6660,7 +6964,9 @@ export type Query = { getColonyMemberInvite?: Maybe; getColonyMetadata?: Maybe; getColonyMotion?: Maybe; + getColonyMotionByFinalizationActionId?: Maybe; getColonyMultiSig?: Maybe; + getColonyMultiSigByFinalizationActionId?: Maybe; getColonyRole?: Maybe; getColonyTokens?: Maybe; getContractEvent?: Maybe; @@ -6685,6 +6991,7 @@ export type Query = { getExtensionsByHash?: Maybe; getFundsClaimsByColony?: Maybe; getIngestorStats?: Maybe; + getIngestorStatsByChainId?: Maybe; getLiquidationAddress?: Maybe; getLiquidationAddressesByUserAddress?: Maybe; getMotionByExpenditureId?: Maybe; @@ -6696,6 +7003,7 @@ export type Query = { /** Get the timeout for the current period of a motion */ getMotionTimeoutPeriods?: Maybe; getMotionVoterRewards?: Maybe; + getMultiChainInfo?: Maybe; getMultiSigByColonyAddress?: Maybe; getMultiSigByExpenditureId?: Maybe; getMultiSigByTransactionHash?: Maybe; @@ -6706,6 +7014,8 @@ export type Query = { getProfile?: Maybe; getProfileByEmail?: Maybe; getProfileByUsername?: Maybe; + getProxyColoniesByColonyAddress?: Maybe; + getProxyColony?: Maybe; getReputationMiningCycleMetadata?: Maybe; getRoleByColony?: Maybe; getRoleByDomainAndColony?: Maybe; @@ -6715,6 +7025,7 @@ export type Query = { getSafeTransactionStatus?: Maybe>; getStreamingPayment?: Maybe; getStreamingPaymentMetadata?: Maybe; + getSupportedChain?: Maybe; getToken?: Maybe; getTokenByAddress?: Maybe; getTokenExchangeRate?: Maybe; @@ -6770,15 +7081,18 @@ export type Query = { listIngestorStats?: Maybe; listLiquidationAddresses?: Maybe; listMotionMessages?: Maybe; + listMultiChainInfos?: Maybe; listMultiSigUserSignatures?: Maybe; listNotificationsData?: Maybe; listPrivateBetaInviteCodes?: Maybe; listProfiles?: Maybe; + listProxyColonies?: Maybe; listReputationMiningCycleMetadata?: Maybe; listSafeTransactionData?: Maybe; listSafeTransactions?: Maybe; listStreamingPaymentMetadata?: Maybe; listStreamingPayments?: Maybe; + listSupportedChains?: Maybe; listTokenExchangeRates?: Maybe; listTokens?: Maybe; listTransactions?: Maybe; @@ -6791,13 +7105,11 @@ export type Query = { tokenExhangeRateByTokenId?: Maybe; }; - /** Root query type */ export type QueryBridgeGetUserLiquidationAddressArgs = { userAddress: Scalars['String']; }; - /** Root query type */ export type QueryCacheTotalBalanceByColonyAddressArgs = { colonyAddress: Scalars['ID']; @@ -6808,7 +7120,6 @@ export type QueryCacheTotalBalanceByColonyAddressArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetActionByExpenditureIdArgs = { expenditureId: Scalars['ID']; @@ -6818,7 +7129,6 @@ export type QueryGetActionByExpenditureIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetActionsByColonyArgs = { colonyId: Scalars['ID']; @@ -6829,19 +7139,16 @@ export type QueryGetActionsByColonyArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetAnnotationArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetCacheTotalBalanceArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColoniesByNativeTokenIdArgs = { filter?: InputMaybe; @@ -6851,19 +7158,16 @@ export type QueryGetColoniesByNativeTokenIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetColonyArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyActionArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyActionByMotionIdArgs = { filter?: InputMaybe; @@ -6873,7 +7177,6 @@ export type QueryGetColonyActionByMotionIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetColonyActionByMultiSigIdArgs = { filter?: InputMaybe; @@ -6883,13 +7186,11 @@ export type QueryGetColonyActionByMultiSigIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetColonyActionMetadataArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyByAddressArgs = { filter?: InputMaybe; @@ -6899,7 +7200,6 @@ export type QueryGetColonyByAddressArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetColonyByNameArgs = { filter?: InputMaybe; @@ -6909,7 +7209,6 @@ export type QueryGetColonyByNameArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetColonyByTypeArgs = { filter?: InputMaybe; @@ -6919,19 +7218,16 @@ export type QueryGetColonyByTypeArgs = { type: ColonyType; }; - /** Root query type */ export type QueryGetColonyContributorArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyDecisionArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyDecisionByActionIdArgs = { actionId: Scalars['ID']; @@ -6941,7 +7237,6 @@ export type QueryGetColonyDecisionByActionIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetColonyDecisionByColonyAddressArgs = { colonyAddress: Scalars['String']; @@ -6952,25 +7247,21 @@ export type QueryGetColonyDecisionByColonyAddressArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetColonyExtensionArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyFundsClaimArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyHistoricRoleArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyHistoricRoleByDateArgs = { createdAt?: InputMaybe; @@ -6981,55 +7272,64 @@ export type QueryGetColonyHistoricRoleByDateArgs = { type: Scalars['String']; }; - /** Root query type */ export type QueryGetColonyMemberInviteArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyMetadataArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyMotionArgs = { id: Scalars['ID']; }; +/** Root query type */ +export type QueryGetColonyMotionByFinalizationActionIdArgs = { + filter?: InputMaybe; + finalizationActionId: Scalars['ID']; + limit?: InputMaybe; + nextToken?: InputMaybe; + sortDirection?: InputMaybe; +}; /** Root query type */ export type QueryGetColonyMultiSigArgs = { id: Scalars['ID']; }; +/** Root query type */ +export type QueryGetColonyMultiSigByFinalizationActionIdArgs = { + filter?: InputMaybe; + finalizationActionId: Scalars['ID']; + limit?: InputMaybe; + nextToken?: InputMaybe; + sortDirection?: InputMaybe; +}; /** Root query type */ export type QueryGetColonyRoleArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetColonyTokensArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetContractEventArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetContributorReputationArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetContributorsByAddressArgs = { colonyReputationPercentage?: InputMaybe; @@ -7040,7 +7340,6 @@ export type QueryGetContributorsByAddressArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetContributorsByColonyArgs = { colonyAddress: Scalars['ID']; @@ -7051,19 +7350,16 @@ export type QueryGetContributorsByColonyArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetCurrentNetworkInverseFeeArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetCurrentVersionArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetCurrentVersionByKeyArgs = { filter?: InputMaybe; @@ -7073,19 +7369,16 @@ export type QueryGetCurrentVersionByKeyArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetDomainArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetDomainBalanceArgs = { input: DomainBalanceArguments; }; - /** Root query type */ export type QueryGetDomainByNativeSkillIdArgs = { filter?: InputMaybe; @@ -7096,13 +7389,11 @@ export type QueryGetDomainByNativeSkillIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetDomainMetadataArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetDomainsByColonyArgs = { colonyId: Scalars['ID']; @@ -7113,19 +7404,16 @@ export type QueryGetDomainsByColonyArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetExpenditureArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetExpenditureMetadataArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetExpendituresByColonyArgs = { colonyId: Scalars['ID']; @@ -7136,7 +7424,6 @@ export type QueryGetExpendituresByColonyArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetExpendituresByNativeFundingPotIdAndColonyArgs = { colonyId?: InputMaybe; @@ -7147,7 +7434,6 @@ export type QueryGetExpendituresByNativeFundingPotIdAndColonyArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetExtensionByColonyAndHashArgs = { colonyId: Scalars['ID']; @@ -7158,13 +7444,11 @@ export type QueryGetExtensionByColonyAndHashArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetExtensionInstallationsCountArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetExtensionsByHashArgs = { filter?: InputMaybe; @@ -7174,7 +7458,6 @@ export type QueryGetExtensionsByHashArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetFundsClaimsByColonyArgs = { colonyFundsClaimsId: Scalars['ID']; @@ -7185,19 +7468,25 @@ export type QueryGetFundsClaimsByColonyArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetIngestorStatsArgs = { id: Scalars['ID']; }; +/** Root query type */ +export type QueryGetIngestorStatsByChainIdArgs = { + chainId: Scalars['String']; + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; + sortDirection?: InputMaybe; +}; /** Root query type */ export type QueryGetLiquidationAddressArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetLiquidationAddressesByUserAddressArgs = { filter?: InputMaybe; @@ -7207,7 +7496,6 @@ export type QueryGetLiquidationAddressesByUserAddressArgs = { userAddress: Scalars['ID']; }; - /** Root query type */ export type QueryGetMotionByExpenditureIdArgs = { expenditureId: Scalars['ID']; @@ -7217,7 +7505,6 @@ export type QueryGetMotionByExpenditureIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetMotionByTransactionHashArgs = { filter?: InputMaybe; @@ -7227,13 +7514,11 @@ export type QueryGetMotionByTransactionHashArgs = { transactionHash: Scalars['ID']; }; - /** Root query type */ export type QueryGetMotionMessageArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetMotionMessageByMotionIdArgs = { createdAt?: InputMaybe; @@ -7244,19 +7529,16 @@ export type QueryGetMotionMessageByMotionIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetMotionStateArgs = { input?: InputMaybe; }; - /** Root query type */ export type QueryGetMotionTimeoutPeriodsArgs = { input?: InputMaybe; }; - /** Root query type */ export type QueryGetMotionVoterRewardsArgs = { createdAt?: InputMaybe; @@ -7267,6 +7549,10 @@ export type QueryGetMotionVoterRewardsArgs = { sortDirection?: InputMaybe; }; +/** Root query type */ +export type QueryGetMultiChainInfoArgs = { + id: Scalars['ID']; +}; /** Root query type */ export type QueryGetMultiSigByColonyAddressArgs = { @@ -7277,7 +7563,6 @@ export type QueryGetMultiSigByColonyAddressArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetMultiSigByExpenditureIdArgs = { expenditureId: Scalars['ID']; @@ -7287,7 +7572,6 @@ export type QueryGetMultiSigByExpenditureIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetMultiSigByTransactionHashArgs = { filter?: InputMaybe; @@ -7297,13 +7581,11 @@ export type QueryGetMultiSigByTransactionHashArgs = { transactionHash: Scalars['ID']; }; - /** Root query type */ export type QueryGetMultiSigUserSignatureArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetMultiSigUserSignatureByMultiSigIdArgs = { filter?: InputMaybe; @@ -7313,25 +7595,21 @@ export type QueryGetMultiSigUserSignatureByMultiSigIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetNotificationsDataArgs = { userAddress: Scalars['ID']; }; - /** Root query type */ export type QueryGetPrivateBetaInviteCodeArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetProfileArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetProfileByEmailArgs = { email: Scalars['AWSEmail']; @@ -7341,7 +7619,6 @@ export type QueryGetProfileByEmailArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetProfileByUsernameArgs = { displayName: Scalars['String']; @@ -7351,13 +7628,25 @@ export type QueryGetProfileByUsernameArgs = { sortDirection?: InputMaybe; }; +/** Root query type */ +export type QueryGetProxyColoniesByColonyAddressArgs = { + colonyAddress: Scalars['ID']; + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; + sortDirection?: InputMaybe; +}; + +/** Root query type */ +export type QueryGetProxyColonyArgs = { + id: Scalars['ID']; +}; /** Root query type */ export type QueryGetReputationMiningCycleMetadataArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetRoleByColonyArgs = { colonyAddress: Scalars['ID']; @@ -7368,7 +7657,6 @@ export type QueryGetRoleByColonyArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetRoleByDomainAndColonyArgs = { colonyAddress?: InputMaybe; @@ -7379,7 +7667,6 @@ export type QueryGetRoleByDomainAndColonyArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetRoleByTargetAddressAndColonyArgs = { colonyAddress?: InputMaybe; @@ -7390,43 +7677,41 @@ export type QueryGetRoleByTargetAddressAndColonyArgs = { targetAddress: Scalars['ID']; }; - /** Root query type */ export type QueryGetSafeTransactionArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetSafeTransactionDataArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetSafeTransactionStatusArgs = { input?: InputMaybe; }; - /** Root query type */ export type QueryGetStreamingPaymentArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetStreamingPaymentMetadataArgs = { id: Scalars['ID']; }; +/** Root query type */ +export type QueryGetSupportedChainArgs = { + id: Scalars['ID']; +}; /** Root query type */ export type QueryGetTokenArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetTokenByAddressArgs = { filter?: InputMaybe; @@ -7436,19 +7721,16 @@ export type QueryGetTokenByAddressArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetTokenExchangeRateArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetTokenFromEverywhereArgs = { input?: InputMaybe; }; - /** Root query type */ export type QueryGetTokensByTypeArgs = { filter?: InputMaybe; @@ -7458,13 +7740,11 @@ export type QueryGetTokensByTypeArgs = { type: TokenType; }; - /** Root query type */ export type QueryGetTransactionArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetTransactionsByUserArgs = { createdAt?: InputMaybe; @@ -7475,7 +7755,6 @@ export type QueryGetTransactionsByUserArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetTransactionsByUserAndGroupArgs = { filter?: InputMaybe; @@ -7486,13 +7765,11 @@ export type QueryGetTransactionsByUserAndGroupArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetUserArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetUserByAddressArgs = { filter?: InputMaybe; @@ -7502,7 +7779,6 @@ export type QueryGetUserByAddressArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetUserByBridgeCustomerIdArgs = { bridgeCustomerId: Scalars['String']; @@ -7512,7 +7788,6 @@ export type QueryGetUserByBridgeCustomerIdArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetUserByLiquidationAddressArgs = { filter?: InputMaybe; @@ -7522,13 +7797,11 @@ export type QueryGetUserByLiquidationAddressArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetUserReputationArgs = { input?: InputMaybe; }; - /** Root query type */ export type QueryGetUserReputationInColonyArgs = { colonyAddress?: InputMaybe; @@ -7539,13 +7812,11 @@ export type QueryGetUserReputationInColonyArgs = { sortDirection?: InputMaybe; }; - /** Root query type */ export type QueryGetUserStakeArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetUserStakesArgs = { createdAt?: InputMaybe; @@ -7556,19 +7827,16 @@ export type QueryGetUserStakesArgs = { userAddress: Scalars['ID']; }; - /** Root query type */ export type QueryGetUserTokenBalanceArgs = { input?: InputMaybe; }; - /** Root query type */ export type QueryGetUserTokensArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryGetUserVoterRewardsArgs = { createdAt?: InputMaybe; @@ -7579,19 +7847,16 @@ export type QueryGetUserVoterRewardsArgs = { userAddress: Scalars['ID']; }; - /** Root query type */ export type QueryGetVoterRewardsArgs = { input?: InputMaybe; }; - /** Root query type */ export type QueryGetVoterRewardsHistoryArgs = { id: Scalars['ID']; }; - /** Root query type */ export type QueryListAnnotationsArgs = { filter?: InputMaybe; @@ -7599,7 +7864,6 @@ export type QueryListAnnotationsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListCacheTotalBalancesArgs = { filter?: InputMaybe; @@ -7607,7 +7871,6 @@ export type QueryListCacheTotalBalancesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColoniesArgs = { filter?: InputMaybe; @@ -7615,7 +7878,6 @@ export type QueryListColoniesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyActionMetadataArgs = { filter?: InputMaybe; @@ -7623,7 +7885,6 @@ export type QueryListColonyActionMetadataArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyActionsArgs = { filter?: InputMaybe; @@ -7631,7 +7892,6 @@ export type QueryListColonyActionsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyContributorsArgs = { filter?: InputMaybe; @@ -7639,7 +7899,6 @@ export type QueryListColonyContributorsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyDecisionsArgs = { filter?: InputMaybe; @@ -7647,7 +7906,6 @@ export type QueryListColonyDecisionsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyExtensionsArgs = { filter?: InputMaybe; @@ -7655,7 +7913,6 @@ export type QueryListColonyExtensionsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyFundsClaimsArgs = { filter?: InputMaybe; @@ -7663,7 +7920,6 @@ export type QueryListColonyFundsClaimsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyHistoricRolesArgs = { filter?: InputMaybe; @@ -7671,7 +7927,6 @@ export type QueryListColonyHistoricRolesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyMemberInvitesArgs = { filter?: InputMaybe; @@ -7679,7 +7934,6 @@ export type QueryListColonyMemberInvitesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyMetadataArgs = { filter?: InputMaybe; @@ -7687,7 +7941,6 @@ export type QueryListColonyMetadataArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyMotionsArgs = { filter?: InputMaybe; @@ -7695,7 +7948,6 @@ export type QueryListColonyMotionsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyMultiSigsArgs = { filter?: InputMaybe; @@ -7703,7 +7955,6 @@ export type QueryListColonyMultiSigsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyRolesArgs = { filter?: InputMaybe; @@ -7711,7 +7962,6 @@ export type QueryListColonyRolesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListColonyTokensArgs = { filter?: InputMaybe; @@ -7719,7 +7969,6 @@ export type QueryListColonyTokensArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListContractEventsArgs = { filter?: InputMaybe; @@ -7727,7 +7976,6 @@ export type QueryListContractEventsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListContributorReputationsArgs = { filter?: InputMaybe; @@ -7735,7 +7983,6 @@ export type QueryListContributorReputationsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListCurrentNetworkInverseFeesArgs = { filter?: InputMaybe; @@ -7743,7 +7990,6 @@ export type QueryListCurrentNetworkInverseFeesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListCurrentVersionsArgs = { filter?: InputMaybe; @@ -7751,7 +7997,6 @@ export type QueryListCurrentVersionsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListDomainMetadataArgs = { filter?: InputMaybe; @@ -7759,7 +8004,6 @@ export type QueryListDomainMetadataArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListDomainsArgs = { filter?: InputMaybe; @@ -7767,7 +8011,6 @@ export type QueryListDomainsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListExpenditureMetadataArgs = { filter?: InputMaybe; @@ -7775,7 +8018,6 @@ export type QueryListExpenditureMetadataArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListExpendituresArgs = { filter?: InputMaybe; @@ -7783,7 +8025,6 @@ export type QueryListExpendituresArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListExtensionInstallationsCountsArgs = { filter?: InputMaybe; @@ -7791,7 +8032,6 @@ export type QueryListExtensionInstallationsCountsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListIngestorStatsArgs = { filter?: InputMaybe; @@ -7799,7 +8039,6 @@ export type QueryListIngestorStatsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListLiquidationAddressesArgs = { filter?: InputMaybe; @@ -7807,7 +8046,6 @@ export type QueryListLiquidationAddressesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListMotionMessagesArgs = { filter?: InputMaybe; @@ -7815,6 +8053,12 @@ export type QueryListMotionMessagesArgs = { nextToken?: InputMaybe; }; +/** Root query type */ +export type QueryListMultiChainInfosArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; +}; /** Root query type */ export type QueryListMultiSigUserSignaturesArgs = { @@ -7823,7 +8067,6 @@ export type QueryListMultiSigUserSignaturesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListNotificationsDataArgs = { filter?: InputMaybe; @@ -7833,7 +8076,6 @@ export type QueryListNotificationsDataArgs = { userAddress?: InputMaybe; }; - /** Root query type */ export type QueryListPrivateBetaInviteCodesArgs = { filter?: InputMaybe; @@ -7841,7 +8083,6 @@ export type QueryListPrivateBetaInviteCodesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListProfilesArgs = { filter?: InputMaybe; @@ -7849,6 +8090,12 @@ export type QueryListProfilesArgs = { nextToken?: InputMaybe; }; +/** Root query type */ +export type QueryListProxyColoniesArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; +}; /** Root query type */ export type QueryListReputationMiningCycleMetadataArgs = { @@ -7857,7 +8104,6 @@ export type QueryListReputationMiningCycleMetadataArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListSafeTransactionDataArgs = { filter?: InputMaybe; @@ -7865,7 +8111,6 @@ export type QueryListSafeTransactionDataArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListSafeTransactionsArgs = { filter?: InputMaybe; @@ -7873,7 +8118,6 @@ export type QueryListSafeTransactionsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListStreamingPaymentMetadataArgs = { filter?: InputMaybe; @@ -7881,7 +8125,6 @@ export type QueryListStreamingPaymentMetadataArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListStreamingPaymentsArgs = { filter?: InputMaybe; @@ -7889,6 +8132,12 @@ export type QueryListStreamingPaymentsArgs = { nextToken?: InputMaybe; }; +/** Root query type */ +export type QueryListSupportedChainsArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; +}; /** Root query type */ export type QueryListTokenExchangeRatesArgs = { @@ -7897,7 +8146,6 @@ export type QueryListTokenExchangeRatesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListTokensArgs = { filter?: InputMaybe; @@ -7905,7 +8153,6 @@ export type QueryListTokensArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListTransactionsArgs = { filter?: InputMaybe; @@ -7913,7 +8160,6 @@ export type QueryListTransactionsArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListUserStakesArgs = { filter?: InputMaybe; @@ -7921,7 +8167,6 @@ export type QueryListUserStakesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListUserTokensArgs = { filter?: InputMaybe; @@ -7929,7 +8174,6 @@ export type QueryListUserTokensArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListUsersArgs = { filter?: InputMaybe; @@ -7937,7 +8181,6 @@ export type QueryListUsersArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QueryListVoterRewardsHistoriesArgs = { filter?: InputMaybe; @@ -7945,10 +8188,11 @@ export type QueryListVoterRewardsHistoriesArgs = { nextToken?: InputMaybe; }; - /** Root query type */ export type QuerySearchColonyActionsArgs = { - aggregates?: InputMaybe>>; + aggregates?: InputMaybe< + Array> + >; filter?: InputMaybe; from?: InputMaybe; limit?: InputMaybe; @@ -7956,10 +8200,11 @@ export type QuerySearchColonyActionsArgs = { sort?: InputMaybe>>; }; - /** Root query type */ export type QuerySearchColonyContributorsArgs = { - aggregates?: InputMaybe>>; + aggregates?: InputMaybe< + Array> + >; filter?: InputMaybe; from?: InputMaybe; limit?: InputMaybe; @@ -7967,7 +8212,6 @@ export type QuerySearchColonyContributorsArgs = { sort?: InputMaybe>>; }; - /** Root query type */ export type QueryTokenExhangeRateByTokenIdArgs = { date?: InputMaybe; @@ -8011,7 +8255,6 @@ export type SafeTransaction = { updatedAt: Scalars['AWSDateTime']; }; - export type SafeTransactionTransactionsArgs = { filter?: InputMaybe; id?: InputMaybe; @@ -8045,7 +8288,7 @@ export enum SafeTransactionType { ContractInteraction = 'CONTRACT_INTERACTION', RawTransaction = 'RAW_TRANSACTION', TransferFunds = 'TRANSFER_FUNDS', - TransferNft = 'TRANSFER_NFT' + TransferNft = 'TRANSFER_NFT', } export type SearchableAggregateBucketResult = { @@ -8059,7 +8302,9 @@ export type SearchableAggregateBucketResultItem = { key: Scalars['String']; }; -export type SearchableAggregateGenericResult = SearchableAggregateBucketResult | SearchableAggregateScalarResult; +export type SearchableAggregateGenericResult = + | SearchableAggregateBucketResult + | SearchableAggregateScalarResult; export type SearchableAggregateResult = { __typename?: 'SearchableAggregateResult'; @@ -8077,7 +8322,7 @@ export enum SearchableAggregateType { Max = 'max', Min = 'min', Sum = 'sum', - Terms = 'terms' + Terms = 'terms', } export type SearchableBooleanFilterInput = { @@ -8095,6 +8340,7 @@ export enum SearchableColonyActionAggregateField { CreatedAt = 'createdAt', ExpenditureId = 'expenditureId', ExpenditureSlotIds = 'expenditureSlotIds', + FinalizedActionId = 'finalizedActionId', FromDomainId = 'fromDomainId', FromPotId = 'fromPotId', Id = 'id', @@ -8106,6 +8352,7 @@ export enum SearchableColonyActionAggregateField { Members = 'members', MotionDomainId = 'motionDomainId', MotionId = 'motionId', + MultiChainInfoId = 'multiChainInfoId', MultiSigId = 'multiSigId', NetworkFee = 'networkFee', NewColonyVersion = 'newColonyVersion', @@ -8116,11 +8363,12 @@ export enum SearchableColonyActionAggregateField { RolesAreMultiSig = 'rolesAreMultiSig', RootHash = 'rootHash', ShowInActionsList = 'showInActionsList', + TargetChainId = 'targetChainId', ToDomainId = 'toDomainId', ToPotId = 'toPotId', TokenAddress = 'tokenAddress', Type = 'type', - UpdatedAt = 'updatedAt' + UpdatedAt = 'updatedAt', } export type SearchableColonyActionAggregationInput = { @@ -8148,6 +8396,7 @@ export type SearchableColonyActionFilterInput = { createdAt?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; id?: InputMaybe; @@ -8159,6 +8408,7 @@ export type SearchableColonyActionFilterInput = { members?: InputMaybe; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -8171,6 +8421,7 @@ export type SearchableColonyActionFilterInput = { rolesAreMultiSig?: InputMaybe; rootHash?: InputMaybe; showInActionsList?: InputMaybe; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -8193,6 +8444,7 @@ export enum SearchableColonyActionSortableFields { CreatedAt = 'createdAt', ExpenditureId = 'expenditureId', ExpenditureSlotIds = 'expenditureSlotIds', + FinalizedActionId = 'finalizedActionId', FromDomainId = 'fromDomainId', FromPotId = 'fromPotId', Id = 'id', @@ -8204,6 +8456,7 @@ export enum SearchableColonyActionSortableFields { Members = 'members', MotionDomainId = 'motionDomainId', MotionId = 'motionId', + MultiChainInfoId = 'multiChainInfoId', MultiSigId = 'multiSigId', NetworkFee = 'networkFee', NewColonyVersion = 'newColonyVersion', @@ -8214,10 +8467,11 @@ export enum SearchableColonyActionSortableFields { RolesAreMultiSig = 'rolesAreMultiSig', RootHash = 'rootHash', ShowInActionsList = 'showInActionsList', + TargetChainId = 'targetChainId', ToDomainId = 'toDomainId', ToPotId = 'toPotId', TokenAddress = 'tokenAddress', - UpdatedAt = 'updatedAt' + UpdatedAt = 'updatedAt', } export enum SearchableColonyContributorAggregateField { @@ -8231,7 +8485,7 @@ export enum SearchableColonyContributorAggregateField { IsVerified = 'isVerified', IsWatching = 'isWatching', Type = 'type', - UpdatedAt = 'updatedAt' + UpdatedAt = 'updatedAt', } export type SearchableColonyContributorAggregationInput = { @@ -8280,7 +8534,7 @@ export enum SearchableColonyContributorSortableFields { Id = 'id', IsVerified = 'isVerified', IsWatching = 'isWatching', - UpdatedAt = 'updatedAt' + UpdatedAt = 'updatedAt', } export type SearchableFloatFilterInput = { @@ -8322,7 +8576,7 @@ export type SearchableIntFilterInput = { export enum SearchableSortDirection { Asc = 'asc', - Desc = 'desc' + Desc = 'desc', } export type SearchableStringFilterInput = { @@ -8375,13 +8629,13 @@ export enum SortingMethod { /** Sort members by lowest reputation */ ByLowestRep = 'BY_LOWEST_REP', /** Sort members by having more permissions */ - ByMorePermissions = 'BY_MORE_PERMISSIONS' + ByMorePermissions = 'BY_MORE_PERMISSIONS', } export enum SplitPaymentDistributionType { Equal = 'EQUAL', Reputation = 'REPUTATION', - Unequal = 'UNEQUAL' + Unequal = 'UNEQUAL', } export type StakedExpenditureParams = { @@ -8432,7 +8686,7 @@ export type StreamingPayment = { export enum StreamingPaymentEndCondition { FixedTime = 'FIXED_TIME', LimitReached = 'LIMIT_REACHED', - WhenCancelled = 'WHEN_CANCELLED' + WhenCancelled = 'WHEN_CANCELLED', } export type StreamingPaymentMetadata = { @@ -8474,15 +8728,18 @@ export type Subscription = { onCreateIngestorStats?: Maybe; onCreateLiquidationAddress?: Maybe; onCreateMotionMessage?: Maybe; + onCreateMultiChainInfo?: Maybe; onCreateMultiSigUserSignature?: Maybe; onCreateNotificationsData?: Maybe; onCreatePrivateBetaInviteCode?: Maybe; onCreateProfile?: Maybe; + onCreateProxyColony?: Maybe; onCreateReputationMiningCycleMetadata?: Maybe; onCreateSafeTransaction?: Maybe; onCreateSafeTransactionData?: Maybe; onCreateStreamingPayment?: Maybe; onCreateStreamingPaymentMetadata?: Maybe; + onCreateSupportedChain?: Maybe; onCreateToken?: Maybe; onCreateTokenExchangeRate?: Maybe; onCreateTransaction?: Maybe; @@ -8518,15 +8775,18 @@ export type Subscription = { onDeleteIngestorStats?: Maybe; onDeleteLiquidationAddress?: Maybe; onDeleteMotionMessage?: Maybe; + onDeleteMultiChainInfo?: Maybe; onDeleteMultiSigUserSignature?: Maybe; onDeleteNotificationsData?: Maybe; onDeletePrivateBetaInviteCode?: Maybe; onDeleteProfile?: Maybe; + onDeleteProxyColony?: Maybe; onDeleteReputationMiningCycleMetadata?: Maybe; onDeleteSafeTransaction?: Maybe; onDeleteSafeTransactionData?: Maybe; onDeleteStreamingPayment?: Maybe; onDeleteStreamingPaymentMetadata?: Maybe; + onDeleteSupportedChain?: Maybe; onDeleteToken?: Maybe; onDeleteTokenExchangeRate?: Maybe; onDeleteTransaction?: Maybe; @@ -8562,15 +8822,18 @@ export type Subscription = { onUpdateIngestorStats?: Maybe; onUpdateLiquidationAddress?: Maybe; onUpdateMotionMessage?: Maybe; + onUpdateMultiChainInfo?: Maybe; onUpdateMultiSigUserSignature?: Maybe; onUpdateNotificationsData?: Maybe; onUpdatePrivateBetaInviteCode?: Maybe; onUpdateProfile?: Maybe; + onUpdateProxyColony?: Maybe; onUpdateReputationMiningCycleMetadata?: Maybe; onUpdateSafeTransaction?: Maybe; onUpdateSafeTransactionData?: Maybe; onUpdateStreamingPayment?: Maybe; onUpdateStreamingPaymentMetadata?: Maybe; + onUpdateSupportedChain?: Maybe; onUpdateToken?: Maybe; onUpdateTokenExchangeRate?: Maybe; onUpdateTransaction?: Maybe; @@ -8580,666 +8843,580 @@ export type Subscription = { onUpdateVoterRewardsHistory?: Maybe; }; - export type SubscriptionOnCreateAnnotationArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateCacheTotalBalanceArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyActionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyActionMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyContributorArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyDecisionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyExtensionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyFundsClaimArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyHistoricRoleArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyMemberInviteArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyMotionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyMultiSigArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyRoleArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateColonyTokensArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateContractEventArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateContributorReputationArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateCurrentNetworkInverseFeeArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateCurrentVersionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateDomainArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateDomainMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateExpenditureArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateExpenditureMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateExtensionInstallationsCountArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateIngestorStatsArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateLiquidationAddressArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateMotionMessageArgs = { filter?: InputMaybe; }; +export type SubscriptionOnCreateMultiChainInfoArgs = { + filter?: InputMaybe; +}; export type SubscriptionOnCreateMultiSigUserSignatureArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateNotificationsDataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreatePrivateBetaInviteCodeArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateProfileArgs = { filter?: InputMaybe; }; +export type SubscriptionOnCreateProxyColonyArgs = { + filter?: InputMaybe; +}; export type SubscriptionOnCreateReputationMiningCycleMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateSafeTransactionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateSafeTransactionDataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateStreamingPaymentArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateStreamingPaymentMetadataArgs = { filter?: InputMaybe; }; +export type SubscriptionOnCreateSupportedChainArgs = { + filter?: InputMaybe; +}; export type SubscriptionOnCreateTokenArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateTokenExchangeRateArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateTransactionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateUserArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateUserStakeArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateUserTokensArgs = { filter?: InputMaybe; }; - export type SubscriptionOnCreateVoterRewardsHistoryArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteAnnotationArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteCacheTotalBalanceArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyActionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyActionMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyContributorArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyDecisionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyExtensionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyFundsClaimArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyHistoricRoleArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyMemberInviteArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyMotionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyMultiSigArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyRoleArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteColonyTokensArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteContractEventArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteContributorReputationArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteCurrentNetworkInverseFeeArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteCurrentVersionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteDomainArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteDomainMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteExpenditureArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteExpenditureMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteExtensionInstallationsCountArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteIngestorStatsArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteLiquidationAddressArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteMotionMessageArgs = { filter?: InputMaybe; }; +export type SubscriptionOnDeleteMultiChainInfoArgs = { + filter?: InputMaybe; +}; export type SubscriptionOnDeleteMultiSigUserSignatureArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteNotificationsDataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeletePrivateBetaInviteCodeArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteProfileArgs = { filter?: InputMaybe; }; +export type SubscriptionOnDeleteProxyColonyArgs = { + filter?: InputMaybe; +}; export type SubscriptionOnDeleteReputationMiningCycleMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteSafeTransactionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteSafeTransactionDataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteStreamingPaymentArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteStreamingPaymentMetadataArgs = { filter?: InputMaybe; }; +export type SubscriptionOnDeleteSupportedChainArgs = { + filter?: InputMaybe; +}; export type SubscriptionOnDeleteTokenArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteTokenExchangeRateArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteTransactionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteUserArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteUserStakeArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteUserTokensArgs = { filter?: InputMaybe; }; - export type SubscriptionOnDeleteVoterRewardsHistoryArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateAnnotationArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateCacheTotalBalanceArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyActionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyActionMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyContributorArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyDecisionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyExtensionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyFundsClaimArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyHistoricRoleArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyMemberInviteArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyMotionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyMultiSigArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyRoleArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateColonyTokensArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateContractEventArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateContributorReputationArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateCurrentNetworkInverseFeeArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateCurrentVersionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateDomainArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateDomainMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateExpenditureArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateExpenditureMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateExtensionInstallationsCountArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateIngestorStatsArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateLiquidationAddressArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateMotionMessageArgs = { filter?: InputMaybe; }; +export type SubscriptionOnUpdateMultiChainInfoArgs = { + filter?: InputMaybe; +}; export type SubscriptionOnUpdateMultiSigUserSignatureArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateNotificationsDataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdatePrivateBetaInviteCodeArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateProfileArgs = { filter?: InputMaybe; }; +export type SubscriptionOnUpdateProxyColonyArgs = { + filter?: InputMaybe; +}; export type SubscriptionOnUpdateReputationMiningCycleMetadataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateSafeTransactionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateSafeTransactionDataArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateStreamingPaymentArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateStreamingPaymentMetadataArgs = { filter?: InputMaybe; }; +export type SubscriptionOnUpdateSupportedChainArgs = { + filter?: InputMaybe; +}; export type SubscriptionOnUpdateTokenArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateTokenExchangeRateArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateTransactionArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateUserArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateUserStakeArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateUserTokensArgs = { filter?: InputMaybe; }; - export type SubscriptionOnUpdateVoterRewardsHistoryArgs = { filter?: InputMaybe; }; +export type SupportedChain = { + __typename?: 'SupportedChain'; + createdAt: Scalars['AWSDateTime']; + /** The chainId of the supported chain */ + id: Scalars['ID']; + /** A flag that tells us if the supported chain is active or not */ + isActive?: Maybe; + updatedAt: Scalars['AWSDateTime']; +}; + /** Represents the currencies/tokens that users' balances can be converted to (for display purposes) */ export enum SupportedCurrencies { Brl = 'BRL', @@ -9251,7 +9428,7 @@ export enum SupportedCurrencies { Inr = 'INR', Jpy = 'JPY', Krw = 'KRW', - Usd = 'USD' + Usd = 'USD', } /** Return type for domain balance for a timeframe item */ @@ -9268,7 +9445,7 @@ export enum TimeframeType { Daily = 'DAILY', Monthly = 'MONTHLY', Total = 'TOTAL', - Weekly = 'WEEKLY' + Weekly = 'WEEKLY', } /** Represents an ERC20-compatible token that is used by Colonies and users */ @@ -9299,7 +9476,6 @@ export type Token = { validated?: Maybe; }; - /** Represents an ERC20-compatible token that is used by Colonies and users */ export type TokenColoniesArgs = { filter?: InputMaybe; @@ -9308,7 +9484,6 @@ export type TokenColoniesArgs = { sortDirection?: InputMaybe; }; - /** Represents an ERC20-compatible token that is used by Colonies and users */ export type TokenUsersArgs = { filter?: InputMaybe; @@ -9365,12 +9540,14 @@ export enum TokenType { /** A (ERC20-compatible) token that was deployed with Colony. It has a few more features, like minting through the Colony itself */ Colony = 'COLONY', /** An ERC20-compatible token */ - Erc20 = 'ERC20' + Erc20 = 'ERC20', } /** Represents a transaction made in a colony by a user */ export type Transaction = { __typename?: 'Transaction'; + /** ID of the action associated with the transaction */ + associatedActionId?: Maybe; /** The block hash of the transaction */ blockHash?: Maybe; /** The block number of the transaction */ @@ -9442,7 +9619,7 @@ export enum TransactionErrors { EventData = 'EVENT_DATA', Receipt = 'RECEIPT', Send = 'SEND', - Unsuccessful = 'UNSUCCESSFUL' + Unsuccessful = 'UNSUCCESSFUL', } export type TransactionGroup = { @@ -9473,7 +9650,7 @@ export enum TransactionStatus { Failed = 'FAILED', Pending = 'PENDING', Ready = 'READY', - Succeeded = 'SUCCEEDED' + Succeeded = 'SUCCEEDED', } export type UpdateAnnotationInput = { @@ -9499,7 +9676,9 @@ export type UpdateColonyActionInput = { amount?: InputMaybe; annotationId?: InputMaybe; approvedTokenChanges?: InputMaybe; - arbitraryTransactions?: InputMaybe>; + arbitraryTransactions?: InputMaybe< + Array + >; blockNumber?: InputMaybe; colonyActionsId?: InputMaybe; colonyDecisionId?: InputMaybe; @@ -9508,6 +9687,7 @@ export type UpdateColonyActionInput = { expenditureId?: InputMaybe; expenditureSlotChanges?: InputMaybe; expenditureSlotIds?: InputMaybe>; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; id: Scalars['ID']; @@ -9519,6 +9699,7 @@ export type UpdateColonyActionInput = { members?: InputMaybe>; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -9531,6 +9712,7 @@ export type UpdateColonyActionInput = { rolesAreMultiSig?: InputMaybe; rootHash?: InputMaybe; showInActionsList?: InputMaybe; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -9609,8 +9791,9 @@ export type UpdateColonyHistoricRoleInput = { export type UpdateColonyInput = { balances?: InputMaybe; - chainFundsClaim?: InputMaybe; + chainFundsClaim?: InputMaybe>>; chainMetadata?: InputMaybe; + colonyCreateEvent?: InputMaybe; colonyMemberInviteCode?: InputMaybe; expendituresGlobalClaimDelay?: InputMaybe; id: Scalars['ID']; @@ -9650,6 +9833,7 @@ export type UpdateColonyMotionInput = { expenditureFunding?: InputMaybe>; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe>; + finalizationActionId?: InputMaybe; hasObjection?: InputMaybe; id: Scalars['ID']; isDecision?: InputMaybe; @@ -9679,6 +9863,7 @@ export type UpdateColonyMultiSigInput = { executedBy?: InputMaybe; expenditureFunding?: InputMaybe>; expenditureId?: InputMaybe; + finalizationActionId?: InputMaybe; hasActionCompleted?: InputMaybe; id: Scalars['ID']; isDecision?: InputMaybe; @@ -9837,6 +10022,7 @@ export type UpdateExtensionInstallationsCountInput = { }; export type UpdateIngestorStatsInput = { + chainId?: InputMaybe; id: Scalars['ID']; value?: InputMaybe; }; @@ -9859,6 +10045,13 @@ export type UpdateMotionMessageInput = { vote?: InputMaybe; }; +export type UpdateMultiChainInfoInput = { + completedOnMainChain?: InputMaybe; + completedOnProxyChain?: InputMaybe; + id: Scalars['ID']; + wormholeInfo?: InputMaybe; +}; + export type UpdateMultiSigUserSignatureInput = { colonyAddress?: InputMaybe; createdAt?: InputMaybe; @@ -9901,6 +10094,13 @@ export type UpdateProfileInput = { website?: InputMaybe; }; +export type UpdateProxyColonyInput = { + chainId?: InputMaybe; + colonyAddress?: InputMaybe; + id: Scalars['ID']; + isActive?: InputMaybe; +}; + export type UpdateReputationMiningCycleMetadataInput = { id: Scalars['ID']; lastCompletedAt?: InputMaybe; @@ -9946,6 +10146,11 @@ export type UpdateStreamingPaymentMetadataInput = { limitAmount?: InputMaybe; }; +export type UpdateSupportedChainInput = { + id: Scalars['ID']; + isActive?: InputMaybe; +}; + export type UpdateTokenExchangeRateInput = { date?: InputMaybe; id: Scalars['ID']; @@ -9967,6 +10172,7 @@ export type UpdateTokenInput = { }; export type UpdateTransactionInput = { + associatedActionId?: InputMaybe; blockHash?: InputMaybe; blockNumber?: InputMaybe; colonyAddress?: InputMaybe; @@ -10053,7 +10259,6 @@ export type User = { userPrivateBetaInviteCodeId?: Maybe; }; - /** Represents a User within the Colony Network */ export type UserLiquidationAddressesArgs = { filter?: InputMaybe; @@ -10062,7 +10267,6 @@ export type UserLiquidationAddressesArgs = { sortDirection?: InputMaybe; }; - /** Represents a User within the Colony Network */ export type UserRolesArgs = { colonyAddress?: InputMaybe; @@ -10072,7 +10276,6 @@ export type UserRolesArgs = { sortDirection?: InputMaybe; }; - /** Represents a User within the Colony Network */ export type UserTokensArgs = { filter?: InputMaybe; @@ -10081,7 +10284,6 @@ export type UserTokensArgs = { sortDirection?: InputMaybe; }; - /** Represents a User within the Colony Network */ export type UserTransactionHistoryArgs = { createdAt?: InputMaybe; @@ -10129,7 +10331,7 @@ export type UserStake = { /** Type of stake a user can make */ export enum UserStakeType { Motion = 'MOTION', - StakedExpenditure = 'STAKED_EXPENDITURE' + StakedExpenditure = 'STAKED_EXPENDITURE', } export type UserTokens = { @@ -10247,471 +10449,1373 @@ export type VotingReputationParamsInput = { voterRewardFraction: Scalars['String']; }; -export type ActionMetadataInfoFragment = { __typename?: 'ColonyAction', id: string, colonyDecisionId?: string | null, amount?: string | null, networkFee?: string | null, type: ColonyActionType, showInActionsList: boolean, colonyId: string, initiatorAddress: string, recipientAddress?: string | null, members?: Array | null, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', id: string, displayName: string, avatar?: string | null, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, oldDisplayName: string, newDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null }> | null } | null, payments?: Array<{ __typename?: 'Payment', recipientAddress: string }> | null }; - -export type ColonyFragment = { __typename?: 'Colony', colonyAddress: string, nativeToken: { __typename?: 'Token', symbol: string, tokenAddress: string }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', id: string, tokenAddress: string } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', nextToken?: string | null, items: Array<{ __typename?: 'Domain', id: string, nativeSkillId: string } | null> } | null }; - -export type ColonyMetadataFragment = { __typename?: 'ColonyMetadata', id: string, displayName: string, avatar?: string | null, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, oldDisplayName: string, newDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null }> | null }; - -export type ColonyWithRootRolesFragment = { __typename?: 'Colony', id: string, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetUser?: { __typename?: 'User', id: string, profile?: { __typename?: 'Profile', displayName?: string | null, id: string } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null }; - -export type ExpenditureBalanceFragment = { __typename?: 'ExpenditureBalance', tokenAddress: string, amount: string }; - -export type ExpenditureFragment = { __typename?: 'Expenditure', id: string, status: ExpenditureStatus, ownerAddress: string, userStakeId?: string | null, createdAt: string, firstEditTransactionHash?: string | null, splitPaymentPayoutClaimedNotificationSent?: boolean | null, type: ExpenditureType, slots: Array<{ __typename?: 'ExpenditureSlot', id: number, recipientAddress?: string | null, claimDelay?: string | null, payoutModifier?: number | null, payouts?: Array<{ __typename?: 'ExpenditurePayout', tokenAddress: string, amount: string, isClaimed: boolean, networkFee?: string | null }> | null }>, motions?: { __typename?: 'ModelColonyMotionConnection', items: Array<{ __typename?: 'ColonyMotion', transactionHash: string, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null> } | null, balances?: Array<{ __typename?: 'ExpenditureBalance', tokenAddress: string, amount: string }> | null, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, actions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', type: ColonyActionType, id: string } | null> } | null }; - -export type ExpenditureSlotFragment = { __typename?: 'ExpenditureSlot', id: number, recipientAddress?: string | null, claimDelay?: string | null, payoutModifier?: number | null, payouts?: Array<{ __typename?: 'ExpenditurePayout', tokenAddress: string, amount: string, isClaimed: boolean, networkFee?: string | null }> | null }; - -export type ExtensionFragment = { __typename?: 'ColonyExtension', id: string, hash: string, colonyId: string, isInitialized: boolean, version: number }; - -export type ColonyMotionFragment = { __typename?: 'ColonyMotion', id: string, nativeMotionId: string, requiredStake: string, remainingStakes: Array, userMinStake: string, nativeMotionDomainId: string, isFinalized: boolean, createdBy: string, repSubmitted: string, skillRep: string, hasObjection: boolean, motionDomainId: string, isDecision: boolean, transactionHash: string, expenditureId?: string | null, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', nay: string, yay: string }, percentage: { __typename?: 'MotionStakeValues', nay: string, yay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null } }; - -export type VoterRecordFragment = { __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }; +export type MultiChainInfoFragment = { + __typename?: 'MultiChainInfo'; + id: string; + completedOnMainChain: boolean; + completedOnProxyChain: boolean; + wormholeInfo?: { + __typename?: 'ActionWormholeInfo'; + emitterChainId?: number | null; + emitterAddress: string; + sequence: string; + } | null; +}; -export type StakerRewardFragment = { __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }; +export type ActionMetadataInfoFragment = { + __typename?: 'ColonyAction'; + id: string; + colonyDecisionId?: string | null; + amount?: string | null; + networkFee?: string | null; + type: ColonyActionType; + showInActionsList: boolean; + colonyId: string; + initiatorAddress: string; + recipientAddress?: string | null; + members?: Array | null; + multiChainInfoId?: string | null; + targetChainId?: number | null; + pendingDomainMetadata?: { + __typename?: 'DomainMetadata'; + name: string; + color: DomainColor; + description?: string | null; + changelog?: Array<{ + __typename?: 'DomainMetadataChangelog'; + transactionHash: string; + oldName: string; + newName: string; + oldColor: DomainColor; + newColor: DomainColor; + oldDescription?: string | null; + newDescription?: string | null; + }> | null; + } | null; + pendingColonyMetadata?: { + __typename?: 'ColonyMetadata'; + id: string; + displayName: string; + avatar?: string | null; + thumbnail?: string | null; + description?: string | null; + externalLinks?: Array<{ + __typename?: 'ExternalLink'; + name: ExternalLinks; + link: string; + }> | null; + objective?: { + __typename?: 'ColonyObjective'; + title: string; + description: string; + progress: number; + } | null; + changelog?: Array<{ + __typename?: 'ColonyMetadataChangelog'; + transactionHash: string; + oldDisplayName: string; + newDisplayName: string; + hasAvatarChanged: boolean; + hasDescriptionChanged?: boolean | null; + haveExternalLinksChanged?: boolean | null; + hasObjectiveChanged?: boolean | null; + }> | null; + } | null; + payments?: Array<{ __typename?: 'Payment'; recipientAddress: string }> | null; + multiChainInfo?: { + __typename?: 'MultiChainInfo'; + id: string; + completedOnMainChain: boolean; + completedOnProxyChain: boolean; + wormholeInfo?: { + __typename?: 'ActionWormholeInfo'; + emitterChainId?: number | null; + emitterAddress: string; + sequence: string; + } | null; + } | null; +}; + +export type ColonyFragment = { + __typename?: 'Colony'; + colonyAddress: string; + nativeToken: { __typename?: 'Token'; symbol: string; tokenAddress: string }; + tokens?: { + __typename?: 'ModelColonyTokensConnection'; + items: Array<{ + __typename?: 'ColonyTokens'; + id: string; + tokenAddress: string; + } | null>; + } | null; + motionsWithUnclaimedStakes?: Array<{ + __typename?: 'ColonyUnclaimedStake'; + motionId: string; + unclaimedRewards: Array<{ + __typename?: 'StakerRewards'; + address: string; + isClaimed: boolean; + rewards: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + }>; + }> | null; + domains?: { + __typename?: 'ModelDomainConnection'; + nextToken?: string | null; + items: Array<{ + __typename?: 'Domain'; + id: string; + nativeSkillId: string; + } | null>; + } | null; +}; + +export type ColonyMetadataFragment = { + __typename?: 'ColonyMetadata'; + id: string; + displayName: string; + avatar?: string | null; + thumbnail?: string | null; + description?: string | null; + externalLinks?: Array<{ + __typename?: 'ExternalLink'; + name: ExternalLinks; + link: string; + }> | null; + objective?: { + __typename?: 'ColonyObjective'; + title: string; + description: string; + progress: number; + } | null; + changelog?: Array<{ + __typename?: 'ColonyMetadataChangelog'; + transactionHash: string; + oldDisplayName: string; + newDisplayName: string; + hasAvatarChanged: boolean; + hasDescriptionChanged?: boolean | null; + haveExternalLinksChanged?: boolean | null; + hasObjectiveChanged?: boolean | null; + }> | null; +}; + +export type ColonyWithRootRolesFragment = { + __typename?: 'Colony'; + id: string; + roles?: { + __typename?: 'ModelColonyRoleConnection'; + items: Array<{ + __typename?: 'ColonyRole'; + id: string; + targetUser?: { + __typename?: 'User'; + id: string; + profile?: { + __typename?: 'Profile'; + displayName?: string | null; + id: string; + } | null; + notificationsData?: { + __typename?: 'NotificationsData'; + magicbellUserId: string; + notificationsDisabled: boolean; + mutedColonyAddresses: Array; + paymentNotificationsDisabled: boolean; + mentionNotificationsDisabled: boolean; + adminNotificationsDisabled: boolean; + } | null; + } | null; + } | null>; + } | null; +}; + +export type ExpenditureBalanceFragment = { + __typename?: 'ExpenditureBalance'; + tokenAddress: string; + amount: string; +}; -export type MotionStakesFragment = { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', nay: string, yay: string }, percentage: { __typename?: 'MotionStakeValues', nay: string, yay: string } }; +export type ExpenditureFragment = { + __typename?: 'Expenditure'; + id: string; + status: ExpenditureStatus; + ownerAddress: string; + userStakeId?: string | null; + createdAt: string; + firstEditTransactionHash?: string | null; + splitPaymentPayoutClaimedNotificationSent?: boolean | null; + type: ExpenditureType; + slots: Array<{ + __typename?: 'ExpenditureSlot'; + id: number; + recipientAddress?: string | null; + claimDelay?: string | null; + payoutModifier?: number | null; + payouts?: Array<{ + __typename?: 'ExpenditurePayout'; + tokenAddress: string; + amount: string; + isClaimed: boolean; + networkFee?: string | null; + }> | null; + }>; + motions?: { + __typename?: 'ModelColonyMotionConnection'; + items: Array<{ + __typename?: 'ColonyMotion'; + transactionHash: string; + action?: { __typename?: 'ColonyAction'; type: ColonyActionType } | null; + } | null>; + } | null; + balances?: Array<{ + __typename?: 'ExpenditureBalance'; + tokenAddress: string; + amount: string; + }> | null; + metadata?: { + __typename?: 'ExpenditureMetadata'; + distributionType?: SplitPaymentDistributionType | null; + } | null; + actions?: { + __typename?: 'ModelColonyActionConnection'; + items: Array<{ + __typename?: 'ColonyAction'; + type: ColonyActionType; + id: string; + } | null>; + } | null; +}; + +export type ExpenditureSlotFragment = { + __typename?: 'ExpenditureSlot'; + id: number; + recipientAddress?: string | null; + claimDelay?: string | null; + payoutModifier?: number | null; + payouts?: Array<{ + __typename?: 'ExpenditurePayout'; + tokenAddress: string; + amount: string; + isClaimed: boolean; + networkFee?: string | null; + }> | null; +}; + +export type ExtensionFragment = { + __typename?: 'ColonyExtension'; + id: string; + hash: string; + colonyId: string; + isInitialized: boolean; + version: number; +}; -export type UserMotionStakesFragment = { __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }; +export type ColonyMotionFragment = { + __typename?: 'ColonyMotion'; + id: string; + nativeMotionId: string; + requiredStake: string; + remainingStakes: Array; + userMinStake: string; + nativeMotionDomainId: string; + isFinalized: boolean; + createdBy: string; + repSubmitted: string; + skillRep: string; + hasObjection: boolean; + motionDomainId: string; + isDecision: boolean; + transactionHash: string; + expenditureId?: string | null; + motionStakes: { + __typename?: 'MotionStakes'; + raw: { __typename?: 'MotionStakeValues'; nay: string; yay: string }; + percentage: { __typename?: 'MotionStakeValues'; nay: string; yay: string }; + }; + usersStakes: Array<{ + __typename?: 'UserMotionStakes'; + address: string; + stakes: { + __typename?: 'MotionStakes'; + raw: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + percentage: { + __typename?: 'MotionStakeValues'; + yay: string; + nay: string; + }; + }; + }>; + stakerRewards: Array<{ + __typename?: 'StakerRewards'; + address: string; + isClaimed: boolean; + rewards: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + }>; + voterRecord: Array<{ + __typename?: 'VoterRecord'; + address: string; + voteCount: string; + vote?: number | null; + }>; + revealedVotes: { + __typename?: 'MotionStakes'; + raw: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + percentage: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + }; + motionStateHistory: { + __typename?: 'MotionStateHistory'; + hasVoted: boolean; + hasPassed: boolean; + hasFailed: boolean; + hasFailedNotFinalizable: boolean; + inRevealPhase: boolean; + yaySideFullyStakedAt?: string | null; + naySideFullyStakedAt?: string | null; + allVotesSubmittedAt?: string | null; + allVotesRevealedAt?: string | null; + endedAt?: string | null; + finalizedAt?: string | null; + }; +}; + +export type VoterRecordFragment = { + __typename?: 'VoterRecord'; + address: string; + voteCount: string; + vote?: number | null; +}; -export type DomainMetadataFragment = { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null }; +export type StakerRewardFragment = { + __typename?: 'StakerRewards'; + address: string; + isClaimed: boolean; + rewards: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; +}; -export type MultiSigUserSignatureFragment = { __typename?: 'MultiSigUserSignature', id: string, multiSigId: string, role: number, colonyAddress: string, userAddress: string, vote: MultiSigVote, createdAt: string }; +export type MotionStakesFragment = { + __typename?: 'MotionStakes'; + raw: { __typename?: 'MotionStakeValues'; nay: string; yay: string }; + percentage: { __typename?: 'MotionStakeValues'; nay: string; yay: string }; +}; -export type ColonyMultiSigFragment = { __typename?: 'ColonyMultiSig', id: string, colonyAddress: string, nativeMultiSigId: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, isRejected: boolean, isDecision: boolean, hasActionCompleted: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, createdAt: string, expenditureId?: string | null, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, multiSigId: string, role: number, colonyAddress: string, userAddress: string, vote: MultiSigVote, createdAt: string } | null> } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null }; +export type UserMotionStakesFragment = { + __typename?: 'UserMotionStakes'; + address: string; + stakes: { + __typename?: 'MotionStakes'; + raw: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + percentage: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + }; +}; -export type TokenFragment = { __typename?: 'Token', symbol: string, tokenAddress: string }; +export type DomainMetadataFragment = { + __typename?: 'DomainMetadata'; + name: string; + color: DomainColor; + description?: string | null; + changelog?: Array<{ + __typename?: 'DomainMetadataChangelog'; + transactionHash: string; + oldName: string; + newName: string; + oldColor: DomainColor; + newColor: DomainColor; + oldDescription?: string | null; + newDescription?: string | null; + }> | null; +}; + +export type MultiSigUserSignatureFragment = { + __typename?: 'MultiSigUserSignature'; + id: string; + multiSigId: string; + role: number; + colonyAddress: string; + userAddress: string; + vote: MultiSigVote; + createdAt: string; +}; -export type NotificationUserFragment = { __typename?: 'ColonyContributor', user?: { __typename?: 'User', notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null }; +export type ColonyMultiSigFragment = { + __typename?: 'ColonyMultiSig'; + id: string; + colonyAddress: string; + nativeMultiSigId: string; + multiSigDomainId: string; + nativeMultiSigDomainId: string; + requiredPermissions: number; + transactionHash: string; + isExecuted: boolean; + isRejected: boolean; + isDecision: boolean; + hasActionCompleted: boolean; + executedAt?: string | null; + executedBy?: string | null; + rejectedAt?: string | null; + rejectedBy?: string | null; + createdAt: string; + expenditureId?: string | null; + signatures?: { + __typename?: 'ModelMultiSigUserSignatureConnection'; + items: Array<{ + __typename?: 'MultiSigUserSignature'; + id: string; + multiSigId: string; + role: number; + colonyAddress: string; + userAddress: string; + vote: MultiSigVote; + createdAt: string; + } | null>; + } | null; + action?: { __typename?: 'ColonyAction'; type: ColonyActionType } | null; +}; + +export type ProxyColonyFragment = { + __typename?: 'ProxyColony'; + id: string; + colonyAddress: string; + chainId: string; + isActive: boolean; +}; + +export type TokenFragment = { + __typename?: 'Token'; + symbol: string; + tokenAddress: string; +}; -export type NotificationsDataFragment = { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean }; +export type NotificationUserFragment = { + __typename?: 'ColonyContributor'; + user?: { + __typename?: 'User'; + notificationsData?: { + __typename?: 'NotificationsData'; + magicbellUserId: string; + notificationsDisabled: boolean; + mutedColonyAddresses: Array; + paymentNotificationsDisabled: boolean; + mentionNotificationsDisabled: boolean; + adminNotificationsDisabled: boolean; + } | null; + } | null; +}; + +export type NotificationsDataFragment = { + __typename?: 'NotificationsData'; + magicbellUserId: string; + notificationsDisabled: boolean; + mutedColonyAddresses: Array; + paymentNotificationsDisabled: boolean; + mentionNotificationsDisabled: boolean; + adminNotificationsDisabled: boolean; +}; export type CreateColonyActionMutationVariables = Exact<{ input: CreateColonyActionInput; }>; - -export type CreateColonyActionMutation = { __typename?: 'Mutation', createColonyAction?: { __typename?: 'ColonyAction', id: string } | null }; +export type CreateColonyActionMutation = { + __typename?: 'Mutation'; + createColonyAction?: { __typename?: 'ColonyAction'; id: string } | null; +}; export type UpdateColonyActionMutationVariables = Exact<{ input: UpdateColonyActionInput; }>; - -export type UpdateColonyActionMutation = { __typename?: 'Mutation', updateColonyAction?: { __typename?: 'ColonyAction', id: string } | null }; +export type UpdateColonyActionMutation = { + __typename?: 'Mutation'; + updateColonyAction?: { __typename?: 'ColonyAction'; id: string } | null; +}; export type UpdateColonyMutationVariables = Exact<{ input: UpdateColonyInput; }>; - -export type UpdateColonyMutation = { __typename?: 'Mutation', updateColony?: { __typename?: 'Colony', id: string } | null }; +export type UpdateColonyMutation = { + __typename?: 'Mutation'; + updateColony?: { __typename?: 'Colony'; id: string } | null; +}; export type UpdateColonyMetadataMutationVariables = Exact<{ input: UpdateColonyMetadataInput; }>; - -export type UpdateColonyMetadataMutation = { __typename?: 'Mutation', updateColonyMetadata?: { __typename?: 'ColonyMetadata', id: string } | null }; +export type UpdateColonyMetadataMutation = { + __typename?: 'Mutation'; + updateColonyMetadata?: { __typename?: 'ColonyMetadata'; id: string } | null; +}; export type CreateColonyMutationVariables = Exact<{ input: CreateColonyInput; condition?: InputMaybe; }>; - -export type CreateColonyMutation = { __typename?: 'Mutation', createColony?: { __typename?: 'Colony', id: string } | null }; +export type CreateColonyMutation = { + __typename?: 'Mutation'; + createColony?: { __typename?: 'Colony'; id: string } | null; +}; export type CreateColonyMetadataMutationVariables = Exact<{ input: CreateColonyMetadataInput; }>; - -export type CreateColonyMetadataMutation = { __typename?: 'Mutation', createColonyMetadata?: { __typename?: 'ColonyMetadata', id: string } | null }; +export type CreateColonyMetadataMutation = { + __typename?: 'Mutation'; + createColonyMetadata?: { __typename?: 'ColonyMetadata'; id: string } | null; +}; export type DeleteColonyMetadataMutationVariables = Exact<{ input: DeleteColonyMetadataInput; }>; - -export type DeleteColonyMetadataMutation = { __typename?: 'Mutation', deleteColonyMetadata?: { __typename?: 'ColonyMetadata', id: string } | null }; +export type DeleteColonyMetadataMutation = { + __typename?: 'Mutation'; + deleteColonyMetadata?: { __typename?: 'ColonyMetadata'; id: string } | null; +}; export type CreateColonyMemberInviteMutationVariables = Exact<{ input: CreateColonyMemberInviteInput; condition?: InputMaybe; }>; - -export type CreateColonyMemberInviteMutation = { __typename?: 'Mutation', createColonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string } | null }; +export type CreateColonyMemberInviteMutation = { + __typename?: 'Mutation'; + createColonyMemberInvite?: { + __typename?: 'ColonyMemberInvite'; + id: string; + } | null; +}; export type CreateColonyTokensMutationVariables = Exact<{ input: CreateColonyTokensInput; }>; - -export type CreateColonyTokensMutation = { __typename?: 'Mutation', createColonyTokens?: { __typename?: 'ColonyTokens', id: string } | null }; +export type CreateColonyTokensMutation = { + __typename?: 'Mutation'; + createColonyTokens?: { __typename?: 'ColonyTokens'; id: string } | null; +}; export type CreateColonyContributorMutationVariables = Exact<{ input: CreateColonyContributorInput; }>; - -export type CreateColonyContributorMutation = { __typename?: 'Mutation', createColonyContributor?: { __typename?: 'ColonyContributor', id: string } | null }; +export type CreateColonyContributorMutation = { + __typename?: 'Mutation'; + createColonyContributor?: { + __typename?: 'ColonyContributor'; + id: string; + } | null; +}; export type UpdateColonyContributorMutationVariables = Exact<{ input: UpdateColonyContributorInput; }>; - -export type UpdateColonyContributorMutation = { __typename?: 'Mutation', updateColonyContributor?: { __typename?: 'ColonyContributor', id: string } | null }; +export type UpdateColonyContributorMutation = { + __typename?: 'Mutation'; + updateColonyContributor?: { + __typename?: 'ColonyContributor'; + id: string; + } | null; +}; export type DeleteColonyContributorMutationVariables = Exact<{ input: DeleteColonyContributorInput; }>; - -export type DeleteColonyContributorMutation = { __typename?: 'Mutation', deleteColonyContributor?: { __typename?: 'ColonyContributor', id: string } | null }; +export type DeleteColonyContributorMutation = { + __typename?: 'Mutation'; + deleteColonyContributor?: { + __typename?: 'ColonyContributor'; + id: string; + } | null; +}; export type CreateCurrentVersionMutationVariables = Exact<{ input: CreateCurrentVersionInput; }>; - -export type CreateCurrentVersionMutation = { __typename?: 'Mutation', createCurrentVersion?: { __typename?: 'CurrentVersion', id: string } | null }; +export type CreateCurrentVersionMutation = { + __typename?: 'Mutation'; + createCurrentVersion?: { __typename?: 'CurrentVersion'; id: string } | null; +}; export type UpdateCurrentVersionMutationVariables = Exact<{ input: UpdateCurrentVersionInput; }>; - -export type UpdateCurrentVersionMutation = { __typename?: 'Mutation', updateCurrentVersion?: { __typename?: 'CurrentVersion', id: string } | null }; +export type UpdateCurrentVersionMutation = { + __typename?: 'Mutation'; + updateCurrentVersion?: { __typename?: 'CurrentVersion'; id: string } | null; +}; export type UpdateColonyDecisionMutationVariables = Exact<{ id: Scalars['ID']; showInDecisionsList: Scalars['Boolean']; }>; - -export type UpdateColonyDecisionMutation = { __typename?: 'Mutation', updateColonyDecision?: { __typename?: 'ColonyDecision', id: string } | null }; +export type UpdateColonyDecisionMutation = { + __typename?: 'Mutation'; + updateColonyDecision?: { __typename?: 'ColonyDecision'; id: string } | null; +}; export type CreateDomainMutationVariables = Exact<{ input: CreateDomainInput; }>; - -export type CreateDomainMutation = { __typename?: 'Mutation', createDomain?: { __typename?: 'Domain', id: string } | null }; +export type CreateDomainMutation = { + __typename?: 'Mutation'; + createDomain?: { __typename?: 'Domain'; id: string } | null; +}; export type CreateDomainMetadataMutationVariables = Exact<{ input: CreateDomainMetadataInput; }>; - -export type CreateDomainMetadataMutation = { __typename?: 'Mutation', createDomainMetadata?: { __typename?: 'DomainMetadata', id: string } | null }; +export type CreateDomainMetadataMutation = { + __typename?: 'Mutation'; + createDomainMetadata?: { __typename?: 'DomainMetadata'; id: string } | null; +}; export type UpdateDomainMetadataMutationVariables = Exact<{ input: UpdateDomainMetadataInput; }>; - -export type UpdateDomainMetadataMutation = { __typename?: 'Mutation', updateDomainMetadata?: { __typename?: 'DomainMetadata', id: string } | null }; +export type UpdateDomainMetadataMutation = { + __typename?: 'Mutation'; + updateDomainMetadata?: { __typename?: 'DomainMetadata'; id: string } | null; +}; export type CreateContractEventMutationVariables = Exact<{ input: CreateContractEventInput; condition?: InputMaybe; }>; - -export type CreateContractEventMutation = { __typename?: 'Mutation', createContractEvent?: { __typename?: 'ContractEvent', id: string } | null }; +export type CreateContractEventMutation = { + __typename?: 'Mutation'; + createContractEvent?: { __typename?: 'ContractEvent'; id: string } | null; +}; export type CreateExpenditureMutationVariables = Exact<{ input: CreateExpenditureInput; }>; - -export type CreateExpenditureMutation = { __typename?: 'Mutation', createExpenditure?: { __typename?: 'Expenditure', id: string } | null }; +export type CreateExpenditureMutation = { + __typename?: 'Mutation'; + createExpenditure?: { __typename?: 'Expenditure'; id: string } | null; +}; export type UpdateExpenditureMutationVariables = Exact<{ input: UpdateExpenditureInput; }>; - -export type UpdateExpenditureMutation = { __typename?: 'Mutation', updateExpenditure?: { __typename?: 'Expenditure', id: string, ownerAddress: string } | null }; +export type UpdateExpenditureMutation = { + __typename?: 'Mutation'; + updateExpenditure?: { + __typename?: 'Expenditure'; + id: string; + ownerAddress: string; + } | null; +}; export type UpdateExpenditureMetadataMutationVariables = Exact<{ input: UpdateExpenditureMetadataInput; }>; - -export type UpdateExpenditureMetadataMutation = { __typename?: 'Mutation', updateExpenditureMetadata?: { __typename?: 'ExpenditureMetadata', id: string } | null }; +export type UpdateExpenditureMetadataMutation = { + __typename?: 'Mutation'; + updateExpenditureMetadata?: { + __typename?: 'ExpenditureMetadata'; + id: string; + } | null; +}; export type CreateStreamingPaymentMutationVariables = Exact<{ input: CreateStreamingPaymentInput; }>; - -export type CreateStreamingPaymentMutation = { __typename?: 'Mutation', createStreamingPayment?: { __typename?: 'StreamingPayment', id: string } | null }; +export type CreateStreamingPaymentMutation = { + __typename?: 'Mutation'; + createStreamingPayment?: { + __typename?: 'StreamingPayment'; + id: string; + } | null; +}; export type UpdateStreamingPaymentMutationVariables = Exact<{ input: UpdateStreamingPaymentInput; }>; - -export type UpdateStreamingPaymentMutation = { __typename?: 'Mutation', updateStreamingPayment?: { __typename?: 'StreamingPayment', id: string } | null }; +export type UpdateStreamingPaymentMutation = { + __typename?: 'Mutation'; + updateStreamingPayment?: { + __typename?: 'StreamingPayment'; + id: string; + } | null; +}; export type CreateColonyExtensionMutationVariables = Exact<{ input: CreateColonyExtensionInput; }>; - -export type CreateColonyExtensionMutation = { __typename?: 'Mutation', createColonyExtension?: { __typename?: 'ColonyExtension', id: string } | null }; +export type CreateColonyExtensionMutation = { + __typename?: 'Mutation'; + createColonyExtension?: { __typename?: 'ColonyExtension'; id: string } | null; +}; export type UpdateColonyExtensionByAddressMutationVariables = Exact<{ input: UpdateColonyExtensionInput; }>; - -export type UpdateColonyExtensionByAddressMutation = { __typename?: 'Mutation', updateColonyExtension?: { __typename?: 'ColonyExtension', id: string, extensionHash: string, colonyAddress: string } | null }; +export type UpdateColonyExtensionByAddressMutation = { + __typename?: 'Mutation'; + updateColonyExtension?: { + __typename?: 'ColonyExtension'; + id: string; + extensionHash: string; + colonyAddress: string; + } | null; +}; export type CreateExtensionInstallationsCountMutationVariables = Exact<{ input: CreateExtensionInstallationsCountInput; }>; - -export type CreateExtensionInstallationsCountMutation = { __typename?: 'Mutation', createExtensionInstallationsCount?: { __typename?: 'ExtensionInstallationsCount', id: string } | null }; +export type CreateExtensionInstallationsCountMutation = { + __typename?: 'Mutation'; + createExtensionInstallationsCount?: { + __typename?: 'ExtensionInstallationsCount'; + id: string; + } | null; +}; export type UpdateExtensionInstallationsCountMutationVariables = Exact<{ input: UpdateExtensionInstallationsCountInput; }>; - -export type UpdateExtensionInstallationsCountMutation = { __typename?: 'Mutation', updateExtensionInstallationsCount?: { __typename?: 'ExtensionInstallationsCount', id: string } | null }; +export type UpdateExtensionInstallationsCountMutation = { + __typename?: 'Mutation'; + updateExtensionInstallationsCount?: { + __typename?: 'ExtensionInstallationsCount'; + id: string; + } | null; +}; export type CreateColonyFundsClaimMutationVariables = Exact<{ input: CreateColonyFundsClaimInput; condition?: InputMaybe; }>; - -export type CreateColonyFundsClaimMutation = { __typename?: 'Mutation', createColonyFundsClaim?: { __typename?: 'ColonyFundsClaim', id: string } | null }; +export type CreateColonyFundsClaimMutation = { + __typename?: 'Mutation'; + createColonyFundsClaim?: { + __typename?: 'ColonyFundsClaim'; + id: string; + } | null; +}; export type UpdateColonyFundsClaimMutationVariables = Exact<{ input: UpdateColonyFundsClaimInput; condition?: InputMaybe; }>; - -export type UpdateColonyFundsClaimMutation = { __typename?: 'Mutation', updateColonyFundsClaim?: { __typename?: 'ColonyFundsClaim', id: string } | null }; +export type UpdateColonyFundsClaimMutation = { + __typename?: 'Mutation'; + updateColonyFundsClaim?: { + __typename?: 'ColonyFundsClaim'; + id: string; + } | null; +}; export type DeleteColonyFundsClaimMutationVariables = Exact<{ input: DeleteColonyFundsClaimInput; condition?: InputMaybe; }>; - -export type DeleteColonyFundsClaimMutation = { __typename?: 'Mutation', deleteColonyFundsClaim?: { __typename?: 'ColonyFundsClaim', id: string } | null }; +export type DeleteColonyFundsClaimMutation = { + __typename?: 'Mutation'; + deleteColonyFundsClaim?: { + __typename?: 'ColonyFundsClaim'; + id: string; + } | null; +}; export type CreateCurrentNetworkInverseFeeMutationVariables = Exact<{ input: CreateCurrentNetworkInverseFeeInput; }>; - -export type CreateCurrentNetworkInverseFeeMutation = { __typename?: 'Mutation', createCurrentNetworkInverseFee?: { __typename?: 'CurrentNetworkInverseFee', id: string } | null }; +export type CreateCurrentNetworkInverseFeeMutation = { + __typename?: 'Mutation'; + createCurrentNetworkInverseFee?: { + __typename?: 'CurrentNetworkInverseFee'; + id: string; + } | null; +}; export type UpdateCurrentNetworkInverseFeeMutationVariables = Exact<{ input: UpdateCurrentNetworkInverseFeeInput; }>; - -export type UpdateCurrentNetworkInverseFeeMutation = { __typename?: 'Mutation', updateCurrentNetworkInverseFee?: { __typename?: 'CurrentNetworkInverseFee', id: string } | null }; +export type UpdateCurrentNetworkInverseFeeMutation = { + __typename?: 'Mutation'; + updateCurrentNetworkInverseFee?: { + __typename?: 'CurrentNetworkInverseFee'; + id: string; + } | null; +}; export type CreateColonyMotionMutationVariables = Exact<{ input: CreateColonyMotionInput; }>; - -export type CreateColonyMotionMutation = { __typename?: 'Mutation', createColonyMotion?: { __typename?: 'ColonyMotion', id: string } | null }; +export type CreateColonyMotionMutation = { + __typename?: 'Mutation'; + createColonyMotion?: { __typename?: 'ColonyMotion'; id: string } | null; +}; export type UpdateColonyMotionMutationVariables = Exact<{ input: UpdateColonyMotionInput; }>; - -export type UpdateColonyMotionMutation = { __typename?: 'Mutation', updateColonyMotion?: { __typename?: 'ColonyMotion', id: string } | null }; +export type UpdateColonyMotionMutation = { + __typename?: 'Mutation'; + updateColonyMotion?: { __typename?: 'ColonyMotion'; id: string } | null; +}; export type CreateMotionMessageMutationVariables = Exact<{ input: CreateMotionMessageInput; }>; - -export type CreateMotionMessageMutation = { __typename?: 'Mutation', createMotionMessage?: { __typename?: 'MotionMessage', id: string } | null }; +export type CreateMotionMessageMutation = { + __typename?: 'Mutation'; + createMotionMessage?: { __typename?: 'MotionMessage'; id: string } | null; +}; export type CreateUserVoterRewardMutationVariables = Exact<{ input: CreateVoterRewardsHistoryInput; }>; - -export type CreateUserVoterRewardMutation = { __typename?: 'Mutation', createVoterRewardsHistory?: { __typename?: 'VoterRewardsHistory', id: string } | null }; +export type CreateUserVoterRewardMutation = { + __typename?: 'Mutation'; + createVoterRewardsHistory?: { + __typename?: 'VoterRewardsHistory'; + id: string; + } | null; +}; export type CreateColonyMultiSigMutationVariables = Exact<{ input: CreateColonyMultiSigInput; }>; - -export type CreateColonyMultiSigMutation = { __typename?: 'Mutation', createColonyMultiSig?: { __typename?: 'ColonyMultiSig', id: string } | null }; +export type CreateColonyMultiSigMutation = { + __typename?: 'Mutation'; + createColonyMultiSig?: { __typename?: 'ColonyMultiSig'; id: string } | null; +}; export type UpdateColonyMultiSigMutationVariables = Exact<{ input: UpdateColonyMultiSigInput; }>; - -export type UpdateColonyMultiSigMutation = { __typename?: 'Mutation', updateColonyMultiSig?: { __typename?: 'ColonyMultiSig', id: string } | null }; +export type UpdateColonyMultiSigMutation = { + __typename?: 'Mutation'; + updateColonyMultiSig?: { __typename?: 'ColonyMultiSig'; id: string } | null; +}; export type CreateMultiSigVoteMutationVariables = Exact<{ input: CreateMultiSigUserSignatureInput; }>; - -export type CreateMultiSigVoteMutation = { __typename?: 'Mutation', createMultiSigUserSignature?: { __typename?: 'MultiSigUserSignature', id: string } | null }; +export type CreateMultiSigVoteMutation = { + __typename?: 'Mutation'; + createMultiSigUserSignature?: { + __typename?: 'MultiSigUserSignature'; + id: string; + } | null; +}; export type RemoveMultiSigVoteMutationVariables = Exact<{ id: Scalars['ID']; }>; - -export type RemoveMultiSigVoteMutation = { __typename?: 'Mutation', deleteMultiSigUserSignature?: { __typename?: 'MultiSigUserSignature', id: string } | null }; +export type RemoveMultiSigVoteMutation = { + __typename?: 'Mutation'; + deleteMultiSigUserSignature?: { + __typename?: 'MultiSigUserSignature'; + id: string; + } | null; +}; export type RemoveMultiSigRoleMutationVariables = Exact<{ id: Scalars['ID']; }>; +export type RemoveMultiSigRoleMutation = { + __typename?: 'Mutation'; + deleteColonyRole?: { __typename?: 'ColonyRole'; id: string } | null; +}; + +export type CreateMultiChainInfoMutationVariables = Exact<{ + input: CreateMultiChainInfoInput; +}>; + +export type CreateMultiChainInfoMutation = { + __typename?: 'Mutation'; + createMultiChainInfo?: { + __typename?: 'MultiChainInfo'; + id: string; + completedOnMainChain: boolean; + completedOnProxyChain: boolean; + wormholeInfo?: { + __typename?: 'ActionWormholeInfo'; + emitterChainId?: number | null; + emitterAddress: string; + sequence: string; + } | null; + } | null; +}; + +export type UpdateMultiChainInfoMutationVariables = Exact<{ + input: UpdateMultiChainInfoInput; +}>; -export type RemoveMultiSigRoleMutation = { __typename?: 'Mutation', deleteColonyRole?: { __typename?: 'ColonyRole', id: string } | null }; +export type UpdateMultiChainInfoMutation = { + __typename?: 'Mutation'; + updateMultiChainInfo?: { + __typename?: 'MultiChainInfo'; + id: string; + completedOnMainChain: boolean; + completedOnProxyChain: boolean; + wormholeInfo?: { + __typename?: 'ActionWormholeInfo'; + emitterChainId?: number | null; + emitterAddress: string; + sequence: string; + } | null; + } | null; +}; export type CreateColonyRoleMutationVariables = Exact<{ input: CreateColonyRoleInput; }>; - -export type CreateColonyRoleMutation = { __typename?: 'Mutation', createColonyRole?: { __typename?: 'ColonyRole', id: string } | null }; +export type CreateColonyRoleMutation = { + __typename?: 'Mutation'; + createColonyRole?: { __typename?: 'ColonyRole'; id: string } | null; +}; export type UpdateColonyRoleMutationVariables = Exact<{ input: UpdateColonyRoleInput; }>; - -export type UpdateColonyRoleMutation = { __typename?: 'Mutation', updateColonyRole?: { __typename?: 'ColonyRole', id: string } | null }; +export type UpdateColonyRoleMutation = { + __typename?: 'Mutation'; + updateColonyRole?: { __typename?: 'ColonyRole'; id: string } | null; +}; export type CreateColonyHistoricRoleMutationVariables = Exact<{ input: CreateColonyHistoricRoleInput; }>; +export type CreateColonyHistoricRoleMutation = { + __typename?: 'Mutation'; + createColonyHistoricRole?: { + __typename?: 'ColonyHistoricRole'; + id: string; + } | null; +}; + +export type CreateProxyColonyMutationVariables = Exact<{ + input: CreateProxyColonyInput; +}>; + +export type CreateProxyColonyMutation = { + __typename?: 'Mutation'; + createProxyColony?: { __typename?: 'ProxyColony'; id: string } | null; +}; + +export type UpdateProxyColonyMutationVariables = Exact<{ + input: UpdateProxyColonyInput; +}>; + +export type UpdateProxyColonyMutation = { + __typename?: 'Mutation'; + updateProxyColony?: { __typename?: 'ProxyColony'; id: string } | null; +}; + +export type CreateSupportedChainMutationVariables = Exact<{ + input: CreateSupportedChainInput; +}>; + +export type CreateSupportedChainMutation = { + __typename?: 'Mutation'; + createSupportedChain?: { __typename?: 'SupportedChain'; id: string } | null; +}; + +export type UpdateSupportedChainMutationVariables = Exact<{ + input: UpdateSupportedChainInput; +}>; -export type CreateColonyHistoricRoleMutation = { __typename?: 'Mutation', createColonyHistoricRole?: { __typename?: 'ColonyHistoricRole', id: string } | null }; +export type UpdateSupportedChainMutation = { + __typename?: 'Mutation'; + updateSupportedChain?: { __typename?: 'SupportedChain'; id: string } | null; +}; export type UpdateReputationMiningCycleMetadataMutationVariables = Exact<{ input: UpdateReputationMiningCycleMetadataInput; }>; - -export type UpdateReputationMiningCycleMetadataMutation = { __typename?: 'Mutation', updateReputationMiningCycleMetadata?: { __typename?: 'ReputationMiningCycleMetadata', id: string } | null }; +export type UpdateReputationMiningCycleMetadataMutation = { + __typename?: 'Mutation'; + updateReputationMiningCycleMetadata?: { + __typename?: 'ReputationMiningCycleMetadata'; + id: string; + } | null; +}; export type CreateReputationMiningCycleMetadataMutationVariables = Exact<{ input: CreateReputationMiningCycleMetadataInput; }>; - -export type CreateReputationMiningCycleMetadataMutation = { __typename?: 'Mutation', createReputationMiningCycleMetadata?: { __typename?: 'ReputationMiningCycleMetadata', id: string } | null }; +export type CreateReputationMiningCycleMetadataMutation = { + __typename?: 'Mutation'; + createReputationMiningCycleMetadata?: { + __typename?: 'ReputationMiningCycleMetadata'; + id: string; + } | null; +}; export type CreateUserStakeMutationVariables = Exact<{ input: CreateUserStakeInput; }>; - -export type CreateUserStakeMutation = { __typename?: 'Mutation', createUserStake?: { __typename?: 'UserStake', id: string } | null }; +export type CreateUserStakeMutation = { + __typename?: 'Mutation'; + createUserStake?: { __typename?: 'UserStake'; id: string } | null; +}; export type UpdateUserStakeMutationVariables = Exact<{ input: UpdateUserStakeInput; }>; - -export type UpdateUserStakeMutation = { __typename?: 'Mutation', updateUserStake?: { __typename?: 'UserStake', id: string } | null }; +export type UpdateUserStakeMutation = { + __typename?: 'Mutation'; + updateUserStake?: { __typename?: 'UserStake'; id: string } | null; +}; export type CreateStatsMutationVariables = Exact<{ + chainId: Scalars['String']; value: Scalars['String']; }>; - -export type CreateStatsMutation = { __typename?: 'Mutation', createIngestorStats?: { __typename?: 'IngestorStats', id: string } | null }; +export type CreateStatsMutation = { + __typename?: 'Mutation'; + createIngestorStats?: { __typename?: 'IngestorStats'; id: string } | null; +}; export type UpdateStatsMutationVariables = Exact<{ + id: Scalars['ID']; + chainId: Scalars['String']; value: Scalars['String']; }>; - -export type UpdateStatsMutation = { __typename?: 'Mutation', updateIngestorStats?: { __typename?: 'IngestorStats', id: string } | null }; +export type UpdateStatsMutation = { + __typename?: 'Mutation'; + updateIngestorStats?: { __typename?: 'IngestorStats'; id: string } | null; +}; export type DeleteColonyTokensMutationVariables = Exact<{ input: DeleteColonyTokensInput; }>; - -export type DeleteColonyTokensMutation = { __typename?: 'Mutation', deleteColonyTokens?: { __typename?: 'ColonyTokens', id: string } | null }; +export type DeleteColonyTokensMutation = { + __typename?: 'Mutation'; + deleteColonyTokens?: { __typename?: 'ColonyTokens'; id: string } | null; +}; export type GetColonyActionQueryVariables = Exact<{ transactionHash: Scalars['ID']; }>; - -export type GetColonyActionQuery = { __typename?: 'Query', getColonyAction?: { __typename?: 'ColonyAction', id: string } | null }; +export type GetColonyActionQuery = { + __typename?: 'Query'; + getColonyAction?: { __typename?: 'ColonyAction'; id: string } | null; +}; export type GetColonyArbitraryTransactionActionQueryVariables = Exact<{ transactionHash: Scalars['ID']; }>; +export type GetColonyArbitraryTransactionActionQuery = { + __typename?: 'Query'; + getColonyAction?: { + __typename?: 'ColonyAction'; + id: string; + arbitraryTransactions?: Array<{ + __typename?: 'ColonyActionArbitraryTransaction'; + contractAddress: string; + encodedFunction: string; + }> | null; + } | null; +}; + +export type GetActionInfoQueryVariables = Exact<{ + transactionHash: Scalars['ID']; +}>; -export type GetColonyArbitraryTransactionActionQuery = { __typename?: 'Query', getColonyAction?: { __typename?: 'ColonyAction', id: string, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null }; +export type GetActionInfoQuery = { + __typename?: 'Query'; + getColonyAction?: { + __typename?: 'ColonyAction'; + id: string; + colonyDecisionId?: string | null; + amount?: string | null; + networkFee?: string | null; + type: ColonyActionType; + showInActionsList: boolean; + colonyId: string; + initiatorAddress: string; + recipientAddress?: string | null; + members?: Array | null; + multiChainInfoId?: string | null; + targetChainId?: number | null; + pendingDomainMetadata?: { + __typename?: 'DomainMetadata'; + name: string; + color: DomainColor; + description?: string | null; + changelog?: Array<{ + __typename?: 'DomainMetadataChangelog'; + transactionHash: string; + oldName: string; + newName: string; + oldColor: DomainColor; + newColor: DomainColor; + oldDescription?: string | null; + newDescription?: string | null; + }> | null; + } | null; + pendingColonyMetadata?: { + __typename?: 'ColonyMetadata'; + id: string; + displayName: string; + avatar?: string | null; + thumbnail?: string | null; + description?: string | null; + externalLinks?: Array<{ + __typename?: 'ExternalLink'; + name: ExternalLinks; + link: string; + }> | null; + objective?: { + __typename?: 'ColonyObjective'; + title: string; + description: string; + progress: number; + } | null; + changelog?: Array<{ + __typename?: 'ColonyMetadataChangelog'; + transactionHash: string; + oldDisplayName: string; + newDisplayName: string; + hasAvatarChanged: boolean; + hasDescriptionChanged?: boolean | null; + haveExternalLinksChanged?: boolean | null; + hasObjectiveChanged?: boolean | null; + }> | null; + } | null; + payments?: Array<{ + __typename?: 'Payment'; + recipientAddress: string; + }> | null; + multiChainInfo?: { + __typename?: 'MultiChainInfo'; + id: string; + completedOnMainChain: boolean; + completedOnProxyChain: boolean; + wormholeInfo?: { + __typename?: 'ActionWormholeInfo'; + emitterChainId?: number | null; + emitterAddress: string; + sequence: string; + } | null; + } | null; + } | null; +}; export type GetMotionIdFromActionQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetMotionIdFromActionQuery = { __typename?: 'Query', getColonyAction?: { __typename?: 'ColonyAction', motionData?: { __typename?: 'ColonyMotion', id: string } | null } | null }; +export type GetMotionIdFromActionQuery = { + __typename?: 'Query'; + getColonyAction?: { + __typename?: 'ColonyAction'; + motionData?: { __typename?: 'ColonyMotion'; id: string } | null; + } | null; +}; export type GetActionIdFromAnnotationQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetActionIdFromAnnotationQuery = { __typename?: 'Query', getAnnotation?: { __typename?: 'Annotation', actionId: string } | null }; +export type GetActionIdFromAnnotationQuery = { + __typename?: 'Query'; + getAnnotation?: { __typename?: 'Annotation'; actionId: string } | null; +}; export type GetActionByIdQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetActionByIdQuery = { __typename?: 'Query', getColonyAction?: { __typename?: 'ColonyAction', id: string, type: ColonyActionType, expenditureSlotChanges?: { __typename?: 'ExpenditureSlotChanges', oldSlots: Array<{ __typename?: 'ExpenditureSlot', id: number, recipientAddress?: string | null, claimDelay?: string | null, payoutModifier?: number | null, payouts?: Array<{ __typename?: 'ExpenditurePayout', tokenAddress: string, amount: string, isClaimed: boolean, networkFee?: string | null }> | null }>, newSlots: Array<{ __typename?: 'ExpenditureSlot', id: number, recipientAddress?: string | null, claimDelay?: string | null, payoutModifier?: number | null, payouts?: Array<{ __typename?: 'ExpenditurePayout', tokenAddress: string, amount: string, isClaimed: boolean, networkFee?: string | null }> | null }> } | null } | null }; +export type GetActionByIdQuery = { + __typename?: 'Query'; + getColonyAction?: { + __typename?: 'ColonyAction'; + id: string; + type: ColonyActionType; + expenditureSlotChanges?: { + __typename?: 'ExpenditureSlotChanges'; + oldSlots: Array<{ + __typename?: 'ExpenditureSlot'; + id: number; + recipientAddress?: string | null; + claimDelay?: string | null; + payoutModifier?: number | null; + payouts?: Array<{ + __typename?: 'ExpenditurePayout'; + tokenAddress: string; + amount: string; + isClaimed: boolean; + networkFee?: string | null; + }> | null; + }>; + newSlots: Array<{ + __typename?: 'ExpenditureSlot'; + id: number; + recipientAddress?: string | null; + claimDelay?: string | null; + payoutModifier?: number | null; + payouts?: Array<{ + __typename?: 'ExpenditurePayout'; + tokenAddress: string; + amount: string; + isClaimed: boolean; + networkFee?: string | null; + }> | null; + }>; + } | null; + } | null; +}; export type GetColonyMetadataQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetColonyMetadataQuery = { __typename?: 'Query', getColonyMetadata?: { __typename?: 'ColonyMetadata', id: string, displayName: string, avatar?: string | null, thumbnail?: string | null, description?: string | null, etherealData?: { __typename?: 'ColonyMetadataEtherealData', colonyAvatar?: string | null, colonyDisplayName: string, colonyName: string, colonyThumbnail?: string | null, initiatorAddress: string, tokenAvatar?: string | null, tokenThumbnail?: string | null } | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, oldDisplayName: string, newDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null }> | null } | null }; +export type GetColonyMetadataQuery = { + __typename?: 'Query'; + getColonyMetadata?: { + __typename?: 'ColonyMetadata'; + id: string; + displayName: string; + avatar?: string | null; + thumbnail?: string | null; + description?: string | null; + etherealData?: { + __typename?: 'ColonyMetadataEtherealData'; + colonyAvatar?: string | null; + colonyDisplayName: string; + colonyName: string; + colonyThumbnail?: string | null; + initiatorAddress: string; + tokenAvatar?: string | null; + tokenThumbnail?: string | null; + } | null; + externalLinks?: Array<{ + __typename?: 'ExternalLink'; + name: ExternalLinks; + link: string; + }> | null; + objective?: { + __typename?: 'ColonyObjective'; + title: string; + description: string; + progress: number; + } | null; + changelog?: Array<{ + __typename?: 'ColonyMetadataChangelog'; + transactionHash: string; + oldDisplayName: string; + newDisplayName: string; + hasAvatarChanged: boolean; + hasDescriptionChanged?: boolean | null; + haveExternalLinksChanged?: boolean | null; + hasObjectiveChanged?: boolean | null; + }> | null; + } | null; +}; export type GetColonyQueryVariables = Exact<{ id: Scalars['ID']; nextToken?: InputMaybe; }>; - -export type GetColonyQuery = { __typename?: 'Query', getColony?: { __typename?: 'Colony', colonyAddress: string, nativeToken: { __typename?: 'Token', symbol: string, tokenAddress: string }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', id: string, tokenAddress: string } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', nextToken?: string | null, items: Array<{ __typename?: 'Domain', id: string, nativeSkillId: string } | null> } | null } | null, getColonyByAddress?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', id: string, name: string } | null> } | null, getColonyByType?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', id: string, name: string } | null> } | null }; +export type GetColonyQuery = { + __typename?: 'Query'; + getColony?: { + __typename?: 'Colony'; + colonyAddress: string; + nativeToken: { __typename?: 'Token'; symbol: string; tokenAddress: string }; + tokens?: { + __typename?: 'ModelColonyTokensConnection'; + items: Array<{ + __typename?: 'ColonyTokens'; + id: string; + tokenAddress: string; + } | null>; + } | null; + motionsWithUnclaimedStakes?: Array<{ + __typename?: 'ColonyUnclaimedStake'; + motionId: string; + unclaimedRewards: Array<{ + __typename?: 'StakerRewards'; + address: string; + isClaimed: boolean; + rewards: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + }>; + }> | null; + domains?: { + __typename?: 'ModelDomainConnection'; + nextToken?: string | null; + items: Array<{ + __typename?: 'Domain'; + id: string; + nativeSkillId: string; + } | null>; + } | null; + } | null; + getColonyByAddress?: { + __typename?: 'ModelColonyConnection'; + items: Array<{ __typename?: 'Colony'; id: string; name: string } | null>; + } | null; + getColonyByType?: { + __typename?: 'ModelColonyConnection'; + items: Array<{ __typename?: 'Colony'; id: string; name: string } | null>; + } | null; +}; export type GetColonyByNameQueryVariables = Exact<{ name: Scalars['String']; }>; - -export type GetColonyByNameQuery = { __typename?: 'Query', getColonyByName?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', id: string, name: string } | null> } | null }; +export type GetColonyByNameQuery = { + __typename?: 'Query'; + getColonyByName?: { + __typename?: 'ModelColonyConnection'; + items: Array<{ __typename?: 'Colony'; id: string; name: string } | null>; + } | null; +}; export type GetColonyByNativeTokenIdQueryVariables = Exact<{ nativeTokenId: Scalars['ID']; @@ -10719,29 +11823,98 @@ export type GetColonyByNativeTokenIdQueryVariables = Exact<{ nextToken?: InputMaybe; }>; - -export type GetColonyByNativeTokenIdQuery = { __typename?: 'Query', getColoniesByNativeTokenId?: { __typename?: 'ModelColonyConnection', nextToken?: string | null, items: Array<{ __typename?: 'Colony', id: string, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', unlocked?: boolean | null, unlockable?: boolean | null, mintable?: boolean | null } | null } | null } | null> } | null }; +export type GetColonyByNativeTokenIdQuery = { + __typename?: 'Query'; + getColoniesByNativeTokenId?: { + __typename?: 'ModelColonyConnection'; + nextToken?: string | null; + items: Array<{ + __typename?: 'Colony'; + id: string; + status?: { + __typename?: 'ColonyStatus'; + recovery?: boolean | null; + nativeToken?: { + __typename?: 'NativeTokenStatus'; + unlocked?: boolean | null; + unlockable?: boolean | null; + mintable?: boolean | null; + } | null; + } | null; + } | null>; + } | null; +}; export type ListColoniesQueryVariables = Exact<{ nextToken?: InputMaybe; }>; - -export type ListColoniesQuery = { __typename?: 'Query', listColonies?: { __typename?: 'ModelColonyConnection', nextToken?: string | null, items: Array<{ __typename?: 'Colony', id: string, nativeTokenId: string } | null> } | null }; +export type ListColoniesQuery = { + __typename?: 'Query'; + listColonies?: { + __typename?: 'ModelColonyConnection'; + nextToken?: string | null; + items: Array<{ + __typename?: 'Colony'; + id: string; + nativeTokenId: string; + } | null>; + } | null; +}; export type ListColoniesWithRootPermissionHoldersQueryVariables = Exact<{ nextToken?: InputMaybe; }>; - -export type ListColoniesWithRootPermissionHoldersQuery = { __typename?: 'Query', listColonies?: { __typename?: 'ModelColonyConnection', nextToken?: string | null, items: Array<{ __typename?: 'Colony', id: string, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetUser?: { __typename?: 'User', id: string, profile?: { __typename?: 'Profile', displayName?: string | null, id: string } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null } | null> } | null }; +export type ListColoniesWithRootPermissionHoldersQuery = { + __typename?: 'Query'; + listColonies?: { + __typename?: 'ModelColonyConnection'; + nextToken?: string | null; + items: Array<{ + __typename?: 'Colony'; + id: string; + roles?: { + __typename?: 'ModelColonyRoleConnection'; + items: Array<{ + __typename?: 'ColonyRole'; + id: string; + targetUser?: { + __typename?: 'User'; + id: string; + profile?: { + __typename?: 'Profile'; + displayName?: string | null; + id: string; + } | null; + notificationsData?: { + __typename?: 'NotificationsData'; + magicbellUserId: string; + notificationsDisabled: boolean; + mutedColonyAddresses: Array; + paymentNotificationsDisabled: boolean; + mentionNotificationsDisabled: boolean; + adminNotificationsDisabled: boolean; + } | null; + } | null; + } | null>; + } | null; + } | null>; + } | null; +}; export type GetColonyContributorQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetColonyContributorQuery = { __typename?: 'Query', getColonyContributor?: { __typename?: 'ColonyContributor', id: string, isVerified: boolean } | null }; +export type GetColonyContributorQuery = { + __typename?: 'Query'; + getColonyContributor?: { + __typename?: 'ColonyContributor'; + id: string; + isVerified: boolean; + } | null; +}; export type GetColonyContributorsNotificationDataQueryVariables = Exact<{ colonyAddress: Scalars['ID']; @@ -10750,117 +11923,385 @@ export type GetColonyContributorsNotificationDataQueryVariables = Exact<{ nextToken?: InputMaybe; }>; - -export type GetColonyContributorsNotificationDataQuery = { __typename?: 'Query', getContributorsByColony?: { __typename?: 'ModelColonyContributorConnection', nextToken?: string | null, items: Array<{ __typename?: 'ColonyContributor', user?: { __typename?: 'User', notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null }; +export type GetColonyContributorsNotificationDataQuery = { + __typename?: 'Query'; + getContributorsByColony?: { + __typename?: 'ModelColonyContributorConnection'; + nextToken?: string | null; + items: Array<{ + __typename?: 'ColonyContributor'; + user?: { + __typename?: 'User'; + notificationsData?: { + __typename?: 'NotificationsData'; + magicbellUserId: string; + notificationsDisabled: boolean; + mutedColonyAddresses: Array; + paymentNotificationsDisabled: boolean; + mentionNotificationsDisabled: boolean; + adminNotificationsDisabled: boolean; + } | null; + } | null; + } | null>; + } | null; +}; export type GetCurrentVersionQueryVariables = Exact<{ key: Scalars['String']; }>; - -export type GetCurrentVersionQuery = { __typename?: 'Query', getCurrentVersionByKey?: { __typename?: 'ModelCurrentVersionConnection', items: Array<{ __typename?: 'CurrentVersion', id: string, version: number } | null> } | null }; +export type GetCurrentVersionQuery = { + __typename?: 'Query'; + getCurrentVersionByKey?: { + __typename?: 'ModelCurrentVersionConnection'; + items: Array<{ + __typename?: 'CurrentVersion'; + id: string; + version: number; + } | null>; + } | null; +}; export type GetColonyDecisionByActionIdQueryVariables = Exact<{ actionId: Scalars['ID']; }>; - -export type GetColonyDecisionByActionIdQuery = { __typename?: 'Query', getColonyDecisionByActionId?: { __typename?: 'ModelColonyDecisionConnection', items: Array<{ __typename?: 'ColonyDecision', id: string } | null> } | null }; +export type GetColonyDecisionByActionIdQuery = { + __typename?: 'Query'; + getColonyDecisionByActionId?: { + __typename?: 'ModelColonyDecisionConnection'; + items: Array<{ __typename?: 'ColonyDecision'; id: string } | null>; + } | null; +}; export type GetDomainMetadataQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetDomainMetadataQuery = { __typename?: 'Query', getDomainMetadata?: { __typename?: 'DomainMetadata', color: DomainColor, description?: string | null, id: string, name: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', newColor: DomainColor, newDescription?: string | null, newName: string, oldColor: DomainColor, oldDescription?: string | null, oldName: string, transactionHash: string }> | null } | null }; +export type GetDomainMetadataQuery = { + __typename?: 'Query'; + getDomainMetadata?: { + __typename?: 'DomainMetadata'; + color: DomainColor; + description?: string | null; + id: string; + name: string; + changelog?: Array<{ + __typename?: 'DomainMetadataChangelog'; + newColor: DomainColor; + newDescription?: string | null; + newName: string; + oldColor: DomainColor; + oldDescription?: string | null; + oldName: string; + transactionHash: string; + }> | null; + } | null; +}; export type GetDomainByNativeSkillIdQueryVariables = Exact<{ nativeSkillId: Scalars['String']; colonyAddress: Scalars['ID']; }>; - -export type GetDomainByNativeSkillIdQuery = { __typename?: 'Query', getDomainByNativeSkillId?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeSkillId: string, nativeId: number } | null> } | null }; +export type GetDomainByNativeSkillIdQuery = { + __typename?: 'Query'; + getDomainByNativeSkillId?: { + __typename?: 'ModelDomainConnection'; + items: Array<{ + __typename?: 'Domain'; + id: string; + nativeSkillId: string; + nativeId: number; + } | null>; + } | null; +}; export type GetDomainsByExtensionAddressQueryVariables = Exact<{ extensionAddress: Scalars['ID']; }>; - -export type GetDomainsByExtensionAddressQuery = { __typename?: 'Query', listColonyExtensions?: { __typename?: 'ModelColonyExtensionConnection', items: Array<{ __typename?: 'ColonyExtension', colony: { __typename?: 'Colony', id: string, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', nativeSkillId: string, nativeId: number } | null> } | null } } | null> } | null }; +export type GetDomainsByExtensionAddressQuery = { + __typename?: 'Query'; + listColonyExtensions?: { + __typename?: 'ModelColonyExtensionConnection'; + items: Array<{ + __typename?: 'ColonyExtension'; + colony: { + __typename?: 'Colony'; + id: string; + domains?: { + __typename?: 'ModelDomainConnection'; + items: Array<{ + __typename?: 'Domain'; + nativeSkillId: string; + nativeId: number; + } | null>; + } | null; + }; + } | null>; + } | null; +}; export type GetContractEventQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetContractEventQuery = { __typename?: 'Query', getContractEvent?: { __typename?: 'ContractEvent', id: string } | null }; +export type GetContractEventQuery = { + __typename?: 'Query'; + getContractEvent?: { __typename?: 'ContractEvent'; id: string } | null; +}; export type GetExpenditureQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetExpenditureQuery = { __typename?: 'Query', getExpenditure?: { __typename?: 'Expenditure', id: string, status: ExpenditureStatus, ownerAddress: string, userStakeId?: string | null, createdAt: string, firstEditTransactionHash?: string | null, splitPaymentPayoutClaimedNotificationSent?: boolean | null, type: ExpenditureType, slots: Array<{ __typename?: 'ExpenditureSlot', id: number, recipientAddress?: string | null, claimDelay?: string | null, payoutModifier?: number | null, payouts?: Array<{ __typename?: 'ExpenditurePayout', tokenAddress: string, amount: string, isClaimed: boolean, networkFee?: string | null }> | null }>, motions?: { __typename?: 'ModelColonyMotionConnection', items: Array<{ __typename?: 'ColonyMotion', transactionHash: string, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null> } | null, balances?: Array<{ __typename?: 'ExpenditureBalance', tokenAddress: string, amount: string }> | null, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, actions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', type: ColonyActionType, id: string } | null> } | null } | null }; +export type GetExpenditureQuery = { + __typename?: 'Query'; + getExpenditure?: { + __typename?: 'Expenditure'; + id: string; + status: ExpenditureStatus; + ownerAddress: string; + userStakeId?: string | null; + createdAt: string; + firstEditTransactionHash?: string | null; + splitPaymentPayoutClaimedNotificationSent?: boolean | null; + type: ExpenditureType; + slots: Array<{ + __typename?: 'ExpenditureSlot'; + id: number; + recipientAddress?: string | null; + claimDelay?: string | null; + payoutModifier?: number | null; + payouts?: Array<{ + __typename?: 'ExpenditurePayout'; + tokenAddress: string; + amount: string; + isClaimed: boolean; + networkFee?: string | null; + }> | null; + }>; + motions?: { + __typename?: 'ModelColonyMotionConnection'; + items: Array<{ + __typename?: 'ColonyMotion'; + transactionHash: string; + action?: { __typename?: 'ColonyAction'; type: ColonyActionType } | null; + } | null>; + } | null; + balances?: Array<{ + __typename?: 'ExpenditureBalance'; + tokenAddress: string; + amount: string; + }> | null; + metadata?: { + __typename?: 'ExpenditureMetadata'; + distributionType?: SplitPaymentDistributionType | null; + } | null; + actions?: { + __typename?: 'ModelColonyActionConnection'; + items: Array<{ + __typename?: 'ColonyAction'; + type: ColonyActionType; + id: string; + } | null>; + } | null; + } | null; +}; export type GetExpenditureByNativeFundingPotIdAndColonyQueryVariables = Exact<{ nativeFundingPotId: Scalars['Int']; colonyAddress: Scalars['ID']; }>; - -export type GetExpenditureByNativeFundingPotIdAndColonyQuery = { __typename?: 'Query', getExpendituresByNativeFundingPotIdAndColony?: { __typename?: 'ModelExpenditureConnection', items: Array<{ __typename?: 'Expenditure', id: string, status: ExpenditureStatus, ownerAddress: string, userStakeId?: string | null, createdAt: string, firstEditTransactionHash?: string | null, splitPaymentPayoutClaimedNotificationSent?: boolean | null, type: ExpenditureType, slots: Array<{ __typename?: 'ExpenditureSlot', id: number, recipientAddress?: string | null, claimDelay?: string | null, payoutModifier?: number | null, payouts?: Array<{ __typename?: 'ExpenditurePayout', tokenAddress: string, amount: string, isClaimed: boolean, networkFee?: string | null }> | null }>, motions?: { __typename?: 'ModelColonyMotionConnection', items: Array<{ __typename?: 'ColonyMotion', transactionHash: string, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null> } | null, balances?: Array<{ __typename?: 'ExpenditureBalance', tokenAddress: string, amount: string }> | null, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, actions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', type: ColonyActionType, id: string } | null> } | null } | null> } | null }; +export type GetExpenditureByNativeFundingPotIdAndColonyQuery = { + __typename?: 'Query'; + getExpendituresByNativeFundingPotIdAndColony?: { + __typename?: 'ModelExpenditureConnection'; + items: Array<{ + __typename?: 'Expenditure'; + id: string; + status: ExpenditureStatus; + ownerAddress: string; + userStakeId?: string | null; + createdAt: string; + firstEditTransactionHash?: string | null; + splitPaymentPayoutClaimedNotificationSent?: boolean | null; + type: ExpenditureType; + slots: Array<{ + __typename?: 'ExpenditureSlot'; + id: number; + recipientAddress?: string | null; + claimDelay?: string | null; + payoutModifier?: number | null; + payouts?: Array<{ + __typename?: 'ExpenditurePayout'; + tokenAddress: string; + amount: string; + isClaimed: boolean; + networkFee?: string | null; + }> | null; + }>; + motions?: { + __typename?: 'ModelColonyMotionConnection'; + items: Array<{ + __typename?: 'ColonyMotion'; + transactionHash: string; + action?: { + __typename?: 'ColonyAction'; + type: ColonyActionType; + } | null; + } | null>; + } | null; + balances?: Array<{ + __typename?: 'ExpenditureBalance'; + tokenAddress: string; + amount: string; + }> | null; + metadata?: { + __typename?: 'ExpenditureMetadata'; + distributionType?: SplitPaymentDistributionType | null; + } | null; + actions?: { + __typename?: 'ModelColonyActionConnection'; + items: Array<{ + __typename?: 'ColonyAction'; + type: ColonyActionType; + id: string; + } | null>; + } | null; + } | null>; + } | null; +}; export type GetStreamingPaymentQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetStreamingPaymentQuery = { __typename?: 'Query', getStreamingPayment?: { __typename?: 'StreamingPayment', id: string, payouts?: Array<{ __typename?: 'ExpenditurePayout', amount: string, tokenAddress: string, isClaimed: boolean }> | null } | null }; +export type GetStreamingPaymentQuery = { + __typename?: 'Query'; + getStreamingPayment?: { + __typename?: 'StreamingPayment'; + id: string; + payouts?: Array<{ + __typename?: 'ExpenditurePayout'; + amount: string; + tokenAddress: string; + isClaimed: boolean; + }> | null; + } | null; +}; export type GetColonyExtensionQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetColonyExtensionQuery = { __typename?: 'Query', getColonyExtension?: { __typename?: 'ColonyExtension', id: string, hash: string, colonyId: string, isInitialized: boolean, version: number } | null }; +export type GetColonyExtensionQuery = { + __typename?: 'Query'; + getColonyExtension?: { + __typename?: 'ColonyExtension'; + id: string; + hash: string; + colonyId: string; + isInitialized: boolean; + version: number; + } | null; +}; export type GetColonyExtensionsByColonyAddressQueryVariables = Exact<{ colonyAddress: Scalars['ID']; }>; - -export type GetColonyExtensionsByColonyAddressQuery = { __typename?: 'Query', getExtensionByColonyAndHash?: { __typename?: 'ModelColonyExtensionConnection', items: Array<{ __typename?: 'ColonyExtension', id: string, hash: string, colonyId: string, isInitialized: boolean, version: number } | null> } | null }; +export type GetColonyExtensionsByColonyAddressQuery = { + __typename?: 'Query'; + getExtensionByColonyAndHash?: { + __typename?: 'ModelColonyExtensionConnection'; + items: Array<{ + __typename?: 'ColonyExtension'; + id: string; + hash: string; + colonyId: string; + isInitialized: boolean; + version: number; + } | null>; + } | null; +}; export type ListExtensionsQueryVariables = Exact<{ hash: Scalars['String']; nextToken?: InputMaybe; }>; - -export type ListExtensionsQuery = { __typename?: 'Query', getExtensionsByHash?: { __typename?: 'ModelColonyExtensionConnection', nextToken?: string | null, items: Array<{ __typename?: 'ColonyExtension', id: string, hash: string, colonyId: string, isInitialized: boolean, version: number } | null> } | null }; +export type ListExtensionsQuery = { + __typename?: 'Query'; + getExtensionsByHash?: { + __typename?: 'ModelColonyExtensionConnection'; + nextToken?: string | null; + items: Array<{ + __typename?: 'ColonyExtension'; + id: string; + hash: string; + colonyId: string; + isInitialized: boolean; + version: number; + } | null>; + } | null; +}; export type GetColonyExtensionByHashAndColonyQueryVariables = Exact<{ colonyAddress: Scalars['ID']; extensionHash: Scalars['String']; }>; - -export type GetColonyExtensionByHashAndColonyQuery = { __typename?: 'Query', getExtensionByColonyAndHash?: { __typename?: 'ModelColonyExtensionConnection', items: Array<{ __typename?: 'ColonyExtension', id: string } | null> } | null }; +export type GetColonyExtensionByHashAndColonyQuery = { + __typename?: 'Query'; + getExtensionByColonyAndHash?: { + __typename?: 'ModelColonyExtensionConnection'; + items: Array<{ __typename?: 'ColonyExtension'; id: string } | null>; + } | null; +}; export type GetExtensionInstallationsCountQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetExtensionInstallationsCountQuery = { __typename?: 'Query', getExtensionInstallationsCount?: { __typename?: 'ExtensionInstallationsCount', oneTxPayment: number, stakedExpenditure: number, stagedExpenditure: number, streamingPayments: number, reputationWeighted: number, multiSigPermissions: number } | null }; +export type GetExtensionInstallationsCountQuery = { + __typename?: 'Query'; + getExtensionInstallationsCount?: { + __typename?: 'ExtensionInstallationsCount'; + oneTxPayment: number; + stakedExpenditure: number; + stagedExpenditure: number; + streamingPayments: number; + reputationWeighted: number; + multiSigPermissions: number; + } | null; +}; export type GetColonyExtensionByAddressQueryVariables = Exact<{ extensionAddress: Scalars['ID']; }>; - -export type GetColonyExtensionByAddressQuery = { __typename?: 'Query', getColonyExtension?: { __typename?: 'ColonyExtension', colonyId: string, params?: { __typename?: 'ExtensionParams', multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null }; +export type GetColonyExtensionByAddressQuery = { + __typename?: 'Query'; + getColonyExtension?: { + __typename?: 'ColonyExtension'; + colonyId: string; + params?: { + __typename?: 'ExtensionParams'; + multiSig?: { + __typename?: 'MultiSigParams'; + colonyThreshold: number; + domainThresholds?: Array<{ + __typename?: 'MultiSigDomainConfig'; + domainId: string; + domainThreshold: number; + } | null> | null; + } | null; + } | null; + } | null; +}; export type GetColonyUnclaimedFundsQueryVariables = Exact<{ colonyAddress: Scalars['ID']; @@ -10868,55 +12309,356 @@ export type GetColonyUnclaimedFundsQueryVariables = Exact<{ upToBlock?: InputMaybe; }>; - -export type GetColonyUnclaimedFundsQuery = { __typename?: 'Query', listColonyFundsClaims?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, amount: string, token: { __typename?: 'Token', symbol: string, tokenAddress: string } } | null> } | null }; +export type GetColonyUnclaimedFundsQuery = { + __typename?: 'Query'; + listColonyFundsClaims?: { + __typename?: 'ModelColonyFundsClaimConnection'; + items: Array<{ + __typename?: 'ColonyFundsClaim'; + id: string; + amount: string; + token: { __typename?: 'Token'; symbol: string; tokenAddress: string }; + } | null>; + } | null; +}; export type GetColonyUnclaimedFundQueryVariables = Exact<{ claimId: Scalars['ID']; }>; +export type GetColonyUnclaimedFundQuery = { + __typename?: 'Query'; + getColonyFundsClaim?: { __typename?: 'ColonyFundsClaim'; id: string } | null; +}; -export type GetColonyUnclaimedFundQuery = { __typename?: 'Query', getColonyFundsClaim?: { __typename?: 'ColonyFundsClaim', id: string } | null }; - -export type GetCurrentNetworkInverseFeeQueryVariables = Exact<{ [key: string]: never; }>; - +export type GetCurrentNetworkInverseFeeQueryVariables = Exact<{ + [key: string]: never; +}>; -export type GetCurrentNetworkInverseFeeQuery = { __typename?: 'Query', listCurrentNetworkInverseFees?: { __typename?: 'ModelCurrentNetworkInverseFeeConnection', items: Array<{ __typename?: 'CurrentNetworkInverseFee', id: string, inverseFee: string } | null> } | null }; +export type GetCurrentNetworkInverseFeeQuery = { + __typename?: 'Query'; + listCurrentNetworkInverseFees?: { + __typename?: 'ModelCurrentNetworkInverseFeeConnection'; + items: Array<{ + __typename?: 'CurrentNetworkInverseFee'; + id: string; + inverseFee: string; + } | null>; + } | null; +}; export type GetColonyActionByMotionIdQueryVariables = Exact<{ motionId: Scalars['ID']; }>; - -export type GetColonyActionByMotionIdQuery = { __typename?: 'Query', getColonyActionByMotionId?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', id: string, colonyDecisionId?: string | null, amount?: string | null, networkFee?: string | null, type: ColonyActionType, showInActionsList: boolean, colonyId: string, initiatorAddress: string, recipientAddress?: string | null, members?: Array | null, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', id: string, displayName: string, avatar?: string | null, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, oldDisplayName: string, newDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null }> | null } | null, payments?: Array<{ __typename?: 'Payment', recipientAddress: string }> | null } | null> } | null }; +export type GetColonyActionByMotionIdQuery = { + __typename?: 'Query'; + getColonyActionByMotionId?: { + __typename?: 'ModelColonyActionConnection'; + items: Array<{ + __typename?: 'ColonyAction'; + id: string; + colonyDecisionId?: string | null; + amount?: string | null; + networkFee?: string | null; + type: ColonyActionType; + showInActionsList: boolean; + colonyId: string; + initiatorAddress: string; + recipientAddress?: string | null; + members?: Array | null; + multiChainInfoId?: string | null; + targetChainId?: number | null; + pendingDomainMetadata?: { + __typename?: 'DomainMetadata'; + name: string; + color: DomainColor; + description?: string | null; + changelog?: Array<{ + __typename?: 'DomainMetadataChangelog'; + transactionHash: string; + oldName: string; + newName: string; + oldColor: DomainColor; + newColor: DomainColor; + oldDescription?: string | null; + newDescription?: string | null; + }> | null; + } | null; + pendingColonyMetadata?: { + __typename?: 'ColonyMetadata'; + id: string; + displayName: string; + avatar?: string | null; + thumbnail?: string | null; + description?: string | null; + externalLinks?: Array<{ + __typename?: 'ExternalLink'; + name: ExternalLinks; + link: string; + }> | null; + objective?: { + __typename?: 'ColonyObjective'; + title: string; + description: string; + progress: number; + } | null; + changelog?: Array<{ + __typename?: 'ColonyMetadataChangelog'; + transactionHash: string; + oldDisplayName: string; + newDisplayName: string; + hasAvatarChanged: boolean; + hasDescriptionChanged?: boolean | null; + haveExternalLinksChanged?: boolean | null; + hasObjectiveChanged?: boolean | null; + }> | null; + } | null; + payments?: Array<{ + __typename?: 'Payment'; + recipientAddress: string; + }> | null; + multiChainInfo?: { + __typename?: 'MultiChainInfo'; + id: string; + completedOnMainChain: boolean; + completedOnProxyChain: boolean; + wormholeInfo?: { + __typename?: 'ActionWormholeInfo'; + emitterChainId?: number | null; + emitterAddress: string; + sequence: string; + } | null; + } | null; + } | null>; + } | null; +}; export type GetColonyMotionQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetColonyMotionQuery = { __typename?: 'Query', getColonyMotion?: { __typename?: 'ColonyMotion', id: string, nativeMotionId: string, requiredStake: string, remainingStakes: Array, userMinStake: string, nativeMotionDomainId: string, isFinalized: boolean, createdBy: string, repSubmitted: string, skillRep: string, hasObjection: boolean, motionDomainId: string, isDecision: boolean, transactionHash: string, expenditureId?: string | null, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', nay: string, yay: string }, percentage: { __typename?: 'MotionStakeValues', nay: string, yay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null } } | null }; +export type GetColonyMotionQuery = { + __typename?: 'Query'; + getColonyMotion?: { + __typename?: 'ColonyMotion'; + id: string; + nativeMotionId: string; + requiredStake: string; + remainingStakes: Array; + userMinStake: string; + nativeMotionDomainId: string; + isFinalized: boolean; + createdBy: string; + repSubmitted: string; + skillRep: string; + hasObjection: boolean; + motionDomainId: string; + isDecision: boolean; + transactionHash: string; + expenditureId?: string | null; + motionStakes: { + __typename?: 'MotionStakes'; + raw: { __typename?: 'MotionStakeValues'; nay: string; yay: string }; + percentage: { + __typename?: 'MotionStakeValues'; + nay: string; + yay: string; + }; + }; + usersStakes: Array<{ + __typename?: 'UserMotionStakes'; + address: string; + stakes: { + __typename?: 'MotionStakes'; + raw: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + percentage: { + __typename?: 'MotionStakeValues'; + yay: string; + nay: string; + }; + }; + }>; + stakerRewards: Array<{ + __typename?: 'StakerRewards'; + address: string; + isClaimed: boolean; + rewards: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + }>; + voterRecord: Array<{ + __typename?: 'VoterRecord'; + address: string; + voteCount: string; + vote?: number | null; + }>; + revealedVotes: { + __typename?: 'MotionStakes'; + raw: { __typename?: 'MotionStakeValues'; yay: string; nay: string }; + percentage: { + __typename?: 'MotionStakeValues'; + yay: string; + nay: string; + }; + }; + motionStateHistory: { + __typename?: 'MotionStateHistory'; + hasVoted: boolean; + hasPassed: boolean; + hasFailed: boolean; + hasFailedNotFinalizable: boolean; + inRevealPhase: boolean; + yaySideFullyStakedAt?: string | null; + naySideFullyStakedAt?: string | null; + allVotesSubmittedAt?: string | null; + allVotesRevealedAt?: string | null; + endedAt?: string | null; + finalizedAt?: string | null; + }; + } | null; +}; export type GetVoterRewardsQueryVariables = Exact<{ input: GetVoterRewardsInput; }>; - -export type GetVoterRewardsQuery = { __typename?: 'Query', getVoterRewards?: { __typename?: 'VoterRewardsReturn', min: string, max: string, reward: string } | null }; +export type GetVoterRewardsQuery = { + __typename?: 'Query'; + getVoterRewards?: { + __typename?: 'VoterRewardsReturn'; + min: string; + max: string; + reward: string; + } | null; +}; export type GetColonyActionByMultiSigIdQueryVariables = Exact<{ multiSigId: Scalars['ID']; }>; - -export type GetColonyActionByMultiSigIdQuery = { __typename?: 'Query', getColonyActionByMultiSigId?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', id: string, colonyDecisionId?: string | null, amount?: string | null, networkFee?: string | null, type: ColonyActionType, showInActionsList: boolean, colonyId: string, initiatorAddress: string, recipientAddress?: string | null, members?: Array | null, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', id: string, displayName: string, avatar?: string | null, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, oldDisplayName: string, newDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null }> | null } | null, payments?: Array<{ __typename?: 'Payment', recipientAddress: string }> | null } | null> } | null }; +export type GetColonyActionByMultiSigIdQuery = { + __typename?: 'Query'; + getColonyActionByMultiSigId?: { + __typename?: 'ModelColonyActionConnection'; + items: Array<{ + __typename?: 'ColonyAction'; + id: string; + colonyDecisionId?: string | null; + amount?: string | null; + networkFee?: string | null; + type: ColonyActionType; + showInActionsList: boolean; + colonyId: string; + initiatorAddress: string; + recipientAddress?: string | null; + members?: Array | null; + multiChainInfoId?: string | null; + targetChainId?: number | null; + pendingDomainMetadata?: { + __typename?: 'DomainMetadata'; + name: string; + color: DomainColor; + description?: string | null; + changelog?: Array<{ + __typename?: 'DomainMetadataChangelog'; + transactionHash: string; + oldName: string; + newName: string; + oldColor: DomainColor; + newColor: DomainColor; + oldDescription?: string | null; + newDescription?: string | null; + }> | null; + } | null; + pendingColonyMetadata?: { + __typename?: 'ColonyMetadata'; + id: string; + displayName: string; + avatar?: string | null; + thumbnail?: string | null; + description?: string | null; + externalLinks?: Array<{ + __typename?: 'ExternalLink'; + name: ExternalLinks; + link: string; + }> | null; + objective?: { + __typename?: 'ColonyObjective'; + title: string; + description: string; + progress: number; + } | null; + changelog?: Array<{ + __typename?: 'ColonyMetadataChangelog'; + transactionHash: string; + oldDisplayName: string; + newDisplayName: string; + hasAvatarChanged: boolean; + hasDescriptionChanged?: boolean | null; + haveExternalLinksChanged?: boolean | null; + hasObjectiveChanged?: boolean | null; + }> | null; + } | null; + payments?: Array<{ + __typename?: 'Payment'; + recipientAddress: string; + }> | null; + multiChainInfo?: { + __typename?: 'MultiChainInfo'; + id: string; + completedOnMainChain: boolean; + completedOnProxyChain: boolean; + wormholeInfo?: { + __typename?: 'ActionWormholeInfo'; + emitterChainId?: number | null; + emitterAddress: string; + sequence: string; + } | null; + } | null; + } | null>; + } | null; +}; export type GetColonyMultiSigQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetColonyMultiSigQuery = { __typename?: 'Query', getColonyMultiSig?: { __typename?: 'ColonyMultiSig', id: string, colonyAddress: string, nativeMultiSigId: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, isRejected: boolean, isDecision: boolean, hasActionCompleted: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, createdAt: string, expenditureId?: string | null, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, multiSigId: string, role: number, colonyAddress: string, userAddress: string, vote: MultiSigVote, createdAt: string } | null> } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null }; +export type GetColonyMultiSigQuery = { + __typename?: 'Query'; + getColonyMultiSig?: { + __typename?: 'ColonyMultiSig'; + id: string; + colonyAddress: string; + nativeMultiSigId: string; + multiSigDomainId: string; + nativeMultiSigDomainId: string; + requiredPermissions: number; + transactionHash: string; + isExecuted: boolean; + isRejected: boolean; + isDecision: boolean; + hasActionCompleted: boolean; + executedAt?: string | null; + executedBy?: string | null; + rejectedAt?: string | null; + rejectedBy?: string | null; + createdAt: string; + expenditureId?: string | null; + signatures?: { + __typename?: 'ModelMultiSigUserSignatureConnection'; + items: Array<{ + __typename?: 'MultiSigUserSignature'; + id: string; + multiSigId: string; + role: number; + colonyAddress: string; + userAddress: string; + vote: MultiSigVote; + createdAt: string; + } | null>; + } | null; + action?: { __typename?: 'ColonyAction'; type: ColonyActionType } | null; + } | null; +}; export type GetUserMultiSigSignatureQueryVariables = Exact<{ multiSigId: Scalars['ID']; @@ -10925,1283 +12667,1600 @@ export type GetUserMultiSigSignatureQueryVariables = Exact<{ role: Scalars['Int']; }>; - -export type GetUserMultiSigSignatureQuery = { __typename?: 'Query', getMultiSigUserSignatureByMultiSigId?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, multiSigId: string, role: number, colonyAddress: string, userAddress: string, vote: MultiSigVote, createdAt: string } | null> } | null }; +export type GetUserMultiSigSignatureQuery = { + __typename?: 'Query'; + getMultiSigUserSignatureByMultiSigId?: { + __typename?: 'ModelMultiSigUserSignatureConnection'; + items: Array<{ + __typename?: 'MultiSigUserSignature'; + id: string; + multiSigId: string; + role: number; + colonyAddress: string; + userAddress: string; + vote: MultiSigVote; + createdAt: string; + } | null>; + } | null; +}; export type GetAllMultiSigRolesQueryVariables = Exact<{ colonyAddress: Scalars['ID']; }>; - -export type GetAllMultiSigRolesQuery = { __typename?: 'Query', getRoleByColony?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string } | null> } | null }; +export type GetAllMultiSigRolesQuery = { + __typename?: 'Query'; + getRoleByColony?: { + __typename?: 'ModelColonyRoleConnection'; + items: Array<{ __typename?: 'ColonyRole'; id: string } | null>; + } | null; +}; export type GetActiveColonyMultisigsQueryVariables = Exact<{ colonyAddress: Scalars['ID']; }>; +export type GetActiveColonyMultisigsQuery = { + __typename?: 'Query'; + getMultiSigByColonyAddress?: { + __typename?: 'ModelColonyMultiSigConnection'; + items: Array<{ __typename?: 'ColonyMultiSig'; id: string } | null>; + } | null; +}; + +export type GetMultiChainInfoQueryVariables = Exact<{ + id: Scalars['ID']; +}>; -export type GetActiveColonyMultisigsQuery = { __typename?: 'Query', getMultiSigByColonyAddress?: { __typename?: 'ModelColonyMultiSigConnection', items: Array<{ __typename?: 'ColonyMultiSig', id: string } | null> } | null }; +export type GetMultiChainInfoQuery = { + __typename?: 'Query'; + getMultiChainInfo?: { + __typename?: 'MultiChainInfo'; + id: string; + completedOnMainChain: boolean; + completedOnProxyChain: boolean; + wormholeInfo?: { + __typename?: 'ActionWormholeInfo'; + emitterChainId?: number | null; + emitterAddress: string; + sequence: string; + } | null; + } | null; +}; export type GetColonyRoleQueryVariables = Exact<{ id: Scalars['ID']; }>; - -export type GetColonyRoleQuery = { __typename?: 'Query', getColonyRole?: { __typename?: 'ColonyRole', id: string, latestBlock: number, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null }; +export type GetColonyRoleQuery = { + __typename?: 'Query'; + getColonyRole?: { + __typename?: 'ColonyRole'; + id: string; + latestBlock: number; + role_0?: boolean | null; + role_1?: boolean | null; + role_2?: boolean | null; + role_3?: boolean | null; + role_5?: boolean | null; + role_6?: boolean | null; + } | null; +}; export type GetAllColonyRolesQueryVariables = Exact<{ targetAddress: Scalars['ID']; colonyAddress: Scalars['ID']; }>; - -export type GetAllColonyRolesQuery = { __typename?: 'Query', getRoleByTargetAddressAndColony?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null> } | null }; +export type GetAllColonyRolesQuery = { + __typename?: 'Query'; + getRoleByTargetAddressAndColony?: { + __typename?: 'ModelColonyRoleConnection'; + items: Array<{ + __typename?: 'ColonyRole'; + id: string; + role_0?: boolean | null; + role_1?: boolean | null; + role_2?: boolean | null; + role_3?: boolean | null; + role_5?: boolean | null; + role_6?: boolean | null; + } | null>; + } | null; +}; export type GetColonyHistoricRoleQueryVariables = Exact<{ id: Scalars['ID']; }>; +export type GetColonyHistoricRoleQuery = { + __typename?: 'Query'; + getColonyHistoricRole?: { + __typename?: 'ColonyHistoricRole'; + id: string; + } | null; +}; -export type GetColonyHistoricRoleQuery = { __typename?: 'Query', getColonyHistoricRole?: { __typename?: 'ColonyHistoricRole', id: string } | null }; +export type GetProxyColonyQueryVariables = Exact<{ + id: Scalars['ID']; +}>; -export type GetReputationMiningCycleMetadataQueryVariables = Exact<{ +export type GetProxyColonyQuery = { + __typename?: 'Query'; + getProxyColony?: { + __typename?: 'ProxyColony'; + chainId: string; + colonyAddress: string; + id: string; + isActive: boolean; + } | null; +}; + +export type GetProxyColoniesQueryVariables = Exact<{ + chainId: Scalars['String']; +}>; + +export type GetProxyColoniesQuery = { + __typename?: 'Query'; + listProxyColonies?: { + __typename?: 'ModelProxyColonyConnection'; + items: Array<{ + __typename?: 'ProxyColony'; + chainId: string; + colonyAddress: string; + id: string; + isActive: boolean; + } | null>; + } | null; +}; + +export type GetSupportedChainQueryVariables = Exact<{ id: Scalars['ID']; }>; +export type GetSupportedChainQuery = { + __typename?: 'Query'; + getSupportedChain?: { __typename?: 'SupportedChain'; id: string } | null; +}; + +export type GetReputationMiningCycleMetadataQueryVariables = Exact<{ + id: Scalars['ID']; +}>; -export type GetReputationMiningCycleMetadataQuery = { __typename?: 'Query', getReputationMiningCycleMetadata?: { __typename?: 'ReputationMiningCycleMetadata', id: string } | null }; +export type GetReputationMiningCycleMetadataQuery = { + __typename?: 'Query'; + getReputationMiningCycleMetadata?: { + __typename?: 'ReputationMiningCycleMetadata'; + id: string; + } | null; +}; export type GetSafeTransactionByTransactionHashQueryVariables = Exact<{ transactionHash: Scalars['ID']; }>; - -export type GetSafeTransactionByTransactionHashQuery = { __typename?: 'Query', getSafeTransaction?: { __typename?: 'SafeTransaction', id: string } | null }; +export type GetSafeTransactionByTransactionHashQuery = { + __typename?: 'Query'; + getSafeTransaction?: { __typename?: 'SafeTransaction'; id: string } | null; +}; export type GetUserStakeQueryVariables = Exact<{ id: Scalars['ID']; }>; +export type GetUserStakeQuery = { + __typename?: 'Query'; + getUserStake?: { + __typename?: 'UserStake'; + id: string; + amount: string; + } | null; +}; -export type GetUserStakeQuery = { __typename?: 'Query', getUserStake?: { __typename?: 'UserStake', id: string, amount: string } | null }; - -export type GetStatsQueryVariables = Exact<{ [key: string]: never; }>; - +export type GetStatsQueryVariables = Exact<{ + chainId: Scalars['String']; +}>; -export type GetStatsQuery = { __typename?: 'Query', getIngestorStats?: { __typename?: 'IngestorStats', value: string } | null }; +export type GetStatsQuery = { + __typename?: 'Query'; + getIngestorStatsByChainId?: { + __typename?: 'ModelIngestorStatsConnection'; + items: Array<{ + __typename?: 'IngestorStats'; + id: string; + value: string; + } | null>; + } | null; +}; export type GetTokenFromEverywhereQueryVariables = Exact<{ input: TokenFromEverywhereArguments; }>; - -export type GetTokenFromEverywhereQuery = { __typename?: 'Query', getTokenFromEverywhere?: { __typename?: 'TokenFromEverywhereReturn', items?: Array<{ __typename?: 'Token', id: string } | null> | null } | null }; +export type GetTokenFromEverywhereQuery = { + __typename?: 'Query'; + getTokenFromEverywhere?: { + __typename?: 'TokenFromEverywhereReturn'; + items?: Array<{ __typename?: 'Token'; id: string } | null> | null; + } | null; +}; export type GetNotificationUsersQueryVariables = Exact<{ filter?: InputMaybe; limit?: InputMaybe; }>; - -export type GetNotificationUsersQuery = { __typename?: 'Query', listUsers?: { __typename?: 'ModelUserConnection', items: Array<{ __typename?: 'User', notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null> } | null }; +export type GetNotificationUsersQuery = { + __typename?: 'Query'; + listUsers?: { + __typename?: 'ModelUserConnection'; + items: Array<{ + __typename?: 'User'; + notificationsData?: { + __typename?: 'NotificationsData'; + magicbellUserId: string; + notificationsDisabled: boolean; + mutedColonyAddresses: Array; + paymentNotificationsDisabled: boolean; + mentionNotificationsDisabled: boolean; + adminNotificationsDisabled: boolean; + } | null; + } | null>; + } | null; +}; export const DomainMetadata = gql` - fragment DomainMetadata on DomainMetadata { - name - color - description - changelog { - transactionHash - oldName - newName - oldColor - newColor - oldDescription - newDescription - } -} - `; -export const ColonyMetadata = gql` - fragment ColonyMetadata on ColonyMetadata { - id - displayName - avatar - thumbnail - description - externalLinks { + fragment DomainMetadata on DomainMetadata { name - link + color + description + changelog { + transactionHash + oldName + newName + oldColor + newColor + oldDescription + newDescription + } } - objective { - title +`; +export const ColonyMetadata = gql` + fragment ColonyMetadata on ColonyMetadata { + id + displayName + avatar + thumbnail description - progress + externalLinks { + name + link + } + objective { + title + description + progress + } + changelog { + transactionHash + oldDisplayName + newDisplayName + hasAvatarChanged + hasDescriptionChanged + haveExternalLinksChanged + hasObjectiveChanged + } } - changelog { - transactionHash - oldDisplayName - newDisplayName - hasAvatarChanged - hasDescriptionChanged - haveExternalLinksChanged - hasObjectiveChanged +`; +export const MultiChainInfo = gql` + fragment MultiChainInfo on MultiChainInfo { + id + completedOnMainChain + completedOnProxyChain + wormholeInfo { + emitterChainId + emitterAddress + sequence + } } -} - `; +`; export const ActionMetadataInfo = gql` - fragment ActionMetadataInfo on ColonyAction { - id - pendingDomainMetadata { - ...DomainMetadata - } - pendingColonyMetadata { - ...ColonyMetadata - } - colonyDecisionId - amount - networkFee - type - showInActionsList - colonyId - initiatorAddress - recipientAddress - payments { + fragment ActionMetadataInfo on ColonyAction { + id + pendingDomainMetadata { + ...DomainMetadata + } + pendingColonyMetadata { + ...ColonyMetadata + } + colonyDecisionId + amount + networkFee + type + showInActionsList + colonyId + initiatorAddress recipientAddress + payments { + recipientAddress + } + members + multiChainInfoId + multiChainInfo { + ...MultiChainInfo + } + targetChainId } - members -} - ${DomainMetadata} -${ColonyMetadata}`; + ${DomainMetadata} + ${ColonyMetadata} + ${MultiChainInfo} +`; export const Token = gql` - fragment Token on Token { - tokenAddress: id - symbol -} - `; -export const Colony = gql` - fragment Colony on Colony { - colonyAddress: id - nativeToken { - ...Token + fragment Token on Token { + tokenAddress: id + symbol } - tokens { - items { - id - tokenAddress: tokenID +`; +export const Colony = gql` + fragment Colony on Colony { + colonyAddress: id + nativeToken { + ...Token } - } - motionsWithUnclaimedStakes { - motionId - unclaimedRewards { - address - rewards { - yay - nay + tokens { + items { + id + tokenAddress: tokenID } - isClaimed } - } - domains(limit: 1000, nextToken: $nextToken) { - items { - id - nativeSkillId + motionsWithUnclaimedStakes { + motionId + unclaimedRewards { + address + rewards { + yay + nay + } + isClaimed + } + } + domains(limit: 1000, nextToken: $nextToken) { + items { + id + nativeSkillId + } + nextToken } - nextToken } -} - ${Token}`; + ${Token} +`; export const NotificationsData = gql` - fragment NotificationsData on NotificationsData { - magicbellUserId - notificationsDisabled - mutedColonyAddresses - paymentNotificationsDisabled - mentionNotificationsDisabled - adminNotificationsDisabled -} - `; + fragment NotificationsData on NotificationsData { + magicbellUserId + notificationsDisabled + mutedColonyAddresses + paymentNotificationsDisabled + mentionNotificationsDisabled + adminNotificationsDisabled + } +`; export const ColonyWithRootRoles = gql` - fragment ColonyWithRootRoles on Colony { - id - roles(filter: {role_1: {eq: true}}, limit: 1000) { - items { - id - targetUser { + fragment ColonyWithRootRoles on Colony { + id + roles(filter: { role_1: { eq: true } }, limit: 1000) { + items { id - profile { - displayName + targetUser { id - } - notificationsData { - ...NotificationsData + profile { + displayName + id + } + notificationsData { + ...NotificationsData + } } } } } -} - ${NotificationsData}`; + ${NotificationsData} +`; export const ExpenditureSlot = gql` - fragment ExpenditureSlot on ExpenditureSlot { - id - recipientAddress - claimDelay - payoutModifier - payouts { + fragment ExpenditureSlot on ExpenditureSlot { + id + recipientAddress + claimDelay + payoutModifier + payouts { + tokenAddress + amount + isClaimed + networkFee + } + } +`; +export const ExpenditureBalance = gql` + fragment ExpenditureBalance on ExpenditureBalance { tokenAddress amount - isClaimed - networkFee } -} - `; -export const ExpenditureBalance = gql` - fragment ExpenditureBalance on ExpenditureBalance { - tokenAddress - amount -} - `; +`; export const Expenditure = gql` - fragment Expenditure on Expenditure { - id - slots { - ...ExpenditureSlot - } - motions { - items { - transactionHash - action { - type + fragment Expenditure on Expenditure { + id + slots { + ...ExpenditureSlot + } + motions { + items { + transactionHash + action { + type + } } } - } - balances { - ...ExpenditureBalance - } - metadata { - distributionType - } - status - ownerAddress - userStakeId - createdAt - firstEditTransactionHash - splitPaymentPayoutClaimedNotificationSent - type - actions { - items { - type - id + balances { + ...ExpenditureBalance + } + metadata { + distributionType + } + status + ownerAddress + userStakeId + createdAt + firstEditTransactionHash + splitPaymentPayoutClaimedNotificationSent + type + actions { + items { + type + id + } } } -} - ${ExpenditureSlot} -${ExpenditureBalance}`; + ${ExpenditureSlot} + ${ExpenditureBalance} +`; export const Extension = gql` - fragment Extension on ColonyExtension { - id - hash - colonyId - isInitialized - version -} - `; -export const MotionStakes = gql` - fragment MotionStakes on MotionStakes { - raw { - nay - yay - } - percentage { - nay - yay + fragment Extension on ColonyExtension { + id + hash + colonyId + isInitialized + version } -} - `; -export const UserMotionStakes = gql` - fragment UserMotionStakes on UserMotionStakes { - address - stakes { +`; +export const MotionStakes = gql` + fragment MotionStakes on MotionStakes { raw { - yay nay + yay } percentage { - yay nay + yay } } -} - `; +`; +export const UserMotionStakes = gql` + fragment UserMotionStakes on UserMotionStakes { + address + stakes { + raw { + yay + nay + } + percentage { + yay + nay + } + } + } +`; export const StakerReward = gql` - fragment StakerReward on StakerRewards { - address - rewards { - yay - nay + fragment StakerReward on StakerRewards { + address + rewards { + yay + nay + } + isClaimed } - isClaimed -} - `; +`; export const VoterRecord = gql` - fragment VoterRecord on VoterRecord { - address - voteCount - vote -} - `; + fragment VoterRecord on VoterRecord { + address + voteCount + vote + } +`; export const ColonyMotion = gql` - fragment ColonyMotion on ColonyMotion { - id - nativeMotionId - motionStakes { - ...MotionStakes - } - requiredStake - remainingStakes - usersStakes { - ...UserMotionStakes - } - userMinStake - nativeMotionDomainId - stakerRewards { - ...StakerReward - } - isFinalized - createdBy - voterRecord { - ...VoterRecord - } - revealedVotes { - raw { - yay - nay + fragment ColonyMotion on ColonyMotion { + id + nativeMotionId + motionStakes { + ...MotionStakes } - percentage { - yay - nay + requiredStake + remainingStakes + usersStakes { + ...UserMotionStakes + } + userMinStake + nativeMotionDomainId + stakerRewards { + ...StakerReward + } + isFinalized + createdBy + voterRecord { + ...VoterRecord + } + revealedVotes { + raw { + yay + nay + } + percentage { + yay + nay + } + } + repSubmitted + skillRep + hasObjection + motionDomainId + nativeMotionDomainId + motionStateHistory { + hasVoted + hasPassed + hasFailed + hasFailedNotFinalizable + inRevealPhase + yaySideFullyStakedAt + naySideFullyStakedAt + allVotesSubmittedAt + allVotesRevealedAt + endedAt + finalizedAt } + isDecision + transactionHash + expenditureId } - repSubmitted - skillRep - hasObjection - motionDomainId - nativeMotionDomainId - motionStateHistory { - hasVoted - hasPassed - hasFailed - hasFailedNotFinalizable - inRevealPhase - yaySideFullyStakedAt - naySideFullyStakedAt - allVotesSubmittedAt - allVotesRevealedAt - endedAt - finalizedAt - } - isDecision - transactionHash - expenditureId -} - ${MotionStakes} -${UserMotionStakes} -${StakerReward} -${VoterRecord}`; + ${MotionStakes} + ${UserMotionStakes} + ${StakerReward} + ${VoterRecord} +`; export const MultiSigUserSignature = gql` - fragment MultiSigUserSignature on MultiSigUserSignature { - id - multiSigId - role - colonyAddress - userAddress - vote - createdAt -} - `; + fragment MultiSigUserSignature on MultiSigUserSignature { + id + multiSigId + role + colonyAddress + userAddress + vote + createdAt + } +`; export const ColonyMultiSig = gql` - fragment ColonyMultiSig on ColonyMultiSig { - id - colonyAddress - nativeMultiSigId - multiSigDomainId - nativeMultiSigDomainId - requiredPermissions - transactionHash - isExecuted - isRejected - isDecision - hasActionCompleted - signatures { - items { - ...MultiSigUserSignature - } - } - executedAt - executedBy - rejectedAt - rejectedBy - createdAt - action { - type + fragment ColonyMultiSig on ColonyMultiSig { + id + colonyAddress + nativeMultiSigId + multiSigDomainId + nativeMultiSigDomainId + requiredPermissions + transactionHash + isExecuted + isRejected + isDecision + hasActionCompleted + signatures { + items { + ...MultiSigUserSignature + } + } + executedAt + executedBy + rejectedAt + rejectedBy + createdAt + action { + type + } + expenditureId } - expenditureId -} - ${MultiSigUserSignature}`; + ${MultiSigUserSignature} +`; +export const ProxyColony = gql` + fragment ProxyColony on ProxyColony { + id + colonyAddress + chainId + isActive + } +`; export const NotificationUser = gql` - fragment NotificationUser on ColonyContributor { - user { - notificationsData { - ...NotificationsData + fragment NotificationUser on ColonyContributor { + user { + notificationsData { + ...NotificationsData + } } } -} - ${NotificationsData}`; + ${NotificationsData} +`; export const CreateColonyActionDocument = gql` - mutation CreateColonyAction($input: CreateColonyActionInput!) { - createColonyAction(input: $input) { - id + mutation CreateColonyAction($input: CreateColonyActionInput!) { + createColonyAction(input: $input) { + id + } } -} - `; +`; export const UpdateColonyActionDocument = gql` - mutation UpdateColonyAction($input: UpdateColonyActionInput!) { - updateColonyAction(input: $input) { - id + mutation UpdateColonyAction($input: UpdateColonyActionInput!) { + updateColonyAction(input: $input) { + id + } } -} - `; +`; export const UpdateColonyDocument = gql` - mutation UpdateColony($input: UpdateColonyInput!) { - updateColony(input: $input) { - id + mutation UpdateColony($input: UpdateColonyInput!) { + updateColony(input: $input) { + id + } } -} - `; +`; export const UpdateColonyMetadataDocument = gql` - mutation UpdateColonyMetadata($input: UpdateColonyMetadataInput!) { - updateColonyMetadata(input: $input) { - id + mutation UpdateColonyMetadata($input: UpdateColonyMetadataInput!) { + updateColonyMetadata(input: $input) { + id + } } -} - `; +`; export const CreateColonyDocument = gql` - mutation CreateColony($input: CreateColonyInput!, $condition: ModelColonyConditionInput) { - createColony(input: $input, condition: $condition) { - id + mutation CreateColony( + $input: CreateColonyInput! + $condition: ModelColonyConditionInput + ) { + createColony(input: $input, condition: $condition) { + id + } } -} - `; +`; export const CreateColonyMetadataDocument = gql` - mutation CreateColonyMetadata($input: CreateColonyMetadataInput!) { - createColonyMetadata(input: $input) { - id + mutation CreateColonyMetadata($input: CreateColonyMetadataInput!) { + createColonyMetadata(input: $input) { + id + } } -} - `; +`; export const DeleteColonyMetadataDocument = gql` - mutation DeleteColonyMetadata($input: DeleteColonyMetadataInput!) { - deleteColonyMetadata(input: $input) { - id + mutation DeleteColonyMetadata($input: DeleteColonyMetadataInput!) { + deleteColonyMetadata(input: $input) { + id + } } -} - `; +`; export const CreateColonyMemberInviteDocument = gql` - mutation CreateColonyMemberInvite($input: CreateColonyMemberInviteInput!, $condition: ModelColonyMemberInviteConditionInput) { - createColonyMemberInvite(input: $input, condition: $condition) { - id + mutation CreateColonyMemberInvite( + $input: CreateColonyMemberInviteInput! + $condition: ModelColonyMemberInviteConditionInput + ) { + createColonyMemberInvite(input: $input, condition: $condition) { + id + } } -} - `; +`; export const CreateColonyTokensDocument = gql` - mutation CreateColonyTokens($input: CreateColonyTokensInput!) { - createColonyTokens(input: $input) { - id + mutation CreateColonyTokens($input: CreateColonyTokensInput!) { + createColonyTokens(input: $input) { + id + } } -} - `; +`; export const CreateColonyContributorDocument = gql` - mutation CreateColonyContributor($input: CreateColonyContributorInput!) { - createColonyContributor(input: $input) { - id + mutation CreateColonyContributor($input: CreateColonyContributorInput!) { + createColonyContributor(input: $input) { + id + } } -} - `; +`; export const UpdateColonyContributorDocument = gql` - mutation UpdateColonyContributor($input: UpdateColonyContributorInput!) { - updateColonyContributor(input: $input) { - id + mutation UpdateColonyContributor($input: UpdateColonyContributorInput!) { + updateColonyContributor(input: $input) { + id + } } -} - `; +`; export const DeleteColonyContributorDocument = gql` - mutation DeleteColonyContributor($input: DeleteColonyContributorInput!) { - deleteColonyContributor(input: $input) { - id + mutation DeleteColonyContributor($input: DeleteColonyContributorInput!) { + deleteColonyContributor(input: $input) { + id + } } -} - `; +`; export const CreateCurrentVersionDocument = gql` - mutation CreateCurrentVersion($input: CreateCurrentVersionInput!) { - createCurrentVersion(input: $input) { - id + mutation CreateCurrentVersion($input: CreateCurrentVersionInput!) { + createCurrentVersion(input: $input) { + id + } } -} - `; +`; export const UpdateCurrentVersionDocument = gql` - mutation UpdateCurrentVersion($input: UpdateCurrentVersionInput!) { - updateCurrentVersion(input: $input) { - id + mutation UpdateCurrentVersion($input: UpdateCurrentVersionInput!) { + updateCurrentVersion(input: $input) { + id + } } -} - `; +`; export const UpdateColonyDecisionDocument = gql` - mutation UpdateColonyDecision($id: ID!, $showInDecisionsList: Boolean!) { - updateColonyDecision( - input: {id: $id, showInDecisionsList: $showInDecisionsList} - ) { - id + mutation UpdateColonyDecision($id: ID!, $showInDecisionsList: Boolean!) { + updateColonyDecision( + input: { id: $id, showInDecisionsList: $showInDecisionsList } + ) { + id + } } -} - `; +`; export const CreateDomainDocument = gql` - mutation CreateDomain($input: CreateDomainInput!) { - createDomain(input: $input) { - id + mutation CreateDomain($input: CreateDomainInput!) { + createDomain(input: $input) { + id + } } -} - `; +`; export const CreateDomainMetadataDocument = gql` - mutation CreateDomainMetadata($input: CreateDomainMetadataInput!) { - createDomainMetadata(input: $input) { - id + mutation CreateDomainMetadata($input: CreateDomainMetadataInput!) { + createDomainMetadata(input: $input) { + id + } } -} - `; +`; export const UpdateDomainMetadataDocument = gql` - mutation UpdateDomainMetadata($input: UpdateDomainMetadataInput!) { - updateDomainMetadata(input: $input) { - id + mutation UpdateDomainMetadata($input: UpdateDomainMetadataInput!) { + updateDomainMetadata(input: $input) { + id + } } -} - `; +`; export const CreateContractEventDocument = gql` - mutation CreateContractEvent($input: CreateContractEventInput!, $condition: ModelContractEventConditionInput) { - createContractEvent(input: $input, condition: $condition) { - id + mutation CreateContractEvent( + $input: CreateContractEventInput! + $condition: ModelContractEventConditionInput + ) { + createContractEvent(input: $input, condition: $condition) { + id + } } -} - `; +`; export const CreateExpenditureDocument = gql` - mutation CreateExpenditure($input: CreateExpenditureInput!) { - createExpenditure(input: $input) { - id + mutation CreateExpenditure($input: CreateExpenditureInput!) { + createExpenditure(input: $input) { + id + } } -} - `; +`; export const UpdateExpenditureDocument = gql` - mutation UpdateExpenditure($input: UpdateExpenditureInput!) { - updateExpenditure(input: $input) { - id - ownerAddress + mutation UpdateExpenditure($input: UpdateExpenditureInput!) { + updateExpenditure(input: $input) { + id + ownerAddress + } } -} - `; +`; export const UpdateExpenditureMetadataDocument = gql` - mutation UpdateExpenditureMetadata($input: UpdateExpenditureMetadataInput!) { - updateExpenditureMetadata(input: $input) { - id + mutation UpdateExpenditureMetadata($input: UpdateExpenditureMetadataInput!) { + updateExpenditureMetadata(input: $input) { + id + } } -} - `; +`; export const CreateStreamingPaymentDocument = gql` - mutation CreateStreamingPayment($input: CreateStreamingPaymentInput!) { - createStreamingPayment(input: $input) { - id + mutation CreateStreamingPayment($input: CreateStreamingPaymentInput!) { + createStreamingPayment(input: $input) { + id + } } -} - `; +`; export const UpdateStreamingPaymentDocument = gql` - mutation UpdateStreamingPayment($input: UpdateStreamingPaymentInput!) { - updateStreamingPayment(input: $input) { - id + mutation UpdateStreamingPayment($input: UpdateStreamingPaymentInput!) { + updateStreamingPayment(input: $input) { + id + } } -} - `; +`; export const CreateColonyExtensionDocument = gql` - mutation CreateColonyExtension($input: CreateColonyExtensionInput!) { - createColonyExtension(input: $input) { - id + mutation CreateColonyExtension($input: CreateColonyExtensionInput!) { + createColonyExtension(input: $input) { + id + } } -} - `; +`; export const UpdateColonyExtensionByAddressDocument = gql` - mutation UpdateColonyExtensionByAddress($input: UpdateColonyExtensionInput!) { - updateColonyExtension(input: $input) { - id - extensionHash: hash - colonyAddress: colonyId + mutation UpdateColonyExtensionByAddress($input: UpdateColonyExtensionInput!) { + updateColonyExtension(input: $input) { + id + extensionHash: hash + colonyAddress: colonyId + } } -} - `; +`; export const CreateExtensionInstallationsCountDocument = gql` - mutation CreateExtensionInstallationsCount($input: CreateExtensionInstallationsCountInput!) { - createExtensionInstallationsCount(input: $input) { - id + mutation CreateExtensionInstallationsCount( + $input: CreateExtensionInstallationsCountInput! + ) { + createExtensionInstallationsCount(input: $input) { + id + } } -} - `; +`; export const UpdateExtensionInstallationsCountDocument = gql` - mutation UpdateExtensionInstallationsCount($input: UpdateExtensionInstallationsCountInput!) { - updateExtensionInstallationsCount(input: $input) { - id + mutation UpdateExtensionInstallationsCount( + $input: UpdateExtensionInstallationsCountInput! + ) { + updateExtensionInstallationsCount(input: $input) { + id + } } -} - `; +`; export const CreateColonyFundsClaimDocument = gql` - mutation CreateColonyFundsClaim($input: CreateColonyFundsClaimInput!, $condition: ModelColonyFundsClaimConditionInput) { - createColonyFundsClaim(input: $input, condition: $condition) { - id + mutation CreateColonyFundsClaim( + $input: CreateColonyFundsClaimInput! + $condition: ModelColonyFundsClaimConditionInput + ) { + createColonyFundsClaim(input: $input, condition: $condition) { + id + } } -} - `; +`; export const UpdateColonyFundsClaimDocument = gql` - mutation UpdateColonyFundsClaim($input: UpdateColonyFundsClaimInput!, $condition: ModelColonyFundsClaimConditionInput) { - updateColonyFundsClaim(input: $input, condition: $condition) { - id + mutation UpdateColonyFundsClaim( + $input: UpdateColonyFundsClaimInput! + $condition: ModelColonyFundsClaimConditionInput + ) { + updateColonyFundsClaim(input: $input, condition: $condition) { + id + } } -} - `; +`; export const DeleteColonyFundsClaimDocument = gql` - mutation DeleteColonyFundsClaim($input: DeleteColonyFundsClaimInput!, $condition: ModelColonyFundsClaimConditionInput) { - deleteColonyFundsClaim(input: $input, condition: $condition) { - id + mutation DeleteColonyFundsClaim( + $input: DeleteColonyFundsClaimInput! + $condition: ModelColonyFundsClaimConditionInput + ) { + deleteColonyFundsClaim(input: $input, condition: $condition) { + id + } } -} - `; +`; export const CreateCurrentNetworkInverseFeeDocument = gql` - mutation CreateCurrentNetworkInverseFee($input: CreateCurrentNetworkInverseFeeInput!) { - createCurrentNetworkInverseFee(input: $input) { - id + mutation CreateCurrentNetworkInverseFee( + $input: CreateCurrentNetworkInverseFeeInput! + ) { + createCurrentNetworkInverseFee(input: $input) { + id + } } -} - `; +`; export const UpdateCurrentNetworkInverseFeeDocument = gql` - mutation UpdateCurrentNetworkInverseFee($input: UpdateCurrentNetworkInverseFeeInput!) { - updateCurrentNetworkInverseFee(input: $input) { - id + mutation UpdateCurrentNetworkInverseFee( + $input: UpdateCurrentNetworkInverseFeeInput! + ) { + updateCurrentNetworkInverseFee(input: $input) { + id + } } -} - `; +`; export const CreateColonyMotionDocument = gql` - mutation CreateColonyMotion($input: CreateColonyMotionInput!) { - createColonyMotion(input: $input) { - id + mutation CreateColonyMotion($input: CreateColonyMotionInput!) { + createColonyMotion(input: $input) { + id + } } -} - `; +`; export const UpdateColonyMotionDocument = gql` - mutation UpdateColonyMotion($input: UpdateColonyMotionInput!) { - updateColonyMotion(input: $input) { - id + mutation UpdateColonyMotion($input: UpdateColonyMotionInput!) { + updateColonyMotion(input: $input) { + id + } } -} - `; +`; export const CreateMotionMessageDocument = gql` - mutation CreateMotionMessage($input: CreateMotionMessageInput!) { - createMotionMessage(input: $input) { - id + mutation CreateMotionMessage($input: CreateMotionMessageInput!) { + createMotionMessage(input: $input) { + id + } } -} - `; +`; export const CreateUserVoterRewardDocument = gql` - mutation CreateUserVoterReward($input: CreateVoterRewardsHistoryInput!) { - createVoterRewardsHistory(input: $input) { - id + mutation CreateUserVoterReward($input: CreateVoterRewardsHistoryInput!) { + createVoterRewardsHistory(input: $input) { + id + } } -} - `; +`; export const CreateColonyMultiSigDocument = gql` - mutation CreateColonyMultiSig($input: CreateColonyMultiSigInput!) { - createColonyMultiSig(input: $input) { - id + mutation CreateColonyMultiSig($input: CreateColonyMultiSigInput!) { + createColonyMultiSig(input: $input) { + id + } } -} - `; +`; export const UpdateColonyMultiSigDocument = gql` - mutation UpdateColonyMultiSig($input: UpdateColonyMultiSigInput!) { - updateColonyMultiSig(input: $input) { - id + mutation UpdateColonyMultiSig($input: UpdateColonyMultiSigInput!) { + updateColonyMultiSig(input: $input) { + id + } } -} - `; +`; export const CreateMultiSigVoteDocument = gql` - mutation CreateMultiSigVote($input: CreateMultiSigUserSignatureInput!) { - createMultiSigUserSignature(input: $input) { - id + mutation CreateMultiSigVote($input: CreateMultiSigUserSignatureInput!) { + createMultiSigUserSignature(input: $input) { + id + } } -} - `; +`; export const RemoveMultiSigVoteDocument = gql` - mutation RemoveMultiSigVote($id: ID!) { - deleteMultiSigUserSignature(input: {id: $id}) { - id + mutation RemoveMultiSigVote($id: ID!) { + deleteMultiSigUserSignature(input: { id: $id }) { + id + } } -} - `; +`; export const RemoveMultiSigRoleDocument = gql` - mutation RemoveMultiSigRole($id: ID!) { - deleteColonyRole(input: {id: $id}) { - id + mutation RemoveMultiSigRole($id: ID!) { + deleteColonyRole(input: { id: $id }) { + id + } } -} - `; +`; +export const CreateMultiChainInfoDocument = gql` + mutation CreateMultiChainInfo($input: CreateMultiChainInfoInput!) { + createMultiChainInfo(input: $input) { + ...MultiChainInfo + } + } + ${MultiChainInfo} +`; +export const UpdateMultiChainInfoDocument = gql` + mutation UpdateMultiChainInfo($input: UpdateMultiChainInfoInput!) { + updateMultiChainInfo(input: $input) { + ...MultiChainInfo + } + } + ${MultiChainInfo} +`; export const CreateColonyRoleDocument = gql` - mutation CreateColonyRole($input: CreateColonyRoleInput!) { - createColonyRole(input: $input) { - id + mutation CreateColonyRole($input: CreateColonyRoleInput!) { + createColonyRole(input: $input) { + id + } } -} - `; +`; export const UpdateColonyRoleDocument = gql` - mutation UpdateColonyRole($input: UpdateColonyRoleInput!) { - updateColonyRole(input: $input) { - id + mutation UpdateColonyRole($input: UpdateColonyRoleInput!) { + updateColonyRole(input: $input) { + id + } } -} - `; +`; export const CreateColonyHistoricRoleDocument = gql` - mutation CreateColonyHistoricRole($input: CreateColonyHistoricRoleInput!) { - createColonyHistoricRole(input: $input) { - id + mutation CreateColonyHistoricRole($input: CreateColonyHistoricRoleInput!) { + createColonyHistoricRole(input: $input) { + id + } + } +`; +export const CreateProxyColonyDocument = gql` + mutation CreateProxyColony($input: CreateProxyColonyInput!) { + createProxyColony(input: $input) { + id + } + } +`; +export const UpdateProxyColonyDocument = gql` + mutation UpdateProxyColony($input: UpdateProxyColonyInput!) { + updateProxyColony(input: $input) { + id + } + } +`; +export const CreateSupportedChainDocument = gql` + mutation CreateSupportedChain($input: CreateSupportedChainInput!) { + createSupportedChain(input: $input) { + id + } + } +`; +export const UpdateSupportedChainDocument = gql` + mutation UpdateSupportedChain($input: UpdateSupportedChainInput!) { + updateSupportedChain(input: $input) { + id + } } -} - `; +`; export const UpdateReputationMiningCycleMetadataDocument = gql` - mutation UpdateReputationMiningCycleMetadata($input: UpdateReputationMiningCycleMetadataInput!) { - updateReputationMiningCycleMetadata(input: $input) { - id + mutation UpdateReputationMiningCycleMetadata( + $input: UpdateReputationMiningCycleMetadataInput! + ) { + updateReputationMiningCycleMetadata(input: $input) { + id + } } -} - `; +`; export const CreateReputationMiningCycleMetadataDocument = gql` - mutation CreateReputationMiningCycleMetadata($input: CreateReputationMiningCycleMetadataInput!) { - createReputationMiningCycleMetadata(input: $input) { - id + mutation CreateReputationMiningCycleMetadata( + $input: CreateReputationMiningCycleMetadataInput! + ) { + createReputationMiningCycleMetadata(input: $input) { + id + } } -} - `; +`; export const CreateUserStakeDocument = gql` - mutation CreateUserStake($input: CreateUserStakeInput!) { - createUserStake(input: $input) { - id + mutation CreateUserStake($input: CreateUserStakeInput!) { + createUserStake(input: $input) { + id + } } -} - `; +`; export const UpdateUserStakeDocument = gql` - mutation UpdateUserStake($input: UpdateUserStakeInput!) { - updateUserStake(input: $input) { - id + mutation UpdateUserStake($input: UpdateUserStakeInput!) { + updateUserStake(input: $input) { + id + } } -} - `; +`; export const CreateStatsDocument = gql` - mutation CreateStats($value: String!) { - createIngestorStats(input: {id: "STATS", value: $value}) { - id + mutation CreateStats($chainId: String!, $value: String!) { + createIngestorStats(input: { chainId: $chainId, value: $value }) { + id + } } -} - `; +`; export const UpdateStatsDocument = gql` - mutation UpdateStats($value: String!) { - updateIngestorStats(input: {id: "STATS", value: $value}) { - id + mutation UpdateStats($id: ID!, $chainId: String!, $value: String!) { + updateIngestorStats(input: { id: $id, chainId: $chainId, value: $value }) { + id + } } -} - `; +`; export const DeleteColonyTokensDocument = gql` - mutation DeleteColonyTokens($input: DeleteColonyTokensInput!) { - deleteColonyTokens(input: $input) { - id + mutation DeleteColonyTokens($input: DeleteColonyTokensInput!) { + deleteColonyTokens(input: $input) { + id + } } -} - `; +`; export const GetColonyActionDocument = gql` - query GetColonyAction($transactionHash: ID!) { - getColonyAction(id: $transactionHash) { - id + query GetColonyAction($transactionHash: ID!) { + getColonyAction(id: $transactionHash) { + id + } } -} - `; +`; export const GetColonyArbitraryTransactionActionDocument = gql` - query GetColonyArbitraryTransactionAction($transactionHash: ID!) { - getColonyAction(id: $transactionHash) { - id - arbitraryTransactions { - contractAddress - encodedFunction + query GetColonyArbitraryTransactionAction($transactionHash: ID!) { + getColonyAction(id: $transactionHash) { + id + arbitraryTransactions { + contractAddress + encodedFunction + } } } -} - `; +`; +export const GetActionInfoDocument = gql` + query GetActionInfo($transactionHash: ID!) { + getColonyAction(id: $transactionHash) { + ...ActionMetadataInfo + } + } + ${ActionMetadataInfo} +`; export const GetMotionIdFromActionDocument = gql` - query GetMotionIdFromAction($id: ID!) { - getColonyAction(id: $id) { - motionData { - id + query GetMotionIdFromAction($id: ID!) { + getColonyAction(id: $id) { + motionData { + id + } } } -} - `; +`; export const GetActionIdFromAnnotationDocument = gql` - query GetActionIdFromAnnotation($id: ID!) { - getAnnotation(id: $id) { - actionId + query GetActionIdFromAnnotation($id: ID!) { + getAnnotation(id: $id) { + actionId + } } -} - `; +`; export const GetActionByIdDocument = gql` - query GetActionById($id: ID!) { - getColonyAction(id: $id) { - id - type - expenditureSlotChanges { - oldSlots { - ...ExpenditureSlot - } - newSlots { - ...ExpenditureSlot + query GetActionById($id: ID!) { + getColonyAction(id: $id) { + id + type + expenditureSlotChanges { + oldSlots { + ...ExpenditureSlot + } + newSlots { + ...ExpenditureSlot + } } } } -} - ${ExpenditureSlot}`; + ${ExpenditureSlot} +`; export const GetColonyMetadataDocument = gql` - query GetColonyMetadata($id: ID!) { - getColonyMetadata(id: $id) { - ...ColonyMetadata - etherealData { - colonyAvatar - colonyDisplayName - colonyName - colonyThumbnail - initiatorAddress - tokenAvatar - tokenThumbnail + query GetColonyMetadata($id: ID!) { + getColonyMetadata(id: $id) { + ...ColonyMetadata + etherealData { + colonyAvatar + colonyDisplayName + colonyName + colonyThumbnail + initiatorAddress + tokenAvatar + tokenThumbnail + } } } -} - ${ColonyMetadata}`; + ${ColonyMetadata} +`; export const GetColonyDocument = gql` - query GetColony($id: ID!, $nextToken: String) { - getColony(id: $id) { - ...Colony - } - getColonyByAddress(id: $id) { - items { - id - name + query GetColony($id: ID!, $nextToken: String) { + getColony(id: $id) { + ...Colony } - } - getColonyByType(type: METACOLONY) { - items { - id - name + getColonyByAddress(id: $id) { + items { + id + name + } + } + getColonyByType(type: METACOLONY) { + items { + id + name + } } } -} - ${Colony}`; + ${Colony} +`; export const GetColonyByNameDocument = gql` - query GetColonyByName($name: String!) { - getColonyByName(name: $name) { - items { - id - name + query GetColonyByName($name: String!) { + getColonyByName(name: $name) { + items { + id + name + } } } -} - `; +`; export const GetColonyByNativeTokenIdDocument = gql` - query GetColonyByNativeTokenId($nativeTokenId: ID!, $limit: Int, $nextToken: String) { - getColoniesByNativeTokenId( - nativeTokenId: $nativeTokenId - limit: $limit - nextToken: $nextToken + query GetColonyByNativeTokenId( + $nativeTokenId: ID! + $limit: Int + $nextToken: String ) { - items { - id - status { - nativeToken { - unlocked - unlockable - mintable + getColoniesByNativeTokenId( + nativeTokenId: $nativeTokenId + limit: $limit + nextToken: $nextToken + ) { + items { + id + status { + nativeToken { + unlocked + unlockable + mintable + } + recovery } - recovery } + nextToken } - nextToken } -} - `; +`; export const ListColoniesDocument = gql` - query ListColonies($nextToken: String) { - listColonies(limit: 1000, nextToken: $nextToken) { - nextToken - items { - id - nativeTokenId + query ListColonies($nextToken: String) { + listColonies(limit: 1000, nextToken: $nextToken) { + nextToken + items { + id + nativeTokenId + } } } -} - `; +`; export const ListColoniesWithRootPermissionHoldersDocument = gql` - query ListColoniesWithRootPermissionHolders($nextToken: String) { - listColonies(limit: 1000, nextToken: $nextToken) { - nextToken - items { - ...ColonyWithRootRoles + query ListColoniesWithRootPermissionHolders($nextToken: String) { + listColonies(limit: 1000, nextToken: $nextToken) { + nextToken + items { + ...ColonyWithRootRoles + } } } -} - ${ColonyWithRootRoles}`; + ${ColonyWithRootRoles} +`; export const GetColonyContributorDocument = gql` - query GetColonyContributor($id: ID!) { - getColonyContributor(id: $id) { - id - isVerified + query GetColonyContributor($id: ID!) { + getColonyContributor(id: $id) { + id + isVerified + } } -} - `; +`; export const GetColonyContributorsNotificationDataDocument = gql` - query GetColonyContributorsNotificationData($colonyAddress: ID!, $sortDirection: ModelSortDirection = ASC, $limit: Int = 100, $nextToken: String) { - getContributorsByColony( - colonyAddress: $colonyAddress - sortDirection: $sortDirection - limit: $limit - nextToken: $nextToken + query GetColonyContributorsNotificationData( + $colonyAddress: ID! + $sortDirection: ModelSortDirection = ASC + $limit: Int = 100 + $nextToken: String ) { - items { - user { - notificationsData { - ...NotificationsData + getContributorsByColony( + colonyAddress: $colonyAddress + sortDirection: $sortDirection + limit: $limit + nextToken: $nextToken + ) { + items { + user { + notificationsData { + ...NotificationsData + } } } + nextToken } - nextToken } -} - ${NotificationsData}`; + ${NotificationsData} +`; export const GetCurrentVersionDocument = gql` - query GetCurrentVersion($key: String!) { - getCurrentVersionByKey(key: $key) { - items { - id - version + query GetCurrentVersion($key: String!) { + getCurrentVersionByKey(key: $key) { + items { + id + version + } } } -} - `; +`; export const GetColonyDecisionByActionIdDocument = gql` - query GetColonyDecisionByActionId($actionId: ID!) { - getColonyDecisionByActionId(actionId: $actionId) { - items { - id + query GetColonyDecisionByActionId($actionId: ID!) { + getColonyDecisionByActionId(actionId: $actionId) { + items { + id + } } } -} - `; +`; export const GetDomainMetadataDocument = gql` - query GetDomainMetadata($id: ID!) { - getDomainMetadata(id: $id) { - color - description - id - name - changelog { - newColor - newDescription - newName - oldColor - oldDescription - oldName - transactionHash + query GetDomainMetadata($id: ID!) { + getDomainMetadata(id: $id) { + color + description + id + name + changelog { + newColor + newDescription + newName + oldColor + oldDescription + oldName + transactionHash + } } } -} - `; +`; export const GetDomainByNativeSkillIdDocument = gql` - query GetDomainByNativeSkillId($nativeSkillId: String!, $colonyAddress: ID!) { - getDomainByNativeSkillId( - nativeSkillId: $nativeSkillId - filter: {colonyId: {eq: $colonyAddress}} - ) { - items { - id - nativeSkillId - nativeId + query GetDomainByNativeSkillId($nativeSkillId: String!, $colonyAddress: ID!) { + getDomainByNativeSkillId( + nativeSkillId: $nativeSkillId + filter: { colonyId: { eq: $colonyAddress } } + ) { + items { + id + nativeSkillId + nativeId + } } } -} - `; +`; export const GetDomainsByExtensionAddressDocument = gql` - query GetDomainsByExtensionAddress($extensionAddress: ID!) { - listColonyExtensions(filter: {id: {eq: $extensionAddress}}) { - items { - colony { - domains { - items { - nativeSkillId - nativeId + query GetDomainsByExtensionAddress($extensionAddress: ID!) { + listColonyExtensions(filter: { id: { eq: $extensionAddress } }) { + items { + colony { + domains { + items { + nativeSkillId + nativeId + } } + id } - id } } } -} - `; +`; export const GetContractEventDocument = gql` - query GetContractEvent($id: ID!) { - getContractEvent(id: $id) { - id + query GetContractEvent($id: ID!) { + getContractEvent(id: $id) { + id + } } -} - `; +`; export const GetExpenditureDocument = gql` - query GetExpenditure($id: ID!) { - getExpenditure(id: $id) { - ...Expenditure + query GetExpenditure($id: ID!) { + getExpenditure(id: $id) { + ...Expenditure + } } -} - ${Expenditure}`; + ${Expenditure} +`; export const GetExpenditureByNativeFundingPotIdAndColonyDocument = gql` - query GetExpenditureByNativeFundingPotIdAndColony($nativeFundingPotId: Int!, $colonyAddress: ID!) { - getExpendituresByNativeFundingPotIdAndColony( - nativeFundingPotId: $nativeFundingPotId - colonyId: {eq: $colonyAddress} + query GetExpenditureByNativeFundingPotIdAndColony( + $nativeFundingPotId: Int! + $colonyAddress: ID! ) { - items { - ...Expenditure + getExpendituresByNativeFundingPotIdAndColony( + nativeFundingPotId: $nativeFundingPotId + colonyId: { eq: $colonyAddress } + ) { + items { + ...Expenditure + } } } -} - ${Expenditure}`; + ${Expenditure} +`; export const GetStreamingPaymentDocument = gql` - query GetStreamingPayment($id: ID!) { - getStreamingPayment(id: $id) { - id - payouts { - amount - tokenAddress - isClaimed + query GetStreamingPayment($id: ID!) { + getStreamingPayment(id: $id) { + id + payouts { + amount + tokenAddress + isClaimed + } } } -} - `; +`; export const GetColonyExtensionDocument = gql` - query GetColonyExtension($id: ID!) { - getColonyExtension(id: $id) { - ...Extension + query GetColonyExtension($id: ID!) { + getColonyExtension(id: $id) { + ...Extension + } } -} - ${Extension}`; + ${Extension} +`; export const GetColonyExtensionsByColonyAddressDocument = gql` - query GetColonyExtensionsByColonyAddress($colonyAddress: ID!) { - getExtensionByColonyAndHash(colonyId: $colonyAddress) { - items { - ...Extension + query GetColonyExtensionsByColonyAddress($colonyAddress: ID!) { + getExtensionByColonyAndHash(colonyId: $colonyAddress) { + items { + ...Extension + } } } -} - ${Extension}`; + ${Extension} +`; export const ListExtensionsDocument = gql` - query ListExtensions($hash: String!, $nextToken: String) { - getExtensionsByHash( - hash: $hash - limit: 1000 - nextToken: $nextToken - filter: {isDeleted: {eq: false}} - ) { - nextToken - items { - ...Extension + query ListExtensions($hash: String!, $nextToken: String) { + getExtensionsByHash( + hash: $hash + limit: 1000 + nextToken: $nextToken + filter: { isDeleted: { eq: false } } + ) { + nextToken + items { + ...Extension + } } } -} - ${Extension}`; + ${Extension} +`; export const GetColonyExtensionByHashAndColonyDocument = gql` - query GetColonyExtensionByHashAndColony($colonyAddress: ID!, $extensionHash: String!) { - getExtensionByColonyAndHash( - colonyId: $colonyAddress - hash: {eq: $extensionHash} - filter: {isDeleted: {eq: false}} + query GetColonyExtensionByHashAndColony( + $colonyAddress: ID! + $extensionHash: String! ) { - items { - id + getExtensionByColonyAndHash( + colonyId: $colonyAddress + hash: { eq: $extensionHash } + filter: { isDeleted: { eq: false } } + ) { + items { + id + } } } -} - `; +`; export const GetExtensionInstallationsCountDocument = gql` - query GetExtensionInstallationsCount($id: ID!) { - getExtensionInstallationsCount(id: $id) { - oneTxPayment - stakedExpenditure - stagedExpenditure - streamingPayments - reputationWeighted - multiSigPermissions + query GetExtensionInstallationsCount($id: ID!) { + getExtensionInstallationsCount(id: $id) { + oneTxPayment + stakedExpenditure + stagedExpenditure + streamingPayments + reputationWeighted + multiSigPermissions + } } -} - `; +`; export const GetColonyExtensionByAddressDocument = gql` - query GetColonyExtensionByAddress($extensionAddress: ID!) { - getColonyExtension(id: $extensionAddress) { - params { - multiSig { - colonyThreshold - domainThresholds { - domainId - domainThreshold + query GetColonyExtensionByAddress($extensionAddress: ID!) { + getColonyExtension(id: $extensionAddress) { + params { + multiSig { + colonyThreshold + domainThresholds { + domainId + domainThreshold + } } } + colonyId } - colonyId } -} - `; +`; export const GetColonyUnclaimedFundsDocument = gql` - query GetColonyUnclaimedFunds($colonyAddress: ID!, $tokenAddress: ID!, $upToBlock: Int = 1) { - listColonyFundsClaims( - filter: {colonyFundsClaimsId: {eq: $colonyAddress}, colonyFundsClaimTokenId: {eq: $tokenAddress}, createdAtBlock: {le: $upToBlock}, isClaimed: {ne: true}} + query GetColonyUnclaimedFunds( + $colonyAddress: ID! + $tokenAddress: ID! + $upToBlock: Int = 1 ) { - items { - id - token { - ...Token + listColonyFundsClaims( + filter: { + colonyFundsClaimsId: { eq: $colonyAddress } + colonyFundsClaimTokenId: { eq: $tokenAddress } + createdAtBlock: { le: $upToBlock } + isClaimed: { ne: true } + } + ) { + items { + id + token { + ...Token + } + amount } - amount } } -} - ${Token}`; + ${Token} +`; export const GetColonyUnclaimedFundDocument = gql` - query GetColonyUnclaimedFund($claimId: ID!) { - getColonyFundsClaim(id: $claimId) { - id + query GetColonyUnclaimedFund($claimId: ID!) { + getColonyFundsClaim(id: $claimId) { + id + } } -} - `; +`; export const GetCurrentNetworkInverseFeeDocument = gql` - query GetCurrentNetworkInverseFee { - listCurrentNetworkInverseFees(limit: 1) { - items { - id - inverseFee + query GetCurrentNetworkInverseFee { + listCurrentNetworkInverseFees(limit: 1) { + items { + id + inverseFee + } } } -} - `; +`; export const GetColonyActionByMotionIdDocument = gql` - query GetColonyActionByMotionId($motionId: ID!) { - getColonyActionByMotionId(motionId: $motionId) { - items { - ...ActionMetadataInfo + query GetColonyActionByMotionId($motionId: ID!) { + getColonyActionByMotionId(motionId: $motionId) { + items { + ...ActionMetadataInfo + } } } -} - ${ActionMetadataInfo}`; + ${ActionMetadataInfo} +`; export const GetColonyMotionDocument = gql` - query GetColonyMotion($id: ID!) { - getColonyMotion(id: $id) { - ...ColonyMotion + query GetColonyMotion($id: ID!) { + getColonyMotion(id: $id) { + ...ColonyMotion + } } -} - ${ColonyMotion}`; + ${ColonyMotion} +`; export const GetVoterRewardsDocument = gql` - query GetVoterRewards($input: GetVoterRewardsInput!) { - getVoterRewards(input: $input) { - min - max - reward + query GetVoterRewards($input: GetVoterRewardsInput!) { + getVoterRewards(input: $input) { + min + max + reward + } } -} - `; +`; export const GetColonyActionByMultiSigIdDocument = gql` - query GetColonyActionByMultiSigId($multiSigId: ID!) { - getColonyActionByMultiSigId(multiSigId: $multiSigId) { - items { - ...ActionMetadataInfo + query GetColonyActionByMultiSigId($multiSigId: ID!) { + getColonyActionByMultiSigId(multiSigId: $multiSigId) { + items { + ...ActionMetadataInfo + } } } -} - ${ActionMetadataInfo}`; + ${ActionMetadataInfo} +`; export const GetColonyMultiSigDocument = gql` - query GetColonyMultiSig($id: ID!) { - getColonyMultiSig(id: $id) { - ...ColonyMultiSig + query GetColonyMultiSig($id: ID!) { + getColonyMultiSig(id: $id) { + ...ColonyMultiSig + } } -} - ${ColonyMultiSig}`; + ${ColonyMultiSig} +`; export const GetUserMultiSigSignatureDocument = gql` - query GetUserMultiSigSignature($multiSigId: ID!, $userAddress: ID!, $vote: MultiSigVote!, $role: Int!) { - getMultiSigUserSignatureByMultiSigId( - filter: {userAddress: {eq: $userAddress}, vote: {eq: $vote}, role: {eq: $role}} - multiSigId: $multiSigId + query GetUserMultiSigSignature( + $multiSigId: ID! + $userAddress: ID! + $vote: MultiSigVote! + $role: Int! ) { - items { - ...MultiSigUserSignature + getMultiSigUserSignatureByMultiSigId( + filter: { + userAddress: { eq: $userAddress } + vote: { eq: $vote } + role: { eq: $role } + } + multiSigId: $multiSigId + ) { + items { + ...MultiSigUserSignature + } } } -} - ${MultiSigUserSignature}`; + ${MultiSigUserSignature} +`; export const GetAllMultiSigRolesDocument = gql` - query GetAllMultiSigRoles($colonyAddress: ID!) { - getRoleByColony( - colonyAddress: $colonyAddress - limit: 9999 - filter: {isMultiSig: {eq: true}} - ) { - items { - id + query GetAllMultiSigRoles($colonyAddress: ID!) { + getRoleByColony( + colonyAddress: $colonyAddress + limit: 9999 + filter: { isMultiSig: { eq: true } } + ) { + items { + id + } } } -} - `; +`; export const GetActiveColonyMultisigsDocument = gql` - query GetActiveColonyMultisigs($colonyAddress: ID!) { - getMultiSigByColonyAddress( - colonyAddress: $colonyAddress - filter: {isExecuted: {eq: false}, isRejected: {eq: false}} - limit: 9999 - ) { - items { - id + query GetActiveColonyMultisigs($colonyAddress: ID!) { + getMultiSigByColonyAddress( + colonyAddress: $colonyAddress + filter: { isExecuted: { eq: false }, isRejected: { eq: false } } + limit: 9999 + ) { + items { + id + } } } -} - `; -export const GetColonyRoleDocument = gql` - query GetColonyRole($id: ID!) { - getColonyRole(id: $id) { - id - latestBlock - role_0 - role_1 - role_2 - role_3 - role_5 - role_6 +`; +export const GetMultiChainInfoDocument = gql` + query GetMultiChainInfo($id: ID!) { + getMultiChainInfo(id: $id) { + ...MultiChainInfo + } } -} - `; -export const GetAllColonyRolesDocument = gql` - query GetAllColonyRoles($targetAddress: ID!, $colonyAddress: ID!) { - getRoleByTargetAddressAndColony( - targetAddress: $targetAddress - colonyAddress: {eq: $colonyAddress} - ) { - items { + ${MultiChainInfo} +`; +export const GetColonyRoleDocument = gql` + query GetColonyRole($id: ID!) { + getColonyRole(id: $id) { id + latestBlock role_0 role_1 role_2 @@ -12210,61 +14269,111 @@ export const GetAllColonyRolesDocument = gql` role_6 } } -} - `; +`; +export const GetAllColonyRolesDocument = gql` + query GetAllColonyRoles($targetAddress: ID!, $colonyAddress: ID!) { + getRoleByTargetAddressAndColony( + targetAddress: $targetAddress + colonyAddress: { eq: $colonyAddress } + ) { + items { + id + role_0 + role_1 + role_2 + role_3 + role_5 + role_6 + } + } + } +`; export const GetColonyHistoricRoleDocument = gql` - query GetColonyHistoricRole($id: ID!) { - getColonyHistoricRole(id: $id) { - id + query GetColonyHistoricRole($id: ID!) { + getColonyHistoricRole(id: $id) { + id + } } -} - `; +`; +export const GetProxyColonyDocument = gql` + query GetProxyColony($id: ID!) { + getProxyColony(id: $id) { + chainId + colonyAddress + id + isActive + } + } +`; +export const GetProxyColoniesDocument = gql` + query GetProxyColonies($chainId: String!) { + listProxyColonies(filter: { chainId: { eq: $chainId } }) { + items { + chainId + colonyAddress + id + isActive + } + } + } +`; +export const GetSupportedChainDocument = gql` + query GetSupportedChain($id: ID!) { + getSupportedChain(id: $id) { + id + } + } +`; export const GetReputationMiningCycleMetadataDocument = gql` - query GetReputationMiningCycleMetadata($id: ID!) { - getReputationMiningCycleMetadata(id: $id) { - id + query GetReputationMiningCycleMetadata($id: ID!) { + getReputationMiningCycleMetadata(id: $id) { + id + } } -} - `; +`; export const GetSafeTransactionByTransactionHashDocument = gql` - query GetSafeTransactionByTransactionHash($transactionHash: ID!) { - getSafeTransaction(id: $transactionHash) { - id + query GetSafeTransactionByTransactionHash($transactionHash: ID!) { + getSafeTransaction(id: $transactionHash) { + id + } } -} - `; +`; export const GetUserStakeDocument = gql` - query GetUserStake($id: ID!) { - getUserStake(id: $id) { - id - amount + query GetUserStake($id: ID!) { + getUserStake(id: $id) { + id + amount + } } -} - `; +`; export const GetStatsDocument = gql` - query GetStats { - getIngestorStats(id: "STATS") { - value + query GetStats($chainId: String!) { + getIngestorStatsByChainId(chainId: $chainId) { + items { + id + value + } + } } -} - `; +`; export const GetTokenFromEverywhereDocument = gql` - query GetTokenFromEverywhere($input: TokenFromEverywhereArguments!) { - getTokenFromEverywhere(input: $input) { - items { - id + query GetTokenFromEverywhere($input: TokenFromEverywhereArguments!) { + getTokenFromEverywhere(input: $input) { + items { + id + } } } -} - `; +`; export const GetNotificationUsersDocument = gql` - query GetNotificationUsers($filter: ModelUserFilterInput, $limit: Int) { - listUsers(filter: $filter, limit: $limit) { - items { - notificationsData { - ...NotificationsData + query GetNotificationUsers($filter: ModelUserFilterInput, $limit: Int) { + listUsers(filter: $filter, limit: $limit) { + items { + notificationsData { + ...NotificationsData + } } } } -} - ${NotificationsData}`; \ No newline at end of file + ${NotificationsData} +`; diff --git a/src/graphql/index.ts b/packages/graphql/src/index.ts similarity index 94% rename from src/graphql/index.ts rename to packages/graphql/src/index.ts index 43cde7a5b..35c1cfdb5 100644 --- a/src/graphql/index.ts +++ b/packages/graphql/src/index.ts @@ -1,4 +1,5 @@ import { + Colony as FullColony, ColonyFragment, ColonyMultiSigFragment, ColonyMetadataFragment, @@ -22,3 +23,4 @@ export type MotionStakes = MotionStakesFragment; export type UserMotionStakes = UserMotionStakesFragment; export type VoterRecord = VoterRecordFragment; export type Extension = ExtensionFragment; +export { FullColony }; diff --git a/src/graphql/mutations/action.graphql b/packages/graphql/src/mutations/action.graphql similarity index 100% rename from src/graphql/mutations/action.graphql rename to packages/graphql/src/mutations/action.graphql diff --git a/src/graphql/mutations/colony.graphql b/packages/graphql/src/mutations/colony.graphql similarity index 100% rename from src/graphql/mutations/colony.graphql rename to packages/graphql/src/mutations/colony.graphql diff --git a/src/graphql/mutations/contributors.graphql b/packages/graphql/src/mutations/contributors.graphql similarity index 100% rename from src/graphql/mutations/contributors.graphql rename to packages/graphql/src/mutations/contributors.graphql diff --git a/src/graphql/mutations/currentVersion.graphql b/packages/graphql/src/mutations/currentVersion.graphql similarity index 100% rename from src/graphql/mutations/currentVersion.graphql rename to packages/graphql/src/mutations/currentVersion.graphql diff --git a/src/graphql/mutations/decisions.graphql b/packages/graphql/src/mutations/decisions.graphql similarity index 100% rename from src/graphql/mutations/decisions.graphql rename to packages/graphql/src/mutations/decisions.graphql diff --git a/src/graphql/mutations/domain.graphql b/packages/graphql/src/mutations/domain.graphql similarity index 100% rename from src/graphql/mutations/domain.graphql rename to packages/graphql/src/mutations/domain.graphql diff --git a/src/graphql/mutations/event.graphql b/packages/graphql/src/mutations/event.graphql similarity index 100% rename from src/graphql/mutations/event.graphql rename to packages/graphql/src/mutations/event.graphql diff --git a/src/graphql/mutations/expenditures.graphql b/packages/graphql/src/mutations/expenditures.graphql similarity index 100% rename from src/graphql/mutations/expenditures.graphql rename to packages/graphql/src/mutations/expenditures.graphql diff --git a/src/graphql/mutations/extension.graphql b/packages/graphql/src/mutations/extension.graphql similarity index 100% rename from src/graphql/mutations/extension.graphql rename to packages/graphql/src/mutations/extension.graphql diff --git a/src/graphql/mutations/funds.graphql b/packages/graphql/src/mutations/funds.graphql similarity index 100% rename from src/graphql/mutations/funds.graphql rename to packages/graphql/src/mutations/funds.graphql diff --git a/src/graphql/mutations/inverseFee.graphql b/packages/graphql/src/mutations/inverseFee.graphql similarity index 100% rename from src/graphql/mutations/inverseFee.graphql rename to packages/graphql/src/mutations/inverseFee.graphql diff --git a/src/graphql/mutations/motions.graphql b/packages/graphql/src/mutations/motions.graphql similarity index 100% rename from src/graphql/mutations/motions.graphql rename to packages/graphql/src/mutations/motions.graphql diff --git a/src/graphql/mutations/multiSig.graphql b/packages/graphql/src/mutations/multiSig.graphql similarity index 100% rename from src/graphql/mutations/multiSig.graphql rename to packages/graphql/src/mutations/multiSig.graphql diff --git a/packages/graphql/src/mutations/multichain.graphql b/packages/graphql/src/mutations/multichain.graphql new file mode 100644 index 000000000..bc0ce5831 --- /dev/null +++ b/packages/graphql/src/mutations/multichain.graphql @@ -0,0 +1,11 @@ +mutation CreateMultiChainInfo($input: CreateMultiChainInfoInput!) { + createMultiChainInfo(input: $input) { + ...MultiChainInfo + } +} + +mutation UpdateMultiChainInfo($input: UpdateMultiChainInfoInput!) { + updateMultiChainInfo(input: $input) { + ...MultiChainInfo + } +} diff --git a/src/graphql/mutations/permissions.graphql b/packages/graphql/src/mutations/permissions.graphql similarity index 100% rename from src/graphql/mutations/permissions.graphql rename to packages/graphql/src/mutations/permissions.graphql diff --git a/packages/graphql/src/mutations/proxyColonies.graphql b/packages/graphql/src/mutations/proxyColonies.graphql new file mode 100644 index 000000000..e58e3899d --- /dev/null +++ b/packages/graphql/src/mutations/proxyColonies.graphql @@ -0,0 +1,23 @@ +mutation CreateProxyColony($input: CreateProxyColonyInput!) { + createProxyColony(input: $input) { + id + } +} + +mutation UpdateProxyColony($input: UpdateProxyColonyInput!) { + updateProxyColony(input: $input) { + id + } +} + +mutation CreateSupportedChain($input: CreateSupportedChainInput!) { + createSupportedChain(input: $input) { + id + } +} + +mutation UpdateSupportedChain($input: UpdateSupportedChainInput!) { + updateSupportedChain(input: $input) { + id + } +} diff --git a/src/graphql/mutations/reputationMiningCycle.graphql b/packages/graphql/src/mutations/reputationMiningCycle.graphql similarity index 100% rename from src/graphql/mutations/reputationMiningCycle.graphql rename to packages/graphql/src/mutations/reputationMiningCycle.graphql diff --git a/src/graphql/mutations/stake.graphql b/packages/graphql/src/mutations/stake.graphql similarity index 100% rename from src/graphql/mutations/stake.graphql rename to packages/graphql/src/mutations/stake.graphql diff --git a/packages/graphql/src/mutations/stats.graphql b/packages/graphql/src/mutations/stats.graphql new file mode 100644 index 000000000..d22c0791b --- /dev/null +++ b/packages/graphql/src/mutations/stats.graphql @@ -0,0 +1,11 @@ +mutation CreateStats($chainId: String!, $value: String!) { + createIngestorStats(input: { chainId: $chainId, value: $value }) { + id + } +} + +mutation UpdateStats($id: ID!, $chainId: String!, $value: String!) { + updateIngestorStats(input: { id: $id, chainId: $chainId, value: $value }) { + id + } +} diff --git a/src/graphql/mutations/token.graphql b/packages/graphql/src/mutations/token.graphql similarity index 100% rename from src/graphql/mutations/token.graphql rename to packages/graphql/src/mutations/token.graphql diff --git a/src/graphql/queries/action.graphql b/packages/graphql/src/queries/action.graphql similarity index 71% rename from src/graphql/queries/action.graphql rename to packages/graphql/src/queries/action.graphql index 69ce046b7..5bb33ed69 100644 --- a/src/graphql/queries/action.graphql +++ b/packages/graphql/src/queries/action.graphql @@ -13,3 +13,9 @@ query GetColonyArbitraryTransactionAction($transactionHash: ID!) { } } } + +query GetActionInfo($transactionHash: ID!) { + getColonyAction(id: $transactionHash) { + ...ActionMetadataInfo + } +} diff --git a/src/graphql/queries/actions.graphql b/packages/graphql/src/queries/actions.graphql similarity index 100% rename from src/graphql/queries/actions.graphql rename to packages/graphql/src/queries/actions.graphql diff --git a/src/graphql/queries/colony.graphql b/packages/graphql/src/queries/colony.graphql similarity index 100% rename from src/graphql/queries/colony.graphql rename to packages/graphql/src/queries/colony.graphql diff --git a/src/graphql/queries/contributors.graphql b/packages/graphql/src/queries/contributors.graphql similarity index 100% rename from src/graphql/queries/contributors.graphql rename to packages/graphql/src/queries/contributors.graphql diff --git a/src/graphql/queries/currentVersion.graphql b/packages/graphql/src/queries/currentVersion.graphql similarity index 100% rename from src/graphql/queries/currentVersion.graphql rename to packages/graphql/src/queries/currentVersion.graphql diff --git a/src/graphql/queries/decisions.graphql b/packages/graphql/src/queries/decisions.graphql similarity index 100% rename from src/graphql/queries/decisions.graphql rename to packages/graphql/src/queries/decisions.graphql diff --git a/src/graphql/queries/domain.graphql b/packages/graphql/src/queries/domain.graphql similarity index 100% rename from src/graphql/queries/domain.graphql rename to packages/graphql/src/queries/domain.graphql diff --git a/src/graphql/queries/event.graphql b/packages/graphql/src/queries/event.graphql similarity index 100% rename from src/graphql/queries/event.graphql rename to packages/graphql/src/queries/event.graphql diff --git a/src/graphql/queries/expenditures.graphql b/packages/graphql/src/queries/expenditures.graphql similarity index 100% rename from src/graphql/queries/expenditures.graphql rename to packages/graphql/src/queries/expenditures.graphql diff --git a/src/graphql/queries/extensions.graphql b/packages/graphql/src/queries/extensions.graphql similarity index 100% rename from src/graphql/queries/extensions.graphql rename to packages/graphql/src/queries/extensions.graphql diff --git a/src/graphql/queries/funds.graphql b/packages/graphql/src/queries/funds.graphql similarity index 100% rename from src/graphql/queries/funds.graphql rename to packages/graphql/src/queries/funds.graphql diff --git a/src/graphql/queries/inverseFee.graphql b/packages/graphql/src/queries/inverseFee.graphql similarity index 100% rename from src/graphql/queries/inverseFee.graphql rename to packages/graphql/src/queries/inverseFee.graphql diff --git a/src/graphql/queries/motions.graphql b/packages/graphql/src/queries/motions.graphql similarity index 100% rename from src/graphql/queries/motions.graphql rename to packages/graphql/src/queries/motions.graphql diff --git a/src/graphql/queries/multiSig.graphql b/packages/graphql/src/queries/multiSig.graphql similarity index 100% rename from src/graphql/queries/multiSig.graphql rename to packages/graphql/src/queries/multiSig.graphql diff --git a/packages/graphql/src/queries/multichain.graphql b/packages/graphql/src/queries/multichain.graphql new file mode 100644 index 000000000..a3f5dc7fc --- /dev/null +++ b/packages/graphql/src/queries/multichain.graphql @@ -0,0 +1,5 @@ +query GetMultiChainInfo($id: ID!) { + getMultiChainInfo(id: $id) { + ...MultiChainInfo + } +} diff --git a/src/graphql/queries/permissions.graphql b/packages/graphql/src/queries/permissions.graphql similarity index 100% rename from src/graphql/queries/permissions.graphql rename to packages/graphql/src/queries/permissions.graphql diff --git a/packages/graphql/src/queries/proxyColonies.graphql b/packages/graphql/src/queries/proxyColonies.graphql new file mode 100644 index 000000000..76a13f982 --- /dev/null +++ b/packages/graphql/src/queries/proxyColonies.graphql @@ -0,0 +1,25 @@ +query GetProxyColony($id: ID!) { + getProxyColony(id: $id) { + chainId + colonyAddress + id + isActive + } +} + +query GetProxyColonies($chainId: String!) { + listProxyColonies(filter: { chainId: { eq: $chainId } }) { + items { + chainId + colonyAddress + id + isActive + } + } +} + +query GetSupportedChain($id: ID!) { + getSupportedChain(id: $id) { + id + } +} diff --git a/src/graphql/queries/reputationMiningCycle.graphql b/packages/graphql/src/queries/reputationMiningCycle.graphql similarity index 100% rename from src/graphql/queries/reputationMiningCycle.graphql rename to packages/graphql/src/queries/reputationMiningCycle.graphql diff --git a/src/graphql/queries/safe.graphql b/packages/graphql/src/queries/safe.graphql similarity index 100% rename from src/graphql/queries/safe.graphql rename to packages/graphql/src/queries/safe.graphql diff --git a/src/graphql/queries/stake.graphql b/packages/graphql/src/queries/stake.graphql similarity index 100% rename from src/graphql/queries/stake.graphql rename to packages/graphql/src/queries/stake.graphql diff --git a/packages/graphql/src/queries/stats.graphql b/packages/graphql/src/queries/stats.graphql new file mode 100644 index 000000000..8d16ed159 --- /dev/null +++ b/packages/graphql/src/queries/stats.graphql @@ -0,0 +1,8 @@ +query GetStats($chainId: String!) { + getIngestorStatsByChainId(chainId: $chainId) { + items { + id + value + } + } +} diff --git a/src/graphql/queries/token.graphql b/packages/graphql/src/queries/token.graphql similarity index 100% rename from src/graphql/queries/token.graphql rename to packages/graphql/src/queries/token.graphql diff --git a/src/graphql/queries/user.graphql b/packages/graphql/src/queries/user.graphql similarity index 100% rename from src/graphql/queries/user.graphql rename to packages/graphql/src/queries/user.graphql diff --git a/packages/graphql/tsconfig.json b/packages/graphql/tsconfig.json new file mode 100644 index 000000000..32522aa27 --- /dev/null +++ b/packages/graphql/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": {}, + "include": ["src", "./*.ts"] +} \ No newline at end of file diff --git a/packages/utils/package.json b/packages/utils/package.json new file mode 100644 index 000000000..e590d57b8 --- /dev/null +++ b/packages/utils/package.json @@ -0,0 +1,9 @@ +{ + "name": "@joincolony/utils", + "main": "src/index.ts", + "version": "1.0.0", + "dependencies": { + "@joincolony/clients": "workspace:*", + "@joincolony/graphql": "workspace:*" + } +} diff --git a/packages/utils/src/amplify.ts b/packages/utils/src/amplify.ts new file mode 100644 index 000000000..13ca1cf33 --- /dev/null +++ b/packages/utils/src/amplify.ts @@ -0,0 +1,23 @@ +type UpsertInput = { + fetchItem: () => Promise; + create: () => Promise; + update: (existing: TFetchResult) => Promise; +}; + +export const upsertEntry = async ({ + fetchItem, + create, + update, +}: UpsertInput): Promise< + TCreateResult | TUpdateResult | null +> => { + const existingItem = await fetchItem(); + + if (existingItem) { + const updatedItem = await update(existingItem); + return updatedItem; + } else { + const newItem = await create(); + return newItem; + } +}; diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts new file mode 100644 index 000000000..60ce27063 --- /dev/null +++ b/packages/utils/src/index.ts @@ -0,0 +1,3 @@ +export * from './logger'; +export * from './amplify'; +export * from './proxyColonies'; diff --git a/src/utils/logger.ts b/packages/utils/src/logger.ts similarity index 100% rename from src/utils/logger.ts rename to packages/utils/src/logger.ts diff --git a/packages/utils/src/proxyColonies.ts b/packages/utils/src/proxyColonies.ts new file mode 100644 index 000000000..5bad0cfb0 --- /dev/null +++ b/packages/utils/src/proxyColonies.ts @@ -0,0 +1,82 @@ +import { + CreateMultiChainInfoDocument, + CreateMultiChainInfoInput, + CreateMultiChainInfoMutation, + CreateMultiChainInfoMutationVariables, + GetMultiChainInfoDocument, + GetMultiChainInfoQuery, + GetMultiChainInfoQueryVariables, + UpdateMultiChainInfoDocument, + UpdateMultiChainInfoInput, + UpdateMultiChainInfoMutation, + UpdateMultiChainInfoMutationVariables, +} from '@joincolony/graphql'; +import { AmplifyClient } from '@joincolony/clients'; +import merge from 'lodash/merge'; +import { upsertEntry } from './amplify'; + +export const getMultiChainInfoId = (txHash: string, chainId: number): string => + `${txHash}_${chainId}`; + +export const upsertMultiChainInfo = async ( + amplifyClient: AmplifyClient, + id: string, + createInput: CreateMultiChainInfoInput, + updateInput: UpdateMultiChainInfoInput, +): Promise => { + const getMultiChainInfo = async (): Promise< + GetMultiChainInfoQuery['getMultiChainInfo'] + > => { + const response = await amplifyClient.query< + GetMultiChainInfoQuery, + GetMultiChainInfoQueryVariables + >(GetMultiChainInfoDocument, { + id, + }); + return response?.data?.getMultiChainInfo; + }; + + const createMultiChainInfo = async (): Promise< + CreateMultiChainInfoMutation['createMultiChainInfo'] + > => { + const response = await amplifyClient.mutate< + CreateMultiChainInfoMutation, + CreateMultiChainInfoMutationVariables + >(CreateMultiChainInfoDocument, { + input: createInput, + }); + + return response?.data?.createMultiChainInfo; + }; + + const updateMultiChainInfo = async ( + existing: UpdateMultiChainInfoMutation['updateMultiChainInfo'], + ): Promise => { + const response = await amplifyClient.mutate< + UpdateMultiChainInfoMutation, + UpdateMultiChainInfoMutationVariables + >(UpdateMultiChainInfoDocument, { + input: { + ...merge(existing, updateInput), + completedOnMainChain: + existing?.completedOnMainChain ?? + updateInput.completedOnMainChain ?? + false, + completedOnProxyChain: + existing?.completedOnProxyChain ?? + updateInput.completedOnProxyChain ?? + false, + }, + }); + + return response?.data?.updateMultiChainInfo; + }; + + const response = await upsertEntry({ + fetchItem: getMultiChainInfo, + create: createMultiChainInfo, + update: updateMultiChainInfo, + }); + + return response?.id ?? undefined; +}; diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json new file mode 100644 index 000000000..ea468dfe6 --- /dev/null +++ b/packages/utils/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": {}, + "include": ["src", "./*.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 000000000..224015501 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,12293 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@colony/abis': + specifier: ^1.6.0 + version: 1.8.3(typescript@5.7.3) + '@colony/colony-js': + specifier: ^8.1.0 + version: 8.1.0(ethers@5.7.2)(typescript@5.7.3) + '@colony/events': + specifier: ^4.0.0-next.1 + version: 4.1.0(ethers@5.7.2)(typescript@5.7.3) + '@magicbell/core': + specifier: ^5.0.16 + version: 5.1.0(react@18.3.1) + '@wagmi/cli': + specifier: ^2.1.17 + version: 2.2.0(typescript@5.7.3) + aws-amplify: + specifier: ^4.3.43 + version: 4.3.46(react-native@0.77.0) + cross-fetch: + specifier: ^4.0.0 + version: 4.1.0 + dotenv: + specifier: ^16.0.3 + version: 16.4.7 + ethers: + specifier: ^5.7.2 + version: 5.7.2 + express: + specifier: ^4.18.2 + version: 4.21.2 + fs-extra: + specifier: ^10.1.0 + version: 10.1.0 + graphql: + specifier: ^16.6.0 + version: 16.10.0 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + devDependencies: + '@colony/wagmi-plugin': + specifier: ^0.1.1 + version: 0.1.1(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typescript@5.7.3) + '@graphql-codegen/cli': + specifier: ^3.3.1 + version: 3.3.1(@babel/core@7.26.7)(@types/node@18.19.75)(graphql@16.10.0) + '@graphql-codegen/typescript': + specifier: ^3.0.4 + version: 3.0.4(graphql@16.10.0) + '@graphql-codegen/typescript-document-nodes': + specifier: ^3.0.4 + version: 3.0.4(graphql@16.10.0) + '@graphql-codegen/typescript-operations': + specifier: ^3.0.4 + version: 3.0.4(graphql@16.10.0) + '@types/express': + specifier: ^4.17.14 + version: 4.17.21 + '@types/fs-extra': + specifier: ^9.0.13 + version: 9.0.13 + '@types/lodash': + specifier: ^4.14.202 + version: 4.17.15 + '@types/node': + specifier: ^18.11.9 + version: 18.19.75 + '@types/node-persist': + specifier: ^3.1.3 + version: 3.1.8 + '@typescript-eslint/eslint-plugin': + specifier: ^5.42.0 + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.7.3) + eslint: + specifier: ^8.26.0 + version: 8.57.1 + eslint-config-prettier: + specifier: ^8.8.0 + version: 8.10.0(eslint@8.57.1) + eslint-config-standard-with-typescript: + specifier: ^23.0.0 + version: 23.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint-plugin-import@2.31.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.6.0)(eslint@8.57.1)(typescript@5.7.3) + eslint-plugin-import: + specifier: ^2.26.0 + version: 2.31.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1) + eslint-plugin-n: + specifier: ^15.4.0 + version: 15.7.0(eslint@8.57.1) + eslint-plugin-promise: + specifier: ^6.1.1 + version: 6.6.0(eslint@8.57.1) + husky: + specifier: ^8.0.0 + version: 8.0.3 + lint-staged: + specifier: ^13.2.2 + version: 13.3.0 + prettier: + specifier: ^2.8.8 + version: 2.8.8 + ts-node-dev: + specifier: ^2.0.0 + version: 2.0.0(@types/node@18.19.75)(typescript@5.7.3) + tsconfig-paths: + specifier: ^4.1.2 + version: 4.2.0 + typescript: + specifier: ^5.0.4 + version: 5.7.3 + + apps/main-chain: + dependencies: + '@joincolony/blocks': + specifier: workspace:* + version: link:../../packages/blocks + '@joincolony/clients': + specifier: workspace:* + version: link:../../packages/clients + '@joincolony/graphql': + specifier: workspace:* + version: link:../../packages/graphql + '@joincolony/utils': + specifier: workspace:* + version: link:../../packages/utils + + apps/proxy-chain: + dependencies: + '@joincolony/blocks': + specifier: workspace:^ + version: link:../../packages/blocks + '@joincolony/clients': + specifier: workspace:^ + version: link:../../packages/clients + '@joincolony/graphql': + specifier: workspace:* + version: link:../../packages/graphql + '@joincolony/utils': + specifier: workspace:^ + version: link:../../packages/utils + + packages/blocks: + dependencies: + '@joincolony/clients': + specifier: workspace:* + version: link:../clients + '@joincolony/graphql': + specifier: workspace:* + version: link:../graphql + '@joincolony/utils': + specifier: workspace:* + version: link:../utils + + packages/clients: + dependencies: + '@joincolony/utils': + specifier: workspace:* + version: link:../utils + + packages/graphql: {} + + packages/utils: + dependencies: + '@joincolony/clients': + specifier: workspace:* + version: link:../clients + '@joincolony/graphql': + specifier: workspace:* + version: link:../graphql + +packages: + + /@ably/msgpack-js@0.4.0: + resolution: {integrity: sha512-IPt/BoiQwCWubqoNik1aw/6M/DleMdrxJOUpSja6xmMRbT2p1TA8oqKWgfZabqzrq8emRNeSl/+4XABPNnW5pQ==} + dependencies: + bops: 1.0.1 + dev: false + + /@adraffy/ens-normalize@1.11.0: + resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==} + dev: false + + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + /@ardatan/relay-compiler@12.0.0(graphql@16.10.0): + resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} + hasBin: true + peerDependencies: + graphql: '*' + dependencies: + '@babel/core': 7.26.7 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/runtime': 7.26.7 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + babel-preset-fbjs: 3.4.0(@babel/core@7.26.7) + chalk: 4.1.2 + fb-watchman: 2.0.2 + fbjs: 3.0.5 + glob: 7.2.3 + graphql: 16.10.0 + immutable: 3.7.6 + invariant: 2.2.4 + nullthrows: 1.1.1 + relay-runtime: 12.0.0 + signedsource: 1.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@ardatan/sync-fetch@0.0.1: + resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} + engines: {node: '>=14'} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + + /@aws-amplify/analytics@5.2.31(react-native@0.77.0): + resolution: {integrity: sha512-u2j5qZRTDGD7d1TpbKU3D7928VFJK602537TWDuUibUCQWafCDLzPj1IJCiC6UdZ1yShqEmexa02/cqtq+gbwg==} + dependencies: + '@aws-amplify/cache': 4.0.66(react-native@0.77.0) + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + '@aws-sdk/client-firehose': 3.6.1(react-native@0.77.0) + '@aws-sdk/client-kinesis': 3.6.1(react-native@0.77.0) + '@aws-sdk/client-personalize-events': 3.6.1(react-native@0.77.0) + '@aws-sdk/client-pinpoint': 3.6.1(react-native@0.77.0) + '@aws-sdk/util-utf8-browser': 3.6.1 + lodash: 4.17.21 + uuid: 3.4.0 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-amplify/api-graphql@2.3.28(react-native@0.77.0): + resolution: {integrity: sha512-n/8dwUx2i9sojcAnK1vITamx/FODGPmDM08lTfZNwpTVJ1aXB/bcA9GitF7gWa4jstVACDgQAKmTAr7j2d0tGw==} + dependencies: + '@aws-amplify/api-rest': 2.0.64(react-native@0.77.0) + '@aws-amplify/auth': 4.6.17(react-native@0.77.0) + '@aws-amplify/cache': 4.0.66(react-native@0.77.0) + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + '@aws-amplify/pubsub': 4.5.14(react-native@0.77.0) + graphql: 15.8.0 + uuid: 3.4.0 + zen-observable-ts: 0.8.19 + transitivePeerDependencies: + - debug + - encoding + - react-native + dev: false + + /@aws-amplify/api-rest@2.0.64(react-native@0.77.0): + resolution: {integrity: sha512-hS+ImRnkyjGJj5gTet+Gd979Vnsp1lKTmiUngt3MXY/0b6CeUgMAACxnIQ628J00frvguUcgmOlZ502jeHsiKQ==} + dependencies: + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + axios: 0.26.0 + transitivePeerDependencies: + - debug + - react-native + dev: false + + /@aws-amplify/api@4.0.64(react-native@0.77.0): + resolution: {integrity: sha512-nhg7Z+TQcEnLR5ZotxvKnJgqNwDtUYVBcNuktsHgUVszkKT/Oj2vC28xv8RufdljIofrXFsBDeERviwSpVXiFA==} + dependencies: + '@aws-amplify/api-graphql': 2.3.28(react-native@0.77.0) + '@aws-amplify/api-rest': 2.0.64(react-native@0.77.0) + transitivePeerDependencies: + - debug + - encoding + - react-native + dev: false + + /@aws-amplify/auth@4.6.17(react-native@0.77.0): + resolution: {integrity: sha512-KIWHP6qODphwtzyJ6jmcSQewH0a8dOOsQ35OtAALwmPNEaftGmoUjm8wMHAtyH3EwWv1iknhPwMVzmGylr+l1A==} + dependencies: + '@aws-amplify/cache': 4.0.66(react-native@0.77.0) + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + amazon-cognito-identity-js: 5.2.14 + crypto-js: 4.2.0 + transitivePeerDependencies: + - encoding + - react-native + dev: false + + /@aws-amplify/cache@4.0.66(react-native@0.77.0): + resolution: {integrity: sha512-dG5TSx1VbUMnIchqwoT+Pa5W+PdPTZVcXfg/4bjpv0HJ0s3LUeYMI93cpQGg0DlegKNvwV5Ib+B7UqXlWp/JEQ==} + dependencies: + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + transitivePeerDependencies: + - react-native + dev: false + + /@aws-amplify/core@4.7.15(react-native@0.77.0): + resolution: {integrity: sha512-upRxT6MN90pQZnJw2VwGdA7vHO6tGY1c3qLrXkq+x5XT45KrfGjbSSHmYBo7PkjWQYAUMGuX4KYwmPBuI58svg==} + dependencies: + '@aws-crypto/sha256-js': 1.0.0-alpha.0 + '@aws-sdk/client-cloudwatch-logs': 3.6.1(react-native@0.77.0) + '@aws-sdk/client-cognito-identity': 3.6.1(react-native@0.77.0) + '@aws-sdk/credential-provider-cognito-identity': 3.6.1(react-native@0.77.0) + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-hex-encoding': 3.6.1 + universal-cookie: 4.0.4 + zen-observable-ts: 0.8.19 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-amplify/datastore@3.14.7(react-native@0.77.0): + resolution: {integrity: sha512-nzZHK0LXOsvmZzeBHL8VL/nrTm9dmBYdOWZOf7zSrbZBVaLEMim2l2os3DUx0+1u44XPr166QSF8OXLpl+56+w==} + dependencies: + '@aws-amplify/api': 4.0.64(react-native@0.77.0) + '@aws-amplify/auth': 4.6.17(react-native@0.77.0) + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + '@aws-amplify/pubsub': 4.5.14(react-native@0.77.0) + amazon-cognito-identity-js: 5.2.14 + idb: 5.0.6 + immer: 9.0.6 + ulid: 2.3.0 + uuid: 3.3.2 + zen-observable-ts: 0.8.19 + zen-push: 0.2.1 + transitivePeerDependencies: + - debug + - encoding + - react-native + dev: false + + /@aws-amplify/geo@1.3.27(react-native@0.77.0): + resolution: {integrity: sha512-7ytYD0M3EJxq9aiqJVQSRoXXUYf/bp7MU2Bb+UvKjqxOb29theJp3RJ7yJnqjxAV+6K7+jRpjoqH8lR+y3zkwQ==} + dependencies: + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + '@aws-sdk/client-location': 3.186.0 + '@turf/boolean-clockwise': 6.5.0 + camelcase-keys: 6.2.2 + transitivePeerDependencies: + - aws-crt + - react-native + dev: false + + /@aws-amplify/interactions@4.1.12(react-native@0.77.0): + resolution: {integrity: sha512-MQjq4wdGuA7DNRywMrlwjbWZ/b5VFP0ASZdMYWSGVVkjPpHKR+/iCy/kkJvUFXIl8kEXHlFQTidv4RiNd4sYdQ==} + dependencies: + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + '@aws-sdk/client-lex-runtime-service': 3.186.0 + '@aws-sdk/client-lex-runtime-v2': 3.186.0 + base-64: 1.0.0 + fflate: 0.7.3 + pako: 2.0.4 + transitivePeerDependencies: + - aws-crt + - react-native + dev: false + + /@aws-amplify/predictions@4.0.64(react-native@0.77.0): + resolution: {integrity: sha512-EcRwCqf0xFGoJLAzns7TIgKZxKZUlXubVPMTGIm9imVT/ZuF7ELX/YhIygzR33M+75rzLJxQcx5OOTFj6df/1Q==} + dependencies: + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + '@aws-amplify/storage': 4.5.17(react-native@0.77.0) + '@aws-sdk/client-comprehend': 3.6.1(react-native@0.77.0) + '@aws-sdk/client-polly': 3.6.1(react-native@0.77.0) + '@aws-sdk/client-rekognition': 3.6.1(react-native@0.77.0) + '@aws-sdk/client-textract': 3.6.1(react-native@0.77.0) + '@aws-sdk/client-translate': 3.6.1(react-native@0.77.0) + '@aws-sdk/eventstream-marshaller': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + uuid: 3.4.0 + transitivePeerDependencies: + - debug + - react-native + dev: false + + /@aws-amplify/pubsub@4.5.14(react-native@0.77.0): + resolution: {integrity: sha512-WGR26nOMW2+DQE1DuWE4W9Ehx1RxmNmQN6Mq27DnKicLL0nMgyKT7OGBAHmQzVtsvMzFgUo/KcMBL3GltZ0M5g==} + dependencies: + '@aws-amplify/auth': 4.6.17(react-native@0.77.0) + '@aws-amplify/cache': 4.0.66(react-native@0.77.0) + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + graphql: 15.8.0 + paho-mqtt: 1.1.0 + uuid: 3.4.0 + zen-observable-ts: 0.8.19 + transitivePeerDependencies: + - encoding + - react-native + dev: false + + /@aws-amplify/storage@4.5.17(react-native@0.77.0): + resolution: {integrity: sha512-GZJvTdZ8zjlSfQ32x4EY56sOTafL843s6geqd8d/ybpJYZqEyBpfbcLZnsZFStAEERBKB4hCyCs/m+E2zZg/xg==} + dependencies: + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + '@aws-sdk/client-s3': 3.6.1(react-native@0.77.0) + '@aws-sdk/s3-request-presigner': 3.6.1 + '@aws-sdk/util-create-request': 3.6.1 + '@aws-sdk/util-format-url': 3.6.1 + axios: 0.26.0 + events: 3.3.0 + transitivePeerDependencies: + - debug + - react-native + dev: false + + /@aws-amplify/ui@2.0.7: + resolution: {integrity: sha512-tT7onRv+OCznFhUE2mKPpbGHHV+oODZk4VDX3lYNIfJ7LXv1hVtllQbPNJF5beNBRw9r6uotlXpeJrkph6v07A==} + deprecated: Versions '1.x' and '2.x' of '@aws-amplify/ui' have been deprecated. Please visit https://ui.docs.amplify.aws/ for the current version of Amplify UI. + dev: false + + /@aws-amplify/xr@3.0.64(react-native@0.77.0): + resolution: {integrity: sha512-YZJbHVEU9uN8yKHms2uIWyikUPEj4go6qL40vcIDwCv9LNyer2lP+yZ1Djn1FFhqUgLi5lK+yh4PUCoqPUWE8w==} + deprecated: The Amazon Sumerian service is no longer accepting new customers. Existing customer scenes will not be available after February 21, 2023. The AWS Amplify XR features depend on the Amazon Sumerian service to function and as a result, will no longer be available. + dependencies: + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + transitivePeerDependencies: + - react-native + dev: false + + /@aws-crypto/crc32@1.2.2: + resolution: {integrity: sha512-8K0b1672qbv05chSoKpwGZ3fhvVp28Fg3AVHVkEHFl2lTLChO7wD/hTyyo8ING7uc31uZRt7bNra/hA74Td7Tw==} + dependencies: + '@aws-crypto/util': 1.2.2 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-crypto/crc32@2.0.0: + resolution: {integrity: sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA==} + dependencies: + '@aws-crypto/util': 2.0.2 + '@aws-sdk/types': 3.186.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/ie11-detection@1.0.0: + resolution: {integrity: sha512-kCKVhCF1oDxFYgQrxXmIrS5oaWulkvRcPz+QBDMsUr2crbF4VGgGT6+uQhSwJFdUAQ2A//Vq+uT83eJrkzFgXA==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-crypto/ie11-detection@2.0.2: + resolution: {integrity: sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-browser@1.2.2: + resolution: {integrity: sha512-0tNR4kBtJp+9S0kis4+JLab3eg6QWuIeuPhzaYoYwNUXGBgsWIkktA2mnilet+EGWzf3n1zknJXC4X4DVyyXbg==} + dependencies: + '@aws-crypto/ie11-detection': 1.0.0 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-crypto/supports-web-crypto': 1.0.0 + '@aws-crypto/util': 1.2.2 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-locate-window': 3.723.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-browser@2.0.0: + resolution: {integrity: sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==} + dependencies: + '@aws-crypto/ie11-detection': 2.0.2 + '@aws-crypto/sha256-js': 2.0.0 + '@aws-crypto/supports-web-crypto': 2.0.2 + '@aws-crypto/util': 2.0.2 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@aws-sdk/util-utf8-browser': 3.186.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-js@1.0.0-alpha.0: + resolution: {integrity: sha512-GidX2lccEtHZw8mXDKJQj6tea7qh3pAnsNSp1eZNxsN4MMu2OvSraPSqiB1EihsQkZBMg0IiZPpZHoACUX/QMQ==} + dependencies: + '@aws-sdk/types': 1.0.0-rc.10 + '@aws-sdk/util-utf8-browser': 1.0.0-rc.8 + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-js@1.2.2: + resolution: {integrity: sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==} + dependencies: + '@aws-crypto/util': 1.2.2 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-js@2.0.0: + resolution: {integrity: sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==} + dependencies: + '@aws-crypto/util': 2.0.2 + '@aws-sdk/types': 3.186.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/supports-web-crypto@1.0.0: + resolution: {integrity: sha512-IHLfv+WmVH89EW4n6a5eE8/hUlz6qkWGMn/v4r5ZgzcXdTC5nolii2z3k46y01hWRiC2PPhOdeSLzMUCUMco7g==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-crypto/supports-web-crypto@2.0.2: + resolution: {integrity: sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-crypto/util@1.2.2: + resolution: {integrity: sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==} + dependencies: + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-crypto/util@2.0.2: + resolution: {integrity: sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==} + dependencies: + '@aws-sdk/types': 3.186.0 + '@aws-sdk/util-utf8-browser': 3.186.0 + tslib: 1.14.1 + dev: false + + /@aws-sdk/abort-controller@3.186.0: + resolution: {integrity: sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/abort-controller@3.6.1: + resolution: {integrity: sha512-X81XkxX/2Tvv9YNcEto/rcQzPIdKJHFSnl9hBl/qkSdCFV/GaQ2XNWfKm5qFXMLlZNFS0Fn5CnBJ83qnBm47vg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/chunked-blob-reader-native@3.6.1: + resolution: {integrity: sha512-vP6bc2v9h442Srmo7t2QcIbPjk5IqLSf4jGnKDAes8z+7eyjCtKugRP3lOM1fJCfGlPIsJGYnexxYdEGw008vA==} + dependencies: + '@aws-sdk/util-base64-browser': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/chunked-blob-reader@3.6.1: + resolution: {integrity: sha512-QBGUBoD8D5nsM/EKoc0rjpApa5NE5pQVzw1caE8sG00QMMPkCXWSB/gTVKVY0GOAhJFoA/VpVPQchIlZcOrBFg==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/client-cloudwatch-logs@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-QOxIDnlVTpnwJ26Gap6RGz61cDLH6TKrIp30VqwdMeT1pCGy8mn9rWln6XA+ymkofHy/08RfpGp+VN4axwd4Lw==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + tslib: 2.8.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-cognito-identity@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-FMj2GR9R5oCKb3/NI16GIvWeHcE4uX42fBAaQKPbjg2gALFDx9CcJYsdOtDP37V89GtPyZilLv6GJxrwJKzYGg==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + tslib: 2.8.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-comprehend@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-Y2ixlSTjjAp2HJhkUArtYqC/X+zG5Qqu3Bl+Ez22u4u4YnG8HsNFD6FE1axuWSdSa5AFtWTEt+Cz2Ghj/tDySA==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + tslib: 2.8.1 + uuid: 3.4.0 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-firehose@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-KhiKCm+cJmnRFuAEyO3DBpFVDNix1XcVikdxk2lvYbFWkM1oUZoBpudxaJ+fPf2W3stF3CXIAOP+TnGqSZCy9g==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + tslib: 2.8.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-kinesis@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-Ygo+92LxHeUZmiyhiHT+k7hIOhJd6S7ckCEVUsQs2rfwe9bAygUY/3cCoZSqgWy7exFRRKsjhzStcyV6i6jrVQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/eventstream-serde-browser': 3.6.1 + '@aws-sdk/eventstream-serde-config-resolver': 3.6.1 + '@aws-sdk/eventstream-serde-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + '@aws-sdk/util-waiter': 3.6.1 + tslib: 2.8.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-lex-runtime-service@3.186.0: + resolution: {integrity: sha512-EgjQvFxa/o1urxpnWV2A/D0k4m763NqrPLuL074LR+cOkNxVl9W27aYL/tddDBmmDzzx4KcuRL6/n+UBZIheTg==} + engines: {node: '>=12.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 2.0.0 + '@aws-crypto/sha256-js': 2.0.0 + '@aws-sdk/client-sts': 3.186.0 + '@aws-sdk/config-resolver': 3.186.0 + '@aws-sdk/credential-provider-node': 3.186.0 + '@aws-sdk/fetch-http-handler': 3.186.0 + '@aws-sdk/hash-node': 3.186.0 + '@aws-sdk/invalid-dependency': 3.186.0 + '@aws-sdk/middleware-content-length': 3.186.0 + '@aws-sdk/middleware-host-header': 3.186.0 + '@aws-sdk/middleware-logger': 3.186.0 + '@aws-sdk/middleware-recursion-detection': 3.186.0 + '@aws-sdk/middleware-retry': 3.186.0 + '@aws-sdk/middleware-serde': 3.186.0 + '@aws-sdk/middleware-signing': 3.186.0 + '@aws-sdk/middleware-stack': 3.186.0 + '@aws-sdk/middleware-user-agent': 3.186.0 + '@aws-sdk/node-config-provider': 3.186.0 + '@aws-sdk/node-http-handler': 3.186.0 + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/smithy-client': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/url-parser': 3.186.0 + '@aws-sdk/util-base64-browser': 3.186.0 + '@aws-sdk/util-base64-node': 3.186.0 + '@aws-sdk/util-body-length-browser': 3.186.0 + '@aws-sdk/util-body-length-node': 3.186.0 + '@aws-sdk/util-defaults-mode-browser': 3.186.0 + '@aws-sdk/util-defaults-mode-node': 3.186.0 + '@aws-sdk/util-user-agent-browser': 3.186.0 + '@aws-sdk/util-user-agent-node': 3.186.0 + '@aws-sdk/util-utf8-browser': 3.186.0 + '@aws-sdk/util-utf8-node': 3.186.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-lex-runtime-v2@3.186.0: + resolution: {integrity: sha512-oDN07yCWc9gsEYL44KSjPj8wdHHcf5Kti+w31fE7JHZqvRXxLsLx7G+kEcPmSTRk3Y4wDPXJozL6sDUAOAEb7A==} + engines: {node: '>=12.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 2.0.0 + '@aws-crypto/sha256-js': 2.0.0 + '@aws-sdk/client-sts': 3.186.0 + '@aws-sdk/config-resolver': 3.186.0 + '@aws-sdk/credential-provider-node': 3.186.0 + '@aws-sdk/eventstream-handler-node': 3.186.0 + '@aws-sdk/eventstream-serde-browser': 3.186.0 + '@aws-sdk/eventstream-serde-config-resolver': 3.186.0 + '@aws-sdk/eventstream-serde-node': 3.186.0 + '@aws-sdk/fetch-http-handler': 3.186.0 + '@aws-sdk/hash-node': 3.186.0 + '@aws-sdk/invalid-dependency': 3.186.0 + '@aws-sdk/middleware-content-length': 3.186.0 + '@aws-sdk/middleware-eventstream': 3.186.0 + '@aws-sdk/middleware-host-header': 3.186.0 + '@aws-sdk/middleware-logger': 3.186.0 + '@aws-sdk/middleware-recursion-detection': 3.186.0 + '@aws-sdk/middleware-retry': 3.186.0 + '@aws-sdk/middleware-serde': 3.186.0 + '@aws-sdk/middleware-signing': 3.186.0 + '@aws-sdk/middleware-stack': 3.186.0 + '@aws-sdk/middleware-user-agent': 3.186.0 + '@aws-sdk/node-config-provider': 3.186.0 + '@aws-sdk/node-http-handler': 3.186.0 + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/smithy-client': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/url-parser': 3.186.0 + '@aws-sdk/util-base64-browser': 3.186.0 + '@aws-sdk/util-base64-node': 3.186.0 + '@aws-sdk/util-body-length-browser': 3.186.0 + '@aws-sdk/util-body-length-node': 3.186.0 + '@aws-sdk/util-defaults-mode-browser': 3.186.0 + '@aws-sdk/util-defaults-mode-node': 3.186.0 + '@aws-sdk/util-user-agent-browser': 3.186.0 + '@aws-sdk/util-user-agent-node': 3.186.0 + '@aws-sdk/util-utf8-browser': 3.186.0 + '@aws-sdk/util-utf8-node': 3.186.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-location@3.186.0: + resolution: {integrity: sha512-RXT1Z7jgYrPEdD1VkErH9Wm+z6y7c/ua1Pu9VQ8weu9vtD15S8Qnyd1m4HS8ZPQUUM/gTxs/fL9+s53wRWpfGQ==} + engines: {node: '>=12.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 2.0.0 + '@aws-crypto/sha256-js': 2.0.0 + '@aws-sdk/client-sts': 3.186.0 + '@aws-sdk/config-resolver': 3.186.0 + '@aws-sdk/credential-provider-node': 3.186.0 + '@aws-sdk/fetch-http-handler': 3.186.0 + '@aws-sdk/hash-node': 3.186.0 + '@aws-sdk/invalid-dependency': 3.186.0 + '@aws-sdk/middleware-content-length': 3.186.0 + '@aws-sdk/middleware-host-header': 3.186.0 + '@aws-sdk/middleware-logger': 3.186.0 + '@aws-sdk/middleware-recursion-detection': 3.186.0 + '@aws-sdk/middleware-retry': 3.186.0 + '@aws-sdk/middleware-serde': 3.186.0 + '@aws-sdk/middleware-signing': 3.186.0 + '@aws-sdk/middleware-stack': 3.186.0 + '@aws-sdk/middleware-user-agent': 3.186.0 + '@aws-sdk/node-config-provider': 3.186.0 + '@aws-sdk/node-http-handler': 3.186.0 + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/smithy-client': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/url-parser': 3.186.0 + '@aws-sdk/util-base64-browser': 3.186.0 + '@aws-sdk/util-base64-node': 3.186.0 + '@aws-sdk/util-body-length-browser': 3.186.0 + '@aws-sdk/util-body-length-node': 3.186.0 + '@aws-sdk/util-defaults-mode-browser': 3.186.0 + '@aws-sdk/util-defaults-mode-node': 3.186.0 + '@aws-sdk/util-user-agent-browser': 3.186.0 + '@aws-sdk/util-user-agent-node': 3.186.0 + '@aws-sdk/util-utf8-browser': 3.186.0 + '@aws-sdk/util-utf8-node': 3.186.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-personalize-events@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-x9Jl/7emSQsB6GwBvjyw5BiSO26CnH4uvjNit6n54yNMtJ26q0+oIxkplnUDyjLTfLRe373c/z5/4dQQtDffkw==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + tslib: 2.8.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-pinpoint@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-dueBedp91EKAHxcWLR3aNx/eUEdxdF9niEQTzOO2O4iJL2yvO2Hh7ZYiO7B3g7FuuICTpWSHd//Y9mGmSVLMCg==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + tslib: 2.8.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-polly@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-y6fxVYndGS7z2KqHViPCqagBEOsZlxBUYUJZuD6WWTiQrI0Pwe5qG02oKJVaa5OmxE20QLf6bRBWj2rQpeF4IQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + tslib: 2.8.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-rekognition@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-Ia4FEog9RrI0IoDRbOJO6djwhVAAaEZutxEKrWbjrVz4bgib28L+V+yAio2SUneeirj8pNYXwBKPfoYOUqGHhA==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + '@aws-sdk/util-waiter': 3.6.1 + tslib: 2.8.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-s3@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-59cTmZj92iwgNoAeJirK5sZNQNXLc/oI3luqrEHRNLuOh70bjdgad70T0a5k2Ysd/v/QNamqJxnCJMPuX1bhgw==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/eventstream-serde-browser': 3.6.1 + '@aws-sdk/eventstream-serde-config-resolver': 3.6.1 + '@aws-sdk/eventstream-serde-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-blob-browser': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/hash-stream-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/md5-js': 3.6.1 + '@aws-sdk/middleware-apply-body-checksum': 3.6.1 + '@aws-sdk/middleware-bucket-endpoint': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-expect-continue': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-location-constraint': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-sdk-s3': 3.6.1 + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-ssec': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + '@aws-sdk/util-waiter': 3.6.1 + '@aws-sdk/xml-builder': 3.6.1 + fast-xml-parser: 3.21.1 + tslib: 2.8.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-sso@3.186.0: + resolution: {integrity: sha512-qwLPomqq+fjvp42izzEpBEtGL2+dIlWH5pUCteV55hTEwHgo+m9LJPIrMWkPeoMBzqbNiu5n6+zihnwYlCIlEA==} + engines: {node: '>=12.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 2.0.0 + '@aws-crypto/sha256-js': 2.0.0 + '@aws-sdk/config-resolver': 3.186.0 + '@aws-sdk/fetch-http-handler': 3.186.0 + '@aws-sdk/hash-node': 3.186.0 + '@aws-sdk/invalid-dependency': 3.186.0 + '@aws-sdk/middleware-content-length': 3.186.0 + '@aws-sdk/middleware-host-header': 3.186.0 + '@aws-sdk/middleware-logger': 3.186.0 + '@aws-sdk/middleware-recursion-detection': 3.186.0 + '@aws-sdk/middleware-retry': 3.186.0 + '@aws-sdk/middleware-serde': 3.186.0 + '@aws-sdk/middleware-stack': 3.186.0 + '@aws-sdk/middleware-user-agent': 3.186.0 + '@aws-sdk/node-config-provider': 3.186.0 + '@aws-sdk/node-http-handler': 3.186.0 + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/smithy-client': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/url-parser': 3.186.0 + '@aws-sdk/util-base64-browser': 3.186.0 + '@aws-sdk/util-base64-node': 3.186.0 + '@aws-sdk/util-body-length-browser': 3.186.0 + '@aws-sdk/util-body-length-node': 3.186.0 + '@aws-sdk/util-defaults-mode-browser': 3.186.0 + '@aws-sdk/util-defaults-mode-node': 3.186.0 + '@aws-sdk/util-user-agent-browser': 3.186.0 + '@aws-sdk/util-user-agent-node': 3.186.0 + '@aws-sdk/util-utf8-browser': 3.186.0 + '@aws-sdk/util-utf8-node': 3.186.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-sts@3.186.0: + resolution: {integrity: sha512-lyAPI6YmIWWYZHQ9fBZ7QgXjGMTtktL5fk8kOcZ98ja+8Vu0STH1/u837uxqvZta8/k0wijunIL3jWUhjsNRcg==} + engines: {node: '>=12.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 2.0.0 + '@aws-crypto/sha256-js': 2.0.0 + '@aws-sdk/config-resolver': 3.186.0 + '@aws-sdk/credential-provider-node': 3.186.0 + '@aws-sdk/fetch-http-handler': 3.186.0 + '@aws-sdk/hash-node': 3.186.0 + '@aws-sdk/invalid-dependency': 3.186.0 + '@aws-sdk/middleware-content-length': 3.186.0 + '@aws-sdk/middleware-host-header': 3.186.0 + '@aws-sdk/middleware-logger': 3.186.0 + '@aws-sdk/middleware-recursion-detection': 3.186.0 + '@aws-sdk/middleware-retry': 3.186.0 + '@aws-sdk/middleware-sdk-sts': 3.186.0 + '@aws-sdk/middleware-serde': 3.186.0 + '@aws-sdk/middleware-signing': 3.186.0 + '@aws-sdk/middleware-stack': 3.186.0 + '@aws-sdk/middleware-user-agent': 3.186.0 + '@aws-sdk/node-config-provider': 3.186.0 + '@aws-sdk/node-http-handler': 3.186.0 + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/smithy-client': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/url-parser': 3.186.0 + '@aws-sdk/util-base64-browser': 3.186.0 + '@aws-sdk/util-base64-node': 3.186.0 + '@aws-sdk/util-body-length-browser': 3.186.0 + '@aws-sdk/util-body-length-node': 3.186.0 + '@aws-sdk/util-defaults-mode-browser': 3.186.0 + '@aws-sdk/util-defaults-mode-node': 3.186.0 + '@aws-sdk/util-user-agent-browser': 3.186.0 + '@aws-sdk/util-user-agent-node': 3.186.0 + '@aws-sdk/util-utf8-browser': 3.186.0 + '@aws-sdk/util-utf8-node': 3.186.0 + entities: 2.2.0 + fast-xml-parser: 3.19.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-textract@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-nLrBzWDt3ToiGVFF4lW7a/eZpI2zjdvu7lwmOWyXX8iiPzhBVVEfd5oOorRyJYBsGMslp4sqV8TBkU5Ld/a97Q==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + tslib: 2.8.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/client-translate@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-RIHY+Og1i43B5aWlfUUk0ZFnNfM7j2vzlYUwOqhndawV49GFf96M3pmskR5sKEZI+5TXY77qR9TgZ/r3UxVCRQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 1.2.2 + '@aws-crypto/sha256-js': 1.2.2 + '@aws-sdk/config-resolver': 3.6.1 + '@aws-sdk/credential-provider-node': 3.6.1 + '@aws-sdk/fetch-http-handler': 3.6.1 + '@aws-sdk/hash-node': 3.6.1 + '@aws-sdk/invalid-dependency': 3.6.1 + '@aws-sdk/middleware-content-length': 3.6.1 + '@aws-sdk/middleware-host-header': 3.6.1 + '@aws-sdk/middleware-logger': 3.6.1 + '@aws-sdk/middleware-retry': 3.6.1(react-native@0.77.0) + '@aws-sdk/middleware-serde': 3.6.1 + '@aws-sdk/middleware-signing': 3.6.1 + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/middleware-user-agent': 3.6.1 + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/node-http-handler': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/url-parser': 3.6.1 + '@aws-sdk/url-parser-native': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + '@aws-sdk/util-base64-node': 3.6.1 + '@aws-sdk/util-body-length-browser': 3.6.1 + '@aws-sdk/util-body-length-node': 3.6.1 + '@aws-sdk/util-user-agent-browser': 3.6.1 + '@aws-sdk/util-user-agent-node': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + '@aws-sdk/util-utf8-node': 3.6.1 + tslib: 2.8.1 + uuid: 3.4.0 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/config-resolver@3.186.0: + resolution: {integrity: sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/signature-v4': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/util-config-provider': 3.186.0 + '@aws-sdk/util-middleware': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/config-resolver@3.6.1: + resolution: {integrity: sha512-qjP1g3jLIm+XvOIJ4J7VmZRi87vsDmTRzIFePVeG+EFWwYQLxQjTGMdIj3yKTh1WuZ0HByf47mGcpiS4HZLm1Q==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/signature-v4': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/credential-provider-cognito-identity@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-uJ9q+yq+Dhdo32gcv0p/AT7sKSAUH0y4ts9XRK/vx0dW9Q3XJy99mOJlq/6fkh4LfWeavJJlaCo9lSHNMWXx4w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/client-cognito-identity': 3.6.1(react-native@0.77.0) + '@aws-sdk/property-provider': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/credential-provider-env@3.186.0: + resolution: {integrity: sha512-N9LPAqi1lsQWgxzmU4NPvLPnCN5+IQ3Ai1IFf3wM6FFPNoSUd1kIA2c6xaf0BE7j5Kelm0raZOb4LnV3TBAv+g==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/credential-provider-env@3.6.1: + resolution: {integrity: sha512-coeFf/HnhpGidcAN1i1NuFgyFB2M6DeN1zNVy4f6s4mAh96ftr9DgWM1CcE3C+cLHEdpNqleVgC/2VQpyzOBLQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/credential-provider-imds@3.186.0: + resolution: {integrity: sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/node-config-provider': 3.186.0 + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/url-parser': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/credential-provider-imds@3.6.1: + resolution: {integrity: sha512-bf4LMI418OYcQbyLZRAW8Q5AYM2IKrNqOnIcfrFn2f17ulG7TzoWW3WN/kMOw4TC9+y+vIlCWOv87GxU1yP0Bg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/credential-provider-ini@3.186.0: + resolution: {integrity: sha512-ecrFh3MoZhAj5P2k/HXo/hMJQ3sfmvlommzXuZ/D1Bj2yMcyWuBhF1A83Fwd2gtYrWRrllsK3IOMM5Jr8UIVZA==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.186.0 + '@aws-sdk/credential-provider-imds': 3.186.0 + '@aws-sdk/credential-provider-sso': 3.186.0 + '@aws-sdk/credential-provider-web-identity': 3.186.0 + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/shared-ini-file-loader': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-ini@3.6.1: + resolution: {integrity: sha512-3jguW6+ttRNddRZvbrs1yb3F1jrUbqyv0UfRoHuOGthjTt+L9sDpJaJGugYnT3bS9WBu1NydLVE2kDV++mJGVw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.6.1 + '@aws-sdk/shared-ini-file-loader': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/credential-provider-node@3.186.0: + resolution: {integrity: sha512-HIt2XhSRhEvVgRxTveLCzIkd/SzEBQfkQ6xMJhkBtfJw1o3+jeCk+VysXM0idqmXytctL0O3g9cvvTHOsUgxOA==} + engines: {node: '>=12.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.186.0 + '@aws-sdk/credential-provider-imds': 3.186.0 + '@aws-sdk/credential-provider-ini': 3.186.0 + '@aws-sdk/credential-provider-process': 3.186.0 + '@aws-sdk/credential-provider-sso': 3.186.0 + '@aws-sdk/credential-provider-web-identity': 3.186.0 + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/shared-ini-file-loader': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-node@3.6.1: + resolution: {integrity: sha512-VAHOcsqkPrF1k/fA62pv9c75lUWe5bHpcbFX83C3EUPd2FXV10Lfkv6bdWhyZPQy0k8T+9/yikHH3c7ZQeFE5A==} + engines: {node: '>=10.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.6.1 + '@aws-sdk/credential-provider-imds': 3.6.1 + '@aws-sdk/credential-provider-ini': 3.6.1 + '@aws-sdk/credential-provider-process': 3.6.1 + '@aws-sdk/property-provider': 3.6.1 + '@aws-sdk/shared-ini-file-loader': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/credential-provider-process@3.186.0: + resolution: {integrity: sha512-ATRU6gbXvWC1TLnjOEZugC/PBXHBoZgBADid4fDcEQY1vF5e5Ux1kmqkJxyHtV5Wl8sE2uJfwWn+FlpUHRX67g==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/shared-ini-file-loader': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/credential-provider-process@3.6.1: + resolution: {integrity: sha512-d0/TpMoEV4qMYkdpyyjU2Otse9X2jC1DuxWajHOWZYEw8oejMvXYTZ10hNaXZvAcNM9q214rp+k4mkt6gIcI6g==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/credential-provider-ini': 3.6.1 + '@aws-sdk/property-provider': 3.6.1 + '@aws-sdk/shared-ini-file-loader': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/credential-provider-sso@3.186.0: + resolution: {integrity: sha512-mJ+IZljgXPx99HCmuLgBVDPLepHrwqnEEC/0wigrLCx6uz3SrAWmGZsNbxSEtb2CFSAaczlTHcU/kIl7XZIyeQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.186.0 + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/shared-ini-file-loader': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-web-identity@3.186.0: + resolution: {integrity: sha512-KqzI5eBV72FE+8SuOQAu+r53RXGVHg4AuDJmdXyo7Gc4wS/B9FNElA8jVUjjYgVnf0FSiri+l41VzQ44dCopSA==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/eventstream-codec@3.186.0: + resolution: {integrity: sha512-3kLcJ0/H+zxFlhTlE1SGoFpzd/SitwXOsTSlYVwrwdISKRjooGg0BJpm1CSTkvmWnQIUlYijJvS96TAJ+fCPIA==} + dependencies: + '@aws-crypto/crc32': 2.0.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/util-hex-encoding': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/eventstream-handler-node@3.186.0: + resolution: {integrity: sha512-S8eAxCHyFAGSH7F6GHKU2ckpiwFPwJUQwMzewISLg3wzLQeu6lmduxBxVaV3/SoEbEMsbNmrgw9EXtw3Vt/odQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/eventstream-codec': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/eventstream-marshaller@3.6.1: + resolution: {integrity: sha512-ZvN3Nvxn2Gul08L9MOSN123LwSO0E1gF/CqmOGZtEWzPnoSX/PWM9mhPPeXubyw2KdlXylOodYYw3EAATk3OmA==} + dependencies: + '@aws-crypto/crc32': 1.2.2 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-hex-encoding': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/eventstream-serde-browser@3.186.0: + resolution: {integrity: sha512-0r2c+yugBdkP5bglGhGOgztjeHdHTKqu2u6bvTByM0nJShNO9YyqWygqPqDUOE5axcYQE1D0aFDGzDtP3mGJhw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/eventstream-serde-universal': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/eventstream-serde-browser@3.6.1: + resolution: {integrity: sha512-J8B30d+YUfkBtgWRr7+9AfYiPnbG28zjMlFGsJf8Wxr/hDCfff+Z8NzlBYFEbS7McXXhRiIN8DHUvCtolJtWJQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/eventstream-marshaller': 3.6.1 + '@aws-sdk/eventstream-serde-universal': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/eventstream-serde-config-resolver@3.186.0: + resolution: {integrity: sha512-xhwCqYrAX5c7fg9COXVw6r7Sa3BO5cCfQMSR5S1QisE7do8K1GDKEHvUCheOx+RLon+P3glLjuNBMdD0HfCVNA==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/eventstream-serde-config-resolver@3.6.1: + resolution: {integrity: sha512-72pCzcT/KeD4gPgRVBSQzEzz4JBim8bNwPwZCGaIYdYAsAI8YMlvp0JNdis3Ov9DFURc87YilWKQlAfw7CDJxA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/eventstream-serde-node@3.186.0: + resolution: {integrity: sha512-9p/gdukJYfmA+OEYd6MfIuufxrrfdt15lBDM3FODuc9j09LSYSRHSxthkIhiM5XYYaaUM+4R0ZlSMdaC3vFDFQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/eventstream-serde-universal': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/eventstream-serde-node@3.6.1: + resolution: {integrity: sha512-rjBbJFjCrEcm2NxZctp+eJmyPxKYayG3tQZo8PEAQSViIlK5QexQI3fgqNAeCtK7l/SFAAvnOMRZF6Z3NdUY6A==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/eventstream-marshaller': 3.6.1 + '@aws-sdk/eventstream-serde-universal': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/eventstream-serde-universal@3.186.0: + resolution: {integrity: sha512-rIgPmwUxn2tzainBoh+cxAF+b7o01CcW+17yloXmawsi0kiR7QK7v9m/JTGQPWKtHSsPOrtRzuiWQNX57SlcsQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/eventstream-codec': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/eventstream-serde-universal@3.6.1: + resolution: {integrity: sha512-rpRu97yAGHr9GQLWMzcGICR2PxNu1dHU/MYc9Kb6UgGeZd4fod4o1zjhAJuj98cXn2xwHNFM4wMKua6B4zKrZg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/eventstream-marshaller': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/fetch-http-handler@3.186.0: + resolution: {integrity: sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw==} + dependencies: + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/querystring-builder': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/util-base64-browser': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/fetch-http-handler@3.6.1: + resolution: {integrity: sha512-N8l6ZbwhINuWG5hsl625lmIQmVjzsqRPmlgh061jm5D90IhsM5/3A3wUxpB/k0av1dmuMRw/m0YtBU5w4LOwvw==} + dependencies: + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/querystring-builder': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-base64-browser': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/hash-blob-browser@3.6.1: + resolution: {integrity: sha512-9jPaZ/e3F8gf9JZd44DD6MvbYV6bKnn99rkG3GFIINOy9etoxPrLehp2bH2DK/j0ow60RNuwgUjj5qHV/zF67g==} + dependencies: + '@aws-sdk/chunked-blob-reader': 3.6.1 + '@aws-sdk/chunked-blob-reader-native': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/hash-node@3.186.0: + resolution: {integrity: sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/types': 3.186.0 + '@aws-sdk/util-buffer-from': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/hash-node@3.6.1: + resolution: {integrity: sha512-iKEpzpyaG9PYCnaOGwTIf0lffsF/TpsXrzAfnBlfeOU/3FbgniW2z/yq5xBbtMDtLobtOYC09kUFwDnDvuveSA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-buffer-from': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/hash-stream-node@3.6.1: + resolution: {integrity: sha512-ePaWjCItIWxuSxA/UnUM/keQ3IAOsQz3FYSxu0KK8K0e1bKTEUgDIG9oMLBq7jIl9TzJG0HBXuPfMe73QHUNug==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/invalid-dependency@3.186.0: + resolution: {integrity: sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw==} + dependencies: + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/invalid-dependency@3.6.1: + resolution: {integrity: sha512-d0RLqK7yeDCZJKopnGmGXo2rYkQNE7sGKVmBHQD1j1kKZ9lWwRoJeWqo834JNPZzY5XRvZG5SuIjJ1kFy8LpyQ==} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/is-array-buffer@3.186.0: + resolution: {integrity: sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA==} + engines: {node: '>= 12.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/is-array-buffer@3.6.1: + resolution: {integrity: sha512-qm2iDJmCrxlQE2dsFG+TujPe7jw4DF+4RTrsFMhk/e3lOl3MAzQ6Fc2kXtgeUcVrZVFTL8fQvXE1ByYyI6WbCw==} + engines: {node: '>= 10.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/md5-js@3.6.1: + resolution: {integrity: sha512-lzCqkZF1sbzGFDyq1dI+lR3AmlE33rbC/JhZ5fzw3hJZvfZ6Beq3Su7YwDo65IWEu0zOKYaNywTeOloXP/CkxQ==} + dependencies: + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-utf8-browser': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-apply-body-checksum@3.6.1: + resolution: {integrity: sha512-IncmXR1MPk6aYvmD37It8dP6wVMzaxxzgrkIU2ACkN5UVwA+/0Sr3ZNd9dNwjpyoH1AwpL9BetnlJaWtT6K5ew==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-bucket-endpoint@3.6.1: + resolution: {integrity: sha512-Frcqn2RQDNHy+e2Q9hv3ejT3mQWtGlfZESbXEF6toR4M0R8MmEVqIB/ohI6VKBj11lRmGwvpPsR6zz+PJ8HS7A==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-arn-parser': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-content-length@3.186.0: + resolution: {integrity: sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-content-length@3.6.1: + resolution: {integrity: sha512-QRcocG9f5YjYzbjs2HjKla6ZIjvx8Y8tm1ZSFOPey81m18CLif1O7M3AtJXvxn+0zeSck9StFdhz5gfjVNYtDg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-eventstream@3.186.0: + resolution: {integrity: sha512-7yjFiitTGgfKL6cHK3u3HYFnld26IW5aUAFuEd6ocR/FjliysfBd8g0g1bw3bRfIMgCDD8OIOkXK8iCk2iYGWQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-expect-continue@3.6.1: + resolution: {integrity: sha512-vvMOqVYU3uvdJzg/X6NHewZUEBZhSqND1IEcdahLb6RmvDhsS39iS97VZmEFsjj/UFGoePtYjrrdEgRG9Rm1kQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/middleware-header-default': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-header-default@3.6.1: + resolution: {integrity: sha512-YD137iIctXVH8Eut0WOBalvvA+uL0jM0UXZ9N2oKrC8kPQPpqjK9lYGFKZQFsl/XlQHAjJi+gCAFrYsBntRWJQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-host-header@3.186.0: + resolution: {integrity: sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-host-header@3.6.1: + resolution: {integrity: sha512-nwq8R2fGBRZQE0Fr/jiOgqfppfiTQCUoD8hyX3qSS7Qc2uqpsDOt2TnnoZl56mpQYkF/344IvMAkp+ew6wR73w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-location-constraint@3.6.1: + resolution: {integrity: sha512-nFisTc0O5D+4I+sRxiiLPasC/I4NDc3s+hgbPPt/b3uAdrujJjhwFBOSaTx8qQvz/xJPAA8pUA/bfWIyeZKi/w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-logger@3.186.0: + resolution: {integrity: sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-logger@3.6.1: + resolution: {integrity: sha512-zxaSLpwKlja7JvK20UsDTxPqBZUo3rbDA1uv3VWwpxzOrEWSlVZYx/KLuyGWGkx9V71ZEkf6oOWWJIstS0wyQQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-recursion-detection@3.186.0: + resolution: {integrity: sha512-Za7k26Kovb4LuV5tmC6wcVILDCt0kwztwSlB991xk4vwNTja8kKxSt53WsYG8Q2wSaW6UOIbSoguZVyxbIY07Q==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-retry@3.186.0: + resolution: {integrity: sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/service-error-classification': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/util-middleware': 3.186.0 + tslib: 2.8.1 + uuid: 8.3.2 + dev: false + + /@aws-sdk/middleware-retry@3.6.1(react-native@0.77.0): + resolution: {integrity: sha512-WHeo4d2jsXxBP+cec2SeLb0btYXwYXuE56WLmNt0RvJYmiBzytUeGJeRa9HuwV574kgigAuHGCeHlPO36G4Y0Q==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/service-error-classification': 3.6.1 + '@aws-sdk/types': 3.6.1 + react-native-get-random-values: 1.11.0(react-native@0.77.0) + tslib: 1.14.1 + uuid: 3.4.0 + transitivePeerDependencies: + - react-native + dev: false + + /@aws-sdk/middleware-sdk-s3@3.6.1: + resolution: {integrity: sha512-HEA9kynNTsOSIIz8p5GEEAH03pnn+SSohwPl80sGqkmI1yl1tzjqgYZRii0e6acJTh4j9655XFzSx36hYPeB2w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-arn-parser': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-sdk-sts@3.186.0: + resolution: {integrity: sha512-GDcK0O8rjtnd+XRGnxzheq1V2jk4Sj4HtjrxW/ROyhzLOAOyyxutBt+/zOpDD6Gba3qxc69wE+Cf/qngOkEkDw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/middleware-signing': 3.186.0 + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/signature-v4': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-serde@3.186.0: + resolution: {integrity: sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-serde@3.6.1: + resolution: {integrity: sha512-EdQCFZRERfP3uDuWcPNuaa2WUR3qL1WFDXafhcx+7ywQxagdYqBUWKFJlLYi6njbkOKXFM+eHBzoXGF0OV3MJA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-signing@3.186.0: + resolution: {integrity: sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/signature-v4': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/util-middleware': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-signing@3.6.1: + resolution: {integrity: sha512-1woKq+1sU3eausdl8BNdAMRZMkSYuy4mxhLsF0/qAUuLwo1eJLLUCOQp477tICawgu4O4q2OAyUHk7wMqYnQCg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/signature-v4': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-ssec@3.6.1: + resolution: {integrity: sha512-svuH6s91uKUTORt51msiL/ZBjtYSW32c3uVoWxludd/PEf6zO5wCmUEsKoyVwa88L7rrCq+81UBv5A8S5kc3Cw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-stack@3.186.0: + resolution: {integrity: sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ==} + engines: {node: '>= 12.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-stack@3.6.1: + resolution: {integrity: sha512-EPsIxMi8LtCt7YwTFpWGlVGYJc0q4kwFbOssY02qfqdCnyqi2y5wo089dH7OdxUooQ0D7CPsXM1zTTuzvm+9Fw==} + engines: {node: '>= 10.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/middleware-user-agent@3.186.0: + resolution: {integrity: sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-user-agent@3.6.1: + resolution: {integrity: sha512-YvXvwllNDVvxQ30vIqLsx+P6jjnfFEQUmhlv64n98gOme6h2BqoyQDcC3yHRGctuxRZEsR7W/H1ASTKC+iabbQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/node-config-provider@3.186.0: + resolution: {integrity: sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/shared-ini-file-loader': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/node-config-provider@3.6.1: + resolution: {integrity: sha512-x2Z7lm0ZhHYqMybvkaI5hDKfBkaLaXhTDfgrLl9TmBZ3QHO4fIHgeL82VZ90Paol+OS+jdq2AheLmzbSxv3HrA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.6.1 + '@aws-sdk/shared-ini-file-loader': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/node-http-handler@3.186.0: + resolution: {integrity: sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.186.0 + '@aws-sdk/protocol-http': 3.186.0 + '@aws-sdk/querystring-builder': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/node-http-handler@3.6.1: + resolution: {integrity: sha512-6XSaoqbm9ZF6T4UdBCcs/Gn2XclwBotkdjj46AxO+9vRAgZDP+lH/8WwZsvfqJhhRhS0qxWrks98WGJwmaTG8g==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.6.1 + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/querystring-builder': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/property-provider@3.186.0: + resolution: {integrity: sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/property-provider@3.6.1: + resolution: {integrity: sha512-2gR2DzDySXKFoj9iXLm1TZBVSvFIikEPJsbRmAZx5RBY+tp1IXWqZM6PESjaLdLg/ZtR0QhW2ZcRn0fyq2JfnQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/protocol-http@3.186.0: + resolution: {integrity: sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/protocol-http@3.6.1: + resolution: {integrity: sha512-WkQz7ncVYTLvCidDfXWouDzqxgSNPZDz3Bql+7VhZeITnzAEcr4hNMyEqMAVYBVugGmkG2W6YiUqNNs1goOcDA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/querystring-builder@3.186.0: + resolution: {integrity: sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/types': 3.186.0 + '@aws-sdk/util-uri-escape': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/querystring-builder@3.6.1: + resolution: {integrity: sha512-ESe255Yl6vB1AMNqaGSQow3TBYYnpw0AFjE40q2VyiNrkbaqKmW2EzjeCy3wEmB1IfJDHy3O12ZOMUMOnjFT8g==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-uri-escape': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/querystring-parser@3.186.0: + resolution: {integrity: sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/querystring-parser@3.6.1: + resolution: {integrity: sha512-hh6dhqamKrWWaDSuO2YULci0RGwJWygoy8hpCRxs/FpzzHIcbm6Cl6Jhrn5eKBzOBv+PhCcYwbfad0kIZZovcQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/s3-request-presigner@3.6.1: + resolution: {integrity: sha512-OI7UHCKBwuiO/RmHHewBKnL2NYqdilXRmpX67TJ4tTszIrWP2+vpm3lIfrx/BM8nf8nKTzgkO98uFhoJsEhmTg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/protocol-http': 3.6.1 + '@aws-sdk/signature-v4': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-create-request': 3.6.1 + '@aws-sdk/util-format-url': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/service-error-classification@3.186.0: + resolution: {integrity: sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw==} + engines: {node: '>= 12.0.0'} + dev: false + + /@aws-sdk/service-error-classification@3.6.1: + resolution: {integrity: sha512-kZ7ZhbrN1f+vrSRkTJvXsu7BlOyZgym058nPA745+1RZ1Rtv4Ax8oknf2RvJyj/1qRUi8LBaAREjzQ3C8tmLBA==} + engines: {node: '>= 10.0.0'} + dev: false + + /@aws-sdk/shared-ini-file-loader@3.186.0: + resolution: {integrity: sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/shared-ini-file-loader@3.6.1: + resolution: {integrity: sha512-BnLHtsNLOoow6rPV+QVi6jnovU5g1m0YzoUG0BQYZ1ALyVlWVr0VvlUX30gMDfdYoPMp+DHvF8GXdMuGINq6kQ==} + engines: {node: '>= 10.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/signature-v4@3.186.0: + resolution: {integrity: sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.186.0 + '@aws-sdk/types': 3.186.0 + '@aws-sdk/util-hex-encoding': 3.186.0 + '@aws-sdk/util-middleware': 3.186.0 + '@aws-sdk/util-uri-escape': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/signature-v4@3.6.1: + resolution: {integrity: sha512-EAR0qGVL4AgzodZv4t+BSuBfyOXhTNxDxom50IFI1MqidR9vI6avNZKcPHhgXbm7XVcsDGThZKbzQ2q7MZ2NTA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.6.1 + '@aws-sdk/types': 3.6.1 + '@aws-sdk/util-hex-encoding': 3.6.1 + '@aws-sdk/util-uri-escape': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/smithy-client@3.186.0: + resolution: {integrity: sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/middleware-stack': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/smithy-client@3.6.1: + resolution: {integrity: sha512-AVpRK4/iUxNeDdAm8UqP0ZgtgJMQeWcagTylijwelhWXyXzHUReY1sgILsWcdWnoy6gq845W7K2VBhBleni8+w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/types@1.0.0-rc.10: + resolution: {integrity: sha512-9gwhYnkTNuYZ+etCtM4T8gjpZ0SWSXbzQxY34UjSS+dt3C/UnbX0J22tMahp/9Z1yCa9pihtXrkD+nO2xn7nVQ==} + engines: {node: '>= 10.0.0'} + dev: false + + /@aws-sdk/types@3.186.0: + resolution: {integrity: sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ==} + engines: {node: '>= 12.0.0'} + dev: false + + /@aws-sdk/types@3.6.1: + resolution: {integrity: sha512-4Dx3eRTrUHLxhFdLJL8zdNGzVsJfAxtxPYYGmIddUkO2Gj3WA1TGjdfG4XN/ClI6e1XonCHafQX3UYO/mgnH3g==} + engines: {node: '>= 10.0.0'} + dev: false + + /@aws-sdk/url-parser-native@3.6.1: + resolution: {integrity: sha512-3O+ktsrJoE8YQCho9L41YXO8EWILXrSeES7amUaV3mgIV5w4S3SB/r4RkmylpqRpQF7Ry8LFiAnMqH1wa4WBPA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/querystring-parser': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + url: 0.11.4 + dev: false + + /@aws-sdk/url-parser@3.186.0: + resolution: {integrity: sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA==} + dependencies: + '@aws-sdk/querystring-parser': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/url-parser@3.6.1: + resolution: {integrity: sha512-pWFIePDx0PMCleQRsQDWoDl17YiijOLj0ZobN39rQt+wv5PhLSZDz9PgJsqS48nZ6hqsKgipRcjiBMhn5NtFcQ==} + dependencies: + '@aws-sdk/querystring-parser': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-arn-parser@3.6.1: + resolution: {integrity: sha512-NFdYeuhaSrgnBG6Pt3zHNU7QwvhHq6sKUTWZShUayLMJYYbQr6IjmYVlPST4c84b+lyDoK68y/Zga621VfIdBg==} + engines: {node: '>= 10.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-base64-browser@3.186.0: + resolution: {integrity: sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ==} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-base64-browser@3.6.1: + resolution: {integrity: sha512-+DHAIgt0AFARDVC7J0Z9FkSmJhBMlkYdOPeAAgO0WaQoKj7rtsLQJ7P3v3aS1paKN5/sk5xNY7ziVB6uHtOvHA==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-base64-node@3.186.0: + resolution: {integrity: sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/util-buffer-from': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-base64-node@3.6.1: + resolution: {integrity: sha512-oiqzpsvtTSS92+cL3ykhGd7t3qBJKeHvrgOwUyEf1wFWHQ2DPJR+dIMy5rMFRXWLKCl3w7IddY2rJCkLYMjaqQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/util-buffer-from': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-body-length-browser@3.186.0: + resolution: {integrity: sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw==} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-body-length-browser@3.6.1: + resolution: {integrity: sha512-IdWwE3rm/CFDk2F+IwTZOFTnnNW5SB8y1lWiQ54cfc7y03hO6jmXNnpZGZ5goHhT+vf1oheNQt1J47m0pM/Irw==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-body-length-node@3.186.0: + resolution: {integrity: sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ==} + engines: {node: '>= 12.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-body-length-node@3.6.1: + resolution: {integrity: sha512-CUG3gc18bSOsqViQhB3M4AlLpAWV47RE6yWJ6rLD0J6/rSuzbwbjzxM39q0YTAVuSo/ivdbij+G9c3QCirC+QQ==} + engines: {node: '>= 10.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-buffer-from@3.186.0: + resolution: {integrity: sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-buffer-from@3.6.1: + resolution: {integrity: sha512-OGUh2B5NY4h7iRabqeZ+EgsrzE1LUmNFzMyhoZv0tO4NExyfQjxIYXLQQvydeOq9DJUbCw+yrRZrj8vXNDQG+g==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/is-array-buffer': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-config-provider@3.186.0: + resolution: {integrity: sha512-71Qwu/PN02XsRLApyxG0EUy/NxWh/CXxtl2C7qY14t+KTiRapwbDkdJ1cMsqYqghYP4BwJoj1M+EFMQSSlkZQQ==} + engines: {node: '>= 12.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-create-request@3.6.1: + resolution: {integrity: sha512-jR1U8WpwXl+xZ9ThS42Jr5MXuegQ7QioHsZjQn3V5pbm8CXTkBF0B2BcULQu/2G1XtHOJb8qUZQlk/REoaORfQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/middleware-stack': 3.6.1 + '@aws-sdk/smithy-client': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-defaults-mode-browser@3.186.0: + resolution: {integrity: sha512-U8GOfIdQ0dZ7RRVpPynGteAHx4URtEh+JfWHHVfS6xLPthPHWTbyRhkQX++K/F8Jk+T5U8Anrrqlea4TlcO2DA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/types': 3.186.0 + bowser: 2.11.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-defaults-mode-node@3.186.0: + resolution: {integrity: sha512-N6O5bpwCiE4z8y7SPHd7KYlszmNOYREa+mMgtOIXRU3VXSEHVKVWTZsHKvNTTHpW0qMqtgIvjvXCo3vsch5l3A==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/config-resolver': 3.186.0 + '@aws-sdk/credential-provider-imds': 3.186.0 + '@aws-sdk/node-config-provider': 3.186.0 + '@aws-sdk/property-provider': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-format-url@3.6.1: + resolution: {integrity: sha512-FvhcXcqLyJ0j0WdlmGs7PtjCCv8NaY4zBuXYO2iwAmqoy2SIZXQL63uAvmilqWj25q47ASAsUwSFLReCCfMklQ==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/querystring-builder': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-hex-encoding@3.186.0: + resolution: {integrity: sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg==} + engines: {node: '>= 12.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-hex-encoding@3.6.1: + resolution: {integrity: sha512-pzsGOHtU2eGca4NJgFg94lLaeXDOg8pcS9sVt4f9LmtUGbrqRveeyBv0XlkHeZW2n0IZBssPHipVYQFlk7iaRA==} + engines: {node: '>= 10.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-locate-window@3.723.0: + resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-middleware@3.186.0: + resolution: {integrity: sha512-fddwDgXtnHyL9mEZ4s1tBBsKnVQHqTUmFbZKUUKPrg9CxOh0Y/zZxEa5Olg/8dS/LzM1tvg0ATkcyd4/kEHIhg==} + engines: {node: '>= 12.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-uri-escape@3.186.0: + resolution: {integrity: sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ==} + engines: {node: '>= 12.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-uri-escape@3.6.1: + resolution: {integrity: sha512-tgABiT71r0ScRJZ1pMX0xO0QPMMiISCtumph50IU5VDyZWYgeIxqkMhIcrL1lX0QbNCMgX0n6rZxGrrbjDNavA==} + engines: {node: '>= 10.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-user-agent-browser@3.186.0: + resolution: {integrity: sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ==} + dependencies: + '@aws-sdk/types': 3.186.0 + bowser: 2.11.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-user-agent-browser@3.6.1: + resolution: {integrity: sha512-KhJ4VED4QpuBVPXoTjb5LqspX1xHWJTuL8hbPrKfxj+cAaRRW2CNEe7PPy2CfuHtPzP3dU3urtGTachbwNb0jg==} + dependencies: + '@aws-sdk/types': 3.6.1 + bowser: 2.11.0 + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-user-agent-node@3.186.0: + resolution: {integrity: sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w==} + engines: {node: '>= 12.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + '@aws-sdk/node-config-provider': 3.186.0 + '@aws-sdk/types': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-user-agent-node@3.6.1: + resolution: {integrity: sha512-PWwL5EDRwhkXX40m5jjgttlBmLA7vDhHBen1Jcle0RPIDFRVPSE7GgvLF3y4r3SNH0WD6hxqadT50bHQynXW6w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/node-config-provider': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-utf8-browser@1.0.0-rc.8: + resolution: {integrity: sha512-clncPMJ23rxCIkZ9LoUC8SowwZGxWyN2TwRb0XvW/Cv9EavkRgRCOrCpneGyC326lqtMKx36onnpaSRHxErUYw==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-utf8-browser@3.186.0: + resolution: {integrity: sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ==} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-utf8-browser@3.6.1: + resolution: {integrity: sha512-gZPySY6JU5gswnw3nGOEHl3tYE7vPKvtXGYoS2NRabfDKRejFvu+4/nNW6SSpoOxk6LSXsrWB39NO51k+G4PVA==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-utf8-node@3.186.0: + resolution: {integrity: sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA==} + engines: {node: '>= 12.0.0'} + dependencies: + '@aws-sdk/util-buffer-from': 3.186.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-utf8-node@3.6.1: + resolution: {integrity: sha512-4s0vYfMUn74XLn13rUUhNsmuPMh0j1d4rF58wXtjlVUU78THxonnN8mbCLC48fI3fKDHTmDDkeEqy7+IWP9VyA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/util-buffer-from': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/util-waiter@3.6.1: + resolution: {integrity: sha512-CQMRteoxW1XZSzPBVrTsOTnfzsEGs8N/xZ8BuBnXLBjoIQmRKVxIH9lgphm1ohCtVHoSWf28XH/KoOPFULQ4Tg==} + engines: {node: '>= 10.0.0'} + dependencies: + '@aws-sdk/abort-controller': 3.6.1 + '@aws-sdk/types': 3.6.1 + tslib: 1.14.1 + dev: false + + /@aws-sdk/xml-builder@3.6.1: + resolution: {integrity: sha512-+HOCH4a0XO+I09okd0xdVP5Q5c9ZsEsDvnogiOcBQxoMivWhPUCo9pjXP3buCvVKP2oDHXQplBKSjGHvGaKFdg==} + engines: {node: '>= 10.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /@babel/code-frame@7.26.2: + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + /@babel/compat-data@7.26.5: + resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} + engines: {node: '>=6.9.0'} + + /@babel/core@7.26.7: + resolution: {integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helpers': 7.26.7 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/generator@7.26.5: + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + /@babel/helper-annotate-as-pure@7.25.9: + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.26.7 + + /@babel/helper-compilation-targets@7.26.5: + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + /@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.7): + resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 6.3.1 + dev: false + + /@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.7): + resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + debug: 4.4.0 + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-member-expression-to-functions@7.25.9: + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + /@babel/helper-module-imports@7.25.9: + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7): + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + /@babel/helper-optimise-call-expression@7.25.9: + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.26.7 + + /@babel/helper-plugin-utils@7.26.5: + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + /@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-replace-supers@7.26.5(@babel/core@7.26.7): + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + /@babel/helper-skip-transparent-expression-wrappers@7.25.9: + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + /@babel/helper-string-parser@7.25.9: + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.25.9: + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.25.9: + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-wrap-function@7.25.9: + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helpers@7.26.7: + resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + + /@babel/parser@7.26.7: + resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.26.7 + + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.7) + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.7): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-export-default-from@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.26.7): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/core': 7.26.7 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.7): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + dev: false + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.7): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.7): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.7): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-export-default-from@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-9MhJ/SMTsVqsd69GyQg89lYR4o9T+oDGv5F6IsigxxqFVOyR/IflDLYP8WDI1l8fkhNGGktqkvL5qwNCtGEpgQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7): + resolution: {integrity: sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.7): + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.7): + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.7): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.7): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.7): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.7): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.7): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.7): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.7) + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.7) + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.7): + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.7): + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) + '@babel/traverse': 7.26.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.25.9 + + /@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.7): + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-flow-strip-types@7.26.5(@babel/core@7.26.7): + resolution: {integrity: sha512-eGK26RsbIkYUns3Y8qKl362juDDYK+wEdPGHGrhzUl6CewZFo55VZ7hg+CyMFU4dd5QQakBN86nBMpRsFpRvbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.7) + + /@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.7): + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.7): + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) + dev: false + + /@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + regenerator-transform: 0.15.2 + dev: false + + /@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.7): + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.7) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + /@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.7): + resolution: {integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-typescript@7.26.7(@babel/core@7.26.7): + resolution: {integrity: sha512-5cJurntg+AT+cgelGP9Bt788DKiAw9gIMSMU2NJrLAilnj0m8WZWUNZPSLOmadYsujHutpgElO+50foX+ib/Wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + dev: false + + /@babel/preset-env@7.26.7(@babel/core@7.26.7): + resolution: {integrity: sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/core': 7.26.7 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.7) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.7) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.7) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.7) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.7) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.7) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.7) + core-js-compat: 3.40.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/preset-flow@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.7) + dev: false + + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.7): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.26.7 + esutils: 2.0.3 + dev: false + + /@babel/preset-typescript@7.26.0(@babel/core@7.26.7): + resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-typescript': 7.26.7(@babel/core@7.26.7) + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/register@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + dev: false + + /@babel/runtime@7.26.7: + resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + + /@babel/template@7.25.9: + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + + /@babel/traverse@7.26.7: + resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/types@7.26.7: + resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + /@colony/abis@1.8.3(typescript@5.7.3): + resolution: {integrity: sha512-jszQfcHxTVEG4cGjyoXGtGfk9A2SnNvM9KHBunSaYdDTgN23SNmOd/LVRWd+QkRRPSEb8H78YRY4Y+vKtEeLKA==} + engines: {node: ^18 || ^20 || ^22, npm: ^10} + dependencies: + abitype: 1.0.8(typescript@5.7.3)(zod@3.24.1) + lodash: 4.17.21 + transitivePeerDependencies: + - typescript + - zod + + /@colony/colony-js@8.1.0(ethers@5.7.2)(typescript@5.7.3): + resolution: {integrity: sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==} + engines: {node: ^18 || ^20 || ^22, pnpm: ^10} + peerDependencies: + ethers: ^5.1.3 + dependencies: + '@colony/core': 3.1.0(ethers@5.7.2) + '@colony/events': 4.1.0(ethers@5.7.2)(typescript@5.7.3) + '@colony/tokens': 1.1.0(ethers@5.7.2) + ethers: 5.7.2 + transitivePeerDependencies: + - typescript + dev: false + + /@colony/core@3.1.0(ethers@5.7.2): + resolution: {integrity: sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==} + engines: {node: ^18 || ^20 || ^22, pnpm: ^10} + peerDependencies: + ethers: ^5.1.3 + dependencies: + ethers: 5.7.2 + + /@colony/events@4.1.0(ethers@5.7.2)(typescript@5.7.3): + resolution: {integrity: sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==} + engines: {node: ^18 || ^20 || ^22, pnpm: ^10} + peerDependencies: + ethers: ^5.1.3 + dependencies: + '@colony/core': 3.1.0(ethers@5.7.2) + ethers: 5.7.2 + fetch-retry: 5.0.6 + typia: 3.8.9(typescript@5.7.3) + transitivePeerDependencies: + - typescript + dev: false + + /@colony/tokens@1.1.0(ethers@5.7.2): + resolution: {integrity: sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==} + engines: {node: ^18 || ^20 || ^22, pnpm: ^10} + peerDependencies: + ethers: ^5.1.3 + dependencies: + ethers: 5.7.2 + dev: false + + /@colony/wagmi-plugin@0.1.1(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typescript@5.7.3): + resolution: {integrity: sha512-/7WmopPaSyLZPt47/S/scH4qx5GANmV41h1UVRWFzPCc8henDUcUu+F+9SCMErd0pZLlWfLnjhmrWzwvU8rNtA==} + engines: {node: ^18 || ^20 || ^22, pnpm: ^8} + dependencies: + '@colony/abis': 1.8.3(typescript@5.7.3) + '@colony/core': 3.1.0(ethers@5.7.2) + '@typechain/ethers-v5': 11.1.2(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typechain@8.3.0)(typescript@5.7.3) + '@typechain/ethers-v6': 0.4.3(ethers@5.7.2)(typechain@8.3.0)(typescript@5.7.3) + '@types/mkdirp': 1.0.2 + '@types/yargs': 17.0.33 + abitype: 1.0.8(typescript@5.7.3)(zod@3.24.1) + cross-fetch: 4.1.0 + mkdirp: 1.0.4 + rimraf: 5.0.10 + typechain: 8.3.0(typescript@5.7.3) + yargs: 17.7.2 + transitivePeerDependencies: + - '@ethersproject/abi' + - '@ethersproject/providers' + - encoding + - ethers + - supports-color + - typescript + - zod + dev: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@eslint-community/eslint-utils@4.4.1(eslint@8.57.1): + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.12.1: + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.57.1: + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@ethersproject/abi@5.7.0: + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + /@ethersproject/abstract-provider@5.7.0: + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + + /@ethersproject/abstract-signer@5.7.0: + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + + /@ethersproject/address@5.7.0: + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + /@ethersproject/base64@5.7.0: + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + + /@ethersproject/basex@5.7.0: + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + + /@ethersproject/bignumber@5.7.0: + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + /@ethersproject/bytes@5.7.0: + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + dependencies: + '@ethersproject/logger': 5.7.0 + + /@ethersproject/constants@5.7.0: + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + + /@ethersproject/contracts@5.7.0: + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + + /@ethersproject/hash@5.7.0: + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + /@ethersproject/hdnode@5.7.0: + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + /@ethersproject/json-wallets@5.7.0: + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + /@ethersproject/keccak256@5.7.0: + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + /@ethersproject/logger@5.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + /@ethersproject/networks@5.7.1: + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + dependencies: + '@ethersproject/logger': 5.7.0 + + /@ethersproject/pbkdf2@5.7.0: + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + + /@ethersproject/properties@5.7.0: + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + dependencies: + '@ethersproject/logger': 5.7.0 + + /@ethersproject/providers@5.7.2: + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + /@ethersproject/random@5.7.0: + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + /@ethersproject/rlp@5.7.0: + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + /@ethersproject/sha2@5.7.0: + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + + /@ethersproject/signing-key@5.7.0: + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + + /@ethersproject/solidity@5.7.0: + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + + /@ethersproject/strings@5.7.0: + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + /@ethersproject/transactions@5.7.0: + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + + /@ethersproject/units@5.7.0: + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + /@ethersproject/wallet@5.7.0: + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + /@ethersproject/web@5.7.1: + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + /@ethersproject/wordlists@5.7.0: + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + /@graphql-codegen/cli@3.3.1(@babel/core@7.26.7)(@types/node@18.19.75)(graphql@16.10.0): + resolution: {integrity: sha512-4Es8Y9zFeT0Zx2qRL7L3qXDbbqvXK6aID+8v8lP6gaYD+uWx3Jd4Hsq5vxwVBR+6flm0BW/C85Qm0cvmT7O6LA==} + hasBin: true + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@babel/generator': 7.26.5 + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + '@graphql-codegen/core': 3.1.0(graphql@16.10.0) + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.10.0) + '@graphql-tools/apollo-engine-loader': 7.3.26(graphql@16.10.0) + '@graphql-tools/code-file-loader': 7.3.23(@babel/core@7.26.7)(graphql@16.10.0) + '@graphql-tools/git-loader': 7.3.0(@babel/core@7.26.7)(graphql@16.10.0) + '@graphql-tools/github-loader': 7.3.28(@babel/core@7.26.7)(@types/node@18.19.75)(graphql@16.10.0) + '@graphql-tools/graphql-file-loader': 7.5.17(graphql@16.10.0) + '@graphql-tools/json-file-loader': 7.4.18(graphql@16.10.0) + '@graphql-tools/load': 7.8.14(graphql@16.10.0) + '@graphql-tools/prisma-loader': 7.2.72(@types/node@18.19.75)(graphql@16.10.0) + '@graphql-tools/url-loader': 7.17.18(@types/node@18.19.75)(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + '@parcel/watcher': 2.5.1 + '@whatwg-node/fetch': 0.8.8 + chalk: 4.1.2 + cosmiconfig: 7.1.0 + debounce: 1.2.1 + detect-indent: 6.1.0 + graphql: 16.10.0 + graphql-config: 4.5.0(@types/node@18.19.75)(graphql@16.10.0) + inquirer: 8.2.6 + is-glob: 4.0.3 + jiti: 1.21.7 + json-to-pretty-yaml: 1.2.2 + listr2: 4.0.5 + log-symbols: 4.1.0 + micromatch: 4.0.8 + shell-quote: 1.8.2 + string-env-interpolation: 1.0.1 + ts-log: 2.2.7 + tslib: 2.8.1 + yaml: 1.10.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@babel/core' + - '@types/node' + - bufferutil + - cosmiconfig-toml-loader + - encoding + - enquirer + - supports-color + - utf-8-validate + dev: true + + /@graphql-codegen/core@3.1.0(graphql@16.10.0): + resolution: {integrity: sha512-DH1/yaR7oJE6/B+c6ZF2Tbdh7LixF1K8L+8BoSubjNyQ8pNwR4a70mvc1sv6H7qgp6y1bPQ9tKE+aazRRshysw==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.10.0) + '@graphql-tools/schema': 9.0.19(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.5.3 + dev: true + + /@graphql-codegen/plugin-helpers@4.2.0(graphql@16.10.0): + resolution: {integrity: sha512-THFTCfg+46PXlXobYJ/OoCX6pzjI+9woQqCjdyKtgoI0tn3Xq2HUUCiidndxUpEYVrXb5pRiRXb7b/ZbMQqD0A==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + change-case-all: 1.0.15 + common-tags: 1.8.2 + graphql: 16.10.0 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.5.3 + dev: true + + /@graphql-codegen/schema-ast@3.0.1(graphql@16.10.0): + resolution: {integrity: sha512-rTKTi4XiW4QFZnrEqetpiYEWVsOFNoiR/v3rY9mFSttXFbIwNXPme32EspTiGWmEEdHY8UuTDtZN3vEcs/31zw==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.5.3 + dev: true + + /@graphql-codegen/typescript-document-nodes@3.0.4(graphql@16.10.0): + resolution: {integrity: sha512-+LntOUPohD1aJxM/+rIE5oRbzSOm8Kq6TzxstReSCJ52QiVgu/bs5JDz8XEEUbUe1/RVymNfBAgMcj/FwVpLEA==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.10.0) + '@graphql-codegen/visitor-plugin-common': 3.1.1(graphql@16.10.0) + auto-bind: 4.0.0 + graphql: 16.10.0 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/typescript-operations@3.0.4(graphql@16.10.0): + resolution: {integrity: sha512-6yE2OL2+WJ1vd5MwFEGXpaxsFGzjAGUytPVHDML3Bi3TwP1F3lnQlIko4untwvHW0JhZEGQ7Ck30H9HjcxpdKA==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.10.0) + '@graphql-codegen/typescript': 3.0.4(graphql@16.10.0) + '@graphql-codegen/visitor-plugin-common': 3.1.1(graphql@16.10.0) + auto-bind: 4.0.0 + graphql: 16.10.0 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/typescript@3.0.4(graphql@16.10.0): + resolution: {integrity: sha512-x4O47447DZrWNtE/l5CU9QzzW4m1RbmCEdijlA3s2flG/y1Ckqdemob4CWfilSm5/tZ3w1junVDY616RDTSvZw==} + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.10.0) + '@graphql-codegen/schema-ast': 3.0.1(graphql@16.10.0) + '@graphql-codegen/visitor-plugin-common': 3.1.1(graphql@16.10.0) + auto-bind: 4.0.0 + graphql: 16.10.0 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/visitor-plugin-common@3.1.1(graphql@16.10.0): + resolution: {integrity: sha512-uAfp+zu/009R3HUAuTK2AamR1bxIltM6rrYYI6EXSmkM3rFtFsLTuJhjUDj98HcUCszJZrADppz8KKLGRUVlNg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.10.0) + '@graphql-tools/optimize': 1.4.0(graphql@16.10.0) + '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + dependency-graph: 0.11.0 + graphql: 16.10.0 + graphql-tag: 2.12.6(graphql@16.10.0) + parse-filepath: 1.0.2 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-tools/apollo-engine-loader@7.3.26(graphql@16.10.0): + resolution: {integrity: sha512-h1vfhdJFjnCYn9b5EY1Z91JTF0KB3hHVJNQIsiUV2mpQXZdeOXQoaWeYEKaiI5R6kwBw5PP9B0fv3jfUIG8LyQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + '@whatwg-node/fetch': 0.8.8 + graphql: 16.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + dev: true + + /@graphql-tools/batch-execute@8.5.22(graphql@16.10.0): + resolution: {integrity: sha512-hcV1JaY6NJQFQEwCKrYhpfLK8frSXDbtNMoTur98u10Cmecy1zrqNKSqhEyGetpgHxaJRqszGzKeI3RuroDN6A==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + dataloader: 2.2.3 + graphql: 16.10.0 + tslib: 2.8.1 + value-or-promise: 1.0.12 + dev: true + + /@graphql-tools/code-file-loader@7.3.23(@babel/core@7.26.7)(graphql@16.10.0): + resolution: {integrity: sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.26.7)(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + globby: 11.1.0 + graphql: 16.10.0 + tslib: 2.8.1 + unixify: 1.0.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@graphql-tools/delegate@9.0.35(graphql@16.10.0): + resolution: {integrity: sha512-jwPu8NJbzRRMqi4Vp/5QX1vIUeUPpWmlQpOkXQD2r1X45YsVceyUUBnktCrlJlDB4jPRVy7JQGwmYo3KFiOBMA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/batch-execute': 8.5.22(graphql@16.10.0) + '@graphql-tools/executor': 0.0.20(graphql@16.10.0) + '@graphql-tools/schema': 9.0.19(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + dataloader: 2.2.3 + graphql: 16.10.0 + tslib: 2.8.1 + value-or-promise: 1.0.12 + dev: true + + /@graphql-tools/executor-graphql-ws@0.0.14(graphql@16.10.0): + resolution: {integrity: sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + '@repeaterjs/repeater': 3.0.4 + '@types/ws': 8.5.14 + graphql: 16.10.0 + graphql-ws: 5.12.1(graphql@16.10.0) + isomorphic-ws: 5.0.0(ws@8.13.0) + tslib: 2.8.1 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@graphql-tools/executor-http@0.1.10(@types/node@18.19.75)(graphql@16.10.0): + resolution: {integrity: sha512-hnAfbKv0/lb9s31LhWzawQ5hghBfHS+gYWtqxME6Rl0Aufq9GltiiLBcl7OVVOnkLF0KhwgbYP1mB5VKmgTGpg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/fetch': 0.8.8 + dset: 3.1.4 + extract-files: 11.0.0 + graphql: 16.10.0 + meros: 1.3.0(@types/node@18.19.75) + tslib: 2.8.1 + value-or-promise: 1.0.12 + transitivePeerDependencies: + - '@types/node' + dev: true + + /@graphql-tools/executor-legacy-ws@0.0.11(graphql@16.10.0): + resolution: {integrity: sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + '@types/ws': 8.5.14 + graphql: 16.10.0 + isomorphic-ws: 5.0.0(ws@8.13.0) + tslib: 2.8.1 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@graphql-tools/executor@0.0.20(graphql@16.10.0): + resolution: {integrity: sha512-GdvNc4vszmfeGvUqlcaH1FjBoguvMYzxAfT6tDd4/LgwymepHhinqLNA5otqwVLW+JETcDaK7xGENzFomuE6TA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) + '@repeaterjs/repeater': 3.0.6 + graphql: 16.10.0 + tslib: 2.8.1 + value-or-promise: 1.0.12 + dev: true + + /@graphql-tools/git-loader@7.3.0(@babel/core@7.26.7)(graphql@16.10.0): + resolution: {integrity: sha512-gcGAK+u16eHkwsMYqqghZbmDquh8QaO24Scsxq+cVR+vx1ekRlsEiXvu+yXVDbZdcJ6PBIbeLcQbEu+xhDLmvQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.26.7)(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + graphql: 16.10.0 + is-glob: 4.0.3 + micromatch: 4.0.8 + tslib: 2.8.1 + unixify: 1.0.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@graphql-tools/github-loader@7.3.28(@babel/core@7.26.7)(@types/node@18.19.75)(graphql@16.10.0): + resolution: {integrity: sha512-OK92Lf9pmxPQvjUNv05b3tnVhw0JRfPqOf15jZjyQ8BfdEUrJoP32b4dRQQem/wyRL24KY4wOfArJNqzpsbwCA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/executor-http': 0.1.10(@types/node@18.19.75)(graphql@16.10.0) + '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.26.7)(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + '@whatwg-node/fetch': 0.8.8 + graphql: 16.10.0 + tslib: 2.8.1 + value-or-promise: 1.0.12 + transitivePeerDependencies: + - '@babel/core' + - '@types/node' + - encoding + - supports-color + dev: true + + /@graphql-tools/graphql-file-loader@7.5.17(graphql@16.10.0): + resolution: {integrity: sha512-hVwwxPf41zOYgm4gdaZILCYnKB9Zap7Ys9OhY1hbwuAuC4MMNY9GpUjoTU3CQc3zUiPoYStyRtUGkHSJZ3HxBw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/import': 6.7.18(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + globby: 11.1.0 + graphql: 16.10.0 + tslib: 2.8.1 + unixify: 1.0.0 + dev: true + + /@graphql-tools/graphql-tag-pluck@7.5.2(@babel/core@7.26.7)(graphql@16.10.0): + resolution: {integrity: sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@babel/parser': 7.26.7 + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.7) + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@graphql-tools/import@6.7.18(graphql@16.10.0): + resolution: {integrity: sha512-XQDdyZTp+FYmT7as3xRWH/x8dx0QZA2WZqfMF5EWb36a0PiH7WwlRQYIdyYXj8YCLpiWkeBXgBRHmMnwEYR8iQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + graphql: 16.10.0 + resolve-from: 5.0.0 + tslib: 2.8.1 + dev: true + + /@graphql-tools/json-file-loader@7.4.18(graphql@16.10.0): + resolution: {integrity: sha512-AJ1b6Y1wiVgkwsxT5dELXhIVUPs/u3VZ8/0/oOtpcoyO/vAeM5rOvvWegzicOOnQw8G45fgBRMkkRfeuwVt6+w==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + globby: 11.1.0 + graphql: 16.10.0 + tslib: 2.8.1 + unixify: 1.0.0 + dev: true + + /@graphql-tools/load@7.8.14(graphql@16.10.0): + resolution: {integrity: sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/schema': 9.0.19(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + graphql: 16.10.0 + p-limit: 3.1.0 + tslib: 2.8.1 + dev: true + + /@graphql-tools/merge@8.4.2(graphql@16.10.0): + resolution: {integrity: sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 + dev: true + + /@graphql-tools/optimize@1.4.0(graphql@16.10.0): + resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.10.0 + tslib: 2.5.3 + dev: true + + /@graphql-tools/prisma-loader@7.2.72(@types/node@18.19.75)(graphql@16.10.0): + resolution: {integrity: sha512-0a7uV7Fky6yDqd0tI9+XMuvgIo6GAqiVzzzFV4OSLry4AwiQlI3igYseBV7ZVOGhedOTqj/URxjpiv07hRcwag==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/url-loader': 7.17.18(@types/node@18.19.75)(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + '@types/js-yaml': 4.0.9 + '@types/json-stable-stringify': 1.2.0 + '@whatwg-node/fetch': 0.8.8 + chalk: 4.1.2 + debug: 4.4.0 + dotenv: 16.4.7 + graphql: 16.10.0 + graphql-request: 6.1.0(graphql@16.10.0) + http-proxy-agent: 6.1.1 + https-proxy-agent: 6.2.1 + jose: 4.15.9 + js-yaml: 4.1.0 + json-stable-stringify: 1.2.1 + lodash: 4.17.21 + scuid: 1.1.0 + tslib: 2.8.1 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.10.0): + resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/relay-compiler': 12.0.0(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-tools/schema@9.0.19(graphql@16.10.0): + resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/merge': 8.4.2(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 + value-or-promise: 1.0.12 + dev: true + + /@graphql-tools/url-loader@7.17.18(@types/node@18.19.75)(graphql@16.10.0): + resolution: {integrity: sha512-ear0CiyTj04jCVAxi7TvgbnGDIN2HgqzXzwsfcqiVg9cvjT40NcMlZ2P1lZDgqMkZ9oyLTV8Bw6j+SyG6A+xPw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/delegate': 9.0.35(graphql@16.10.0) + '@graphql-tools/executor-graphql-ws': 0.0.14(graphql@16.10.0) + '@graphql-tools/executor-http': 0.1.10(@types/node@18.19.75)(graphql@16.10.0) + '@graphql-tools/executor-legacy-ws': 0.0.11(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + '@graphql-tools/wrap': 9.4.2(graphql@16.10.0) + '@types/ws': 8.5.14 + '@whatwg-node/fetch': 0.8.8 + graphql: 16.10.0 + isomorphic-ws: 5.0.0(ws@8.18.0) + tslib: 2.8.1 + value-or-promise: 1.0.12 + ws: 8.18.0 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: true + + /@graphql-tools/utils@9.2.1(graphql@16.10.0): + resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 + dev: true + + /@graphql-tools/wrap@9.4.2(graphql@16.10.0): + resolution: {integrity: sha512-DFcd9r51lmcEKn0JW43CWkkI2D6T9XI1juW/Yo86i04v43O9w2/k4/nx2XTJv4Yv+iXwUw7Ok81PGltwGJSDSA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/delegate': 9.0.35(graphql@16.10.0) + '@graphql-tools/schema': 9.0.19(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 + value-or-promise: 1.0.12 + dev: true + + /@graphql-typed-document-node/core@3.2.0(graphql@16.10.0): + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.10.0 + dev: true + + /@humanwhocodes/config-array@0.13.0: + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + + /@isaacs/ttlcache@1.4.1: + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} + dev: false + + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: false + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: false + + /@jest/create-cache-key-function@29.7.0: + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + dev: false + + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.75 + jest-mock: 29.7.0 + dev: false + + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 18.19.75 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: false + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: false + + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.26.7 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 18.19.75 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + dev: false + + /@jridgewell/gen-mapping@0.3.8: + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + dev: false + + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true + + /@magicbell/core@5.1.0(react@18.3.1): + resolution: {integrity: sha512-XtSykCHqSRnG6r/w0LP6XVaVsc4ZLCZCbxC2wC8GGFMDt5GceCaKc73Egk1Ys3VqiRBvzX1Y+K32TtB+8SML9w==} + dependencies: + ably: 1.2.50(react@18.3.1) + axios: 0.28.1 + dayjs: 1.11.13 + dompurify: 3.2.4 + humps: 2.0.1 + lodash: 4.17.21 + lodash-es: 4.17.21 + mitt: 3.0.1 + pluralize: 8.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - bufferutil + - debug + - react + - react-dom + - utf-8-validate + dev: false + + /@noble/curves@1.8.1: + resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} + engines: {node: ^14.21.3 || >=16} + dependencies: + '@noble/hashes': 1.7.1 + dev: false + + /@noble/hashes@1.7.1: + resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} + engines: {node: ^14.21.3 || >=16} + dev: false + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.0 + dev: true + + /@parcel/watcher-android-arm64@2.5.1: + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-darwin-arm64@2.5.1: + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-darwin-x64@2.5.1: + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-freebsd-x64@2.5.1: + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-arm-glibc@2.5.1: + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-arm-musl@2.5.1: + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-arm64-glibc@2.5.1: + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-arm64-musl@2.5.1: + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-x64-glibc@2.5.1: + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-x64-musl@2.5.1: + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-win32-arm64@2.5.1: + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-win32-ia32@2.5.1: + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-win32-x64@2.5.1: + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher@2.5.1: + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + dev: true + + /@peculiar/asn1-schema@2.3.15: + resolution: {integrity: sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w==} + dependencies: + asn1js: 3.0.5 + pvtsutils: 1.3.6 + tslib: 2.8.1 + dev: true + + /@peculiar/json-schema@1.1.12: + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + dependencies: + tslib: 2.8.1 + dev: true + + /@peculiar/webcrypto@1.5.0: + resolution: {integrity: sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==} + engines: {node: '>=10.12.0'} + dependencies: + '@peculiar/asn1-schema': 2.3.15 + '@peculiar/json-schema': 1.1.12 + pvtsutils: 1.3.6 + tslib: 2.8.1 + webcrypto-core: 1.8.1 + dev: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + + /@react-native/assets-registry@0.77.0: + resolution: {integrity: sha512-Ms4tYYAMScgINAXIhE4riCFJPPL/yltughHS950l0VP5sm5glbimn9n7RFn9Tc8cipX74/ddbk19+ydK2iDMmA==} + engines: {node: '>=18'} + dev: false + + /@react-native/babel-plugin-codegen@0.77.0(@babel/preset-env@7.26.7): + resolution: {integrity: sha512-5TYPn1k+jdDOZJU4EVb1kZ0p9TCVICXK3uplRev5Gul57oWesAaiWGZOzfRS3lonWeuR4ij8v8PFfIHOaq0vmA==} + engines: {node: '>=18'} + dependencies: + '@babel/traverse': 7.26.7 + '@react-native/codegen': 0.77.0(@babel/preset-env@7.26.7) + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + dev: false + + /@react-native/babel-preset@0.77.0(@babel/core@7.26.7)(@babel/preset-env@7.26.7): + resolution: {integrity: sha512-Z4yxE66OvPyQ/iAlaETI1ptRLcDm7Tk6ZLqtCPuUX3AMg+JNgIA86979T4RSk486/JrBUBH5WZe2xjj7eEHXsA==} + engines: {node: '>=18'} + peerDependencies: + '@babel/core': '*' + dependencies: + '@babel/core': 7.26.7 + '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-export-default-from': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.7) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.7) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-typescript': 7.26.7(@babel/core@7.26.7) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.7) + '@babel/template': 7.25.9 + '@react-native/babel-plugin-codegen': 0.77.0(@babel/preset-env@7.26.7) + babel-plugin-syntax-hermes-parser: 0.25.1 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.7) + react-refresh: 0.14.2 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + dev: false + + /@react-native/codegen@0.77.0(@babel/preset-env@7.26.7): + resolution: {integrity: sha512-rE9lXx41ZjvE8cG7e62y/yGqzUpxnSvJ6me6axiX+aDewmI4ZrddvRGYyxCnawxy5dIBHSnrpZse3P87/4Lm7w==} + engines: {node: '>=18'} + peerDependencies: + '@babel/preset-env': ^7.1.6 + dependencies: + '@babel/parser': 7.26.7 + '@babel/preset-env': 7.26.7(@babel/core@7.26.7) + glob: 7.2.3 + hermes-parser: 0.25.1 + invariant: 2.2.4 + jscodeshift: 17.1.2(@babel/preset-env@7.26.7) + nullthrows: 1.1.1 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@react-native/community-cli-plugin@0.77.0(@babel/core@7.26.7)(@babel/preset-env@7.26.7): + resolution: {integrity: sha512-GRshwhCHhtupa3yyCbel14SlQligV8ffNYN5L1f8HCo2SeGPsBDNjhj2U+JTrMPnoqpwowPGvkCwyqwqYff4MQ==} + engines: {node: '>=18'} + peerDependencies: + '@react-native-community/cli-server-api': '*' + peerDependenciesMeta: + '@react-native-community/cli-server-api': + optional: true + dependencies: + '@react-native/dev-middleware': 0.77.0 + '@react-native/metro-babel-transformer': 0.77.0(@babel/core@7.26.7)(@babel/preset-env@7.26.7) + chalk: 4.1.2 + debug: 2.6.9 + invariant: 2.2.4 + metro: 0.81.1 + metro-config: 0.81.1 + metro-core: 0.81.1 + readline: 1.3.0 + semver: 7.7.1 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@react-native/debugger-frontend@0.77.0: + resolution: {integrity: sha512-glOvSEjCbVXw+KtfiOAmrq21FuLE1VsmBsyT7qud4KWbXP43aUEhzn70mWyFuiIdxnzVPKe2u8iWTQTdJksR1w==} + engines: {node: '>=18'} + dev: false + + /@react-native/dev-middleware@0.77.0: + resolution: {integrity: sha512-DAlEYujm43O+Dq98KP2XfLSX5c/TEGtt+JBDEIOQewk374uYY52HzRb1+Gj6tNaEj/b33no4GibtdxbO5zmPhg==} + engines: {node: '>=18'} + dependencies: + '@isaacs/ttlcache': 1.4.1 + '@react-native/debugger-frontend': 0.77.0 + chrome-launcher: 0.15.2 + chromium-edge-launcher: 0.2.0 + connect: 3.7.0 + debug: 2.6.9 + nullthrows: 1.1.1 + open: 7.4.2 + selfsigned: 2.4.1 + serve-static: 1.16.2 + ws: 6.2.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@react-native/gradle-plugin@0.77.0: + resolution: {integrity: sha512-rmfh93jzbndSq7kihYHUQ/EGHTP8CCd3GDCmg5SbxSOHAaAYx2HZ28ZG7AVcGUsWeXp+e/90zGIyfOzDRx0Zaw==} + engines: {node: '>=18'} + dev: false + + /@react-native/js-polyfills@0.77.0: + resolution: {integrity: sha512-kHFcMJVkGb3ptj3yg1soUsMHATqal4dh0QTGAbYihngJ6zy+TnP65J3GJq4UlwqFE9K1RZkeCmTwlmyPFHOGvA==} + engines: {node: '>=18'} + dev: false + + /@react-native/metro-babel-transformer@0.77.0(@babel/core@7.26.7)(@babel/preset-env@7.26.7): + resolution: {integrity: sha512-19GfvhBRKCU3UDWwCnDR4QjIzz3B2ZuwhnxMRwfAgPxz7QY9uKour9RGmBAVUk1Wxi/SP7dLEvWnmnuBO39e2A==} + engines: {node: '>=18'} + peerDependencies: + '@babel/core': '*' + dependencies: + '@babel/core': 7.26.7 + '@react-native/babel-preset': 0.77.0(@babel/core@7.26.7)(@babel/preset-env@7.26.7) + hermes-parser: 0.25.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + dev: false + + /@react-native/normalize-colors@0.77.0: + resolution: {integrity: sha512-qjmxW3xRZe4T0ZBEaXZNHtuUbRgyfybWijf1yUuQwjBt24tSapmIslwhCjpKidA0p93ssPcepquhY0ykH25mew==} + dev: false + + /@react-native/virtualized-lists@0.77.0(react-native@0.77.0)(react@18.3.1): + resolution: {integrity: sha512-ppPtEu9ISO9iuzpA2HBqrfmDpDAnGGduNDVaegadOzbMCPAB3tC9Blxdu9W68LyYlNQILIsP6/FYtLwf7kfNew==} + engines: {node: '>=18'} + peerDependencies: + '@types/react': ^18.2.6 + react: '*' + react-native: '*' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + invariant: 2.2.4 + nullthrows: 1.1.1 + react: 18.3.1 + react-native: 0.77.0(@babel/core@7.26.7)(@babel/preset-env@7.26.7)(react@18.3.1) + dev: false + + /@repeaterjs/repeater@3.0.4: + resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} + dev: true + + /@repeaterjs/repeater@3.0.6: + resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + dev: true + + /@rtsao/scc@1.1.0: + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + dev: true + + /@scure/base@1.2.4: + resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==} + dev: false + + /@scure/bip32@1.6.2: + resolution: {integrity: sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==} + dependencies: + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.4 + dev: false + + /@scure/bip39@1.5.4: + resolution: {integrity: sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==} + dependencies: + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.4 + dev: false + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: false + + /@sindresorhus/is@4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + dev: false + + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + dependencies: + type-detect: 4.0.8 + dev: false + + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + dependencies: + '@sinonjs/commons': 3.0.1 + dev: false + + /@szmarczak/http-timer@4.0.6: + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + dependencies: + defer-to-connect: 2.0.1 + dev: false + + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@turf/boolean-clockwise@6.5.0: + resolution: {integrity: sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==} + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + dev: false + + /@turf/helpers@6.5.0: + resolution: {integrity: sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==} + dev: false + + /@turf/invariant@6.5.0: + resolution: {integrity: sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==} + dependencies: + '@turf/helpers': 6.5.0 + dev: false + + /@typechain/ethers-v5@11.1.2(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typechain@8.3.0)(typescript@5.7.3): + resolution: {integrity: sha512-ID6pqWkao54EuUQa0P5RgjvfA3MYqxUQKpbGKERbsjBW5Ra7EIXvbMlPp2pcP5IAdUkyMCFYsP2SN5q7mPdLDQ==} + peerDependencies: + '@ethersproject/abi': ^5.0.0 + '@ethersproject/providers': ^5.0.0 + ethers: ^5.1.3 + typechain: ^8.3.2 + typescript: '>=4.3.0' + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/providers': 5.7.2 + ethers: 5.7.2 + lodash: 4.17.21 + ts-essentials: 7.0.3(typescript@5.7.3) + typechain: 8.3.0(typescript@5.7.3) + typescript: 5.7.3 + dev: true + + /@typechain/ethers-v6@0.4.3(ethers@5.7.2)(typechain@8.3.0)(typescript@5.7.3): + resolution: {integrity: sha512-TrxBsyb4ryhaY9keP6RzhFCviWYApcLCIRMPyWaKp2cZZrfaM3QBoxXTnw/eO4+DAY3l+8O0brNW0WgeQeOiDA==} + peerDependencies: + ethers: 6.x + typechain: ^8.3.1 + typescript: '>=4.7.0' + dependencies: + ethers: 5.7.2 + lodash: 4.17.21 + ts-essentials: 7.0.3(typescript@5.7.3) + typechain: 8.3.0(typescript@5.7.3) + typescript: 5.7.3 + dev: true + + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + dev: false + + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + dependencies: + '@babel/types': 7.26.7 + dev: false + + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + dependencies: + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + dev: false + + /@types/babel__traverse@7.20.6: + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + dependencies: + '@babel/types': 7.26.7 + dev: false + + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 18.19.75 + dev: true + + /@types/cacheable-request@6.0.3: + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 18.19.75 + '@types/responselike': 1.0.3 + dev: false + + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 18.19.75 + dev: true + + /@types/cookie@0.3.3: + resolution: {integrity: sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==} + dev: false + + /@types/express-serve-static-core@4.19.6: + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + dependencies: + '@types/node': 18.19.75 + '@types/qs': 6.9.18 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: true + + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.6 + '@types/qs': 6.9.18 + '@types/serve-static': 1.15.7 + dev: true + + /@types/fs-extra@9.0.13: + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + dependencies: + '@types/node': 18.19.75 + dev: true + + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + dependencies: + '@types/node': 18.19.75 + dev: false + + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + dev: false + + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: true + + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: false + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: false + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: false + + /@types/js-yaml@4.0.9: + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/json-stable-stringify@1.2.0: + resolution: {integrity: sha512-PEHY3ohqolHqAzDyB1+31tFaAMnoLN7x/JgdcGmNZ2uvtEJ6rlFCUYNQc0Xe754xxCYLNGZbLUGydSE6tS4S9A==} + deprecated: This is a stub types definition. json-stable-stringify provides its own type definitions, so you do not need this installed. + dependencies: + json-stable-stringify: 1.2.1 + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/keyv@3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 18.19.75 + dev: false + + /@types/lodash@4.17.15: + resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} + dev: true + + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: true + + /@types/mkdirp@1.0.2: + resolution: {integrity: sha512-o0K1tSO0Dx5X6xlU5F1D6625FawhC3dU3iqr25lluNv/+/QIVH8RLNEiVokgIZo+mz+87w/3Mkg/VvQS+J51fQ==} + dependencies: + '@types/node': 18.19.75 + dev: true + + /@types/node-forge@1.3.11: + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + dependencies: + '@types/node': 18.19.75 + dev: false + + /@types/node-persist@3.1.8: + resolution: {integrity: sha512-QLidg6/SadZYPrTKxtxL1A85XBoQlG40bhoMdhu6DH6+eNCMr2j+RGfFZ9I9+IY8W/PDwQonJ+iBWD62jZjMfg==} + dependencies: + '@types/node': 18.19.75 + dev: true + + /@types/node@18.19.75: + resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==} + dependencies: + undici-types: 5.26.5 + + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: true + + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + dev: true + + /@types/qs@6.9.18: + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + dev: true + + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: true + + /@types/responselike@1.0.3: + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + dependencies: + '@types/node': 18.19.75 + dev: false + + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true + + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 18.19.75 + dev: true + + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 18.19.75 + '@types/send': 0.17.4 + dev: true + + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: false + + /@types/strip-bom@3.0.0: + resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==} + dev: true + + /@types/strip-json-comments@0.0.30: + resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} + dev: true + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + requiresBuild: true + dev: false + optional: true + + /@types/ws@8.5.14: + resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} + dependencies: + '@types/node': 18.19.75 + dev: true + + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + dependencies: + '@types/yargs-parser': 21.0.3 + + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.7.3): + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.7.3) + debug: 4.4.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare-lite: 1.4.0 + semver: 7.7.1 + tsutils: 3.21.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) + debug: 4.4.0 + eslint: 8.57.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.7.3): + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.7.3) + debug: 4.4.0 + eslint: 8.57.1 + tsutils: 3.21.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.3): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.4.0 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.7.1 + tsutils: 3.21.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.7.3): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) + eslint: 8.57.1 + eslint-scope: 5.1.1 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.3.0: + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + dev: true + + /@wagmi/cli@2.2.0(typescript@5.7.3): + resolution: {integrity: sha512-24U9wgmeKjs+lbnswYcWjic6leuKV/JduK2T8hGXO1fxUWzcoZ3tDtb7KQq+DmgbnJm49uaa7iKcB4K7SxN4Ag==} + hasBin: true + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + abitype: 1.0.8(typescript@5.7.3)(zod@3.24.1) + bundle-require: 4.2.1(esbuild@0.19.12) + cac: 6.7.14 + change-case: 5.4.4 + chokidar: 4.0.1 + dedent: 0.7.0 + dotenv: 16.4.7 + dotenv-expand: 10.0.0 + esbuild: 0.19.12 + escalade: 3.2.0 + fdir: 6.4.3(picomatch@3.0.1) + nanospinner: 1.2.2 + pathe: 1.1.2 + picocolors: 1.1.1 + picomatch: 3.0.1 + prettier: 3.4.2 + typescript: 5.7.3 + viem: 2.22.21(typescript@5.7.3)(zod@3.24.1) + zod: 3.24.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@whatwg-node/events@0.0.3: + resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} + dev: true + + /@whatwg-node/fetch@0.8.8: + resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} + dependencies: + '@peculiar/webcrypto': 1.5.0 + '@whatwg-node/node-fetch': 0.3.6 + busboy: 1.6.0 + urlpattern-polyfill: 8.0.2 + web-streams-polyfill: 3.3.3 + dev: true + + /@whatwg-node/node-fetch@0.3.6: + resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} + dependencies: + '@whatwg-node/events': 0.0.3 + busboy: 1.6.0 + fast-querystring: 1.1.2 + fast-url-parser: 1.1.3 + tslib: 2.8.1 + dev: true + + /abitype@1.0.8(typescript@5.7.3)(zod@3.24.1): + resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.7.3 + zod: 3.24.1 + + /ably@1.2.50(react@18.3.1): + resolution: {integrity: sha512-9uC5lE7wFBR7nOJdltArHU1UDaBu6CTMbMuie+brUuH884fM1mQuFiMzZetxVacygyUG38dp5MFOyOPF9h0RsQ==} + engines: {node: '>=5.10.x'} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@ably/msgpack-js': 0.4.0 + got: 11.8.6 + react: 18.3.1 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /acorn-jsx@5.3.2(acorn@8.14.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.14.0 + dev: true + + /acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.14.0 + dev: true + + /acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + /aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + + /agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + dev: true + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /amazon-cognito-identity-js@5.2.14: + resolution: {integrity: sha512-9LMgLZfbypbbGTpARQ+QqglE09b1MWti11NXhcD/wPom0uhU/L90dfmUOpTwknz//eE6/dGYf004mJucWzrfxQ==} + dependencies: + buffer: 4.9.2 + crypto-js: 4.2.0 + fast-base64-decode: 1.0.0 + isomorphic-unfetch: 3.1.0 + js-cookie: 2.2.1 + transitivePeerDependencies: + - encoding + dev: false + + /anser@1.4.10: + resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} + dev: false + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + + /ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + dependencies: + type-fest: 1.4.0 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: false + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: false + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /array-back@3.1.0: + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} + dev: true + + /array-back@4.0.2: + resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} + engines: {node: '>=8'} + dev: true + + /array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + is-array-buffer: 3.0.5 + dev: true + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + is-string: 1.1.1 + dev: true + + /array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + dev: false + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + is-array-buffer: 3.0.5 + dev: true + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + /asn1js@3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.3 + tslib: 2.8.1 + dev: true + + /ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + dependencies: + tslib: 2.8.1 + dev: false + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + dev: true + + /async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + dev: false + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /auto-bind@4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + dev: true + + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true + + /aws-amplify@4.3.46(react-native@0.77.0): + resolution: {integrity: sha512-LygkBq+mrV+hFf3DCrVcyYNxFsiYwL0HLN89X1Eg+s3f7df6T2xpjh4JuaDJFbmodEdAlZNfdtRGLMk6ApnPcA==} + dependencies: + '@aws-amplify/analytics': 5.2.31(react-native@0.77.0) + '@aws-amplify/api': 4.0.64(react-native@0.77.0) + '@aws-amplify/auth': 4.6.17(react-native@0.77.0) + '@aws-amplify/cache': 4.0.66(react-native@0.77.0) + '@aws-amplify/core': 4.7.15(react-native@0.77.0) + '@aws-amplify/datastore': 3.14.7(react-native@0.77.0) + '@aws-amplify/geo': 1.3.27(react-native@0.77.0) + '@aws-amplify/interactions': 4.1.12(react-native@0.77.0) + '@aws-amplify/predictions': 4.0.64(react-native@0.77.0) + '@aws-amplify/pubsub': 4.5.14(react-native@0.77.0) + '@aws-amplify/storage': 4.5.17(react-native@0.77.0) + '@aws-amplify/ui': 2.0.7 + '@aws-amplify/xr': 3.0.64(react-native@0.77.0) + transitivePeerDependencies: + - aws-crt + - debug + - encoding + - react-native + dev: false + + /axios@0.26.0: + resolution: {integrity: sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==} + dependencies: + follow-redirects: 1.15.9 + transitivePeerDependencies: + - debug + dev: false + + /axios@0.28.1: + resolution: {integrity: sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==} + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + + /babel-jest@29.7.0(@babel/core@7.26.7): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.26.7 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.7) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + dev: false + + /babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.7): + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.26.5 + '@babel/core': 7.26.7 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.7): + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.7) + core-js-compat: 3.40.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.7): + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.7) + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-syntax-hermes-parser@0.25.1: + resolution: {integrity: sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==} + dependencies: + hermes-parser: 0.25.1 + dev: false + + /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: + resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + dev: true + + /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.26.7): + resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} + dependencies: + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.7) + transitivePeerDependencies: + - '@babel/core' + dev: false + + /babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.7): + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.7) + dev: false + + /babel-preset-fbjs@3.4.0(@babel/core@7.26.7): + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.7) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.26.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.7) + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.7) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.7) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.7) + babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.26.7): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) + dev: false + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base-64@1.0.0: + resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + dev: false + + /base64-js@1.0.2: + resolution: {integrity: sha512-ZXBDPMt/v/8fsIqn+Z5VwrhdR6jVka0bYobHdGia0Nxi7BJ9i/Uvml3AocHIBtIIBhZjBw5MR0aR4ROs/8+SNg==} + engines: {node: '>= 0.4'} + dev: false + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: true + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + /bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + /body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + 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.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /bops@1.0.1: + resolution: {integrity: sha512-qCMBuZKP36tELrrgXpAfM+gHzqa0nLsWZ+L37ncsb8txYlnAoxOPpVp+g7fK0sGkMXfA0wl8uQkESqw3v4HNag==} + dependencies: + base64-js: 1.0.2 + to-utf8: 0.0.1 + dev: false + + /bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + dev: false + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.1.1 + + /brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + /browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001697 + electron-to-chromium: 1.5.92 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + /buffer@4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + isarray: 1.0.0 + dev: false + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + /builtins@5.1.0: + resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} + dependencies: + semver: 7.7.1 + dev: true + + /bundle-require@4.2.1(esbuild@0.19.12): + resolution: {integrity: sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + dependencies: + esbuild: 0.19.12 + load-tsconfig: 0.2.5 + dev: false + + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: true + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: false + + /cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + dev: false + + /cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + dev: false + + /call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + /call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.7 + set-function-length: 1.2.2 + dev: true + + /call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + + /caller-callsite@2.0.0: + resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} + engines: {node: '>=4'} + dependencies: + callsites: 2.0.0 + dev: false + + /caller-path@2.0.0: + resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==} + engines: {node: '>=4'} + dependencies: + caller-callsite: 2.0.0 + dev: false + + /callsites@2.0.0: + resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} + engines: {node: '>=4'} + dev: false + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + dev: true + + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: false + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: false + + /caniuse-lite@1.0.30001697: + resolution: {integrity: sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ==} + + /capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + upper-case-first: 2.0.2 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /change-case-all@1.0.15: + resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + dependencies: + change-case: 4.1.2 + is-lower-case: 2.0.2 + is-upper-case: 2.0.2 + lower-case: 2.0.2 + lower-case-first: 2.0.2 + sponge-case: 1.0.1 + swap-case: 2.0.2 + title-case: 3.0.3 + upper-case: 2.0.2 + upper-case-first: 2.0.2 + dev: true + + /change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.8.1 + dev: true + + /change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + dev: false + + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + dependencies: + readdirp: 4.1.1 + dev: false + + /chrome-launcher@0.15.2: + resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} + engines: {node: '>=12.13.0'} + hasBin: true + dependencies: + '@types/node': 18.19.75 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + transitivePeerDependencies: + - supports-color + dev: false + + /chromium-edge-launcher@0.2.0: + resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==} + dependencies: + '@types/node': 18.19.75 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + mkdirp: 1.0.4 + rimraf: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: false + + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: false + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + /cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + dev: true + + /cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + dev: true + + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + /clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + dev: false + + /clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + dependencies: + mimic-response: 1.0.1 + dev: false + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /command-line-args@5.2.1: + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} + dependencies: + array-back: 3.1.0 + find-replace: 3.0.0 + lodash.camelcase: 4.3.0 + typical: 4.0.0 + dev: true + + /command-line-usage@6.1.3: + resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} + engines: {node: '>=8.0.0'} + dependencies: + array-back: 4.0.2 + chalk: 2.4.2 + table-layout: 1.0.2 + typical: 5.2.0 + dev: true + + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: false + + /commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + dev: true + + /commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + dev: false + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + dev: false + + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + upper-case: 2.0.2 + dev: true + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: false + + /cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + dev: false + + /core-js-compat@3.40.0: + resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} + dependencies: + browserslist: 4.24.4 + dev: false + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + + /cosmiconfig@5.2.1: + resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} + engines: {node: '>=4'} + dependencies: + import-fresh: 2.0.0 + is-directory: 0.3.1 + js-yaml: 3.14.1 + parse-json: 4.0.0 + dev: false + + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /cosmiconfig@8.0.0: + resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==} + engines: {node: '>=14'} + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + dev: true + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + + /cross-fetch@4.1.0: + resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + /cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + dev: false + + /data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + dev: true + + /data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + dev: true + + /data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + dev: true + + /dataloader@2.2.3: + resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} + dev: true + + /dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + dev: false + + /debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + dev: true + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: false + + /dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: false + + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + + /defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + dev: false + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + dev: true + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dompurify@3.2.4: + resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} + optionalDependencies: + '@types/trusted-types': 2.0.7 + dev: false + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + dev: true + + /dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + dev: false + + /dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + /drange@1.1.1: + resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==} + engines: {node: '>=4'} + dev: false + + /dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + dev: true + + /dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + /dynamic-dedupe@0.3.0: + resolution: {integrity: sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==} + dependencies: + xtend: 4.0.2 + dev: true + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /electron-to-chromium@1.5.92: + resolution: {integrity: sha512-BeHgmNobs05N1HMmMZ7YIuHfYBGlq/UmvlsTgg+fsbFs9xVMj+xJHFg19GN04+9Q+r8Xnh9LXqaYIyEWElnNgQ==} + + /elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.1 + brorand: 1.1.0 + hash.js: 1.1.7 + 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: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + dev: false + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: false + + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: false + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + + /error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + dev: false + + /es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 + dev: true + + /es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + /es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + + /es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.2 + dev: true + + /es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + dev: true + + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + dev: false + + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: false + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /eslint-config-prettier@8.10.0(eslint@8.57.1): + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.57.1 + dev: true + + /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint-plugin-import@2.31.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.6.0)(eslint@8.57.1)(typescript@5.7.3): + resolution: {integrity: sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==} + deprecated: Please use eslint-config-love, instead. + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: ^15.0.0 + eslint-plugin-promise: ^6.0.0 + typescript: '*' + dependencies: + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.3) + eslint: 8.57.1 + eslint-config-standard: 17.0.0(eslint-plugin-import@2.31.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.6.0)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1) + eslint-plugin-n: 15.7.0(eslint@8.57.1) + eslint-plugin-promise: 6.6.0(eslint@8.57.1) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-config-standard@17.0.0(eslint-plugin-import@2.31.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.6.0)(eslint@8.57.1): + resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} + peerDependencies: + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: ^15.0.0 + eslint-plugin-promise: ^6.0.0 + dependencies: + eslint: 8.57.1 + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1) + eslint-plugin-n: 15.7.0(eslint@8.57.1) + eslint-plugin-promise: 6.6.0(eslint@8.57.1) + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.3) + debug: 3.2.7 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-es@4.1.0(eslint@8.57.1): + resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + eslint: 8.57.1 + eslint-utils: 2.1.0 + regexpp: 3.2.0 + dev: true + + /eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1): + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@rtsao/scc': 1.1.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.3) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-n@15.7.0(eslint@8.57.1): + resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} + engines: {node: '>=12.22.0'} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + builtins: 5.1.0 + eslint: 8.57.1 + eslint-plugin-es: 4.1.0(eslint@8.57.1) + eslint-utils: 3.0.0(eslint@8.57.1) + ignore: 5.3.2 + is-core-module: 2.16.1 + minimatch: 3.1.2 + resolve: 1.22.10 + semver: 7.7.1 + dev: true + + /eslint-plugin-promise@6.6.0(eslint@8.57.1): + resolution: {integrity: sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + dependencies: + eslint: 8.57.1 + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /eslint-utils@3.0.0(eslint@8.57.1): + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + 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.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 3.4.3 + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /ethers@5.7.2: + resolution: {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 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + dev: false + + /express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + /extract-files@11.0.0: + resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} + engines: {node: ^12.20 || >= 14.13} + dev: true + + /fast-base64-decode@1.0.0: + resolution: {integrity: sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==} + dev: false + + /fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + dependencies: + fast-decode-uri-component: 1.0.1 + dev: true + + /fast-url-parser@1.1.3: + resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} + dependencies: + punycode: 1.4.1 + dev: true + + /fast-xml-parser@3.19.0: + resolution: {integrity: sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==} + hasBin: true + dev: false + + /fast-xml-parser@3.21.1: + resolution: {integrity: sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + + /fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + dependencies: + reusify: 1.0.4 + dev: true + + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + + /fbjs-css-vars@1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + dev: true + + /fbjs@3.0.5: + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + dependencies: + cross-fetch: 3.2.0 + fbjs-css-vars: 1.0.2 + loose-envify: 1.4.0 + object-assign: 4.1.1 + promise: 7.3.1 + setimmediate: 1.0.5 + ua-parser-js: 1.0.40 + transitivePeerDependencies: + - encoding + dev: true + + /fdir@6.4.3(picomatch@3.0.1): + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + dependencies: + picomatch: 3.0.1 + dev: false + + /fetch-retry@5.0.6: + resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} + dev: false + + /fflate@0.7.3: + resolution: {integrity: sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw==} + dev: false + + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + dev: false + + /find-replace@3.0.0: + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} + dependencies: + array-back: 3.1.0 + dev: true + + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: false + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + dev: true + + /flow-enums-runtime@0.0.6: + resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} + dev: false + + /flow-parser@0.259.1: + resolution: {integrity: sha512-xiXLmMH2Z7OmdE9Q+MjljUMr/rbemFqZIRxaeZieVScG4HzQrKKhNcCYZbWTGpoN7ZPi7z8ClQbeVPq6t5AszQ==} + engines: {node: '>=0.4.0'} + dev: false + + /follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-each@0.3.4: + resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + dev: true + + /foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + dev: true + + /form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + + /fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + /get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: false + + /get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.2 + dev: false + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + dev: true + + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + /got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + dev: false + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /graphql-config@4.5.0(@types/node@18.19.75)(graphql@16.10.0): + resolution: {integrity: sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + cosmiconfig-toml-loader: ^1.0.0 + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + cosmiconfig-toml-loader: + optional: true + dependencies: + '@graphql-tools/graphql-file-loader': 7.5.17(graphql@16.10.0) + '@graphql-tools/json-file-loader': 7.4.18(graphql@16.10.0) + '@graphql-tools/load': 7.8.14(graphql@16.10.0) + '@graphql-tools/merge': 8.4.2(graphql@16.10.0) + '@graphql-tools/url-loader': 7.17.18(@types/node@18.19.75)(graphql@16.10.0) + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + cosmiconfig: 8.0.0 + graphql: 16.10.0 + jiti: 1.17.1 + minimatch: 4.2.3 + string-env-interpolation: 1.0.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: true + + /graphql-request@6.1.0(graphql@16.10.0): + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) + cross-fetch: 3.2.0 + graphql: 16.10.0 + transitivePeerDependencies: + - encoding + dev: true + + /graphql-tag@2.12.6(graphql@16.10.0): + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 16.10.0 + tslib: 2.5.3 + dev: true + + /graphql-ws@5.12.1(graphql@16.10.0): + resolution: {integrity: sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg==} + engines: {node: '>=10'} + peerDependencies: + graphql: '>=0.11 <=16' + dependencies: + graphql: 16.10.0 + dev: true + + /graphql@15.8.0: + resolution: {integrity: sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==} + engines: {node: '>= 10.x'} + dev: false + + /graphql@16.10.0: + resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + /has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + dev: false + + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.1 + dev: true + + /has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 + dev: true + + /has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.1.0 + dev: true + + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + dependencies: + capital-case: 1.0.4 + tslib: 2.8.1 + dev: true + + /hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + dev: false + + /hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + dependencies: + hermes-estree: 0.25.1 + dev: false + + /hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: false + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /http-proxy-agent@6.1.1: + resolution: {integrity: sha512-JRCz+4Whs6yrrIoIlrH+ZTmhrRwtMnmOHsHn8GFEn9O2sVfSE+DAZ3oyyGIKF8tjJEeSJmP89j7aTjVsSqsU0g==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: false + + /https-proxy-agent@6.2.1: + resolution: {integrity: sha512-ONsE3+yfZF2caH5+bJlcddtWqNI3Gvs5A38+ngvljxaBiRXRswym2c7yf8UAeFpRFKjFNHIFEHqR/OLAWJzyiA==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /humps@2.0.1: + resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==} + dev: false + + /husky@8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + + /idb@5.0.6: + resolution: {integrity: sha512-/PFvOWPzRcEPmlDt5jEvzVZVs0wyd/EvGvkDIcbBpGuMMLQKrTPG0TxvE2UJtgZtCQCmOtM2QD7yQJBVEjKGOw==} + dev: false + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + dev: true + + /image-size@1.2.0: + resolution: {integrity: sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==} + engines: {node: '>=16.x'} + hasBin: true + dependencies: + queue: 6.0.2 + dev: false + + /immer@9.0.6: + resolution: {integrity: sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==} + dev: false + + /immutable@3.7.6: + resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} + engines: {node: '>=0.8.0'} + dev: true + + /import-fresh@2.0.0: + resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} + engines: {node: '>=4'} + dependencies: + caller-path: 2.0.0 + resolve-from: 3.0.0 + dev: false + + /import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-from@4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + + /internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + dev: true + + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + dev: true + + /is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + /is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + dependencies: + async-function: 1.0.0 + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + dev: true + + /is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + dependencies: + has-bigints: 1.1.0 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + dev: true + + /is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + + /is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-typed-array: 1.1.15 + dev: true + + /is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + dev: true + + /is-directory@0.3.1: + resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==} + engines: {node: '>=0.10.0'} + dev: false + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: false + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + + /is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + /is-lower-case@2.0.2: + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + dependencies: + tslib: 2.8.1 + dev: true + + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + + /is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + + /is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + dependencies: + is-unc-path: 1.0.0 + dev: true + + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + dev: true + + /is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + dev: true + + /is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + dev: true + + /is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.18 + dev: true + + /is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + dependencies: + unc-path-regex: 0.1.2 + dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + /is-upper-case@2.0.2: + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + dependencies: + tslib: 2.8.1 + dev: true + + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + dev: true + + /is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + dev: true + + /is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + dev: true + + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: false + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: false + + /isomorphic-unfetch@3.1.0: + resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} + dependencies: + node-fetch: 2.7.0 + unfetch: 4.2.0 + transitivePeerDependencies: + - encoding + dev: false + + /isomorphic-ws@5.0.0(ws@8.13.0): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: true + + /isomorphic-ws@5.0.0(ws@8.18.0): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.18.0 + dev: true + + /isows@1.0.6(ws@8.18.0): + resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.18.0 + dev: false + + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: false + + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.26.7 + '@babel/parser': 7.26.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.75 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: false + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: false + + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 18.19.75 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: false + + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.19.75 + jest-util: 29.7.0 + dev: false + + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: false + + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.19.75 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: false + + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + dev: false + + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@types/node': 18.19.75 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: false + + /jiti@1.17.1: + resolution: {integrity: sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw==} + hasBin: true + dev: true + + /jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + dev: true + + /jose@4.15.9: + resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} + dev: true + + /js-cookie@2.2.1: + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + dev: false + + /js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsc-android@250231.0.0: + resolution: {integrity: sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==} + dev: false + + /jsc-safe-url@0.2.4: + resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} + dev: false + + /jscodeshift@17.1.2(@babel/preset-env@7.26.7): + resolution: {integrity: sha512-uime4vFOiZ1o3ICT4Sm/AbItHEVw2oCxQ3a0egYVy3JMMOctxe07H3SKL1v175YqjMt27jn1N+3+Bj9SKDNgdQ==} + engines: {node: '>=16'} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.1.6 + peerDependenciesMeta: + '@babel/preset-env': + optional: true + dependencies: + '@babel/core': 7.26.7 + '@babel/parser': 7.26.7 + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.7) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.7) + '@babel/preset-env': 7.26.7(@babel/core@7.26.7) + '@babel/preset-flow': 7.25.9(@babel/core@7.26.7) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.7) + '@babel/register': 7.25.9(@babel/core@7.26.7) + flow-parser: 0.259.1 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + neo-async: 2.6.2 + picocolors: 1.1.1 + recast: 0.23.9 + tmp: 0.2.3 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: false + + /jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: false + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json-stable-stringify@1.2.1: + resolution: {integrity: sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + isarray: 2.0.5 + jsonify: 0.0.1 + object-keys: 1.1.1 + dev: true + + /json-to-pretty-yaml@1.2.2: + resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} + engines: {node: '>= 0.2.0'} + dependencies: + remedial: 1.0.8 + remove-trailing-spaces: 1.0.8 + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + /jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: false + + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: false + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lighthouse-logger@1.4.2: + resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + dependencies: + debug: 2.6.9 + marky: 1.2.5 + transitivePeerDependencies: + - supports-color + dev: false + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /lint-staged@13.3.0: + resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + dependencies: + chalk: 5.3.0 + commander: 11.0.0 + debug: 4.3.4 + execa: 7.2.0 + lilconfig: 2.1.0 + listr2: 6.6.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.1 + transitivePeerDependencies: + - enquirer + - supports-color + dev: true + + /listr2@4.0.5: + resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} + engines: {node: '>=12'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.20 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.4.1 + rxjs: 7.8.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + + /listr2@6.6.1: + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 5.0.1 + rfdc: 1.4.1 + wrap-ansi: 8.1.0 + dev: true + + /load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: false + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: false + + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: true + + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + dev: false + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + /log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + dev: true + + /log-update@5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.1.0 + wrap-ansi: 8.1.0 + dev: true + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + + /lower-case-first@2.0.2: + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + dependencies: + tslib: 2.8.1 + dev: true + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.8.1 + dev: true + + /lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + dev: false + + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + + /make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + dependencies: + pify: 4.0.1 + semver: 5.7.2 + dev: false + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: false + + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: false + + /marky@1.2.5: + resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} + dev: false + + /math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + + /memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + dev: false + + /merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + dev: false + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /meros@1.3.0(@types/node@18.19.75): + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 18.19.75 + dev: true + + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + + /metro-babel-transformer@0.81.1: + resolution: {integrity: sha512-JECKDrQaUnDmj0x/Q/c8c5YwsatVx38Lu+BfCwX9fR8bWipAzkvJocBpq5rOAJRDXRgDcPv2VO4Q4nFYrpYNQg==} + engines: {node: '>=18.18'} + dependencies: + '@babel/core': 7.26.7 + flow-enums-runtime: 0.0.6 + hermes-parser: 0.25.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-cache-key@0.81.1: + resolution: {integrity: sha512-5fDaHR1yTvpaQuwMAeEoZGsVyvjrkw9IFAS7WixSPvaNY5YfleqoJICPc6hbXFJjvwCCpwmIYFkjqzR/qJ6yqA==} + engines: {node: '>=18.18'} + dependencies: + flow-enums-runtime: 0.0.6 + dev: false + + /metro-cache@0.81.1: + resolution: {integrity: sha512-Uqcmn6sZ+Y0VJHM88VrG5xCvSeU7RnuvmjPmSOpEcyJJBe02QkfHL05MX2ZyGDTyZdbKCzaX0IijrTe4hN3F0Q==} + engines: {node: '>=18.18'} + dependencies: + exponential-backoff: 3.1.1 + flow-enums-runtime: 0.0.6 + metro-core: 0.81.1 + dev: false + + /metro-config@0.81.1: + resolution: {integrity: sha512-VAAJmxsKIZ+Fz5/z1LVgxa32gE6+2TvrDSSx45g85WoX4EtLmdBGP3DSlpQW3DqFUfNHJCGwMLGXpJnxifd08g==} + engines: {node: '>=18.18'} + dependencies: + connect: 3.7.0 + cosmiconfig: 5.2.1 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.81.1 + metro-cache: 0.81.1 + metro-core: 0.81.1 + metro-runtime: 0.81.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /metro-core@0.81.1: + resolution: {integrity: sha512-4d2/+02IYqOwJs4dmM0dC8hIZqTzgnx2nzN4GTCaXb3Dhtmi/SJ3v6744zZRnithhN4lxf8TTJSHnQV75M7SSA==} + engines: {node: '>=18.18'} + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.81.1 + dev: false + + /metro-file-map@0.81.1: + resolution: {integrity: sha512-aY72H2ujmRfFxcsbyh83JgqFF+uQ4HFN1VhV2FmcfQG4s1bGKf2Vbkk+vtZ1+EswcBwDZFbkpvAjN49oqwGzAA==} + engines: {node: '>=18.18'} + dependencies: + debug: 2.6.9 + fb-watchman: 2.0.2 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + nullthrows: 1.1.1 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-minify-terser@0.81.1: + resolution: {integrity: sha512-p/Qz3NNh1nebSqMlxlUALAnESo6heQrnvgHtAuxufRPtKvghnVDq9hGGex8H7z7YYLsqe42PWdt4JxTA3mgkvg==} + engines: {node: '>=18.18'} + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.37.0 + dev: false + + /metro-resolver@0.81.1: + resolution: {integrity: sha512-E61t6fxRoYRkl6Zo3iUfCKW4DYfum/bLjcejXBMt1y3I7LFkK84TCR/Rs9OAwsMCY/7GOPB4+CREYZOtCC7CNA==} + engines: {node: '>=18.18'} + dependencies: + flow-enums-runtime: 0.0.6 + dev: false + + /metro-runtime@0.81.1: + resolution: {integrity: sha512-pqu5j5d01rjF85V/K8SDDJ0NR3dRp6bE3z5bKVVb5O2Rx0nbR9KreUxYALQCRCcQHaYySqCg5fYbGKBHC295YQ==} + engines: {node: '>=18.18'} + dependencies: + '@babel/runtime': 7.26.7 + flow-enums-runtime: 0.0.6 + dev: false + + /metro-source-map@0.81.1: + resolution: {integrity: sha512-1i8ROpNNiga43F0ZixAXoFE/SS3RqcRDCCslpynb+ytym0VI7pkTH1woAN2HI9pczYtPrp3Nq0AjRpsuY35ieA==} + engines: {node: '>=18.18'} + dependencies: + '@babel/traverse': 7.26.7 + '@babel/traverse--for-generate-function-map': /@babel/traverse@7.26.7 + '@babel/types': 7.26.7 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.81.1 + nullthrows: 1.1.1 + ob1: 0.81.1 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-symbolicate@0.81.1: + resolution: {integrity: sha512-Lgk0qjEigtFtsM7C0miXITbcV47E1ZYIfB+m/hCraihiwRWkNUQEPCWvqZmwXKSwVE5mXA0EzQtghAvQSjZDxw==} + engines: {node: '>=18.18'} + hasBin: true + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.81.1 + nullthrows: 1.1.1 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-transform-plugins@0.81.1: + resolution: {integrity: sha512-7L1lI44/CyjIoBaORhY9fVkoNe8hrzgxjSCQ/lQlcfrV31cZb7u0RGOQrKmUX7Bw4FpejrB70ArQ7Mse9mk7+Q==} + engines: {node: '>=18.18'} + dependencies: + '@babel/core': 7.26.7 + '@babel/generator': 7.26.5 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-transform-worker@0.81.1: + resolution: {integrity: sha512-M+2hVT3rEy5K7PBmGDgQNq3Zx53TjScOcO/CieyLnCRFtBGWZiSJ2+bLAXXOKyKa/y3bI3i0owxtyxuPGDwbZg==} + engines: {node: '>=18.18'} + dependencies: + '@babel/core': 7.26.7 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 + flow-enums-runtime: 0.0.6 + metro: 0.81.1 + metro-babel-transformer: 0.81.1 + metro-cache: 0.81.1 + metro-cache-key: 0.81.1 + metro-minify-terser: 0.81.1 + metro-source-map: 0.81.1 + metro-transform-plugins: 0.81.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /metro@0.81.1: + resolution: {integrity: sha512-fqRu4fg8ONW7VfqWFMGgKAcOuMzyoQah2azv9Y3VyFXAmG+AoTU6YIFWqAADESCGVWuWEIvxTJhMf3jxU6jwjA==} + engines: {node: '>=18.18'} + hasBin: true + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/core': 7.26.7 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.7 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.7 + '@babel/types': 7.26.7 + accepts: 1.3.8 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 2.6.9 + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.25.1 + image-size: 1.2.0 + invariant: 2.2.4 + jest-worker: 29.7.0 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.81.1 + metro-cache: 0.81.1 + metro-cache-key: 0.81.1 + metro-config: 0.81.1 + metro-core: 0.81.1 + metro-file-map: 0.81.1 + metro-resolver: 0.81.1 + metro-runtime: 0.81.1 + metro-source-map: 0.81.1 + metro-symbolicate: 0.81.1 + metro-transform-plugins: 0.81.1 + metro-transform-worker: 0.81.1 + mime-types: 2.1.35 + nullthrows: 1.1.1 + serialize-error: 2.1.0 + source-map: 0.5.7 + throat: 5.0.0 + ws: 7.5.10 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + dev: true + + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: false + + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: false + + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + /minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch@4.2.3: + resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: false + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + /nanospinner@1.2.2: + resolution: {integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==} + dependencies: + picocolors: 1.1.1 + dev: false + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: false + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + dev: true + + /node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + dev: true + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: false + + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + /node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + /normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: 1.1.0 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: false + + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + + /ob1@0.81.1: + resolution: {integrity: sha512-1PEbvI+AFvOcgdNcO79FtDI1TUO8S3lhiKOyAiyWQF3sFDDKS+aw2/BZvGlArFnSmqckwOOB9chQuIX0/OahoQ==} + engines: {node: '>=18.18'} + dependencies: + flow-enums-runtime: 0.0.6 + dev: false + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + dev: true + + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + dev: true + + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + dev: true + + /object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + dev: true + + /on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + dev: true + + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + /own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.7 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + dev: true + + /ox@0.6.7(typescript@5.7.3)(zod@3.24.1): + resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8(typescript@5.7.3)(zod@3.24.1) + eventemitter3: 5.0.1 + typescript: 5.7.3 + transitivePeerDependencies: + - zod + dev: false + + /p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + dev: false + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + /package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + dev: true + + /paho-mqtt@1.1.0: + resolution: {integrity: sha512-KPbL9KAB0ASvhSDbOrZBaccXS+/s7/LIofbPyERww8hM5Ko71GUJQ6Nmg0BWqj8phAIT8zdf/Sd/RftHU9i2HA==} + dev: false + + /pako@2.0.4: + resolution: {integrity: sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==} + dev: false + + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + dependencies: + is-absolute: 1.0.0 + map-cache: 0.2.2 + path-root: 0.1.1 + dev: true + + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: false + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + dev: true + + /path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + dev: true + + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: false + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-root-regex@0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + dev: true + + /path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + dependencies: + path-root-regex: 0.1.2 + dev: true + + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + dev: true + + /path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + dev: false + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: false + + /picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /picomatch@3.0.1: + resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} + engines: {node: '>=10'} + dev: false + + /pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: false + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: false + + /pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + dependencies: + find-up: 3.0.0 + dev: false + + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: false + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} + hasBin: true + dev: false + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + dev: false + + /promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + dependencies: + asap: 2.0.6 + dev: true + + /promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: false + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: false + + /punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + dependencies: + tslib: 2.8.1 + dev: true + + /pvutils@1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + dev: true + + /qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.1.0 + dev: false + + /qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.1.0 + dev: false + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /queue@6.0.2: + resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + dependencies: + inherits: 2.0.4 + dev: false + + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: false + + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: false + + /randexp@0.5.3: + resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==} + engines: {node: '>=4'} + dependencies: + drange: 1.1.1 + ret: 0.2.2 + dev: false + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /react-devtools-core@6.1.0: + resolution: {integrity: sha512-sA8gF/pUhjoGAN3s1Ya43h+F4Q0z7cv9RgqbUfhP7bJI0MbqeshLYFb6hiHgZorovGr8AXqhLi22eQ7V3pru/Q==} + dependencies: + shell-quote: 1.8.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + dev: false + + /react-native-get-random-values@1.11.0(react-native@0.77.0): + resolution: {integrity: sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==} + peerDependencies: + react-native: '>=0.56' + dependencies: + fast-base64-decode: 1.0.0 + react-native: 0.77.0(@babel/core@7.26.7)(@babel/preset-env@7.26.7)(react@18.3.1) + dev: false + + /react-native@0.77.0(@babel/core@7.26.7)(@babel/preset-env@7.26.7)(react@18.3.1): + resolution: {integrity: sha512-oCgHLGHFIp6F5UbyHSedyUXrZg6/GPe727freGFvlT7BjPJ3K6yvvdlsp7OEXSAHz6Fe7BI2n5cpUyqmP9Zn+Q==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@types/react': ^18.2.6 + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native/assets-registry': 0.77.0 + '@react-native/codegen': 0.77.0(@babel/preset-env@7.26.7) + '@react-native/community-cli-plugin': 0.77.0(@babel/core@7.26.7)(@babel/preset-env@7.26.7) + '@react-native/gradle-plugin': 0.77.0 + '@react-native/js-polyfills': 0.77.0 + '@react-native/normalize-colors': 0.77.0 + '@react-native/virtualized-lists': 0.77.0(react-native@0.77.0)(react@18.3.1) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + babel-jest: 29.7.0(@babel/core@7.26.7) + babel-plugin-syntax-hermes-parser: 0.25.1 + base64-js: 1.5.1 + chalk: 4.1.2 + commander: 12.1.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.6 + glob: 7.2.3 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + jsc-android: 250231.0.0 + memoize-one: 5.2.1 + metro-runtime: 0.81.1 + metro-source-map: 0.81.1 + nullthrows: 1.1.1 + pretty-format: 29.7.0 + promise: 8.3.0 + react: 18.3.1 + react-devtools-core: 6.1.0 + react-refresh: 0.14.2 + regenerator-runtime: 0.13.11 + scheduler: 0.24.0-canary-efb381bbf-20230505 + semver: 7.7.1 + stacktrace-parser: 0.1.10 + whatwg-fetch: 3.6.20 + ws: 6.2.3 + yargs: 17.7.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - '@react-native-community/cli-server-api' + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + dev: false + + /react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /readdirp@4.1.1: + resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} + engines: {node: '>= 14.18.0'} + dev: false + + /readline@1.3.0: + resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} + dev: false + + /recast@0.23.9: + resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} + engines: {node: '>= 4'} + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + dev: false + + /reduce-flatten@2.0.0: + resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} + engines: {node: '>=6'} + dev: true + + /reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + dev: true + + /regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: false + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: false + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.26.7 + dev: false + + /regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + dev: true + + /regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + + /regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + dev: false + + /regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + dev: false + + /regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + dependencies: + jsesc: 3.0.2 + dev: false + + /relay-runtime@12.0.0: + resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + dependencies: + '@babel/runtime': 7.26.7 + fbjs: 3.0.5 + invariant: 2.2.4 + transitivePeerDependencies: + - encoding + dev: true + + /remedial@1.0.8: + resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} + dev: true + + /remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: true + + /remove-trailing-spaces@1.0.8: + resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} + dev: true + + /repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: false + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true + + /resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: false + + /resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + /resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + dependencies: + lowercase-keys: 2.0.0 + dev: false + + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /ret@0.2.2: + resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} + engines: {node: '>=4'} + dev: false + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + dev: true + + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + + /rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + dependencies: + glob: 10.4.5 + dev: true + + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.8.1 + + /safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + has-symbols: 1.1.0 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + /safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + dev: true + + /safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-regex: 1.2.1 + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + /scheduler@0.24.0-canary-efb381bbf-20230505: + resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + /scuid@1.1.0: + resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} + dev: true + + /selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + dependencies: + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + dev: false + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: false + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + /send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + upper-case-first: 2.0.2 + dev: true + + /serialize-error@2.1.0: + resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} + engines: {node: '>=0.10.0'} + dev: false + + /serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + dev: false + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true + + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.7 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + dev: true + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + + /set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + dev: true + + /setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + dev: false + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + + /side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + /side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + + /side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + /side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + /signedsource@1.0.0: + resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + /slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + dev: true + + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + dev: true + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + /sponge-case@1.0.1: + resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + dependencies: + tslib: 2.8.1 + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false + + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: false + + /stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: false + + /stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + dependencies: + type-fest: 0.7.1 + dev: false + + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: true + + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + dev: true + + /string-env-interpolation@1.0.1: + resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + dev: true + + /string-format@2.0.0: + resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + + /string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + dev: true + + /string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + dev: true + + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.1.0 + dev: true + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: false + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /swap-case@2.0.2: + resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + dependencies: + tslib: 2.8.1 + dev: true + + /table-layout@1.0.2: + resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} + engines: {node: '>=8.0.0'} + dependencies: + array-back: 4.0.2 + deep-extend: 0.6.0 + typical: 5.2.0 + wordwrapjs: 4.0.1 + dev: true + + /terser@5.37.0: + resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: false + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: false + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /throat@5.0.0: + resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + dev: false + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + /tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + dev: false + + /title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + dependencies: + tslib: 2.8.1 + dev: true + + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + + /tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + dev: false + + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /to-utf8@0.0.1: + resolution: {integrity: sha512-zks18/TWT1iHO3v0vFp5qLKOG27m67ycq/Y7a7cTiRuUNlc4gf3HGnkRgMv0NyhnfTamtkYBJl+YeD1/j07gBQ==} + dev: false + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + + /ts-command-line-args@2.5.1: + resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} + hasBin: true + dependencies: + chalk: 4.1.2 + command-line-args: 5.2.1 + command-line-usage: 6.1.3 + string-format: 2.0.0 + dev: true + + /ts-essentials@7.0.3(typescript@5.7.3): + resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} + peerDependencies: + typescript: '>=3.7.0' + dependencies: + typescript: 5.7.3 + dev: true + + /ts-log@2.2.7: + resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==} + dev: true + + /ts-node-dev@2.0.0(@types/node@18.19.75)(typescript@5.7.3): + resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} + engines: {node: '>=0.8.0'} + hasBin: true + peerDependencies: + node-notifier: '*' + typescript: '*' + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + chokidar: 3.6.0 + dynamic-dedupe: 0.3.0 + minimist: 1.2.8 + mkdirp: 1.0.4 + resolve: 1.22.10 + rimraf: 2.7.1 + source-map-support: 0.5.21 + tree-kill: 1.2.2 + ts-node: 10.9.2(@types/node@18.19.75)(typescript@5.7.3) + tsconfig: 7.0.0 + typescript: 5.7.3 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + dev: true + + /ts-node@10.9.2(@types/node@18.19.75)(typescript@5.7.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.19.75 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tsconfig@7.0.0: + resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} + dependencies: + '@types/strip-bom': 3.0.0 + '@types/strip-json-comments': 0.0.30 + strip-bom: 3.0.0 + strip-json-comments: 2.0.1 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + /tslib@2.5.3: + resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + dev: true + + /tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + /tsutils@3.21.0(typescript@5.7.3): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.7.3 + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: false + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + /type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + dev: false + + /type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: true + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /typechain@8.3.0(typescript@5.7.3): + resolution: {integrity: sha512-AxtAYyOA7f2p28/JkcqrF+gnzam94VNTIbXcaUKodkrKzMX6P/XqBaP6d/OPuBZOi0WgOOmkg1zOSojX8uGkOg==} + hasBin: true + peerDependencies: + typescript: '>=4.3.0' + dependencies: + '@types/prettier': 2.7.3 + debug: 4.4.0 + fs-extra: 7.0.1 + glob: 7.1.7 + js-sha3: 0.8.0 + lodash: 4.17.21 + mkdirp: 1.0.4 + prettier: 2.8.8 + ts-command-line-args: 2.5.1 + ts-essentials: 7.0.3(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + dev: true + + /typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + dev: true + + /typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + dev: true + + /typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.0.0 + reflect.getprototypeof: 1.0.10 + dev: true + + /typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + /typia@3.8.9(typescript@5.7.3): + resolution: {integrity: sha512-yvQ67nhtzme+rnEUZfSOIgxBOHYrrQ3WBU1J4SrAhI3ntBhSelYwGiJkeaCvqchzK6O1RoIs3kCBS4XHIlp2NA==} + hasBin: true + peerDependencies: + typescript: '>= 4.5.2' + dependencies: + commander: 10.0.1 + comment-json: 4.2.5 + inquirer: 8.2.6 + randexp: 0.5.3 + typescript: 5.7.3 + dev: false + + /typical@4.0.0: + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} + dev: true + + /typical@5.2.0: + resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} + engines: {node: '>=8'} + dev: true + + /ua-parser-js@1.0.40: + resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} + hasBin: true + dev: true + + /ulid@2.3.0: + resolution: {integrity: sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==} + hasBin: true + dev: false + + /unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + dev: true + + /unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + /unfetch@4.2.0: + resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} + dev: false + + /unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + dev: false + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + dev: false + + /unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + dev: false + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: false + + /universal-cookie@4.0.4: + resolution: {integrity: sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==} + dependencies: + '@types/cookie': 0.3.3 + cookie: 0.4.2 + dev: false + + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: false + + /unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + dependencies: + normalize-path: 2.1.1 + dev: true + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /update-browserslist-db@1.1.2(browserslist@4.24.4): + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + /upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + dependencies: + tslib: 2.8.1 + dev: true + + /upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + dependencies: + tslib: 2.8.1 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /url@0.11.4: + resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} + engines: {node: '>= 0.4'} + dependencies: + punycode: 1.4.1 + qs: 6.14.0 + dev: false + + /urlpattern-polyfill@8.0.2: + resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /uuid@3.3.2: + resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: false + + /uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: false + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /value-or-promise@1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + dev: true + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + + /viem@2.22.21(typescript@5.7.3)(zod@3.24.1): + resolution: {integrity: sha512-CujapStF+F3VP+bKBQOGFk5YHyJKZOY2TGvD1e04CAm8VrtLo3sfTydYW2Rri6LMktqp6ilGB9GvSiZczxvOBQ==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8(typescript@5.7.3)(zod@3.24.1) + isows: 1.0.6(ws@8.18.0) + ox: 0.6.7(typescript@5.7.3)(zod@3.24.1) + typescript: 5.7.3 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /vlq@1.0.1: + resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} + dev: false + + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: false + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + + /web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + dev: true + + /webcrypto-core@1.8.1: + resolution: {integrity: sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==} + dependencies: + '@peculiar/asn1-schema': 2.3.15 + '@peculiar/json-schema': 1.1.12 + asn1js: 3.0.5 + pvtsutils: 1.3.6 + tslib: 2.8.1 + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + /whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + /which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + dev: true + + /which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.18 + dev: true + + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + dev: true + + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: true + + /which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + for-each: 0.3.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /wordwrapjs@4.0.1: + resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} + engines: {node: '>=8.0.0'} + dependencies: + reduce-flatten: 2.0.0 + typical: 5.2.0 + dev: true + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: false + + /write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + dev: false + + /ws@6.2.3: + resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + async-limiter: 1.0.1 + dev: false + + /ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + /ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + /yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + dev: true + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + + /yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + dev: true + + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /zen-observable-ts@0.8.19: + resolution: {integrity: sha512-u1a2rpE13G+jSzrg3aiCqXU5tN2kw41b+cBZGmnc+30YimdkKiDj9bTowcB41eL77/17RF/h+393AuVgShyheQ==} + dependencies: + tslib: 1.14.1 + zen-observable: 0.8.15 + dev: false + + /zen-observable@0.7.1: + resolution: {integrity: sha512-OI6VMSe0yeqaouIXtedC+F55Sr6r9ppS7+wTbSexkYdHbdt4ctTuPNXP/rwm7GTVI63YBc+EBT0b0tl7YnJLRg==} + dev: false + + /zen-observable@0.8.15: + resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + dev: false + + /zen-push@0.2.1: + resolution: {integrity: sha512-Qv4qvc8ZIue51B/0zmeIMxpIGDVhz4GhJALBvnKs/FRa2T7jy4Ori9wFwaHVt0zWV7MIFglKAHbgnVxVTw7U1w==} + dependencies: + zen-observable: 0.7.1 + dev: false + + /zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..e9b0dad63 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - 'apps/*' + - 'packages/*' diff --git a/src/amplifyClient.ts b/src/amplifyClient.ts deleted file mode 100644 index 746717f90..000000000 --- a/src/amplifyClient.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Amplify, API, graphqlOperation } from 'aws-amplify'; -import { GraphQLQuery } from '@aws-amplify/api'; -import dotenv from 'dotenv'; -import { DocumentNode, isExecutableDefinitionNode } from 'graphql'; -import { verbose } from '~utils'; - -dotenv.config(); - -export default (): void => { - Amplify.configure({ - aws_appsync_graphqlEndpoint: `${process.env.AWS_APPSYNC_ENDPOINT}`, - aws_appsync_authenticationType: 'API_KEY', - aws_appsync_apiKey: process.env.AWS_APPSYNC_KEY, - }); -}; - -export type GraphQLFnReturn = Promise< - ReturnType>> | undefined ->; - -export const query = async >( - queryDocument: DocumentNode, - variables?: TVariables, -): GraphQLFnReturn => { - try { - const result = await API.graphql>( - graphqlOperation(queryDocument, variables), - ); - - return result; - } catch (error) { - const definitionNode = queryDocument.definitions[0]; - const queryName = isExecutableDefinitionNode(definitionNode) - ? definitionNode.name?.value - : 'Unknown'; - console.error(`Could not fetch query ${queryName}`, error); - return undefined; - } -}; - -export const mutate = async < - T, - TVariables extends Record = {}, ->( - mutationDocument: DocumentNode, - variables?: TVariables, -): GraphQLFnReturn => { - try { - const result = await API.graphql>( - graphqlOperation(mutationDocument, variables), - ); - - return result; - } catch (error: any) { - const definitionNode = mutationDocument.definitions[0]; - const mutationName = isExecutableDefinitionNode(definitionNode) - ? definitionNode.name?.value - : 'Unknown'; - - const errMsg = 'errors' in error ? error.errors : error; - verbose(`Could not execute mutation ${mutationName}. Error: `, errMsg); - return undefined; - } -}; diff --git a/src/blockListener.ts b/src/blockListener.ts deleted file mode 100644 index a3a2cd8ad..000000000 --- a/src/blockListener.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { output, getLastBlockNumber } from '~utils'; -import { Block, BlockWithTransactions, EthersObserverEvents } from '~types'; -import provider from '~provider'; -import { processNextBlock } from '~blockProcessor'; - -/** - * Map storing blocks that have been either picked up by the block listener - * or missed blocks tracking - * Blocks are removed once processed by a call to .delete in the blockProcessor - */ -export const blocksMap = new Map(); -let latestSeenBlockNumber = 0; - -export const getLatestSeenBlockNumber = (): number => latestSeenBlockNumber; -// export const blocksMap = new Map(); - -export const startBlockListener = (): void => { - provider.on(EthersObserverEvents.Block, async (blockNumber: number) => { - try { - // For now, we just track that this block exists. - latestSeenBlockNumber = Math.max(latestSeenBlockNumber, blockNumber); - - output(`Block ${blockNumber} added to the queue`); - - processNextBlock(); - } catch (error) { - throw new Error( - `Observed block ${blockNumber} but failed to get its data: ${error}`, - ); - } - }); - - output('Block listener started'); - - trackMissedBlocks(); -}; - -/** - * Function fetching all the blocks between the last processed block and the current block - * that happened when ingestor was not actively listening - */ -const trackMissedBlocks = async (): Promise => { - const lastBlockNumber = getLastBlockNumber(); - const currentBlockNumber = await provider.getBlockNumber(); - - if (lastBlockNumber >= currentBlockNumber) { - return; - } - - output( - `Will need to process blocks from block ${ - lastBlockNumber + 1 - } to ${currentBlockNumber}`, - ); - - latestSeenBlockNumber = Math.max(latestSeenBlockNumber, currentBlockNumber); - - processNextBlock(); -}; diff --git a/src/blockProcessor.ts b/src/blockProcessor.ts deleted file mode 100644 index 13fe6d73b..000000000 --- a/src/blockProcessor.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { Log } from '@ethersproject/abstract-provider'; -import { blocksMap, getLatestSeenBlockNumber } from '~blockListener'; -import { getMatchingListeners } from '~eventListeners'; -import { getInterfaceByListener } from '~interfaces'; -import provider from '~provider'; -import { - getLastBlockNumber, - mapLogToContractEvent, - output, - verbose, - setLastBlockNumber, -} from '~utils'; -import { BLOCK_PAGING_SIZE } from '~constants'; - -let isProcessing = false; -const blockLogs = new Map(); -let timeNow = Date.now(); -let timePrev = 0; - -export const processNextBlock = async (): Promise => { - if (isProcessing) { - return; - } - - // Only allow one instance of the function to run at any given time - isProcessing = true; - - let lastBlockNumber = getLastBlockNumber(); - - // Process as many blocks as are available sequentially - while (lastBlockNumber < getLatestSeenBlockNumber()) { - const currentBlockNumber = lastBlockNumber + 1; - if (currentBlockNumber % BLOCK_PAGING_SIZE === 0) { - if (timePrev > 0) { - timePrev = timeNow; - timeNow = Date.now(); - output( - `Time taken for last ${BLOCK_PAGING_SIZE} blocks: ${ - timeNow - timePrev - }ms`, - ); - output( - `Estimated time to sync: ${ - ((timeNow - timePrev) * - (getLatestSeenBlockNumber() - getLastBlockNumber())) / - 1000 - }ms`, - ); - output( - `Overall progress: ${currentBlockNumber} / ${getLatestSeenBlockNumber()}`, - ); - } else { - timePrev = timeNow; - } - } - - if (!blockLogs.get(currentBlockNumber)) { - // BLOCK_PAGING_SIZE - 1 thanks to fenceposts - const nMoreBlocks = Math.min( - getLatestSeenBlockNumber() - currentBlockNumber, - BLOCK_PAGING_SIZE - 1, - ); - - verbose( - 'Querying for logs', - currentBlockNumber, - 'to', - currentBlockNumber + nMoreBlocks, - ); - - const logs = await provider.getLogs({ - fromBlock: currentBlockNumber, - toBlock: currentBlockNumber + nMoreBlocks, - }); - - verbose( - `Fetched ${logs.length} logs`, - currentBlockNumber, - 'to', - currentBlockNumber + nMoreBlocks, - ); - - // initialize blockLogs - for ( - let i = currentBlockNumber; - i <= currentBlockNumber + nMoreBlocks; - i += 1 - ) { - blockLogs.set(i, []); - } - - let logIndex = 0; - let pushingBlock = 0; - let pushingLogs: Log[] = []; - - logs.forEach((log) => { - // As we push logs in to blockLogs, check they're in order - // (They should be...) - if (log.blockNumber !== pushingBlock) { - if (pushingBlock > log.blockNumber) { - output( - `Blocks (that logs from query are in) are not monotonically increasing`, - ); - process.exit(1); - } - blockLogs.set(pushingBlock, [...pushingLogs]); - pushingBlock = log.blockNumber; - pushingLogs = []; - logIndex = 0; - } - if (log.logIndex !== logIndex) { - output(`Logs are out of order for block ${log.blockNumber}`); - process.exit(1); - } - pushingLogs.push(log); - logIndex += 1; - }); - // Push the logs in the last block - blockLogs.set(pushingBlock, [...pushingLogs]); - } - - // Get logs contained in the current block - const logs = blockLogs.get(currentBlockNumber); - if (!logs) { - throw new Error( - `Could not find logs for block ${currentBlockNumber}, but should have been fetched`, - ); - } - - /* - * Logic needed to account for blocks that get emmited, but which don't have the logs indexed yet - * This happens in networks with very fast block times, like arbitrum (<=250ms block times) - * See: https://github.com/ethers-io/ethers.js/issues/3486 - * - * Basically, the change that @area implemented here is to try and detect if a block actually has - * logs, but which don't get retrived using the `getLogs` call. - * If that happens, it means the block was emitted, but the logs weren't indexed yet, at which point - * we just short-circuit and re-process the block. - * We do this enough times, until the logs are actually indexed. - */ - if (logs.length === 0) { - verbose('No logs seen in block', currentBlockNumber); - // Check whether block actually has no logs - let block = blocksMap.get(currentBlockNumber); - if ( - !block || - (block.transactions as string[]).every((tx) => typeof tx === 'string') - ) { - block = await provider.getBlockWithTransactions(currentBlockNumber); - // May as well save this block in the blocksMap in case it turns out we need it in mapLogToContractEvent - blocksMap.set(currentBlockNumber, block); - } - - let mustReindex = false; - for (const tx of block.transactions) { - if (typeof tx === 'string') { - throw Error('tx was a string, but should have been a TxResponse'); - } - const txReceipt = await provider.getTransactionReceipt(tx.hash); - if (txReceipt.logs.length > 0) { - verbose( - `Proved ${currentBlockNumber} has logs, but weren't given any, will reindex`, - ); - mustReindex = true; - // Then the block has events, and they've not been indexed yet. - // We exit out of this handler, and wait until they've been indexed. - // We remove the empty array from blockLogs to cause the getLogs call to be made again - blockLogs.delete(currentBlockNumber); - // Now we've proved we're missing events, don't need to look at any other transactions in - // this block. - break; - } - } - if (mustReindex) { - continue; - } - } - - for (const log of logs) { - // Find listeners that match the log - const listeners = getMatchingListeners(log.topics, log.address); - if (!listeners.length) { - continue; - } - - for (const listener of listeners) { - // In order to parse the log, we need an ethers interface - const iface = getInterfaceByListener(listener); - if (!iface) { - output( - `Failed to get an interface for a log with listener type ${listener.type}`, - ); - continue; - } - - const event = await mapLogToContractEvent(log, iface); - if (!event) { - output( - `Failed to map log describing event ${listener.eventSignature} in transaction ${log.transactionHash} `, - ); - continue; - } - - // Call the handler in a blocking way to ensure events get processed sequentially - await listener.handler(event, listener); - } - } - - verbose('processed block', currentBlockNumber); - - lastBlockNumber = currentBlockNumber; - setLastBlockNumber(currentBlockNumber); - blockLogs.delete(currentBlockNumber); - blocksMap.delete(currentBlockNumber); - } - - isProcessing = false; -}; diff --git a/src/eventListeners/eventListeners.ts b/src/eventListeners/eventListeners.ts deleted file mode 100644 index 807b9cbc5..000000000 --- a/src/eventListeners/eventListeners.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { verbose } from '~utils'; - -import { EventListener } from './types'; - -let listeners: EventListener[] = []; - -export const getEventListeners = (): EventListener[] => listeners; - -export const setEventListeners = (newListeners: EventListener[]): void => { - listeners = newListeners; -}; - -export const addEventListener = (listener: EventListener): void => { - verbose( - `Added listener for event ${listener.eventSignature}`, - listener.address ? `filtering address ${listener.address}` : '', - ); - listeners.push(listener); -}; - -export const getMatchingListeners = ( - logTopics: string[], - logAddress: string, -): EventListener[] => { - return listeners.filter((listener) => { - if (listener.address && logAddress !== listener.address) { - return false; - } - - if (listener.topics.length > logTopics.length) { - return false; - } - - return listener.topics.every((topic, index) => { - if (topic === null) { - // if listener topic is null, skip the check - return true; - } - - return topic.toLowerCase() === logTopics[index].toLowerCase(); - }); - }); -}; - -export const getListenersStats = (): string => JSON.stringify(listeners); diff --git a/src/eventListeners/types.ts b/src/eventListeners/types.ts deleted file mode 100644 index b42416fe2..000000000 --- a/src/eventListeners/types.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { ContractEventsSignatures, EventHandler } from '~types'; - -export interface BaseEventListener { - type: EventListenerType; - eventSignature: ContractEventsSignatures; - topics: Array; - handler: EventHandler; - address?: string; -} - -export enum EventListenerType { - Colony = 'Colony', - Network = 'Network', - Extension = 'Extension', - Token = 'Token', - MultisigPermissions = 'MultisigPermissions', -} - -export interface ColonyEventListener extends BaseEventListener { - type: EventListenerType.Colony; - address: string; -} - -export interface NetworkEventListener extends BaseEventListener { - type: EventListenerType.Network; - address: string; -} - -// Special listener just for Token transfers -// Due to the volume of these events, we can't process them in the same way -// as the normal events -export interface TokenTransferEventListener extends BaseEventListener { - type: EventListenerType.Token; -} - -export interface TokenEventListener extends BaseEventListener { - type: EventListenerType.Token; - address: string; -} - -export interface ExtensionEventListener extends BaseEventListener { - type: EventListenerType.Extension; - address: string; - colonyAddress: string; - extensionHash: string; - handler: EventHandler; -} - -export type EventListener = - | ColonyEventListener - | NetworkEventListener - | TokenEventListener - | TokenTransferEventListener - | ExtensionEventListener; diff --git a/src/graphql/mutations/stats.graphql b/src/graphql/mutations/stats.graphql deleted file mode 100644 index f838e8c99..000000000 --- a/src/graphql/mutations/stats.graphql +++ /dev/null @@ -1,11 +0,0 @@ -mutation CreateStats($value: String!) { - createIngestorStats(input: { id: "STATS", value: $value }) { - id - } -} - -mutation UpdateStats($value: String!) { - updateIngestorStats(input: { id: "STATS", value: $value }) { - id - } -} diff --git a/src/graphql/queries/stats.graphql b/src/graphql/queries/stats.graphql deleted file mode 100644 index c38fcd271..000000000 --- a/src/graphql/queries/stats.graphql +++ /dev/null @@ -1,5 +0,0 @@ -query GetStats { - getIngestorStats(id: "STATS") { - value - } -} diff --git a/src/handlers/expenditures/expenditureMadeStaged.ts b/src/handlers/expenditures/expenditureMadeStaged.ts deleted file mode 100644 index 4d0e8f4e1..000000000 --- a/src/handlers/expenditures/expenditureMadeStaged.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { mutate } from '~amplifyClient'; -import { ExtensionEventListener } from '~eventListeners'; -import { - ExpenditureType, - UpdateExpenditureDocument, - UpdateExpenditureMutation, - UpdateExpenditureMutationVariables, -} from '~graphql'; -import { EventHandler } from '~types'; -import { getExpenditureDatabaseId, toNumber, verbose } from '~utils'; - -export const handleExpenditureMadeStaged: EventHandler = async ( - event, - listener, -) => { - const { expenditureId, staged } = event.args; - const convertedExpenditureId = toNumber(expenditureId); - const { colonyAddress } = listener as ExtensionEventListener; - - verbose( - `Expenditure with ID ${convertedExpenditureId} in colony ${colonyAddress} ${ - staged ? 'set' : 'unset' - } as staged`, - ); - - await mutate( - UpdateExpenditureDocument, - { - input: { - id: getExpenditureDatabaseId(colonyAddress, convertedExpenditureId), - type: ExpenditureType.Staged, - stagedExpenditureAddress: event.contractAddress, - }, - }, - ); -}; diff --git a/src/networkClient.ts b/src/networkClient.ts deleted file mode 100644 index 3ca81d1b6..000000000 --- a/src/networkClient.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Network, getColonyNetworkClient } from '@colony/colony-js'; -import dotenv from 'dotenv'; - -import provider from './provider'; - -dotenv.config(); - -export default getColonyNetworkClient( - (process.env.CHAIN_NETWORK as Network) || Network.Custom, - provider, - { - networkAddress: process.env.CHAIN_NETWORK_CONTRACT, - disableVersionCheck: true, - }, -); diff --git a/src/provider.ts b/src/provider.ts deleted file mode 100644 index 56e2b7b40..000000000 --- a/src/provider.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { providers } from 'ethers'; -import dotenv from 'dotenv'; - -import { ChainID } from './types'; - -dotenv.config(); - -let chainId: ChainID; - -export const setChainId = (newChainId: ChainID): void => { - chainId = newChainId; -}; -export const getChainId = (): ChainID => chainId; - -const provider = new providers.StaticJsonRpcProvider( - process.env.CHAIN_RPC_ENDPOINT, -); - -export const initialiseProvider = async (): Promise => { - const { chainId } = await provider.getNetwork(); - setChainId(String(chainId)); -}; - -export default provider; diff --git a/src/utils/stats.ts b/src/utils/stats.ts deleted file mode 100644 index fcf06dd65..000000000 --- a/src/utils/stats.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { mutate, query } from '~amplifyClient'; -import { - CreateStatsDocument, - CreateStatsMutation, - CreateStatsMutationVariables, - GetStatsDocument, - GetStatsQuery, - GetStatsQueryVariables, - UpdateStatsDocument, - UpdateStatsMutation, - UpdateStatsMutationVariables, -} from '~graphql'; - -import { output, verbose } from './logger'; - -let stats: Record = {}; - -type ObjectOrFunction = - | Record - | ((jsonFile: Record) => Record); - -/* - * Update stats with a given argument - * It accepts either a object fragment (or full object) that will get appended to the stats, - * or a callback (which receives the current stats) and needs to return the new object - * that will be written back - */ -export const updateStats = async ( - objectOrFunction: ObjectOrFunction, -): Promise => { - if (typeof objectOrFunction === 'function') { - stats = { - ...stats, - ...objectOrFunction(stats), - }; - } else { - stats = { - ...stats, - ...objectOrFunction, - }; - } - - await mutate( - UpdateStatsDocument, - { - value: JSON.stringify(stats), - }, - ); - - verbose('Stats file updated'); -}; - -// This exists as a function to prevent accidental overwriting of the `stats` variable -export const getStats = (): typeof stats => ({ ...stats }); - -export const getLastBlockNumber = (): number => { - if (Number.isInteger(stats.lastBlockNumber)) { - return Number(stats.lastBlockNumber); - } - /* - * @NOTE This prevents accidental database stats overwriting if the API / GraphQL - * endpoint is not accessible - * - * It will throw the block ingestor (the pod that it's running on) into an restart - * loop until the API is accessible again - */ - throw new Error('Could not get last block number from stats. Aborting.'); -}; - -export const setLastBlockNumber = (lastBlockNumber: number): void => { - updateStats({ lastBlockNumber }); -}; - -/** - * Function fetching the last stored stats from the DB - * If no stats entry is found, it will create one - */ -export const initStats = async (): Promise => { - const { value: jsonStats } = - (await query(GetStatsDocument, {})) - ?.data?.getIngestorStats ?? {}; - - if (!jsonStats) { - stats = { - lastBlockNumber: 0, - }; - - await mutate( - CreateStatsDocument, - { - value: JSON.stringify(stats), - }, - ); - } else { - try { - stats = JSON.parse(jsonStats); - } catch { - output( - 'Could not parse stats from the DB. The value is not a valid JSON.', - ); - } - } -}; diff --git a/tsconfig.json b/tsconfig.base.json similarity index 97% rename from tsconfig.json rename to tsconfig.base.json index f336a9636..d5a3a4281 100644 --- a/tsconfig.json +++ b/tsconfig.base.json @@ -28,10 +28,7 @@ "module": "commonjs" /* Specify what module code is generated. */, // "rootDir": "./", /* Specify the root folder within your source files. */ "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, - "baseUrl": "." /* Specify the base directory to resolve non-relative module names. */, - "paths": { - "~*": ["src/*"] - } /* Specify a set of entries that re-map imports to additional lookup locations. */, + "baseUrl": ".", /* Specify the base directory to resolve non-relative module names. */ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ // "types": [], /* Specify type package names to be included without being referenced in a source file. */ @@ -102,6 +99,5 @@ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, - "exclude": ["node_modules", "tsconfig.json"], - "include": ["src/**/*.ts"] + "exclude": ["node_modules", "tsconfig.json"] } diff --git a/wagmi.config.ts b/wagmi.config.ts index fb10b4f94..451d713bc 100644 --- a/wagmi.config.ts +++ b/wagmi.config.ts @@ -2,7 +2,7 @@ import { defineConfig } from '@wagmi/cli'; import colony from '@colony/wagmi-plugin'; export default defineConfig({ - out: 'src/constants/abis.ts', + out: 'packages/blocks/src/constants/abis.ts', contracts: [], plugins: [ colony({ @@ -33,6 +33,24 @@ export default defineConfig({ path: 'colony/Colony.sol/Colony.json', merge: 'functions', }, + { + name: 'ColonyFunding', + path: 'colony/ColonyFunding.sol/ColonyFunding.json', + }, + { + name: 'ColonyFunding', + path: 'colony/ColonyFunding.sol/ColonyFunding.json', + merge: 'events', + }, + { + name: 'ColonyFunding', + path: 'colony/ColonyFunding.sol/ColonyFunding.json', + merge: 'functions', + }, + { + name: 'ProxyColony', + path: 'bridging/ProxyColony.sol/ProxyColony.json', + }, ], }), ],