From b70832af743be0ad3f74fde7ec832d10e6da6dab Mon Sep 17 00:00:00 2001 From: Ludovic Levalleux Date: Mon, 7 Sep 2026 14:37:41 +0100 Subject: [PATCH 1/4] ci: replace Fleek deployment with Cloudflare Pages direct upload The committed workflows still deployed to Fleek, while the real deployments ran through Cloudflare Pages' Git integration - meaning build settings and ~30 REACT_APP_* values were maintained by hand across 7 dashboard configurations, invisible to code review. Build in GitHub Actions and upload with wrangler instead. Because every REACT_APP_* is inlined at build time, Cloudflare no longer needs to build anything, so its dashboard build settings and environment variables become irrelevant rather than merely duplicated. Configuration now comes from GitHub: values shared by all environments are repository variables/secrets, and the testing/staging/production Environments override only what differs. This removes the _TESTING/_STAGING/_PRODUCTION secret-name suffixes and with them the four near-identical blocks in ci.yaml. Deploy triggers: - preview: every PR, one deployment built with REACT_APP_VIEW_MODE=dapp,dr_center so a single upload serves both halves at #/dapp and #/dr_center - testing: push to main, gated on the CI checks - staging: publishing a release, building that tag - production: manual dispatch with a tag The deploy/staging and deploy/production branches are no longer used; they only ever existed to trigger Cloudflare's Git integration, and the release tag is now the deploy identity. They are deleted separately, once this flow is proven. Also: - add a preflight check for the three variables config.ts throws on at module load, which otherwise build green and serve a blank page - run prettier and eslint as non-mutating gates before the build, so they actually gate; the --fix/--write variants gated nothing - build each view mode as a parallel matrix job, replacing the sequential rebuild that overwrote build/ in place - collapse the three-way Node mismatch (CI 24, .nvmrc 20, volta 18.19.1) onto .nvmrc, and pin pnpm via packageManager Co-Authored-By: Claude Opus 5 --- .fleek.json | 9 - .fleek_dr_center_production.json | 9 - .fleek_dr_center_staging.json | 9 - .fleek_dr_center_testing.json | 9 - .fleek_production.json | 9 - .fleek_staging.json | 9 - .github/workflows/ci.yaml | 286 +-- .github/workflows/ci_reusable.yaml | 223 -- .github/workflows/deploy-preview.yaml | 43 + .github/workflows/deploy-production.yaml | 43 + .github/workflows/deploy-staging.yaml | 22 + .github/workflows/deploy-testing.yaml | 23 + .github/workflows/deploy_reusable.yaml | 239 +++ .github/workflows/fleek-deploy.yaml | 49 - .nvmrc | 2 +- README.md | 34 +- package.json | 8 +- pnpm-lock.yaml | 2376 ++-------------------- 18 files changed, 564 insertions(+), 2838 deletions(-) delete mode 100644 .fleek.json delete mode 100644 .fleek_dr_center_production.json delete mode 100644 .fleek_dr_center_staging.json delete mode 100644 .fleek_dr_center_testing.json delete mode 100644 .fleek_production.json delete mode 100644 .fleek_staging.json delete mode 100644 .github/workflows/ci_reusable.yaml create mode 100644 .github/workflows/deploy-preview.yaml create mode 100644 .github/workflows/deploy-production.yaml create mode 100644 .github/workflows/deploy-staging.yaml create mode 100644 .github/workflows/deploy-testing.yaml create mode 100644 .github/workflows/deploy_reusable.yaml delete mode 100644 .github/workflows/fleek-deploy.yaml diff --git a/.fleek.json b/.fleek.json deleted file mode 100644 index e36793f80..000000000 --- a/.fleek.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "sites": [ - { - "slug": "interface-test", - "distDir": "build", - "buildCommand": "pnpm build" - } - ] -} \ No newline at end of file diff --git a/.fleek_dr_center_production.json b/.fleek_dr_center_production.json deleted file mode 100644 index ae608706a..000000000 --- a/.fleek_dr_center_production.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "sites": [ - { - "slug": "drcenter-production", - "distDir": "build", - "buildCommand": "pnpm build" - } - ] -} \ No newline at end of file diff --git a/.fleek_dr_center_staging.json b/.fleek_dr_center_staging.json deleted file mode 100644 index 59879d692..000000000 --- a/.fleek_dr_center_staging.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "sites": [ - { - "slug": "drcenter-staging", - "distDir": "build", - "buildCommand": "pnpm build" - } - ] -} \ No newline at end of file diff --git a/.fleek_dr_center_testing.json b/.fleek_dr_center_testing.json deleted file mode 100644 index 03eab47a4..000000000 --- a/.fleek_dr_center_testing.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "sites": [ - { - "slug": "drcenter-test", - "distDir": "build", - "buildCommand": "pnpm build" - } - ] -} \ No newline at end of file diff --git a/.fleek_production.json b/.fleek_production.json deleted file mode 100644 index 1f184c774..000000000 --- a/.fleek_production.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "sites": [ - { - "slug": "dapp-interface-production", - "distDir": "build", - "buildCommand": "pnpm build" - } - ] -} \ No newline at end of file diff --git a/.fleek_staging.json b/.fleek_staging.json deleted file mode 100644 index aeff485d3..000000000 --- a/.fleek_staging.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "sites": [ - { - "slug": "interface-staging", - "distDir": "build", - "buildCommand": "pnpm build" - } - ] -} \ No newline at end of file diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9f1a4edaf..707a852c3 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,259 +1,51 @@ -name: Call reusable workflow - Interface +name: CI - Interface +# On pushes to main this is invoked by deploy-testing.yaml via workflow_call, so that +# the deploy is gated on it rather than racing it. on: - workflow_call: - secrets: - CODECOV_TOKEN: - required: true - push: - branches: - - main - release: - types: [created] pull_request: branches: - main - workflow_dispatch: - secrets: - CODECOV_TOKEN: - required: true + workflow_call: + +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: - prejob: - name: Get Latest Tag + checks: + name: Format, lint, types and build runs-on: ubuntu-22.04 - outputs: - releaseTag: ${{ steps.tag.outputs.tag }} - releaseName: ${{ steps.name.outputs.name }} + permissions: + contents: read + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + # The build only has to compile here, not run, so placeholders are enough for the + # three variables config.ts requires at module load. Real values are injected by + # deploy_reusable.yaml from the target environment. + REACT_APP_ENV_NAME: testing + REACT_APP_INFURA_KEY: ci-placeholder + REACT_APP_WIDGETS_URL: https://example.invalid steps: - - uses: actions/checkout@v3 - with: - ref: ${{ github.event.pull_request.head.ref }} - fetch-depth: 0 - - uses: "WyriHaximus/github-action-get-previous-tag@v1" - id: tag - - run: echo "name=$(git describe --tags)" >> $GITHUB_OUTPUT - id: name - - call-reusable-workflow-PR: - uses: ./.github/workflows/ci_reusable.yaml - if: github.event_name == 'pull_request' - needs: prejob - with: - REACT_APP_ENV_NAME: "testing" - DEPLOY_TO_FLEEK: false - IS_PREVIEW: true - ENV_NAME: "testing" - UPDATE_COVERAGE: false - REACT_APP_ENABLE_CURATION_LISTS: false - REACT_APP_IPFS_GATEWAY: "https://bosonprotocol.infura-ipfs.io/ipfs/" - REACT_APP_RELEASE_TAG: ${{ needs.prejob.outputs.releaseTag }} - REACT_APP_RELEASE_NAME: ${{ needs.prejob.outputs.releaseName }} - REACT_APP_DAPP_VIEW_MODE: "same_origin" - REACT_APP_DR_CENTER_VIEW_MODE: "same_origin" - REACT_APP_WIDGETS_URL: "https://boson-widgets-testing.pages.dev" - REACT_APP_UNISWAP_API_URL: "https://api.uniswap.org/v2" - REACT_APP_AWS_API_ENDPOINT: "https://api.uniswap.org/v1/graphql" - REACT_APP_MOONPAY_API: "https://api.moonpay.com" - REACT_APP_MOONPAY_LINK: "https://us-central1-uniswap-mobile.cloudfunctions.net/signMoonpayLinkV2?platform=web&env=staging" - REACT_APP_MOONPAY_EXTERNAL_LINK: "https://www.moonpay.com/buy" - REACT_APP_META_TX_API_KEY_MAP: ${{ vars.REACT_APP_META_TX_API_KEY_MAP_TESTING }} - REACT_APP_META_TX_API_IDS_MAP: ${{ vars.REACT_APP_META_TX_API_IDS_MAP_TESTING }} - REACT_APP_META_TX_RELAYER_URL: ${{ vars.REACT_APP_META_TX_RELAYER_URL_TESTING }} - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS: ${{ secrets.REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS_TESTING }} - REACT_APP_WALLET_CONNECT_PROJECT_ID: ${{ secrets.REACT_APP_WALLET_CONNECT_PROJECT_ID_TESTING }} - REACT_APP_INFURA_KEY: ${{ secrets.REACT_APP_INFURA_KEY_TESTING }} - REACT_APP_MOONPAY_API_KEY: ${{ secrets.REACT_APP_MOONPAY_API_KEY_TESTING }} - REACT_APP_MAGIC_API_KEY: ${{ secrets.REACT_APP_MAGIC_API_KEY_TESTING }} + - uses: actions/checkout@v4 - call-reusable-workflow-testing: - uses: ./.github/workflows/ci_reusable.yaml - if: github.event_name == 'push' - needs: prejob - with: - REACT_APP_ENV_NAME: "testing" - DEPLOY_TO_FLEEK: true - IS_PREVIEW: false - ENV_NAME: "testing" - UPDATE_COVERAGE: true - REACT_APP_ENABLE_CURATION_LISTS: true - REACT_APP_IPFS_GATEWAY: "https://bosonprotocol.infura-ipfs.io/ipfs" - REACT_APP_IPFS_IMAGE_GATEWAY: "https://test-permanent-fly-490.mypinata.cloud/ipfs" - REACT_APP_RELEASE_TAG: ${{ needs.prejob.outputs.releaseTag }} - REACT_APP_RELEASE_NAME: ${{ needs.prejob.outputs.releaseName }} - REACT_APP_DAPP_VIEW_MODE: "https://interface-a9d.pages.dev" - REACT_APP_DR_CENTER_VIEW_MODE: "https://boson-dr-center-testing.pages.dev" - REACT_APP_WIDGETS_URL: "https://boson-widgets-testing.pages.dev" - REACT_APP_UNISWAP_API_URL: "https://api.uniswap.org/v2" - REACT_APP_AWS_API_ENDPOINT: "https://api.uniswap.org/v1/graphql" - REACT_APP_MOONPAY_API: "https://api.moonpay.com" - REACT_APP_MOONPAY_LINK: "https://us-central1-uniswap-mobile.cloudfunctions.net/signMoonpayLinkV2?platform=web&env=staging" - REACT_APP_MOONPAY_EXTERNAL_LINK: "https://www.moonpay.com/buy" - REACT_APP_META_TX_API_KEY_MAP: ${{ vars.REACT_APP_META_TX_API_KEY_MAP_TESTING }} - REACT_APP_META_TX_API_IDS_MAP: ${{ vars.REACT_APP_META_TX_API_IDS_MAP_TESTING }} - REACT_APP_META_TX_RELAYER_URL: ${{ vars.REACT_APP_META_TX_RELAYER_URL_TESTING }} - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - FLEEK_API_KEY: ${{ secrets.FLEEK_API_KEY }} - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - REACT_APP_INFURA_IPFS_PROJECT_ID: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_ID }} - REACT_APP_INFURA_IPFS_PROJECT_SECRET: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_SECRET }} - REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS: ${{ secrets.REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS_TESTING }} - REACT_APP_GOOGLE_TAG_ID: ${{ secrets.REACT_APP_GOOGLE_TAG_ID_TESTING }} - REACT_APP_WALLET_CONNECT_PROJECT_ID: ${{ secrets.REACT_APP_WALLET_CONNECT_PROJECT_ID_TESTING }} - REACT_APP_INFURA_KEY: ${{ secrets.REACT_APP_INFURA_KEY_TESTING }} - REACT_APP_MOONPAY_API_KEY: ${{ secrets.REACT_APP_MOONPAY_API_KEY_TESTING }} - REACT_APP_MAGIC_API_KEY: ${{ secrets.REACT_APP_MAGIC_API_KEY_TESTING }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - FLEEK_TOKEN: ${{ secrets.FLEEK_TOKEN }} - FLEEK_PROJECT_ID: ${{ secrets.FLEEK_PROJECT_ID }} + - name: Install pnpm + uses: pnpm/action-setup@v4 - call-reusable-workflow-staging: - uses: ./.github/workflows/ci_reusable.yaml - if: github.event_name == 'release' && github.event.action == 'created' - needs: prejob - with: - REACT_APP_ENV_NAME: "staging" - DEPLOY_TO_FLEEK: true - IS_PREVIEW: false - ENV_NAME: "staging" - UPDATE_COVERAGE: false - REACT_APP_ENABLE_CURATION_LISTS: true - REACT_APP_IPFS_GATEWAY: "https://bosonprotocol.infura-ipfs.io/ipfs" - REACT_APP_IPFS_IMAGE_GATEWAY: "https://test-permanent-fly-490.mypinata.cloud/ipfs" - REACT_APP_RELEASE_TAG: ${{ needs.prejob.outputs.releaseTag }} - REACT_APP_RELEASE_NAME: ${{ needs.prejob.outputs.releaseName }} - REACT_APP_DAPP_VIEW_MODE: "https://boson-dapp-staging.pages.dev" - REACT_APP_DR_CENTER_VIEW_MODE: "https://boson-dr-center-staging.pages.dev" - REACT_APP_WIDGETS_URL: "https://boson-widgets-staging.pages.dev" - REACT_APP_UNISWAP_API_URL: "https://api.uniswap.org/v2" - REACT_APP_AWS_API_ENDPOINT: "https://api.uniswap.org/v1/graphql" - REACT_APP_MOONPAY_API: "https://api.moonpay.com" - REACT_APP_MOONPAY_LINK: "https://us-central1-uniswap-mobile.cloudfunctions.net/signMoonpayLinkV2?platform=web&env=staging" - REACT_APP_MOONPAY_EXTERNAL_LINK: "https://www.moonpay.com/buy" - REACT_APP_META_TX_API_KEY_MAP: ${{ vars.REACT_APP_META_TX_API_KEY_MAP_STAGING }} - REACT_APP_META_TX_API_IDS_MAP: ${{ vars.REACT_APP_META_TX_API_IDS_MAP_STAGING }} - REACT_APP_META_TX_RELAYER_URL: ${{ vars.REACT_APP_META_TX_RELAYER_URL_STAGING }} - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - FLEEK_API_KEY: ${{ secrets.FLEEK_API_KEY }} - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - REACT_APP_INFURA_IPFS_PROJECT_ID: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_ID }} - REACT_APP_INFURA_IPFS_PROJECT_SECRET: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_SECRET }} - REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS: ${{ secrets.REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS_STAGING }} - REACT_APP_GOOGLE_TAG_ID: ${{ secrets.REACT_APP_GOOGLE_TAG_ID_STAGING }} - REACT_APP_WALLET_CONNECT_PROJECT_ID: ${{ secrets.REACT_APP_WALLET_CONNECT_PROJECT_ID_STAGING }} - REACT_APP_INFURA_KEY: ${{ secrets.REACT_APP_INFURA_KEY_STAGING }} - REACT_APP_MOONPAY_API_KEY: ${{ secrets.REACT_APP_MOONPAY_API_KEY_STAGING }} - REACT_APP_MAGIC_API_KEY: ${{ secrets.REACT_APP_MAGIC_API_KEY_STAGING }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - FLEEK_TOKEN: ${{ secrets.FLEEK_TOKEN }} - FLEEK_PROJECT_ID: ${{ secrets.FLEEK_PROJECT_ID }} - - call-reusable-workflow-production: - uses: ./.github/workflows/ci_reusable.yaml - if: github.event_name == 'workflow_dispatch' - needs: prejob - with: - REACT_APP_ENV_NAME: "production" - DEPLOY_TO_FLEEK: true - IS_PREVIEW: false - ENV_NAME: "production" - UPDATE_COVERAGE: false - REACT_APP_ENABLE_CURATION_LISTS: true - REACT_APP_IPFS_GATEWAY: "https://bosonprotocol.infura-ipfs.io/ipfs" - REACT_APP_IPFS_IMAGE_GATEWAY: "https://gray-permanent-fly-490.mypinata.cloud/ipfs" - REACT_APP_RELEASE_TAG: ${{ needs.prejob.outputs.releaseTag }} - REACT_APP_RELEASE_NAME: ${{ needs.prejob.outputs.releaseName }} - REACT_APP_DAPP_VIEW_MODE: "https://bosonapp.io" - REACT_APP_DR_CENTER_VIEW_MODE: "https://disputes.bosonprotocol.io" - REACT_APP_WIDGETS_URL: "https://widgets.bosonprotocol.io" - REACT_APP_UNISWAP_API_URL: "https://api.uniswap.org/v2" - REACT_APP_AWS_API_ENDPOINT: "https://api.uniswap.org/v1/graphql" - REACT_APP_MOONPAY_API: "https://api.moonpay.com" - REACT_APP_MOONPAY_LINK: "https://us-central1-uniswap-mobile.cloudfunctions.net/signMoonpayLinkV2?platform=web&env=staging" - REACT_APP_MOONPAY_EXTERNAL_LINK: "https://www.moonpay.com/buy" - REACT_APP_META_TX_API_KEY_MAP: ${{ vars.REACT_APP_META_TX_API_KEY_MAP_PRODUCTION }} - REACT_APP_META_TX_API_IDS_MAP: ${{ vars.REACT_APP_META_TX_API_IDS_MAP_PRODUCTION }} - REACT_APP_META_TX_RELAYER_URL: ${{ vars.REACT_APP_META_TX_RELAYER_URL_PRODUCTION }} - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - FLEEK_API_KEY: ${{ secrets.FLEEK_API_KEY }} - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - REACT_APP_INFURA_IPFS_PROJECT_ID: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_ID }} - REACT_APP_INFURA_IPFS_PROJECT_SECRET: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_SECRET }} - REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS: ${{ secrets.REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS_PRODUCTION }} - REACT_APP_GOOGLE_TAG_ID: ${{ secrets.REACT_APP_GOOGLE_TAG_ID_PROD }} - REACT_APP_WALLET_CONNECT_PROJECT_ID: ${{ secrets.REACT_APP_WALLET_CONNECT_PROJECT_ID_PRODUCTION }} - REACT_APP_INFURA_KEY: ${{ secrets.REACT_APP_INFURA_KEY_PRODUCTION }} - REACT_APP_MOONPAY_API_KEY: ${{ secrets.REACT_APP_MOONPAY_API_KEY_PRODUCTION }} - REACT_APP_MAGIC_API_KEY: ${{ secrets.REACT_APP_MAGIC_API_KEY_PRODUCTION }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - FLEEK_TOKEN: ${{ secrets.FLEEK_TOKEN }} - FLEEK_PROJECT_ID: ${{ secrets.FLEEK_PROJECT_ID }} - - job-summary: - name: Create Job Summary - runs-on: ubuntu-22.04 - if: ${{ always() && contains(join(needs.*.result, ','), 'success') }} - needs: - [ - call-reusable-workflow-PR, - call-reusable-workflow-testing, - call-reusable-workflow-staging, - call-reusable-workflow-production - ] - steps: - - uses: actions/checkout@v3 - - name: Install JQ - uses: r26d/jq-action@master + - name: Setup node + uses: actions/setup-node@v4 with: - cmd: jq -n env - - name: Get job outputs - env: - OUTPUTS: ${{ toJSON(needs) }} - run: | - succeededJobOutput="$( - echo '${{ env.OUTPUTS }}' | jq '.[] | select(.result | startswith("success")) | .outputs' - )" - echo 'JOB_OUTPUT='$succeededJobOutput >> $GITHUB_ENV - - name: Get job vars - run: | - jobLint="$( - echo '${{ env.JOB_OUTPUT }}' | - jq '.JOB_LINT' - )" - echo 'JOB_LINT='$jobLint >> $GITHUB_ENV - - jobBuild="$( - echo '${{ env.JOB_OUTPUT }}' | - jq '.JOB_BUILD' - )" - echo 'JOB_BUILD='$jobBuild >> $GITHUB_ENV - - deployUrl="$( - echo '${{ env.JOB_OUTPUT }}' | - jq '.DEPLOY_URL' - )" - echo 'DEPLOY_URL='$deployUrl >> $GITHUB_ENV - - - name: Adding Job Summary - run: | - echo "| Command | Status |" >> $GITHUB_STEP_SUMMARY - echo "| ---- | ---- |" >> $GITHUB_STEP_SUMMARY - if [ ${{ env.JOB_LINT }} == success ]; then - echo "| Lint | ✅ |" >> $GITHUB_STEP_SUMMARY - else - echo "| Lint | ❌ |" >> $GITHUB_STEP_SUMMARY - fi - if [ ${{ env.JOB_BUILD }} == success ]; then - echo "| Build | ✅ |" >> $GITHUB_STEP_SUMMARY - else - echo "| Build | ❌ |" >> $GITHUB_STEP_SUMMARY - fi - - name: Adding Job Summary Deploy Url - if: ${{ env.DEPLOY_URL }} - run: echo "| URL | ${{ env.DEPLOY_URL }} |" >> $GITHUB_STEP_SUMMARY + node-version-file: ".nvmrc" + registry-url: "https://registry.npmjs.org" + cache: "pnpm" + cache-dependency-path: "./pnpm-lock.yaml" + + - run: pnpm install --frozen-lockfile + + # Non-mutating checks run first, so they actually gate: `pnpm prettier` and + # `pnpm lint` rewrite files, which would make them pass unconditionally and + # would leave the build compiling something other than the committed code. + - run: pnpm prettier:check + - run: pnpm lint:check + - run: pnpm tsc + - run: pnpm build diff --git a/.github/workflows/ci_reusable.yaml b/.github/workflows/ci_reusable.yaml deleted file mode 100644 index e78f7713e..000000000 --- a/.github/workflows/ci_reusable.yaml +++ /dev/null @@ -1,223 +0,0 @@ -name: Build, Test and Deploy the Marketplace Interface - Reusable workflow - -on: - workflow_call: - inputs: - REACT_APP_ENV_NAME: - required: true - type: string - DEPLOY_TO_FLEEK: - required: true - type: boolean - IS_PREVIEW: - required: true - type: boolean - UPDATE_COVERAGE: - required: true - type: boolean - ENV_NAME: - required: true - type: string - REACT_APP_ENABLE_CURATION_LISTS: - required: true - type: boolean - REACT_APP_OFFER_CURATION_LIST: - required: false - type: string - REACT_APP_IPFS_GATEWAY: - required: true - type: string - REACT_APP_IPFS_IMAGE_GATEWAY: - required: false - type: string - REACT_APP_RELEASE_TAG: - required: false - type: string - REACT_APP_RELEASE_NAME: - required: false - type: string - REACT_APP_DAPP_VIEW_MODE: - required: true - type: string - REACT_APP_DR_CENTER_VIEW_MODE: - required: true - type: string - REACT_APP_WIDGETS_URL: - required: true - type: string - REACT_APP_UNISWAP_API_URL: - required: true - type: string - REACT_APP_AWS_API_ENDPOINT: - required: true - type: string - REACT_APP_MOONPAY_API: - required: true - type: string - REACT_APP_MOONPAY_LINK: - required: true - type: string - REACT_APP_MOONPAY_EXTERNAL_LINK: - required: true - type: string - REACT_APP_META_TX_API_KEY_MAP: - required: true - type: string - REACT_APP_META_TX_API_IDS_MAP: - required: true - type: string - REACT_APP_META_TX_RELAYER_URL: - required: false - type: string - secrets: - NPM_TOKEN: - required: true - FLEEK_API_KEY: - required: false - CODECOV_TOKEN: - required: true - REACT_APP_INFURA_IPFS_PROJECT_ID: - required: false - REACT_APP_INFURA_IPFS_PROJECT_SECRET: - required: false - REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS: - required: true - REACT_APP_GOOGLE_TAG_ID: - required: false - REACT_APP_WALLET_CONNECT_PROJECT_ID: - required: true - REACT_APP_INFURA_KEY: - required: true - REACT_APP_MOONPAY_API_KEY: - required: true - REACT_APP_MAGIC_API_KEY: - required: true - SENTRY_AUTH_TOKEN: - required: false - FLEEK_TOKEN: - required: false - FLEEK_PROJECT_ID: - required: false - outputs: - JOB_LINT: - value: ${{ jobs.build-test-deploy.outputs.jobLint }} - JOB_BUILD: - value: ${{ jobs.build-test-deploy.outputs.jobBuild }} - JOB_COVERAGE: - value: ${{ jobs.build-test-deploy.outputs.jobCoverage }} - DEPLOY_URL: - value: ${{ jobs.build-test-deploy.outputs.deployUrl }} - -jobs: - build-test-deploy: - name: Build, Test and Deploy the Marketplace Interface - runs-on: ubuntu-22.04 - env: - REACT_APP_BUYER_SELLER_AGREEMENT_TEMPLATE: "ipfs://QmaUobgQYrMnm2jZ3WowPtwRs4MpMR2TSinp3ChebjnZwe" - REACT_APP_RNFT_LICENSE_TEMPLATE: "ipfs://QmPbzbp7xcSKhQPjT5VacLRMVgM1U6DB4LiF2GVyHhvcA7" - REACT_APP_FAIR_EXCHANGE_POLICY_RULES: "ipfs://QmX8Wnq1eWbf7pRhEDQqdAqWp17YSKXQq8ckZVe4YdqAvt" - REACT_APP_ENV_NAME: ${{ inputs.REACT_APP_ENV_NAME }} - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - REACT_APP_ENABLE_CURATION_LISTS: ${{ inputs.REACT_APP_ENABLE_CURATION_LISTS }} - REACT_APP_OFFER_CURATION_LIST: ${{ inputs.REACT_APP_OFFER_CURATION_LIST }} - REACT_APP_IPFS_GATEWAY: ${{ inputs.REACT_APP_IPFS_GATEWAY }} - REACT_APP_IPFS_IMAGE_GATEWAY: ${{ inputs.REACT_APP_IPFS_IMAGE_GATEWAY }} - REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS: ${{ secrets.REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS }} - REACT_APP_INFURA_IPFS_PROJECT_ID: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_ID }} - REACT_APP_INFURA_IPFS_PROJECT_SECRET: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_SECRET }} - REACT_APP_GOOGLE_TAG_ID: ${{ secrets.REACT_APP_GOOGLE_TAG_ID }} - REACT_APP_META_TX_API_KEY_MAP: ${{ inputs.REACT_APP_META_TX_API_KEY_MAP }} - REACT_APP_META_TX_API_IDS_MAP: ${{ inputs.REACT_APP_META_TX_API_IDS_MAP }} - REACT_APP_META_TX_RELAYER_URL: ${{ inputs.REACT_APP_META_TX_RELAYER_URL }} - REACT_APP_WALLET_CONNECT_PROJECT_ID: ${{ secrets.REACT_APP_WALLET_CONNECT_PROJECT_ID }} - REACT_APP_RELEASE_TAG: ${{ inputs.REACT_APP_RELEASE_TAG }} - REACT_APP_RELEASE_NAME: ${{ inputs.REACT_APP_RELEASE_NAME }} - REACT_APP_VIEW_MODE: "dapp" - REACT_APP_DAPP_VIEW_MODE: ${{ inputs.REACT_APP_DAPP_VIEW_MODE }} - REACT_APP_DR_CENTER_VIEW_MODE: ${{ inputs.REACT_APP_DR_CENTER_VIEW_MODE }} - REACT_APP_WIDGETS_URL: ${{ inputs.REACT_APP_WIDGETS_URL }} - REACT_APP_UNISWAP_API_URL: ${{ inputs.REACT_APP_UNISWAP_API_URL }} - REACT_APP_AWS_API_ENDPOINT: ${{ inputs.REACT_APP_AWS_API_ENDPOINT }} - REACT_APP_MOONPAY_API: ${{ inputs.REACT_APP_MOONPAY_API }} - REACT_APP_MOONPAY_LINK: ${{ inputs.REACT_APP_MOONPAY_LINK }} - REACT_APP_INFURA_KEY: ${{ secrets.REACT_APP_INFURA_KEY }} - REACT_APP_MOONPAY_API_KEY: ${{ secrets.REACT_APP_MOONPAY_API_KEY }} - REACT_APP_MOONPAY_EXTERNAL_LINK: ${{ inputs.REACT_APP_MOONPAY_EXTERNAL_LINK }} - REACT_APP_MAGIC_API_KEY: ${{ secrets.REACT_APP_MAGIC_API_KEY }} - outputs: - jobLint: ${{ steps.lint.outputs.pass }} - jobBuild: ${{ steps.build.outputs.pass }} - jobCoverage: ${{ steps.coverage.outputs.pass }} - deployUrl: ${{ steps.deploy.outputs.deployUrl }} - steps: - - uses: actions/checkout@v3 - with: - ref: ${{ github.event.pull_request.head.ref }} - fetch-depth: 0 - - name: Install pnpm - uses: pnpm/action-setup@v4 - with: - version: 10 - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: "24" - registry-url: "https://registry.npmjs.org" - cache: "pnpm" - cache-dependency-path: "./pnpm-lock.yaml" - - name: Create Sentry release - if: ${{ inputs.IS_PREVIEW == false }} - uses: getsentry/action-release@v1 - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_ORG: "boson-protocol" - SENTRY_PROJECT: "v2-dapp" - with: - environment: ${{ inputs.ENV_NAME }} - version: ${{ inputs.REACT_APP_RELEASE_NAME }} - - run: pnpm install --frozen-lockfile - - name: Install Playwright Browsers - run: npx playwright install --with-deps chromium - - run: pnpm prettier - - run: pnpm tsc - - run: pnpm lint - - id: lint - run: echo "::set-output name=pass::success" - - run: pnpm build - - id: build - run: echo "::set-output name=pass::success" - - name: (if 'staging' env) Copy contents from .fleek_staging.json to .fleek.json - if: ${{ inputs.ENV_NAME == 'staging' }} - run: mv .fleek_staging.json .fleek.json - - name: (if 'production' env) Copy contents from .fleek_production.json to .fleek.json - if: ${{ inputs.ENV_NAME == 'production' }} - run: mv .fleek_production.json .fleek.json - - name: Deploy via fleek - if: ${{ inputs.DEPLOY_TO_FLEEK }} - id: Deploy - run: npx @fleek-platform/cli sites deploy --config ./.fleek.json - env: - FLEEK_TOKEN: ${{ secrets.FLEEK_TOKEN }} - FLEEK_PROJECT_ID: ${{ secrets.FLEEK_PROJECT_ID }} - - name: Build dapp to show the dr_center only - run: pnpm build - if: ${{ inputs.IS_PREVIEW == false && inputs.DEPLOY_TO_FLEEK }} - env: - REACT_APP_VIEW_MODE: "dr_center" - - name: (if DR Center 'testing' env) Copy contents from .fleek_dr_center_testing.json to .fleek_dr_center.json - if: ${{ inputs.ENV_NAME == 'testing' }} - run: mv .fleek_dr_center_testing.json .fleek_dr_center.json - - name: (if DR Center 'staging' env) Copy contents from .fleek_dr_center_staging.json to .fleek_dr_center.json - if: ${{ inputs.ENV_NAME == 'staging' }} - run: mv .fleek_dr_center_staging.json .fleek_dr_center.json - - name: (if DR Center 'production' env) Copy contents from .fleek_dr_center_production.json to .fleek_dr_center.json - if: ${{ inputs.ENV_NAME == 'production' }} - run: mv .fleek_dr_center_production.json .fleek_dr_center.json - - name: Deploy via fleek - if: ${{ inputs.DEPLOY_TO_FLEEK }} - id: deploy_dr_center - run: npx @fleek-platform/cli sites deploy --config ./.fleek_dr_center.json - env: - REACT_APP_VIEW_MODE: "dr_center" - FLEEK_TOKEN: ${{ secrets.FLEEK_TOKEN }} - FLEEK_PROJECT_ID: ${{ secrets.FLEEK_PROJECT_ID }} diff --git a/.github/workflows/deploy-preview.yaml b/.github/workflows/deploy-preview.yaml new file mode 100644 index 000000000..c4b200bfb --- /dev/null +++ b/.github/workflows/deploy-preview.yaml @@ -0,0 +1,43 @@ +name: Deploy PR preview + +on: + pull_request: + branches: + - main + types: [opened, synchronize, reopened] + +jobs: + deploy: + # Fork PRs cannot read environment secrets, so the build would fail on the + # required-variable check. Skip them rather than fail them. + if: github.event.pull_request.head.repo.full_name == github.repository + uses: ./.github/workflows/deploy_reusable.yaml + with: + environment: testing + # One deployment serving both halves at #/dapp/... and #/dr_center/... + view_modes: '["dapp,dr_center"]' + # Anything other than the project's production branch makes this a Preview + # deployment, published at https://pr-..pages.dev. + cf_branch: pr-${{ github.event.number }} + is_preview: true + secrets: inherit + + comment: + needs: deploy + runs-on: ubuntu-22.04 + permissions: + pull-requests: write + steps: + - name: Comment preview URL + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: cf-preview + message: | + ### Preview deployment + + | View | URL | + | ---- | --- | + | dApp | ${{ needs.deploy.outputs.deployment_url }}/#/dapp | + | DR Center | ${{ needs.deploy.outputs.deployment_url }}/#/dr_center | + + Built from ${{ github.event.pull_request.head.sha }}. diff --git a/.github/workflows/deploy-production.yaml b/.github/workflows/deploy-production.yaml new file mode 100644 index 000000000..a03707a08 --- /dev/null +++ b/.github/workflows/deploy-production.yaml @@ -0,0 +1,43 @@ +name: Deploy to production + +on: + workflow_dispatch: + inputs: + tag: + description: "Release tag to deploy (e.g. v0.0.301)" + required: true + type: string + +jobs: + verify-tag: + name: Verify tag exists + runs-on: ubuntu-22.04 + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Resolve tag + env: + TAG: ${{ inputs.tag }} + run: | + set -euo pipefail + if ! sha="$(git rev-parse --verify --quiet "refs/tags/${TAG}^{commit}")"; then + echo "::error::Tag '${TAG}' does not exist in this repository." + exit 1 + fi + echo "Deploying ${TAG} (${sha})" + + deploy: + needs: verify-tag + uses: ./.github/workflows/deploy_reusable.yaml + with: + environment: production + view_modes: '["dapp","dr_center"]' + ref: ${{ inputs.tag }} + release_tag: ${{ inputs.tag }} + # Must equal the production projects' production branch, or this lands as a Preview + # deployment and bosonapp.io keeps serving the previous build. + cf_branch: main + secrets: inherit diff --git a/.github/workflows/deploy-staging.yaml b/.github/workflows/deploy-staging.yaml new file mode 100644 index 000000000..60f0be579 --- /dev/null +++ b/.github/workflows/deploy-staging.yaml @@ -0,0 +1,22 @@ +name: Deploy to staging + +# `published` rather than `created`: `created` does not fire when a release is +# published from a draft. +on: + release: + types: [published] + +jobs: + deploy: + uses: ./.github/workflows/deploy_reusable.yaml + with: + environment: staging + view_modes: '["dapp","dr_center"]' + # Build the tagged commit itself, so staging matches the release even if main + # has moved on since the tag was cut. + ref: ${{ github.event.release.tag_name }} + release_tag: ${{ github.event.release.tag_name }} + # Must equal the staging projects' production branch, or this lands as a Preview + # deployment and the staging URLs keep serving the previous build. + cf_branch: main + secrets: inherit diff --git a/.github/workflows/deploy-testing.yaml b/.github/workflows/deploy-testing.yaml new file mode 100644 index 000000000..e0f4a06d5 --- /dev/null +++ b/.github/workflows/deploy-testing.yaml @@ -0,0 +1,23 @@ +name: Deploy to testing + +on: + push: + branches: + - main + +jobs: + # Gate the deploy on the same checks a PR runs: a merge can produce a broken + # combination that neither parent had. + ci: + uses: ./.github/workflows/ci.yaml + secrets: inherit + + deploy: + needs: ci + uses: ./.github/workflows/deploy_reusable.yaml + # No `ref`: build the commit that was pushed. + with: + environment: testing + view_modes: '["dapp","dr_center"]' + cf_branch: main + secrets: inherit diff --git a/.github/workflows/deploy_reusable.yaml b/.github/workflows/deploy_reusable.yaml new file mode 100644 index 000000000..36d72f8be --- /dev/null +++ b/.github/workflows/deploy_reusable.yaml @@ -0,0 +1,239 @@ +name: Build and deploy to Cloudflare Pages - Reusable workflow + +on: + workflow_call: + inputs: + environment: + description: "GitHub Environment supplying the scoped vars/secrets (testing|staging|production)" + required: true + type: string + view_modes: + description: 'JSON array of REACT_APP_VIEW_MODE values to build, e.g. ["dapp","dr_center"]' + required: true + type: string + ref: + description: "Git ref to build. Leave empty to use the ref that triggered the run." + required: false + type: string + default: "" + cf_branch: + description: "Cloudflare deployment branch label. Must equal the project's production branch to publish a Production deployment." + required: false + type: string + default: "main" + release_tag: + description: "Release tag stamped into the bundle and onto the Cloudflare deployment." + required: false + type: string + default: "" + is_preview: + description: "Preview build: skips the Sentry release and forces both view-mode URLs to same_origin." + required: false + type: boolean + default: false + outputs: + deployment_url: + # With a multi-entry view_modes matrix this is whichever leg finished last, so only + # consume it for single-entry calls (the PR preview). + description: "URL of the deployment, for single-view-mode calls." + value: ${{ jobs.build-deploy.outputs.deployment_url }} + +jobs: + build-deploy: + name: ${{ inputs.environment }} / ${{ matrix.view_mode }} + runs-on: ubuntu-22.04 + environment: ${{ inputs.environment }} + permissions: + contents: read + outputs: + deployment_url: ${{ steps.deploy.outputs.deployment-url }} + strategy: + # Never cancel a sibling: one view mode failing must not leave the other half-deployed. + fail-fast: false + matrix: + view_mode: ${{ fromJSON(inputs.view_modes) }} + concurrency: + group: deploy-${{ inputs.environment }}-${{ inputs.cf_branch }}-${{ matrix.view_mode }} + # Supersede stale preview builds, but never kill an environment deploy mid-upload. + cancel-in-progress: ${{ inputs.is_preview }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + REACT_APP_VIEW_MODE: ${{ matrix.view_mode }} + + # Common values: repository-level variables, shared by every environment. + REACT_APP_UNISWAP_API_URL: ${{ vars.REACT_APP_UNISWAP_API_URL }} + REACT_APP_AWS_API_ENDPOINT: ${{ vars.REACT_APP_AWS_API_ENDPOINT }} + REACT_APP_MOONPAY_API: ${{ vars.REACT_APP_MOONPAY_API }} + REACT_APP_MOONPAY_LINK: ${{ vars.REACT_APP_MOONPAY_LINK }} + REACT_APP_MOONPAY_EXTERNAL_LINK: ${{ vars.REACT_APP_MOONPAY_EXTERNAL_LINK }} + REACT_APP_RNFT_LICENSE_TEMPLATE: ${{ vars.REACT_APP_RNFT_LICENSE_TEMPLATE }} + REACT_APP_BUYER_SELLER_AGREEMENT_TEMPLATE: ${{ vars.REACT_APP_BUYER_SELLER_AGREEMENT_TEMPLATE }} + REACT_APP_FAIR_EXCHANGE_POLICY_RULES: ${{ vars.REACT_APP_FAIR_EXCHANGE_POLICY_RULES }} + REACT_APP_IPFS_GATEWAY: ${{ vars.REACT_APP_IPFS_GATEWAY }} + REACT_APP_GUIDES_URL: ${{ vars.REACT_APP_GUIDES_URL }} + REACT_APP_ENABLE_CURATION_LISTS: ${{ vars.REACT_APP_ENABLE_CURATION_LISTS }} + + # Environment-scoped variables. Identical names across environments: GitHub resolves + # the environment's value and falls back to the repository-level one when unset. + REACT_APP_ENV_NAME: ${{ vars.REACT_APP_ENV_NAME }} + REACT_APP_WIDGETS_URL: ${{ vars.REACT_APP_WIDGETS_URL }} + REACT_APP_IPFS_IMAGE_GATEWAY: ${{ vars.REACT_APP_IPFS_IMAGE_GATEWAY }} + REACT_APP_IPFS_METADATA_URL: ${{ vars.REACT_APP_IPFS_METADATA_URL }} + REACT_APP_THE_GRAPH_IPFS_URL: ${{ vars.REACT_APP_THE_GRAPH_IPFS_URL }} + REACT_APP_META_TX_API_IDS_MAP: ${{ vars.REACT_APP_META_TX_API_IDS_MAP }} + REACT_APP_META_TX_RELAYER_URL: ${{ vars.REACT_APP_META_TX_RELAYER_URL }} + REACT_APP_OFFER_CURATION_LIST: ${{ vars.REACT_APP_OFFER_CURATION_LIST }} + REACT_APP_ENABLE_SENTRY_LOGGING: ${{ vars.REACT_APP_ENABLE_SENTRY_LOGGING }} + + # A preview serves both view modes from one deployment, so each half must link to itself. + REACT_APP_DAPP_VIEW_MODE: ${{ inputs.is_preview && 'same_origin' || vars.REACT_APP_DAPP_VIEW_MODE }} + REACT_APP_DR_CENTER_VIEW_MODE: ${{ inputs.is_preview && 'same_origin' || vars.REACT_APP_DR_CENTER_VIEW_MODE }} + + # Environment-scoped secrets. + REACT_APP_INFURA_KEY: ${{ secrets.REACT_APP_INFURA_KEY }} + REACT_APP_MAGIC_API_KEY: ${{ secrets.REACT_APP_MAGIC_API_KEY }} + REACT_APP_WALLET_CONNECT_PROJECT_ID: ${{ secrets.REACT_APP_WALLET_CONNECT_PROJECT_ID }} + REACT_APP_MOONPAY_API_KEY: ${{ secrets.REACT_APP_MOONPAY_API_KEY }} + REACT_APP_GOOGLE_TAG_ID: ${{ secrets.REACT_APP_GOOGLE_TAG_ID }} + REACT_APP_META_TX_API_KEY_MAP: ${{ secrets.REACT_APP_META_TX_API_KEY_MAP }} + REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS: ${{ secrets.REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS }} + REACT_APP_INFURA_IPFS_PROJECT_ID: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_ID }} + REACT_APP_INFURA_IPFS_PROJECT_SECRET: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_SECRET }} + + steps: + - uses: actions/checkout@v4 + with: + # Empty ref means "the ref that triggered this run": the pushed commit, or the + # PR merge commit. Staging/production pass an explicit tag instead. + ref: ${{ inputs.ref }} + # Full history so `git describe --tags` can name untagged testing builds. + fetch-depth: 0 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + registry-url: "https://registry.npmjs.org" + cache: "pnpm" + cache-dependency-path: "./pnpm-lock.yaml" + + - name: Resolve Cloudflare project and release tag + env: + VIEW_MODE: ${{ matrix.view_mode }} + ENVIRONMENT: ${{ inputs.environment }} + INPUT_RELEASE_TAG: ${{ inputs.release_tag }} + CF_PROJECT_DAPP: ${{ vars.CF_PROJECT_DAPP }} + CF_PROJECT_DR_CENTER: ${{ vars.CF_PROJECT_DR_CENTER }} + run: | + set -euo pipefail + + if [ "$VIEW_MODE" = "dr_center" ]; then + project="$CF_PROJECT_DR_CENTER" + project_var="CF_PROJECT_DR_CENTER" + else + project="$CF_PROJECT_DAPP" + project_var="CF_PROJECT_DAPP" + fi + + if [ -z "$project" ]; then + echo "::error::${project_var} is not set on the '${ENVIRONMENT}' environment." \ + "Set it to the exact Cloudflare project name from 'wrangler pages project list'." + exit 1 + fi + echo "CF_PROJECT=$project" >> "$GITHUB_ENV" + + tag="$INPUT_RELEASE_TAG" + if [ -z "$tag" ]; then + # Testing and preview builds are not tagged; name them after the nearest tag. + tag="$(git describe --tags --always)" + fi + echo "RELEASE_TAG=$tag" >> "$GITHUB_ENV" + echo "REACT_APP_RELEASE_TAG=$tag" >> "$GITHUB_ENV" + echo "REACT_APP_RELEASE_NAME=$tag" >> "$GITHUB_ENV" + + - name: Check required build variables are set + env: + ENVIRONMENT: ${{ inputs.environment }} + run: | + set -euo pipefail + # config.ts throws on these at *module load*, so an empty value builds green and + # then serves a blank page. Fail here instead of shipping it. + missing="" + for name in REACT_APP_ENV_NAME REACT_APP_INFURA_KEY REACT_APP_WIDGETS_URL; do + if [ -z "${!name:-}" ]; then + missing="$missing $name" + fi + done + if [ -n "$missing" ]; then + echo "::error::Missing required build variables for environment '${ENVIRONMENT}':$missing" + exit 1 + fi + + - run: pnpm install --frozen-lockfile + + - name: Create Sentry release + if: ${{ !inputs.is_preview }} + uses: getsentry/action-release@v1 + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: "boson-protocol" + SENTRY_PROJECT: "v2-dapp" + with: + environment: ${{ inputs.environment }} + version: ${{ env.RELEASE_TAG }} + + - run: pnpm build + + - name: Deploy to Cloudflare Pages + id: deploy + uses: cloudflare/wrangler-action@v3 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + wranglerVersion: "4.129.0" + # cf_branch must equal the project's production branch to publish a Production + # deployment; anything else (pr-123) lands as a Preview. + command: >- + pages deploy build + --project-name=${{ env.CF_PROJECT }} + --branch=${{ inputs.cf_branch }} + --commit-hash=${{ github.sha }} + --commit-message=${{ env.RELEASE_TAG }} + + - name: Smoke check the deployment + env: + DEPLOY_URL: ${{ steps.deploy.outputs.deployment-url }} + run: | + set -euo pipefail + if [ -z "$DEPLOY_URL" ]; then + echo "::error::wrangler returned no deployment URL." + exit 1 + fi + body="$(curl -fsSL --retry 5 --retry-delay 3 --retry-all-errors "$DEPLOY_URL")" + if [ -z "$body" ]; then + echo "::error::$DEPLOY_URL served an empty response." + exit 1 + fi + + - name: Job summary + if: ${{ always() && steps.deploy.outcome == 'success' }} + env: + ENVIRONMENT: ${{ inputs.environment }} + VIEW_MODE: ${{ matrix.view_mode }} + CF_BRANCH: ${{ inputs.cf_branch }} + DEPLOY_URL: ${{ steps.deploy.outputs.deployment-url }} + run: | + { + echo "| Field | Value |" + echo "| ---- | ---- |" + echo "| Environment | ${ENVIRONMENT} |" + echo "| View mode | \`${VIEW_MODE}\` |" + echo "| CF project | ${CF_PROJECT} |" + echo "| CF branch | \`${CF_BRANCH}\` |" + echo "| Release | ${RELEASE_TAG} |" + echo "| URL | ${DEPLOY_URL} |" + } >> "$GITHUB_STEP_SUMMARY" diff --git a/.github/workflows/fleek-deploy.yaml b/.github/workflows/fleek-deploy.yaml deleted file mode 100644 index 5d2781d2a..000000000 --- a/.github/workflows/fleek-deploy.yaml +++ /dev/null @@ -1,49 +0,0 @@ -name: Deploy DR_Center_testing via Fleek -on: - workflow_dispatch: -jobs: - deploy-to-fleek: - runs-on: ubuntu-latest - env: - FLEEK_TOKEN: ${{ secrets.FLEEK_TOKEN }} - FLEEK_PROJECT_ID: ${{ secrets.FLEEK_PROJECT_ID }} - REACT_APP_ENV_NAME: "testing" - REACT_APP_ENABLE_CURATION_LISTS: false - REACT_APP_IPFS_GATEWAY: "https://bosonprotocol.infura-ipfs.io/ipfs/" - REACT_APP_RELEASE_TAG: "unknown" - REACT_APP_RELEASE_NAME: "unknown" - REACT_APP_DAPP_VIEW_MODE: "https://interface-a9d.pages.dev" - REACT_APP_DR_CENTER_VIEW_MODE: "https://boson-dr-center-testing.pages.dev" - REACT_APP_WIDGETS_URL: "https://boson-widgets-testing.pages.dev" - REACT_APP_UNISWAP_API_URL: "https://api.uniswap.org/v2" - REACT_APP_AWS_API_ENDPOINT: "https://api.uniswap.org/v1/graphql" - REACT_APP_MOONPAY_API: "https://api.moonpay.com" - REACT_APP_MOONPAY_LINK: "https://us-central1-uniswap-mobile.cloudfunctions.net/signMoonpayLinkV2?platform=web&env=staging" - REACT_APP_MOONPAY_EXTERNAL_LINK: "https://www.moonpay.com/buy" - REACT_APP_META_TX_API_KEY_MAP: ${{ vars.REACT_APP_META_TX_API_KEY_MAP_TESTING }} - REACT_APP_META_TX_API_IDS_MAP: ${{ vars.REACT_APP_META_TX_API_IDS_MAP_TESTING }} - REACT_APP_META_TX_RELAYER_URL: ${{ vars.REACT_APP_META_TX_RELAYER_URL_TESTING }} - REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS: ${{ secrets.REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS_TESTING }} - REACT_APP_WALLET_CONNECT_PROJECT_ID: ${{ secrets.REACT_APP_WALLET_CONNECT_PROJECT_ID_TESTING }} - REACT_APP_INFURA_KEY: ${{ secrets.REACT_APP_INFURA_KEY_TESTING }} - REACT_APP_MOONPAY_API_KEY: ${{ secrets.REACT_APP_MOONPAY_API_KEY_TESTING }} - REACT_APP_MAGIC_API_KEY: ${{ secrets.REACT_APP_MAGIC_API_KEY_TESTING }} - REACT_APP_VIEW_MODE: "dr_center" - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Install pnpm - uses: pnpm/action-setup@v4 - with: - version: 10 - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: "24" - registry-url: "https://registry.npmjs.org" - cache: "pnpm" - cache-dependency-path: "./pnpm-lock.yaml" - - name: Install Packages - run: pnpm install --frozen-lockfile - - name: Build & deploy sites - run: npx fleek -- sites deploy --config ./.fleek_dr_center_testing.json diff --git a/.nvmrc b/.nvmrc index 209e3ef4b..a45fd52cc 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20 +24 diff --git a/README.md b/README.md index dae047efc..4242bddd3 100644 --- a/README.md +++ b/README.md @@ -20,21 +20,37 @@ ## Environments -Each deployment is hosted on IPFS with a custom domain. +Each environment is deployed to Cloudflare Pages by GitHub Actions. The same bundle is +built twice per environment — once as the dApp and once as the Dispute Resolution Center — +selected by the `REACT_APP_VIEW_MODE` build variable. -For ease of use, each environment has a DNS name that always points to the latest IPFS hash: +| Env | Networks | dApp | DR Center | +| ---------- | ----------------- | ------------------------------------- | -------------------------------------------- | +| testing | amoy, sepolia | https://interface-a9d.pages.dev/ | https://boson-dr-center-testing.pages.dev/ | +| staging | amoy, sepolia | https://boson-dapp-staging.pages.dev/ | https://boson-dr-center-staging.pages.dev/ | +| production | polygon, ethereum | https://bosonapp.io/ | https://disputes.bosonprotocol.io/ | -| Env | Networks | Endpoint | -| ------------ | --------- | --------------------------------------------------------------- | -| testing | amoy, sepolia | https://interface-a9d.pages.dev/ | -| staging | amoy, sepolia | https://boson-dapp-staging.pages.dev/ | -| production | polygon, ethereum | https://bosonapp.io/ | +Deployments are triggered as follows: + +| Env | Trigger | +| ---------- | ----------------------------------------------------------- | +| preview | Every pull request, as one deployment serving both view modes | +| testing | Every push to `main` | +| staging | Publishing a GitHub Release (deploys that tag) | +| production | Manually running the **Deploy to production** workflow with a tag | + +Build-time configuration lives in GitHub: values common to all environments are +repository variables/secrets, and environment-specific values override them in the +`testing`, `staging` and `production` GitHub Environments. ## Local development -### Node & npm +### Node & pnpm -Installing the correct versions of node and npm can be done by installing [`volta`](https://volta.sh/). Volta will automatically get those versions from the package.json file. Once that's done, the required steps to develop and test the dApp interface locally are as follows: +The required Node version is in [`.nvmrc`](.nvmrc) — run `nvm use` (or `fnm use`) to pick it +up. The pnpm version is pinned by the `packageManager` field in `package.json`; `corepack enable` +will honour it automatically. Once that's done, the required steps to develop and test the dApp +interface locally are as follows: 1. Clone the repository: i.e. Run `git clone git@github.com:bosonprotocol/interface.git` 2. Navigate into the directory & install dependencies: i.e. Run `cd interface && pnpm install` diff --git a/package.json b/package.json index 3e27f8643..4d6e2a580 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,9 @@ "analyze": "cross-env ANALYZE_BUNDLE=true react-app-rewired build", "eject": "react-app-rewired eject", "lint": "eslint --ignore-path ./.gitignore --ext .js,.ts,.tsx . --fix", + "lint:check": "eslint --ignore-path ./.gitignore --ext .js,.ts,.tsx .", "prettier": "prettier --write \"src/**/*.{ts,tsx}\"", + "prettier:check": "prettier --check \"src/**/*.{ts,tsx}\"", "prepare": "husky install", "test": "react-app-rewired test --testPathIgnorePatterns .spec.ts --env ./jest.custom.env.js", "test:e2e": "playwright test --project=chromium", @@ -193,7 +195,6 @@ "zustand": "^4.1.2" }, "devDependencies": { - "@fleek-platform/cli": "^3.9.4", "@graphql-codegen/cli": "^2.13.1", "@graphql-codegen/typed-document-node": "^2.3.3", "@graphql-codegen/typescript": "^2.7.3", @@ -260,10 +261,7 @@ "last 1 safari version" ] }, - "volta": { - "node": "18.19.1", - "npm": "10.2.4" - }, + "packageManager": "pnpm@10.34.5", "overrides": { "typescript": "^5.1.6" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30e3dbc9c..b8ee6178b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -444,9 +444,6 @@ importers: specifier: ^4.1.2 version: 4.4.0(@types/react@18.0.20)(immer@9.0.21)(react@18.2.0) devDependencies: - '@fleek-platform/cli': - specifier: ^3.9.4 - version: 3.9.4(@types/node@24.10.1)(encoding@0.1.13)(typescript@5.1.6) '@graphql-codegen/cli': specifier: ^2.13.1 version: 2.13.1(@types/node@24.10.1)(bufferutil@4.0.6)(encoding@0.1.13)(enquirer@2.3.6)(graphql@16.5.0)(ts-node@10.9.1(@types/node@24.10.1)(typescript@5.1.6))(typescript@5.1.6)(utf-8-validate@5.0.9) @@ -653,127 +650,6 @@ packages: '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} - '@aws-crypto/crc32@5.2.0': - resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/sha256-browser@5.2.0': - resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} - - '@aws-crypto/sha256-js@5.2.0': - resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/supports-web-crypto@5.2.0': - resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} - - '@aws-crypto/util@5.2.0': - resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - - '@aws-sdk/client-lambda@3.716.0': - resolution: {integrity: sha512-pWcnLQFbG4/xmzq7614YBz6Kbx3Skm3yuQOhac9y163hSmey1bfFdr1bZ+FcxquHbRb5KNvhU1RGmwmNVxsOfg==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/client-sso-oidc@3.716.0': - resolution: {integrity: sha512-lA4IB9FzR2KjH7EVCo+mHGFKqdViVyeBQEIX9oVratL/l7P0bMS1fMwgfHOc3ACazqNxBxDES7x08ZCp32y6Lw==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.716.0 - - '@aws-sdk/client-sso@3.716.0': - resolution: {integrity: sha512-5Nb0jJXce2TclbjG7WVPufwhgV1TRydz1QnsuBtKU0AdViEpr787YrZhPpGnNIM1Dx+R1H/tmAHZnOoohS6D8g==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/client-sts@3.716.0': - resolution: {integrity: sha512-i4SVNsrdXudp8T4bkm7Fi3YWlRnvXCSwvNDqf6nLqSJxqr4CN3VlBELueDyjBK7TAt453/qSif+eNx+bHmwo4Q==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/core@3.716.0': - resolution: {integrity: sha512-5DkUiTrbyzO8/W4g7UFEqRFpuhgizayHI/Zbh0wtFMcot8801nJV+MP/YMhdjimlvAr/OqYB08FbGsPyWppMTw==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/credential-provider-env@3.716.0': - resolution: {integrity: sha512-JI2KQUnn2arICwP9F3CnqP1W3nAbm4+meQg/yOhp9X0DMzQiHrHRd4HIrK2vyVgi2/6hGhONY5uLF26yRTA7nQ==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/credential-provider-http@3.716.0': - resolution: {integrity: sha512-CZ04pl2z7igQPysQyH2xKZHM3fLwkemxQbKOlje3TmiS1NwXvcKvERhp9PE/H23kOL7beTM19NMRog/Fka/rlw==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/credential-provider-ini@3.716.0': - resolution: {integrity: sha512-P37We2GtZvdROxiwP0zrpEL81/HuYK1qlYxp5VCj3uV+G4mG8UQN2gMIU/baYrpOQqa0h81RfyQGRFUjVaDVqw==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.716.0 - - '@aws-sdk/credential-provider-node@3.716.0': - resolution: {integrity: sha512-FGQPK2uKfS53dVvoskN/s/t6m0Po24BGd1PzJdzHBFCOjxbZLM6+8mDMXeyi2hCLVVQOUcuW41kOgmJ0+zMbww==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/credential-provider-process@3.716.0': - resolution: {integrity: sha512-0spcu2MWVVHSTHH3WE2E//ttUJPwXRM3BCp+WyI41xLzpNu1Fd8zjOrDpEo0SnGUzsSiRTIJWgkuu/tqv9NJ2A==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/credential-provider-sso@3.716.0': - resolution: {integrity: sha512-J2IA3WuCpRGGoZm6VHZVFCnrxXP+41iUWb9Ct/1spljegTa1XjiaZ5Jf3+Ubj7WKiyvP9/dgz1L0bu2bYEjliw==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/credential-provider-web-identity@3.716.0': - resolution: {integrity: sha512-vzgpWKs2gGXZGdbMKRFrMW4PqEFWkGvwWH2T7ZwQv9m+8lQ7P4Dk2uimqu0f37HZAbpn8HFMqRh4CaySjU354A==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.716.0 - - '@aws-sdk/middleware-host-header@3.714.0': - resolution: {integrity: sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/middleware-logger@3.714.0': - resolution: {integrity: sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/middleware-recursion-detection@3.714.0': - resolution: {integrity: sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/middleware-user-agent@3.716.0': - resolution: {integrity: sha512-FpAtT6nNKrYdkDZndutEraiRMf+TgDzAGvniqRtZ/YTPA+gIsWrsn+TwMKINR81lFC3nQfb9deS5CFtxd021Ew==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/region-config-resolver@3.714.0': - resolution: {integrity: sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/token-providers@3.714.0': - resolution: {integrity: sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sso-oidc': ^3.714.0 - - '@aws-sdk/types@3.714.0': - resolution: {integrity: sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/util-endpoints@3.714.0': - resolution: {integrity: sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/util-locate-window@3.693.0': - resolution: {integrity: sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/util-user-agent-browser@3.714.0': - resolution: {integrity: sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw==} - - '@aws-sdk/util-user-agent-node@3.716.0': - resolution: {integrity: sha512-3PqaXmQbxrtHKAsPCdp7kn5FrQktj8j3YyuNsqFZ8rWZeEQ88GWlsvE61PTsr2peYCKzpFqYVddef2x1axHU0w==} - engines: {node: '>=16.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -1875,444 +1751,222 @@ packages: '@emotion/weak-memoize@0.2.5': resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.23.1': resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.24.2': - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.3': resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.23.1': resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.24.2': - resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.3': resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.23.1': resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.24.2': - resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.3': resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.23.1': resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.24.2': - resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.3': resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.23.1': resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.24.2': - resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.3': resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.23.1': resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.24.2': - resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.3': resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.23.1': resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.24.2': - resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.3': resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.23.1': resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.24.2': - resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.3': resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.23.1': resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.24.2': - resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.3': resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.23.1': resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.24.2': - resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.3': resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.23.1': resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.24.2': - resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.3': resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.23.1': resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.24.2': - resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.3': resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.23.1': resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.24.2': - resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.3': resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.23.1': resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.24.2': - resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.3': resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.23.1': resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.24.2': - resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.3': resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.23.1': resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.24.2': - resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.3': resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.23.1': resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.24.2': - resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.3': resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.24.2': - resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.3': resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.23.1': resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.24.2': - resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.3': resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} engines: {node: '>=18'} @@ -2325,132 +1979,66 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.24.2': - resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.3': resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.23.1': resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.24.2': - resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.3': resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.23.1': resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.24.2': - resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.3': resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.23.1': resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.24.2': - resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.3': resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.23.1': resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.24.2': - resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.3': resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.23.1': resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.24.2': - resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.3': resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} engines: {node: '>=18'} @@ -2595,17 +2183,6 @@ packages: '@ethersproject/wordlists@5.8.0': resolution: {integrity: sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==} - '@fleek-platform/cli@3.9.4': - resolution: {integrity: sha512-/d1o0Flf36fycClJaLIzNHisTy5f/K1dy072jxTzpmNZxs9xfxD501qcERUaQrVUBlYcSklzVDwpFB+APjEO0g==} - engines: {node: '>=18.18.2'} - hasBin: true - - '@fleek-platform/functions-esbuild-config@0.0.19': - resolution: {integrity: sha512-831oGOU48wSm0PNgu+fB/KbkN6uFcetKgwHfYN7VpVP4RBPD+Dc8iD6jiy/9UGfImGdBNHOSqRB94yRhobvC9A==} - engines: {node: '>=18'} - peerDependencies: - esbuild: '>=0.21.0' - '@floating-ui/core@0.7.3': resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==} @@ -3066,9 +2643,6 @@ packages: '@multiformats/base-x@4.0.1': resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} - '@noble/ciphers@0.5.3': - resolution: {integrity: sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==} - '@noble/curves@1.2.0': resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} @@ -3188,24 +2762,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1': resolution: {integrity: sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1': resolution: {integrity: sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1': resolution: {integrity: sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1': resolution: {integrity: sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==} @@ -3271,30 +2849,35 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.4.0': resolution: {integrity: sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.4.0': resolution: {integrity: sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.4.0': resolution: {integrity: sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.4.0': resolution: {integrity: sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-wasm@2.4.0': resolution: {integrity: sha512-MNgQ4WCbBybqQ97KwR/hqJGYTg3+s8qHpgIyFWB2qJOBvoJWbXuJGmm4ZkPLq2bMaANqCZqrXwmKYagZTkMKZA==} @@ -3374,18 +2957,6 @@ packages: webpack-plugin-serve: optional: true - '@pnpm/config.env-replace@1.1.0': - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - - '@pnpm/network.ca-file@1.0.2': - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} - - '@pnpm/npm-conf@2.3.1': - resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} - engines: {node: '>=12'} - '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -4046,56 +3617,67 @@ packages: resolution: {integrity: sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.40.0': resolution: {integrity: sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.40.0': resolution: {integrity: sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.40.0': resolution: {integrity: sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.40.0': resolution: {integrity: sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': resolution: {integrity: sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.40.0': resolution: {integrity: sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.40.0': resolution: {integrity: sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.40.0': resolution: {integrity: sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.40.0': resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.40.0': resolution: {integrity: sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.40.0': resolution: {integrity: sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==} @@ -4300,217 +3882,30 @@ packages: '@sinonjs/fake-timers@8.1.0': resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} - '@smithy/abort-controller@3.1.9': - resolution: {integrity: sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==} - engines: {node: '>=16.0.0'} + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} - '@smithy/config-resolver@3.0.13': - resolution: {integrity: sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==} - engines: {node: '>=16.0.0'} + '@solana/web3.js@1.77.3': + resolution: {integrity: sha512-PHaO0BdoiQRPpieC1p31wJsBaxwIOWLh8j2ocXNKX8boCQVldt26Jqm2tZE4KlrvnCIV78owPLv1pEUgqhxZ3w==} - '@smithy/core@2.5.6': - resolution: {integrity: sha512-w494xO+CPwG/5B/N2l0obHv2Fi9U4DAY+sTi1GWT3BVvGpZetJjJXAynIO9IHp4zS1PinGhXtRSZydUXbJO4ag==} - engines: {node: '>=16.0.0'} + '@stablelib/aead@1.0.1': + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} - '@smithy/credential-provider-imds@3.2.8': - resolution: {integrity: sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==} - engines: {node: '>=16.0.0'} + '@stablelib/binary@1.0.1': + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} - '@smithy/eventstream-codec@3.1.10': - resolution: {integrity: sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==} + '@stablelib/bytes@1.0.1': + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} - '@smithy/eventstream-serde-browser@3.0.14': - resolution: {integrity: sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==} - engines: {node: '>=16.0.0'} + '@stablelib/chacha20poly1305@1.0.1': + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} - '@smithy/eventstream-serde-config-resolver@3.0.11': - resolution: {integrity: sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ==} - engines: {node: '>=16.0.0'} + '@stablelib/chacha@1.0.1': + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} - '@smithy/eventstream-serde-node@3.0.13': - resolution: {integrity: sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ==} - engines: {node: '>=16.0.0'} - - '@smithy/eventstream-serde-universal@3.0.13': - resolution: {integrity: sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==} - engines: {node: '>=16.0.0'} - - '@smithy/fetch-http-handler@4.1.2': - resolution: {integrity: sha512-R7rU7Ae3ItU4rC0c5mB2sP5mJNbCfoDc8I5XlYjIZnquyUwec7fEo78F6DA3SmgJgkU1qTMcZJuGblxZsl10ZA==} - - '@smithy/hash-node@3.0.11': - resolution: {integrity: sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==} - engines: {node: '>=16.0.0'} - - '@smithy/invalid-dependency@3.0.11': - resolution: {integrity: sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==} - - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} - - '@smithy/is-array-buffer@3.0.0': - resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} - engines: {node: '>=16.0.0'} - - '@smithy/middleware-content-length@3.0.13': - resolution: {integrity: sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==} - engines: {node: '>=16.0.0'} - - '@smithy/middleware-endpoint@3.2.7': - resolution: {integrity: sha512-GTxSKf280aJBANGN97MomUQhW1VNxZ6w7HAj/pvZM5MUHbMPOGnWOp1PRYKi4czMaHNj9bdiA+ZarmT3Wkdqiw==} - engines: {node: '>=16.0.0'} - - '@smithy/middleware-retry@3.0.32': - resolution: {integrity: sha512-v8gVA9HqibuZkFuFpfkC/EcHE8no/3Mv3JvRUGly63Axt4yyas1WDVOasFSdiqm2hZVpY7/k8mRT1Wd5k7r3Yw==} - engines: {node: '>=16.0.0'} - - '@smithy/middleware-serde@3.0.11': - resolution: {integrity: sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==} - engines: {node: '>=16.0.0'} - - '@smithy/middleware-stack@3.0.11': - resolution: {integrity: sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==} - engines: {node: '>=16.0.0'} - - '@smithy/node-config-provider@3.1.12': - resolution: {integrity: sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==} - engines: {node: '>=16.0.0'} - - '@smithy/node-http-handler@3.3.3': - resolution: {integrity: sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==} - engines: {node: '>=16.0.0'} - - '@smithy/property-provider@3.1.11': - resolution: {integrity: sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==} - engines: {node: '>=16.0.0'} - - '@smithy/protocol-http@4.1.8': - resolution: {integrity: sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==} - engines: {node: '>=16.0.0'} - - '@smithy/querystring-builder@3.0.11': - resolution: {integrity: sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==} - engines: {node: '>=16.0.0'} - - '@smithy/querystring-parser@3.0.11': - resolution: {integrity: sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==} - engines: {node: '>=16.0.0'} - - '@smithy/service-error-classification@3.0.11': - resolution: {integrity: sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==} - engines: {node: '>=16.0.0'} - - '@smithy/shared-ini-file-loader@3.1.12': - resolution: {integrity: sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==} - engines: {node: '>=16.0.0'} - - '@smithy/signature-v4@4.2.4': - resolution: {integrity: sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==} - engines: {node: '>=16.0.0'} - - '@smithy/smithy-client@3.5.2': - resolution: {integrity: sha512-h7xn+1wlpbXyLrtvo/teHR1SFGIIrQ3imzG0nz43zVLAJgvfC1Mtdwa1pFhoIOYrt/TiNjt4pD0gSYQEdZSBtg==} - engines: {node: '>=16.0.0'} - - '@smithy/types@3.7.2': - resolution: {integrity: sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==} - engines: {node: '>=16.0.0'} - - '@smithy/url-parser@3.0.11': - resolution: {integrity: sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==} - - '@smithy/util-base64@3.0.0': - resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} - engines: {node: '>=16.0.0'} - - '@smithy/util-body-length-browser@3.0.0': - resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} - - '@smithy/util-body-length-node@3.0.0': - resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} - engines: {node: '>=16.0.0'} - - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-buffer-from@3.0.0': - resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} - engines: {node: '>=16.0.0'} - - '@smithy/util-config-provider@3.0.0': - resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} - engines: {node: '>=16.0.0'} - - '@smithy/util-defaults-mode-browser@3.0.32': - resolution: {integrity: sha512-FAGsnm/xJ19SZeoqGyo9CosqjUlm+XJTmygDMktebvDKw3bKiIiZ40O1MA6Z52KLmekYU2GO7BEK7u6e7ZORKw==} - engines: {node: '>= 10.0.0'} - - '@smithy/util-defaults-mode-node@3.0.32': - resolution: {integrity: sha512-2CzKhkPFCVdd15f3+0D1rldNlvJME8pVRBtVVsea2hy7lcOn0bGB0dTVUwzgfM4LW/aU4IOg3jWf25ZWaxbOiw==} - engines: {node: '>= 10.0.0'} - - '@smithy/util-endpoints@2.1.7': - resolution: {integrity: sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==} - engines: {node: '>=16.0.0'} - - '@smithy/util-hex-encoding@3.0.0': - resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} - engines: {node: '>=16.0.0'} - - '@smithy/util-middleware@3.0.11': - resolution: {integrity: sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==} - engines: {node: '>=16.0.0'} - - '@smithy/util-retry@3.0.11': - resolution: {integrity: sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==} - engines: {node: '>=16.0.0'} - - '@smithy/util-stream@3.3.3': - resolution: {integrity: sha512-bOm0YMMxRjbI3X6QkWwADPFkh2AH2xBMQIB1IQgCsCRqXXpSJatgjUR3oxHthpYwFkw3WPkOt8VgMpJxC0rFqg==} - engines: {node: '>=16.0.0'} - - '@smithy/util-uri-escape@3.0.0': - resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} - engines: {node: '>=16.0.0'} - - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} - - '@smithy/util-utf8@3.0.0': - resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} - engines: {node: '>=16.0.0'} - - '@smithy/util-waiter@3.2.0': - resolution: {integrity: sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==} - engines: {node: '>=16.0.0'} - - '@solana/buffer-layout@4.0.1': - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} - - '@solana/web3.js@1.77.3': - resolution: {integrity: sha512-PHaO0BdoiQRPpieC1p31wJsBaxwIOWLh8j2ocXNKX8boCQVldt26Jqm2tZE4KlrvnCIV78owPLv1pEUgqhxZ3w==} - - '@stablelib/aead@1.0.1': - resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} - - '@stablelib/binary@1.0.1': - resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} - - '@stablelib/bytes@1.0.1': - resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} - - '@stablelib/chacha20poly1305@1.0.1': - resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} - - '@stablelib/chacha@1.0.1': - resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} - - '@stablelib/constant-time@1.0.1': - resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + '@stablelib/constant-time@1.0.1': + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} '@stablelib/ed25519@1.0.3': resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} @@ -5445,15 +4840,6 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} - '@web-std/blob@3.0.5': - resolution: {integrity: sha512-Lm03qr0eT3PoLBuhkvFBLf0EFkAsNz/G/AYCzpOdi483aFaVX86b4iQs0OHhzHJfN5C15q17UtDbyABjlzM96A==} - - '@web-std/file@3.0.3': - resolution: {integrity: sha512-X7YYyvEERBbaDfJeC9lBKC5Q5lIEWYCP1SNftJNwNH/VbFhdHm+3neKOQP+kWEYJmosbDFq+NEUG7+XIvet/Jw==} - - '@web-std/stream@1.0.0': - resolution: {integrity: sha512-jyIbdVl+0ZJyKGTV0Ohb9E6UnxP+t7ZzX4Do3AHjZKxUXKMs9EmqnBDQgHF7bEw0EzbQygOjtt/7gvtmi//iCQ==} - '@web3-react/coinbase-wallet@8.2.3': resolution: {integrity: sha512-hYrOwv0RzhwQuI87GBv9ZHAblgrFg7YomnObOyuH2tPZT8+cQAtgP4D293TDQhW9SR1NXxzoS0tbTECWd4yUAQ==} peerDependencies: @@ -5582,9 +4968,6 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - '@zxing/text-encoding@0.9.0': - resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} - JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -5751,9 +5134,6 @@ packages: anser@1.4.10: resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} @@ -5762,10 +5142,6 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-escapes@3.2.0: - resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} - engines: {node: '>=4'} - ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -5778,10 +5154,6 @@ packages: engines: {'0': node >= 0.8.0} hasBin: true - ansi-regex@2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} - engines: {node: '>=0.10.0'} - ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} @@ -5902,9 +5274,6 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} - as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -5968,10 +5337,6 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - atomically@1.7.0: - resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} - engines: {node: '>=10.12.0'} - attr-accept@2.2.2: resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} engines: {node: '>=4'} @@ -5995,9 +5360,6 @@ packages: resolution: {integrity: sha512-gsDXAS6XVc4Jt+7S92MPX6Noq69bdeXUPEaXd8dk3+yVr629LTDLxNt4j1ycBbrU+AStK2PhKIyNIM+xzWMVOQ==} engines: {node: '>=6'} - aws4@1.13.2: - resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - axe-core@4.7.0: resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} engines: {node: '>=4'} @@ -6005,9 +5367,6 @@ packages: axios@0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} - axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} - axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} @@ -6219,13 +5578,6 @@ packages: borsh@0.7.0: resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} - bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - - boxen@5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} - engines: {node: '>=10'} - brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -6333,12 +5685,6 @@ packages: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' - bunyan-blackhole@1.1.1: resolution: {integrity: sha512-UwzNPhbbSqbzeJhCbygqjlAY7p0ZUdv1ADXPQvDh3CA7VW3C/rCc1gaQO/8j9QL4vsKQCQZQSQIEwX+lxioPAQ==} peerDependencies: @@ -6544,22 +5890,10 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} - cli-boxes@2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - - cli-cursor@2.1.0: - resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} - engines: {node: '>=4'} - cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} - cli-progress@3.12.0: - resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} - engines: {node: '>=4'} - cli-spinners@2.7.0: resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} engines: {node: '>=6'} @@ -6625,10 +5959,6 @@ packages: resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} engines: {node: '>= 4.0'} - code-point-at@1.1.0: - resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} - engines: {node: '>=0.10.0'} - collect-v8-coverage@1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} @@ -6726,17 +6056,9 @@ packages: resolution: {integrity: sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==} engines: {node: '>=0.10.0'} - conf@10.2.0: - resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} - engines: {node: '>=12'} - config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - configstore@5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} - confusing-browser-globals@1.0.11: resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} @@ -7104,10 +6426,6 @@ packages: dayjs@1.11.7: resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} - debounce-fn@4.0.0: - resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} - engines: {node: '>=10'} - debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} @@ -7188,10 +6506,6 @@ packages: resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==} engines: {node: '>= 0.4'} - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -7417,14 +6731,6 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - - dot-prop@6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} - dotenv-expand@5.1.0: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} @@ -7464,10 +6770,6 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - eciesjs@0.4.7: - resolution: {integrity: sha512-4JQahOkBdDy27jjW4q3FJQigHlcwZXx28sCtBQkBamF2XUdcNXrInpgrr8h205MtVIS0CMHufyIKGVjtjxQ2ZA==} - engines: {node: '>=16.0.0'} - editorconfig@0.15.3: resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==} hasBin: true @@ -7647,21 +6949,11 @@ packages: es6-symbol@3.1.3: resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} engines: {node: '>=18'} hasBin: true - esbuild@0.24.2: - resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.3: resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} engines: {node: '>=18'} @@ -7675,10 +6967,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-goat@2.1.1: - resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} - engines: {node: '>=8'} - escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -8174,10 +7462,6 @@ packages: filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - files-from-path@1.0.0: - resolution: {integrity: sha512-EobUbrzh1fPOZpQvDdTikGpCs+ZDcTNyBOnFuHvW2BQXEkMSPbEPQ0eVTQrz0oHlBcPS9Lnw+uPzACfft1sDYg==} - engines: {node: '>=18'} - filesize@8.0.7: resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} engines: {node: '>= 0.4.0'} @@ -8292,10 +7576,6 @@ packages: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} - formdata-node@4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} @@ -8464,10 +7744,6 @@ packages: engines: {node: '>=12'} deprecated: Glob versions prior to v9 are no longer supported - global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} - global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} engines: {node: '>=6'} @@ -8630,17 +7906,10 @@ packages: resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} engines: {node: '>=0.10.0'} - has-yarn@2.1.0: - resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} - engines: {node: '>=8'} - hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} - hash-wasm@4.12.0: - resolution: {integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==} - hash.js@1.1.3: resolution: {integrity: sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==} @@ -8886,18 +8155,11 @@ packages: resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} engines: {node: '>=12.2'} - import-lazy@2.1.0: - resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} - engines: {node: '>=4'} - import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true - importx@0.5.1: - resolution: {integrity: sha512-YrRaigAec1sC2CdIJjf/hCH1Wp9Ii8Cq5ROw4k5nJ19FVl2FcJUHZ5gGIb1vs8+JNYIyOJpc2fcufS2330bxDw==} - imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -8919,10 +8181,6 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -9036,10 +8294,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-ci@2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true - is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} @@ -9079,10 +8333,6 @@ packages: is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - is-fullwidth-code-point@1.0.0: - resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} - engines: {node: '>=0.10.0'} - is-fullwidth-code-point@2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} @@ -9119,10 +8369,6 @@ packages: engines: {node: '>=14.16'} hasBin: true - is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -9149,10 +8395,6 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-npm@5.0.0: - resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} - engines: {node: '>=10'} - is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -9165,10 +8407,6 @@ packages: resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} engines: {node: '>=0.10.0'} - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -9284,9 +8522,6 @@ packages: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} - is-yarn-global@0.3.0: - resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} - is64bit@2.0.0: resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==} engines: {node: '>=18'} @@ -9769,9 +9004,6 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-schema-typed@7.0.3: - resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} - json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} @@ -9950,10 +9182,6 @@ packages: lit@2.8.0: resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -10049,10 +9277,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@2.2.0: - resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} - engines: {node: '>=4'} - log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -10489,18 +9713,10 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - mimic-fn@1.2.0: - resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} - engines: {node: '>=4'} - mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@3.1.0: - resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} - engines: {node: '>=8'} - mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -10670,11 +9886,6 @@ packages: peerDependencies: node-fetch: '*' - native-fetch@4.0.2: - resolution: {integrity: sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==} - peerDependencies: - undici: '*' - natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} @@ -10894,10 +10105,6 @@ packages: nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - number-is-nan@1.0.1: - resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} - engines: {node: '>=0.10.0'} - number-to-bn@1.7.0: resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} engines: {node: '>=6.5.0', npm: '>=3'} @@ -11009,10 +10216,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@2.0.1: - resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} - engines: {node: '>=4'} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -11052,10 +10255,6 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ora@3.4.0: - resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} - engines: {node: '>=6'} - ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} @@ -11806,10 +11005,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - press-any-key@0.1.1: - resolution: {integrity: sha512-TR722R9UpZjvOtyVcmS7hx2/1KzKIyeizIqHJ7sRcfXvCDzeSknS3UNLhmQMN7075Jd9gGUBdq98sHw2eqb86Q==} - hasBin: true - prettier-linter-helpers@1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} @@ -11846,9 +11041,6 @@ packages: resolution: {integrity: sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==} engines: {node: '>=0.10.0'} - printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -11900,9 +11092,6 @@ packages: proxy-compare@2.5.1: resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -11920,10 +11109,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pupa@2.1.1: - resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} - engines: {node: '>=8'} - pvtsutils@1.3.2: resolution: {integrity: sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==} @@ -12010,10 +11195,6 @@ packages: resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} engines: {node: '>= 0.10'} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - react-app-polyfill@3.0.0: resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} engines: {node: '>=14'} @@ -12508,14 +11689,6 @@ packages: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} - registry-auth-token@5.0.3: - resolution: {integrity: sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==} - engines: {node: '>=14'} - - registry-url@5.1.0: - resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} - engines: {node: '>=8'} - regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true @@ -12631,10 +11804,6 @@ packages: resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} engines: {node: '>=0.8'} - restore-cursor@2.0.0: - resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} - engines: {node: '>=4'} - restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -12854,10 +12023,6 @@ packages: react: ^16.8.0 react-dom: ^16.8.0 - semver-diff@3.1.1: - resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} - engines: {node: '>=8'} - semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -12998,9 +12163,6 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - single-line-log@1.1.2: - resolution: {integrity: sha512-awzaaIPtYFdexLr6TBpcZSGPB6D1RInNO/qNetgaJloPDF/D0GkVtLvGEp8InfmLV7CyLyQ5fIRP+tVN/JmWQA==} - sirv@1.0.19: resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} engines: {node: '>= 10'} @@ -13217,10 +12379,6 @@ packages: string-natural-compare@3.0.1: resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - string-width@1.0.2: - resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} - engines: {node: '>=0.10.0'} - string-width@3.1.0: resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} engines: {node: '>=6'} @@ -13258,10 +12416,6 @@ packages: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} engines: {node: '>=4'} - strip-ansi@3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} - engines: {node: '>=0.10.0'} - strip-ansi@5.2.0: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} @@ -13302,10 +12456,6 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -13835,10 +12985,6 @@ packages: resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} engines: {node: '>=14.0'} - undici@6.21.0: - resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} - engines: {node: '>=18.17'} - unenv@1.9.0: resolution: {integrity: sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==} @@ -13867,10 +13013,6 @@ packages: uniq@1.0.1: resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==} - unique-names-generator@4.7.1: - resolution: {integrity: sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==} - engines: {node: '>=8'} - unique-string@2.0.0: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} @@ -13986,10 +13128,6 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - update-notifier-cjs@5.1.6: - resolution: {integrity: sha512-wgxdSBWv3x/YpMzsWz5G4p4ec7JWD0HCl8W6bmNB6E5Gwo+1ym5oN4hiXpLf0mPySVEJEIsYlkshnplkg2OP9A==} - engines: {node: '>=14'} - upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} @@ -14102,10 +13240,6 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} @@ -14288,9 +13422,6 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-encoding@1.1.5: - resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} - web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -14499,10 +13630,6 @@ packages: engines: {node: '>=8'} hasBin: true - widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} @@ -14677,10 +13804,6 @@ packages: utf-8-validate: optional: true - xdg-basedir@4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} - xhr-request-promise@0.1.3: resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} @@ -14917,443 +14040,43 @@ snapshots: lru-cache: 10.4.3 optional: true - '@aws-crypto/crc32@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.714.0 - tslib: 2.8.1 - - '@aws-crypto/sha256-browser@5.2.0': - dependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-locate-window': 3.693.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-crypto/sha256-js@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.714.0 - tslib: 2.8.1 - - '@aws-crypto/supports-web-crypto@5.2.0': + '@babel/code-frame@7.26.2': dependencies: - tslib: 2.8.1 + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@aws-crypto/util@5.2.0': + '@babel/code-frame@7.27.1': dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@aws-sdk/client-lambda@3.716.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/client-sts': 3.716.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/middleware-host-header': 3.714.0 - '@aws-sdk/middleware-logger': 3.714.0 - '@aws-sdk/middleware-recursion-detection': 3.714.0 - '@aws-sdk/middleware-user-agent': 3.716.0 - '@aws-sdk/region-config-resolver': 3.714.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-endpoints': 3.714.0 - '@aws-sdk/util-user-agent-browser': 3.714.0 - '@aws-sdk/util-user-agent-node': 3.716.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.6 - '@smithy/eventstream-serde-browser': 3.0.14 - '@smithy/eventstream-serde-config-resolver': 3.0.11 - '@smithy/eventstream-serde-node': 3.0.13 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.7 - '@smithy/middleware-retry': 3.0.32 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.32 - '@smithy/util-defaults-mode-node': 3.0.32 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-stream': 3.3.3 - '@smithy/util-utf8': 3.0.0 - '@smithy/util-waiter': 3.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.716.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/middleware-host-header': 3.714.0 - '@aws-sdk/middleware-logger': 3.714.0 - '@aws-sdk/middleware-recursion-detection': 3.714.0 - '@aws-sdk/middleware-user-agent': 3.716.0 - '@aws-sdk/region-config-resolver': 3.714.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-endpoints': 3.714.0 - '@aws-sdk/util-user-agent-browser': 3.714.0 - '@aws-sdk/util-user-agent-node': 3.716.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.6 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.7 - '@smithy/middleware-retry': 3.0.32 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.32 - '@smithy/util-defaults-mode-node': 3.0.32 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso@3.716.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/middleware-host-header': 3.714.0 - '@aws-sdk/middleware-logger': 3.714.0 - '@aws-sdk/middleware-recursion-detection': 3.714.0 - '@aws-sdk/middleware-user-agent': 3.716.0 - '@aws-sdk/region-config-resolver': 3.714.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-endpoints': 3.714.0 - '@aws-sdk/util-user-agent-browser': 3.714.0 - '@aws-sdk/util-user-agent-node': 3.716.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.6 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.7 - '@smithy/middleware-retry': 3.0.32 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.32 - '@smithy/util-defaults-mode-node': 3.0.32 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sts@3.716.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/core': 3.716.0 - '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/middleware-host-header': 3.714.0 - '@aws-sdk/middleware-logger': 3.714.0 - '@aws-sdk/middleware-recursion-detection': 3.714.0 - '@aws-sdk/middleware-user-agent': 3.716.0 - '@aws-sdk/region-config-resolver': 3.714.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-endpoints': 3.714.0 - '@aws-sdk/util-user-agent-browser': 3.714.0 - '@aws-sdk/util-user-agent-node': 3.716.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.6 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.7 - '@smithy/middleware-retry': 3.0.32 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.32 - '@smithy/util-defaults-mode-node': 3.0.32 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt + '@babel/compat-data@7.23.5': {} - '@aws-sdk/core@3.716.0': - dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/core': 2.5.6 - '@smithy/node-config-provider': 3.1.12 - '@smithy/property-provider': 3.1.11 - '@smithy/protocol-http': 4.1.8 - '@smithy/signature-v4': 4.2.4 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/util-middleware': 3.0.11 - fast-xml-parser: 4.4.1 - tslib: 2.8.1 + '@babel/compat-data@7.28.5': {} - '@aws-sdk/credential-provider-env@3.716.0': + '@babel/core@7.22.11': dependencies: - '@aws-sdk/core': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@smithy/property-provider': 3.1.11 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.716.0': - dependencies: - '@aws-sdk/core': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/node-http-handler': 3.3.3 - '@smithy/property-provider': 3.1.11 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/util-stream': 3.3.3 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-ini@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)': - dependencies: - '@aws-sdk/client-sts': 3.716.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/credential-provider-env': 3.716.0 - '@aws-sdk/credential-provider-http': 3.716.0 - '@aws-sdk/credential-provider-process': 3.716.0 - '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) - '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/types': 3.714.0 - '@smithy/credential-provider-imds': 3.2.8 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - - '@aws-sdk/credential-provider-node@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)': - dependencies: - '@aws-sdk/credential-provider-env': 3.716.0 - '@aws-sdk/credential-provider-http': 3.716.0 - '@aws-sdk/credential-provider-ini': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/credential-provider-process': 3.716.0 - '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) - '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/types': 3.714.0 - '@smithy/credential-provider-imds': 3.2.8 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 - tslib: 2.8.1 + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.22.10 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.22.11) + '@babel/helpers': 7.22.11 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.22.11 + '@babel/types': 7.27.0 + convert-source-map: 1.8.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - - '@aws-sdk/credential-provider-process@3.716.0': - dependencies: - '@aws-sdk/core': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 - tslib: 2.8.1 + - supports-color - '@aws-sdk/credential-provider-sso@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))': - dependencies: - '@aws-sdk/client-sso': 3.716.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/token-providers': 3.714.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) - '@aws-sdk/types': 3.714.0 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - - '@aws-sdk/credential-provider-web-identity@3.716.0(@aws-sdk/client-sts@3.716.0)': - dependencies: - '@aws-sdk/client-sts': 3.716.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@smithy/property-provider': 3.1.11 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@aws-sdk/middleware-host-header@3.714.0': - dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@aws-sdk/middleware-logger@3.714.0': - dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@aws-sdk/middleware-recursion-detection@3.714.0': - dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@aws-sdk/middleware-user-agent@3.716.0': - dependencies: - '@aws-sdk/core': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-endpoints': 3.714.0 - '@smithy/core': 2.5.6 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@aws-sdk/region-config-resolver@3.714.0': - dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/node-config-provider': 3.1.12 - '@smithy/types': 3.7.2 - '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.11 - tslib: 2.8.1 - - '@aws-sdk/token-providers@3.714.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))': - dependencies: - '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/types': 3.714.0 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@aws-sdk/types@3.714.0': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.714.0': - dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/types': 3.7.2 - '@smithy/util-endpoints': 2.1.7 - tslib: 2.8.1 - - '@aws-sdk/util-locate-window@3.693.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-browser@3.714.0': - dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/types': 3.7.2 - bowser: 2.11.0 - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-node@3.716.0': - dependencies: - '@aws-sdk/middleware-user-agent': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@smithy/node-config-provider': 3.1.12 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.23.5': {} - - '@babel/compat-data@7.28.5': {} - - '@babel/core@7.22.11': - dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.22.10 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.22.11) - '@babel/helpers': 7.22.11 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/traverse': 7.22.11 - '@babel/types': 7.27.0 - convert-source-map: 1.8.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/core@7.28.5': + '@babel/core@7.28.5': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.5 @@ -17544,294 +16267,150 @@ snapshots: '@emotion/weak-memoize@0.2.5': {} - '@esbuild/aix-ppc64@0.21.5': - optional: true - '@esbuild/aix-ppc64@0.23.1': optional: true - '@esbuild/aix-ppc64@0.24.2': - optional: true - '@esbuild/aix-ppc64@0.25.3': optional: true - '@esbuild/android-arm64@0.21.5': - optional: true - '@esbuild/android-arm64@0.23.1': optional: true - '@esbuild/android-arm64@0.24.2': - optional: true - '@esbuild/android-arm64@0.25.3': optional: true - '@esbuild/android-arm@0.21.5': - optional: true - '@esbuild/android-arm@0.23.1': optional: true - '@esbuild/android-arm@0.24.2': - optional: true - '@esbuild/android-arm@0.25.3': optional: true - '@esbuild/android-x64@0.21.5': - optional: true - '@esbuild/android-x64@0.23.1': optional: true - '@esbuild/android-x64@0.24.2': - optional: true - '@esbuild/android-x64@0.25.3': optional: true - '@esbuild/darwin-arm64@0.21.5': - optional: true - '@esbuild/darwin-arm64@0.23.1': optional: true - '@esbuild/darwin-arm64@0.24.2': - optional: true - '@esbuild/darwin-arm64@0.25.3': optional: true - '@esbuild/darwin-x64@0.21.5': - optional: true - '@esbuild/darwin-x64@0.23.1': optional: true - '@esbuild/darwin-x64@0.24.2': - optional: true - '@esbuild/darwin-x64@0.25.3': optional: true - '@esbuild/freebsd-arm64@0.21.5': - optional: true - '@esbuild/freebsd-arm64@0.23.1': optional: true - '@esbuild/freebsd-arm64@0.24.2': - optional: true - '@esbuild/freebsd-arm64@0.25.3': optional: true - '@esbuild/freebsd-x64@0.21.5': - optional: true - '@esbuild/freebsd-x64@0.23.1': optional: true - '@esbuild/freebsd-x64@0.24.2': - optional: true - '@esbuild/freebsd-x64@0.25.3': optional: true - '@esbuild/linux-arm64@0.21.5': - optional: true - '@esbuild/linux-arm64@0.23.1': optional: true - '@esbuild/linux-arm64@0.24.2': - optional: true - '@esbuild/linux-arm64@0.25.3': optional: true - '@esbuild/linux-arm@0.21.5': - optional: true - '@esbuild/linux-arm@0.23.1': optional: true - '@esbuild/linux-arm@0.24.2': - optional: true - '@esbuild/linux-arm@0.25.3': optional: true - '@esbuild/linux-ia32@0.21.5': - optional: true - '@esbuild/linux-ia32@0.23.1': optional: true - '@esbuild/linux-ia32@0.24.2': - optional: true - '@esbuild/linux-ia32@0.25.3': optional: true - '@esbuild/linux-loong64@0.21.5': - optional: true - '@esbuild/linux-loong64@0.23.1': optional: true - '@esbuild/linux-loong64@0.24.2': - optional: true - '@esbuild/linux-loong64@0.25.3': optional: true - '@esbuild/linux-mips64el@0.21.5': - optional: true - '@esbuild/linux-mips64el@0.23.1': optional: true - '@esbuild/linux-mips64el@0.24.2': - optional: true - '@esbuild/linux-mips64el@0.25.3': optional: true - '@esbuild/linux-ppc64@0.21.5': - optional: true - '@esbuild/linux-ppc64@0.23.1': optional: true - '@esbuild/linux-ppc64@0.24.2': - optional: true - '@esbuild/linux-ppc64@0.25.3': optional: true - '@esbuild/linux-riscv64@0.21.5': - optional: true - '@esbuild/linux-riscv64@0.23.1': optional: true - '@esbuild/linux-riscv64@0.24.2': - optional: true - '@esbuild/linux-riscv64@0.25.3': optional: true - '@esbuild/linux-s390x@0.21.5': - optional: true - '@esbuild/linux-s390x@0.23.1': optional: true - '@esbuild/linux-s390x@0.24.2': - optional: true - '@esbuild/linux-s390x@0.25.3': optional: true - '@esbuild/linux-x64@0.21.5': - optional: true - '@esbuild/linux-x64@0.23.1': optional: true - '@esbuild/linux-x64@0.24.2': - optional: true - '@esbuild/linux-x64@0.25.3': optional: true - '@esbuild/netbsd-arm64@0.24.2': - optional: true - '@esbuild/netbsd-arm64@0.25.3': optional: true - '@esbuild/netbsd-x64@0.21.5': - optional: true - '@esbuild/netbsd-x64@0.23.1': optional: true - '@esbuild/netbsd-x64@0.24.2': - optional: true - '@esbuild/netbsd-x64@0.25.3': optional: true '@esbuild/openbsd-arm64@0.23.1': optional: true - '@esbuild/openbsd-arm64@0.24.2': - optional: true - '@esbuild/openbsd-arm64@0.25.3': optional: true - '@esbuild/openbsd-x64@0.21.5': - optional: true - '@esbuild/openbsd-x64@0.23.1': optional: true - '@esbuild/openbsd-x64@0.24.2': - optional: true - '@esbuild/openbsd-x64@0.25.3': optional: true - '@esbuild/sunos-x64@0.21.5': - optional: true - '@esbuild/sunos-x64@0.23.1': optional: true - '@esbuild/sunos-x64@0.24.2': - optional: true - '@esbuild/sunos-x64@0.25.3': optional: true - '@esbuild/win32-arm64@0.21.5': - optional: true - '@esbuild/win32-arm64@0.23.1': optional: true - '@esbuild/win32-arm64@0.24.2': - optional: true - '@esbuild/win32-arm64@0.25.3': optional: true - '@esbuild/win32-ia32@0.21.5': - optional: true - '@esbuild/win32-ia32@0.23.1': optional: true - '@esbuild/win32-ia32@0.24.2': - optional: true - '@esbuild/win32-ia32@0.25.3': optional: true - '@esbuild/win32-x64@0.21.5': - optional: true - '@esbuild/win32-x64@0.23.1': optional: true - '@esbuild/win32-x64@0.24.2': - optional: true - '@esbuild/win32-x64@0.25.3': optional: true @@ -18179,53 +16758,6 @@ snapshots: '@ethersproject/properties': 5.8.0 '@ethersproject/strings': 5.8.0 - '@fleek-platform/cli@3.9.4(@types/node@24.10.1)(encoding@0.1.13)(typescript@5.1.6)': - dependencies: - '@aws-sdk/client-lambda': 3.716.0 - '@fleek-platform/functions-esbuild-config': 0.0.19(esbuild@0.21.5) - '@web-std/file': 3.0.3 - ansi-escapes: 3.2.0 - as-table: 1.0.55 - aws4: 1.13.2 - axios: 1.7.9 - boxen: 5.1.2 - chalk: 4.1.2 - cli-progress: 3.12.0 - commander: 9.4.1 - conf: 10.2.0 - dotenv: 16.4.7 - eciesjs: 0.4.7 - esbuild: 0.21.5 - files-from-path: 1.0.0 - glob: 8.1.0 - hash-wasm: 4.12.0 - importx: 0.5.1 - lodash-es: 4.17.21 - multiformats: 9.9.0 - nanoid: 3.3.11 - native-fetch: 4.0.2(undici@6.21.0) - ora: 3.4.0 - press-any-key: 0.1.1 - prompts: 2.4.2 - semver: 7.6.3 - ts-node: 10.9.1(@types/node@24.10.1)(typescript@5.1.6) - undici: 6.21.0 - unique-names-generator: 4.7.1 - update-notifier-cjs: 5.1.6(encoding@0.1.13) - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - aws-crt - - debug - - encoding - - supports-color - - typescript - - '@fleek-platform/functions-esbuild-config@0.0.19(esbuild@0.21.5)': - dependencies: - esbuild: 0.21.5 - '@floating-ui/core@0.7.3': {} '@floating-ui/core@1.6.8': @@ -19076,8 +17608,6 @@ snapshots: '@multiformats/base-x@4.0.1': {} - '@noble/ciphers@0.5.3': {} - '@noble/curves@1.2.0': dependencies: '@noble/hashes': 1.3.2 @@ -19408,18 +17938,6 @@ snapshots: type-fest: 2.19.0 webpack-dev-server: 4.9.3(bufferutil@4.0.6)(utf-8-validate@5.0.9)(webpack@5.73.0(esbuild@0.25.3)) - '@pnpm/config.env-replace@1.1.0': {} - - '@pnpm/network.ca-file@1.0.2': - dependencies: - graceful-fs: 4.2.10 - - '@pnpm/npm-conf@2.3.1': - dependencies: - '@pnpm/config.env-replace': 1.1.0 - '@pnpm/network.ca-file': 1.0.2 - config-chain: 1.1.13 - '@polka/url@1.0.0-next.29': {} '@popperjs/core@2.11.5': {} @@ -20464,400 +18982,97 @@ snapshots: '@sentry/replay@7.43.0': dependencies: '@sentry/core': 7.43.0 - '@sentry/types': 7.43.0 - '@sentry/utils': 7.43.0 - - '@sentry/tracing@5.30.0': - dependencies: - '@sentry/hub': 5.30.0 - '@sentry/minimal': 5.30.0 - '@sentry/types': 5.30.0 - '@sentry/utils': 5.30.0 - tslib: 1.14.1 - - '@sentry/tracing@7.18.0': - dependencies: - '@sentry/core': 7.18.0 - '@sentry/types': 7.18.0 - '@sentry/utils': 7.18.0 - tslib: 1.14.1 - - '@sentry/types@5.30.0': {} - - '@sentry/types@7.18.0': {} - - '@sentry/types@7.43.0': {} - - '@sentry/utils@5.30.0': - dependencies: - '@sentry/types': 5.30.0 - tslib: 1.14.1 - - '@sentry/utils@7.18.0': - dependencies: - '@sentry/types': 7.18.0 - tslib: 1.14.1 - - '@sentry/utils@7.43.0': - dependencies: - '@sentry/types': 7.43.0 - tslib: 1.14.1 - - '@shopify/react-hooks@3.0.2(react@18.2.0)': - dependencies: - react: 18.2.0 - - '@shopify/react-web-worker@5.0.5(@babel/core@7.28.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(webpack@5.73.0(esbuild@0.25.3))': - dependencies: - '@shopify/react-hooks': 3.0.2(react@18.2.0) - '@shopify/useful-types': 5.1.1 - '@shopify/web-worker': 5.0.1(@babel/core@7.28.5)(webpack@5.73.0(esbuild@0.25.3)) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@babel/core' - - webpack - - webpack-virtual-modules - - '@shopify/useful-types@5.1.1': {} - - '@shopify/web-worker@5.0.1(@babel/core@7.28.5)(webpack@5.73.0(esbuild@0.25.3))': - dependencies: - '@remote-ui/rpc': 1.3.3 - optionalDependencies: - '@babel/core': 7.28.5 - webpack: 5.73.0(esbuild@0.25.3) - - '@sideway/address@4.1.4': - dependencies: - '@hapi/hoek': 9.3.0 - - '@sideway/formula@3.0.1': {} - - '@sideway/pinpoint@2.0.0': {} - - '@sinclair/typebox@0.24.20': {} - - '@sinclair/typebox@0.27.8': {} - - '@sinonjs/commons@1.8.3': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - - '@sinonjs/fake-timers@8.1.0': - dependencies: - '@sinonjs/commons': 1.8.3 - - '@smithy/abort-controller@3.1.9': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/config-resolver@3.0.13': - dependencies: - '@smithy/node-config-provider': 3.1.12 - '@smithy/types': 3.7.2 - '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.11 - tslib: 2.8.1 - - '@smithy/core@2.5.6': - dependencies: - '@smithy/middleware-serde': 3.0.11 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-stream': 3.3.3 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 - - '@smithy/credential-provider-imds@3.2.8': - dependencies: - '@smithy/node-config-provider': 3.1.12 - '@smithy/property-provider': 3.1.11 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - tslib: 2.8.1 - - '@smithy/eventstream-codec@3.1.10': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 3.7.2 - '@smithy/util-hex-encoding': 3.0.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-browser@3.0.14': - dependencies: - '@smithy/eventstream-serde-universal': 3.0.13 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/eventstream-serde-config-resolver@3.0.11': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/eventstream-serde-node@3.0.13': - dependencies: - '@smithy/eventstream-serde-universal': 3.0.13 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/eventstream-serde-universal@3.0.13': - dependencies: - '@smithy/eventstream-codec': 3.1.10 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/fetch-http-handler@4.1.2': - dependencies: - '@smithy/protocol-http': 4.1.8 - '@smithy/querystring-builder': 3.0.11 - '@smithy/types': 3.7.2 - '@smithy/util-base64': 3.0.0 - tslib: 2.8.1 - - '@smithy/hash-node@3.0.11': - dependencies: - '@smithy/types': 3.7.2 - '@smithy/util-buffer-from': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 - - '@smithy/invalid-dependency@3.0.11': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/is-array-buffer@2.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/is-array-buffer@3.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/middleware-content-length@3.0.13': - dependencies: - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/middleware-endpoint@3.2.7': - dependencies: - '@smithy/core': 2.5.6 - '@smithy/middleware-serde': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-middleware': 3.0.11 - tslib: 2.8.1 - - '@smithy/middleware-retry@3.0.32': - dependencies: - '@smithy/node-config-provider': 3.1.12 - '@smithy/protocol-http': 4.1.8 - '@smithy/service-error-classification': 3.0.11 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - tslib: 2.8.1 - uuid: 9.0.1 - - '@smithy/middleware-serde@3.0.11': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/middleware-stack@3.0.11': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/node-config-provider@3.1.12': - dependencies: - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/node-http-handler@3.3.3': - dependencies: - '@smithy/abort-controller': 3.1.9 - '@smithy/protocol-http': 4.1.8 - '@smithy/querystring-builder': 3.0.11 - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/property-provider@3.1.11': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/protocol-http@4.1.8': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/querystring-builder@3.0.11': - dependencies: - '@smithy/types': 3.7.2 - '@smithy/util-uri-escape': 3.0.0 - tslib: 2.8.1 - - '@smithy/querystring-parser@3.0.11': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@smithy/service-error-classification@3.0.11': - dependencies: - '@smithy/types': 3.7.2 - - '@smithy/shared-ini-file-loader@3.1.12': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 + '@sentry/types': 7.43.0 + '@sentry/utils': 7.43.0 - '@smithy/signature-v4@4.2.4': + '@sentry/tracing@5.30.0': dependencies: - '@smithy/is-array-buffer': 3.0.0 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 - '@smithy/util-hex-encoding': 3.0.0 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-uri-escape': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 - '@smithy/smithy-client@3.5.2': + '@sentry/tracing@7.18.0': dependencies: - '@smithy/core': 2.5.6 - '@smithy/middleware-endpoint': 3.2.7 - '@smithy/middleware-stack': 3.0.11 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 - '@smithy/util-stream': 3.3.3 - tslib: 2.8.1 + '@sentry/core': 7.18.0 + '@sentry/types': 7.18.0 + '@sentry/utils': 7.18.0 + tslib: 1.14.1 - '@smithy/types@3.7.2': - dependencies: - tslib: 2.8.1 + '@sentry/types@5.30.0': {} - '@smithy/url-parser@3.0.11': - dependencies: - '@smithy/querystring-parser': 3.0.11 - '@smithy/types': 3.7.2 - tslib: 2.8.1 + '@sentry/types@7.18.0': {} - '@smithy/util-base64@3.0.0': - dependencies: - '@smithy/util-buffer-from': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + '@sentry/types@7.43.0': {} - '@smithy/util-body-length-browser@3.0.0': + '@sentry/utils@5.30.0': dependencies: - tslib: 2.8.1 + '@sentry/types': 5.30.0 + tslib: 1.14.1 - '@smithy/util-body-length-node@3.0.0': + '@sentry/utils@7.18.0': dependencies: - tslib: 2.8.1 + '@sentry/types': 7.18.0 + tslib: 1.14.1 - '@smithy/util-buffer-from@2.2.0': + '@sentry/utils@7.43.0': dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 + '@sentry/types': 7.43.0 + tslib: 1.14.1 - '@smithy/util-buffer-from@3.0.0': + '@shopify/react-hooks@3.0.2(react@18.2.0)': dependencies: - '@smithy/is-array-buffer': 3.0.0 - tslib: 2.8.1 + react: 18.2.0 - '@smithy/util-config-provider@3.0.0': + '@shopify/react-web-worker@5.0.5(@babel/core@7.28.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(webpack@5.73.0(esbuild@0.25.3))': dependencies: - tslib: 2.8.1 + '@shopify/react-hooks': 3.0.2(react@18.2.0) + '@shopify/useful-types': 5.1.1 + '@shopify/web-worker': 5.0.1(@babel/core@7.28.5)(webpack@5.73.0(esbuild@0.25.3)) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@babel/core' + - webpack + - webpack-virtual-modules - '@smithy/util-defaults-mode-browser@3.0.32': - dependencies: - '@smithy/property-provider': 3.1.11 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - bowser: 2.11.0 - tslib: 2.8.1 + '@shopify/useful-types@5.1.1': {} - '@smithy/util-defaults-mode-node@3.0.32': + '@shopify/web-worker@5.0.1(@babel/core@7.28.5)(webpack@5.73.0(esbuild@0.25.3))': dependencies: - '@smithy/config-resolver': 3.0.13 - '@smithy/credential-provider-imds': 3.2.8 - '@smithy/node-config-provider': 3.1.12 - '@smithy/property-provider': 3.1.11 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - tslib: 2.8.1 + '@remote-ui/rpc': 1.3.3 + optionalDependencies: + '@babel/core': 7.28.5 + webpack: 5.73.0(esbuild@0.25.3) - '@smithy/util-endpoints@2.1.7': + '@sideway/address@4.1.4': dependencies: - '@smithy/node-config-provider': 3.1.12 - '@smithy/types': 3.7.2 - tslib: 2.8.1 + '@hapi/hoek': 9.3.0 - '@smithy/util-hex-encoding@3.0.0': - dependencies: - tslib: 2.8.1 + '@sideway/formula@3.0.1': {} - '@smithy/util-middleware@3.0.11': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 + '@sideway/pinpoint@2.0.0': {} - '@smithy/util-retry@3.0.11': - dependencies: - '@smithy/service-error-classification': 3.0.11 - '@smithy/types': 3.7.2 - tslib: 2.8.1 + '@sinclair/typebox@0.24.20': {} - '@smithy/util-stream@3.3.3': - dependencies: - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/node-http-handler': 3.3.3 - '@smithy/types': 3.7.2 - '@smithy/util-base64': 3.0.0 - '@smithy/util-buffer-from': 3.0.0 - '@smithy/util-hex-encoding': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 + '@sinclair/typebox@0.27.8': {} - '@smithy/util-uri-escape@3.0.0': + '@sinonjs/commons@1.8.3': dependencies: - tslib: 2.8.1 + type-detect: 4.0.8 - '@smithy/util-utf8@2.3.0': + '@sinonjs/commons@3.0.1': dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 + type-detect: 4.0.8 - '@smithy/util-utf8@3.0.0': + '@sinonjs/fake-timers@10.3.0': dependencies: - '@smithy/util-buffer-from': 3.0.0 - tslib: 2.8.1 + '@sinonjs/commons': 3.0.1 - '@smithy/util-waiter@3.2.0': + '@sinonjs/fake-timers@8.1.0': dependencies: - '@smithy/abort-controller': 3.1.9 - '@smithy/types': 3.7.2 - tslib: 2.8.1 + '@sinonjs/commons': 1.8.3 '@solana/buffer-layout@4.0.1': dependencies: @@ -22390,19 +20605,6 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 - '@web-std/blob@3.0.5': - dependencies: - '@web-std/stream': 1.0.0 - web-encoding: 1.1.5 - - '@web-std/file@3.0.3': - dependencies: - '@web-std/blob': 3.0.5 - - '@web-std/stream@1.0.0': - dependencies: - web-streams-polyfill: 3.2.1 - '@web3-react/coinbase-wallet@8.2.3(@coinbase/wallet-sdk@3.7.1(bufferutil@4.0.6)(encoding@0.1.13)(utf-8-validate@5.0.9))(@types/react@18.0.20)(immer@9.0.21)(react@18.2.0)': dependencies: '@coinbase/wallet-sdk': 3.7.1(bufferutil@4.0.6)(encoding@0.1.13)(utf-8-validate@5.0.9) @@ -22679,9 +20881,6 @@ snapshots: '@xtuc/long@4.2.2': {} - '@zxing/text-encoding@0.9.0': - optional: true - JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 @@ -22838,16 +21037,10 @@ snapshots: anser@1.4.10: {} - ansi-align@3.0.1: - dependencies: - string-width: 4.2.3 - ansi-colors@4.1.1: {} ansi-colors@4.1.3: {} - ansi-escapes@3.2.0: {} - ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -22860,8 +21053,6 @@ snapshots: ansi-html-community@0.0.8: {} - ansi-regex@2.1.1: {} - ansi-regex@4.1.1: {} ansi-regex@5.0.1: {} @@ -23003,10 +21194,6 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - as-table@1.0.55: - dependencies: - printable-characters: 1.0.42 - asap@2.0.6: {} asn1.js@5.4.1: @@ -23063,8 +21250,6 @@ snapshots: atomic-sleep@1.0.0: {} - atomically@1.7.0: {} - attr-accept@2.2.2: {} auto-bind@4.0.0: {} @@ -23085,8 +21270,6 @@ snapshots: await-timeout@1.1.1: {} - aws4@1.13.2: {} - axe-core@4.7.0: {} axios@0.21.4: @@ -23095,14 +21278,6 @@ snapshots: transitivePeerDependencies: - debug - axios@1.7.9: - dependencies: - follow-redirects: 1.15.9(debug@4.4.3) - form-data: 4.0.1 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - axobject-query@3.2.1: dependencies: dequal: 2.0.3 @@ -23554,19 +21729,6 @@ snapshots: bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - bowser@2.11.0: {} - - boxen@5.1.2: - dependencies: - ansi-align: 3.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - cli-boxes: 2.2.1 - string-width: 4.2.3 - type-fest: 0.20.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -23717,11 +21879,6 @@ snapshots: builtin-modules@3.3.0: {} - bundle-require@5.1.0(esbuild@0.24.2): - dependencies: - esbuild: 0.24.2 - load-tsconfig: 0.2.5 - bunyan-blackhole@1.1.1(bunyan@1.8.15): dependencies: bunyan: 1.8.15 @@ -23945,20 +22102,10 @@ snapshots: clean-stack@2.2.0: {} - cli-boxes@2.2.1: {} - - cli-cursor@2.1.0: - dependencies: - restore-cursor: 2.0.0 - cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - cli-progress@3.12.0: - dependencies: - string-width: 4.2.3 - cli-spinners@2.7.0: {} cli-table3@0.6.3: @@ -24031,8 +22178,6 @@ snapshots: chalk: 2.4.2 q: 1.5.1 - code-point-at@1.1.0: {} - collect-v8-coverage@1.0.1: {} color-convert@1.9.3: @@ -24125,33 +22270,11 @@ snapshots: is-whitespace: 0.3.0 kind-of: 3.2.2 - conf@10.2.0: - dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - atomically: 1.7.0 - debounce-fn: 4.0.0 - dot-prop: 6.0.1 - env-paths: 2.2.1 - json-schema-typed: 7.0.3 - onetime: 5.1.2 - pkg-up: 3.1.0 - semver: 7.6.3 - config-chain@1.1.13: dependencies: ini: 1.3.8 proto-list: 1.2.4 - configstore@5.0.1: - dependencies: - dot-prop: 5.3.0 - graceful-fs: 4.2.10 - make-dir: 3.1.0 - unique-string: 2.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 - confusing-browser-globals@1.0.11: {} connect-history-api-fallback@2.0.0: {} @@ -24575,10 +22698,6 @@ snapshots: dayjs@1.11.7: {} - debounce-fn@4.0.0: - dependencies: - mimic-fn: 3.1.0 - debounce@1.2.1: {} debug@2.6.9: @@ -24635,8 +22754,6 @@ snapshots: object-keys: 1.1.1 regexp.prototype.flags: 1.5.2 - deep-extend@0.6.0: {} - deep-is@0.1.4: {} deepmerge@2.2.1: {} @@ -24848,14 +22965,6 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 - dot-prop@5.3.0: - dependencies: - is-obj: 2.0.0 - - dot-prop@6.0.1: - dependencies: - is-obj: 2.0.0 - dotenv-expand@5.1.0: {} dotenv@10.0.0: {} @@ -24892,12 +23001,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - eciesjs@0.4.7: - dependencies: - '@noble/ciphers': 0.5.3 - '@noble/curves': 1.9.0 - '@noble/hashes': 1.8.0 - editorconfig@0.15.3: dependencies: commander: 2.20.3 @@ -25137,32 +23240,6 @@ snapshots: d: 1.0.1 ext: 1.7.0 - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - esbuild@0.23.1: optionalDependencies: '@esbuild/aix-ppc64': 0.23.1 @@ -25189,34 +23266,7 @@ snapshots: '@esbuild/win32-arm64': 0.23.1 '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 - - esbuild@0.24.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.24.2 - '@esbuild/android-arm': 0.24.2 - '@esbuild/android-arm64': 0.24.2 - '@esbuild/android-x64': 0.24.2 - '@esbuild/darwin-arm64': 0.24.2 - '@esbuild/darwin-x64': 0.24.2 - '@esbuild/freebsd-arm64': 0.24.2 - '@esbuild/freebsd-x64': 0.24.2 - '@esbuild/linux-arm': 0.24.2 - '@esbuild/linux-arm64': 0.24.2 - '@esbuild/linux-ia32': 0.24.2 - '@esbuild/linux-loong64': 0.24.2 - '@esbuild/linux-mips64el': 0.24.2 - '@esbuild/linux-ppc64': 0.24.2 - '@esbuild/linux-riscv64': 0.24.2 - '@esbuild/linux-s390x': 0.24.2 - '@esbuild/linux-x64': 0.24.2 - '@esbuild/netbsd-arm64': 0.24.2 - '@esbuild/netbsd-x64': 0.24.2 - '@esbuild/openbsd-arm64': 0.24.2 - '@esbuild/openbsd-x64': 0.24.2 - '@esbuild/sunos-x64': 0.24.2 - '@esbuild/win32-arm64': 0.24.2 - '@esbuild/win32-ia32': 0.24.2 - '@esbuild/win32-x64': 0.24.2 + optional: true esbuild@0.25.3: optionalDependencies: @@ -25250,8 +23300,6 @@ snapshots: escalade@3.2.0: {} - escape-goat@2.1.1: {} - escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} @@ -25994,10 +24042,6 @@ snapshots: dependencies: minimatch: 5.1.6 - files-from-path@1.0.0: - dependencies: - graceful-fs: 4.2.10 - filesize@8.0.7: {} fill-range@7.0.1: @@ -26133,12 +24177,6 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 - form-data@4.0.1: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - formdata-node@4.4.1: dependencies: node-domexception: 1.0.0 @@ -26332,10 +24370,6 @@ snapshots: minimatch: 5.1.6 once: 1.4.0 - global-dirs@3.0.1: - dependencies: - ini: 2.0.0 - global-modules@2.0.0: dependencies: global-prefix: 3.0.0 @@ -26570,16 +24604,12 @@ snapshots: has-values@0.1.4: {} - has-yarn@2.1.0: {} - hash-base@3.1.0: dependencies: inherits: 2.0.4 readable-stream: 3.6.0 safe-buffer: 5.2.1 - hash-wasm@4.12.0: {} - hash.js@1.1.3: dependencies: inherits: 2.0.4 @@ -26886,24 +24916,11 @@ snapshots: import-from@4.0.0: {} - import-lazy@2.1.0: {} - import-local@3.1.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - importx@0.5.1: - dependencies: - bundle-require: 5.1.0(esbuild@0.24.2) - debug: 4.4.3 - esbuild: 0.24.2 - jiti: 2.4.2 - pathe: 1.1.2 - tsx: 4.19.2 - transitivePeerDependencies: - - supports-color - imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -26919,8 +24936,6 @@ snapshots: ini@1.3.8: {} - ini@2.0.0: {} - inline-style-parser@0.1.1: {} input-format@0.3.8: @@ -27122,10 +25137,6 @@ snapshots: is-callable@1.2.7: {} - is-ci@2.0.0: - dependencies: - ci-info: 2.0.0 - is-core-module@2.13.1: dependencies: hasown: 2.0.2 @@ -27154,10 +25165,6 @@ snapshots: dependencies: call-bind: 1.0.7 - is-fullwidth-code-point@1.0.0: - dependencies: - number-is-nan: 1.0.1 - is-fullwidth-code-point@2.0.0: {} is-fullwidth-code-point@3.0.0: {} @@ -27182,11 +25189,6 @@ snapshots: dependencies: is-docker: 3.0.0 - is-installed-globally@0.4.0: - dependencies: - global-dirs: 3.0.1 - is-path-inside: 3.0.3 - is-interactive@1.0.0: {} is-ip@3.1.0: @@ -27208,8 +25210,6 @@ snapshots: is-negative-zero@2.0.3: {} - is-npm@5.0.0: {} - is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.2 @@ -27218,8 +25218,6 @@ snapshots: is-obj@1.0.1: {} - is-obj@2.0.0: {} - is-path-inside@3.0.3: {} is-plain-obj@2.1.0: {} @@ -27308,8 +25306,6 @@ snapshots: dependencies: is-inside-container: 1.0.0 - is-yarn-global@0.3.0: {} - is64bit@2.0.0: dependencies: system-architecture: 0.1.0 @@ -27977,7 +25973,8 @@ snapshots: jiti@1.21.0: {} - jiti@2.4.2: {} + jiti@2.4.2: + optional: true joi@17.10.1: dependencies: @@ -28134,8 +26131,6 @@ snapshots: json-schema-traverse@1.0.0: {} - json-schema-typed@7.0.3: {} - json-schema@0.4.0: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -28360,8 +26355,6 @@ snapshots: lit-element: 3.3.3 lit-html: 2.8.0 - load-tsconfig@0.2.5: {} - loader-runner@4.3.0: {} loader-utils@2.0.4: @@ -28436,10 +26429,6 @@ snapshots: lodash@4.17.21: {} - log-symbols@2.2.0: - dependencies: - chalk: 2.4.2 - log-symbols@4.1.0: dependencies: chalk: 4.1.2 @@ -29205,12 +27194,8 @@ snapshots: mime@3.0.0: {} - mimic-fn@1.2.0: {} - mimic-fn@2.1.0: {} - mimic-fn@3.1.0: {} - mimic-fn@4.0.0: {} mimic-response@1.0.1: {} @@ -29392,10 +27377,6 @@ snapshots: dependencies: node-fetch: 2.7.0(encoding@0.1.13) - native-fetch@4.0.2(undici@6.21.0): - dependencies: - undici: 6.21.0 - natural-compare-lite@1.4.0: {} natural-compare@1.4.0: {} @@ -29501,8 +27482,6 @@ snapshots: nullthrows@1.1.1: {} - number-is-nan@1.0.1: {} - number-to-bn@1.7.0: dependencies: bn.js: 4.11.6 @@ -29646,10 +27625,6 @@ snapshots: dependencies: wrappy: 1.0.2 - onetime@2.0.1: - dependencies: - mimic-fn: 1.2.0 - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -29706,15 +27681,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ora@3.4.0: - dependencies: - chalk: 2.4.2 - cli-cursor: 2.1.0 - cli-spinners: 2.7.0 - log-symbols: 2.2.0 - strip-ansi: 5.2.0 - wcwidth: 1.0.1 - ora@5.4.1: dependencies: bl: 4.1.0 @@ -30450,10 +28416,6 @@ snapshots: prelude-ls@1.2.1: {} - press-any-key@0.1.1: - dependencies: - single-line-log: 1.1.2 - prettier-linter-helpers@1.0.0: dependencies: fast-diff: 1.2.0 @@ -30499,8 +28461,6 @@ snapshots: extend-shallow: 2.0.1 js-beautify: 1.14.7 - printable-characters@1.0.42: {} - process-nextick-args@2.0.1: {} process-on-spawn@1.0.0: @@ -30574,8 +28534,6 @@ snapshots: proxy-compare@2.5.1: {} - proxy-from-env@1.1.0: {} - pseudomap@1.0.2: {} psl@1.9.0: {} @@ -30594,10 +28552,6 @@ snapshots: punycode@2.3.1: optional: true - pupa@2.1.1: - dependencies: - escape-goat: 2.1.1 - pvtsutils@1.3.2: dependencies: tslib: 2.8.1 @@ -30697,13 +28651,6 @@ snapshots: iconv-lite: 0.7.0 unpipe: 1.0.0 - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.6 - strip-json-comments: 2.0.1 - react-app-polyfill@3.0.0: dependencies: core-js: 3.23.5 @@ -31461,14 +29408,6 @@ snapshots: unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 - registry-auth-token@5.0.3: - dependencies: - '@pnpm/npm-conf': 2.3.1 - - registry-url@5.1.0: - dependencies: - rc: 1.2.8 - regjsparser@0.9.1: dependencies: jsesc: 0.5.0 @@ -31587,11 +29526,6 @@ snapshots: response-iterator@0.2.6: {} - restore-cursor@2.0.0: - dependencies: - onetime: 2.0.1 - signal-exit: 3.0.7 - restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -31859,10 +29793,6 @@ snapshots: react-popper: 1.3.11(react@16.14.0) shallowequal: 1.1.0 - semver-diff@3.1.1: - dependencies: - semver: 6.3.1 - semver@5.7.2: {} semver@6.3.1: {} @@ -32048,10 +29978,6 @@ snapshots: dependencies: is-arrayish: 0.3.2 - single-line-log@1.1.2: - dependencies: - string-width: 1.0.2 - sirv@1.0.19: dependencies: '@polka/url': 1.0.0-next.29 @@ -32275,12 +30201,6 @@ snapshots: string-natural-compare@3.0.1: {} - string-width@1.0.2: - dependencies: - code-point-at: 1.1.0 - is-fullwidth-code-point: 1.0.0 - strip-ansi: 3.0.1 - string-width@3.1.0: dependencies: emoji-regex: 7.0.3 @@ -32347,10 +30267,6 @@ snapshots: is-obj: 1.0.1 is-regexp: 1.0.0 - strip-ansi@3.0.1: - dependencies: - ansi-regex: 2.1.1 - strip-ansi@5.2.0: dependencies: ansi-regex: 4.1.1 @@ -32381,8 +30297,6 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-json-comments@2.0.1: {} - strip-json-comments@3.1.1: {} strnum@1.0.5: {} @@ -32782,6 +30696,7 @@ snapshots: get-tsconfig: 4.8.1 optionalDependencies: fsevents: 2.3.3 + optional: true tweetnacl-util@0.15.1: {} @@ -32923,8 +30838,6 @@ snapshots: dependencies: busboy: 1.6.0 - undici@6.21.0: {} - unenv@1.9.0: dependencies: consola: 3.2.3 @@ -32958,8 +30871,6 @@ snapshots: uniq@1.0.1: {} - unique-names-generator@4.7.1: {} - unique-string@2.0.0: dependencies: crypto-random-string: 2.0.0 @@ -33056,27 +30967,6 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - update-notifier-cjs@5.1.6(encoding@0.1.13): - dependencies: - boxen: 5.1.2 - chalk: 4.1.2 - configstore: 5.0.1 - has-yarn: 2.1.0 - import-lazy: 2.1.0 - is-ci: 2.0.0 - is-installed-globally: 0.4.0 - is-npm: 5.0.0 - is-yarn-global: 0.3.0 - isomorphic-fetch: 3.0.0(encoding@0.1.13) - pupa: 2.1.1 - registry-auth-token: 5.0.3 - registry-url: 5.1.0 - semver: 7.6.3 - semver-diff: 3.1.1 - xdg-basedir: 4.0.0 - transitivePeerDependencies: - - encoding - upper-case-first@2.0.2: dependencies: tslib: 2.8.1 @@ -33173,8 +31063,6 @@ snapshots: uuid@8.3.2: {} - uuid@9.0.1: {} - uvu@0.5.6: dependencies: dequal: 2.0.3 @@ -33393,12 +31281,6 @@ snapshots: dependencies: defaults: 1.0.4 - web-encoding@1.1.5: - dependencies: - util: 0.12.5 - optionalDependencies: - '@zxing/text-encoding': 0.9.0 - web-namespaces@2.0.1: {} web-streams-polyfill@3.2.1: {} @@ -33728,10 +31610,6 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - widest-line@3.1.0: - dependencies: - string-width: 4.2.3 - word-wrap@1.2.3: {} word-wrap@1.2.5: {} @@ -33935,8 +31813,6 @@ snapshots: bufferutil: 4.0.6 utf-8-validate: 5.0.9 - xdg-basedir@4.0.0: {} - xhr-request-promise@0.1.3: dependencies: xhr-request: 1.1.0 From b37538f265fc5b64a506635b70d09f6566b4307a Mon Sep 17 00:00:00 2001 From: Ludovic Levalleux Date: Mon, 7 Sep 2026 16:02:17 +0100 Subject: [PATCH 2/4] ci: fix review findings in the Cloudflare Pages deploy workflows REACT_APP_RELEASE_TAG was set from `git describe --tags --always`, so it changed on every commit rather than every release. The app treats a change in it as a new release and clears the seller's in-progress create-product draft from localStorage, so every merge to main would have wiped drafts on testing. Split it back into two values as the old workflow had: REACT_APP_RELEASE_TAG names the release (`git describe --abbrev=0`), REACT_APP_RELEASE_NAME names the build. The preflight check covered 3 of ~20 build variables. Since every REACT_APP_* is inlined at build time, an unset one is not an error - it becomes an empty string and silently disables what it configures, in a bundle that builds and deploys green. Extend the check to everything the app cannot work without, and validate that REACT_APP_ENV_NAME is one the config recognises: `prod` passes an emptiness test and then throws at module load, which is the blank page the check exists to prevent. Declaring the secrets as `required: true` on workflow_call would not help here - it proves the caller passed something, and these are resolved from the GitHub Environment, not passed by callers. Also: - deploy the commit that was built. `github.sha` is the ref that triggered the run, so a production dispatch recorded main's tip rather than the tag it built - validate the release tag, project and branch before they are spliced into the wrangler command line. The tag is free-form text from a dispatch form, and a value with a space or a shell metacharacter changes what runs - create the Sentry release once per deploy, not once per view mode: the two matrix legs were racing on the same release object - drop REACT_APP_ENABLE_SENTRY_LOGGING, which only has an effect when NODE_ENV is development and so did nothing in any deployed build - build in ci.yaml only for fork PRs. Every other path builds the same commit again with real values, so a push to main was doing three full builds - verify a production tag with one API call instead of cloning the whole repository onto a runner to answer a yes/no question - extract the pnpm/node setup into a composite action - skip the preview comment when there is no deployment URL, rather than posting links that are bare relative paths - correct the fail-fast comment, which claimed the opposite of what the setting does, and the smoke-check comment, which overstated what it can catch secrets: inherit stays. An explicit allow-list would make each caller supply its own repository-scope value for secrets that are scoped to the Environment, which for those is the empty string. The fork guard in deploy-preview.yaml is what keeps them away from untrusted code. Co-Authored-By: Claude Opus 5 --- .github/actions/setup-node-pnpm/action.yml | 18 +++ .github/workflows/ci.yaml | 32 ++--- .github/workflows/deploy-preview.yaml | 15 +- .github/workflows/deploy-production.yaml | 25 +++- .github/workflows/deploy_reusable.yaml | 155 ++++++++++++++++----- README.md | 15 +- 6 files changed, 203 insertions(+), 57 deletions(-) create mode 100644 .github/actions/setup-node-pnpm/action.yml diff --git a/.github/actions/setup-node-pnpm/action.yml b/.github/actions/setup-node-pnpm/action.yml new file mode 100644 index 000000000..b88dced17 --- /dev/null +++ b/.github/actions/setup-node-pnpm/action.yml @@ -0,0 +1,18 @@ +name: "Setup Node and pnpm" +description: >- + Installs pnpm at the version pinned by package.json's packageManager field and Node at the + version in .nvmrc, with the pnpm store cached. Requires the repository to be checked out. + +runs: + using: composite + steps: + - name: Install pnpm + uses: pnpm/action-setup@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + registry-url: "https://registry.npmjs.org" + cache: "pnpm" + cache-dependency-path: "./pnpm-lock.yaml" diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 707a852c3..87b060c8b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -20,32 +20,30 @@ jobs: contents: read env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - # The build only has to compile here, not run, so placeholders are enough for the - # three variables config.ts requires at module load. Real values are injected by - # deploy_reusable.yaml from the target environment. + # Only the fork-PR build below reads these. It has to compile, not run, so + # placeholders are enough for the three variables config.ts requires at module load. REACT_APP_ENV_NAME: testing REACT_APP_INFURA_KEY: ci-placeholder REACT_APP_WIDGETS_URL: https://example.invalid steps: - uses: actions/checkout@v4 - - name: Install pnpm - uses: pnpm/action-setup@v4 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version-file: ".nvmrc" - registry-url: "https://registry.npmjs.org" - cache: "pnpm" - cache-dependency-path: "./pnpm-lock.yaml" + - uses: ./.github/actions/setup-node-pnpm - run: pnpm install --frozen-lockfile - # Non-mutating checks run first, so they actually gate: `pnpm prettier` and - # `pnpm lint` rewrite files, which would make them pass unconditionally and - # would leave the build compiling something other than the committed code. + # Non-mutating checks: `pnpm prettier` and `pnpm lint` rewrite files, which would + # make them pass unconditionally and would leave the build compiling something other + # than the committed code. - run: pnpm prettier:check - run: pnpm lint:check - run: pnpm tsc - - run: pnpm build + + # Every other path already builds this commit against the real environment values - + # deploy-preview.yaml for a PR, deploy-testing.yaml for a push to main - and a deploy + # that fails to build publishes nothing. Repeating it here would spend a third full + # build to compile the same tree against placeholders. Fork PRs get no preview + # deployment (see the `if:` in deploy-preview.yaml), so they are built here. + - name: Build (fork PRs only) + if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository }} + run: pnpm build diff --git a/.github/workflows/deploy-preview.yaml b/.github/workflows/deploy-preview.yaml index c4b200bfb..e95bca06a 100644 --- a/.github/workflows/deploy-preview.yaml +++ b/.github/workflows/deploy-preview.yaml @@ -8,8 +8,10 @@ on: jobs: deploy: - # Fork PRs cannot read environment secrets, so the build would fail on the - # required-variable check. Skip them rather than fail them. + # This is also the security boundary for the secrets below: a fork PR never reaches + # this job, so only code from a branch in this repository is ever built with the + # Cloudflare token on the runner. Fork PRs cannot read environment secrets anyway, so + # they would fail the required-configuration check rather than deploy. if: github.event.pull_request.head.repo.full_name == github.repository uses: ./.github/workflows/deploy_reusable.yaml with: @@ -20,10 +22,19 @@ jobs: # deployment, published at https://pr-..pages.dev. cf_branch: pr-${{ github.event.number }} is_preview: true + # `inherit`, not an explicit allow-list: the REACT_APP_* values are scoped to the + # `testing` GitHub Environment and are resolved by the called job's `environment:`. + # Naming them here would pass this workflow's own repository-scope values instead, + # which for an environment-scoped secret is the empty string - a green deploy of a + # bundle with no Magic key, no WalletConnect id and no meta-tx keys. secrets: inherit comment: needs: deploy + # deployment_url comes from a matrix job's output. It should always be set for the + # single-entry matrix above, but if it ever is not, post nothing rather than a comment + # whose links are the bare relative paths `/#/dapp` and `/#/dr_center`. + if: ${{ needs.deploy.outputs.deployment_url != '' }} runs-on: ubuntu-22.04 permissions: pull-requests: write diff --git a/.github/workflows/deploy-production.yaml b/.github/workflows/deploy-production.yaml index a03707a08..662bbca53 100644 --- a/.github/workflows/deploy-production.yaml +++ b/.github/workflows/deploy-production.yaml @@ -15,19 +15,32 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - name: Resolve tag env: + GH_TOKEN: ${{ github.token }} + REPO: ${{ github.repository }} TAG: ${{ inputs.tag }} run: | set -euo pipefail - if ! sha="$(git rev-parse --verify --quiet "refs/tags/${TAG}^{commit}")"; then + + # The tag is free-form text from the dispatch form and ends up on a wrangler + # command line in deploy_reusable.yaml. That step validates it too; rejecting it + # here means a bad value fails in seconds instead of after a full build. + case "$TAG" in + "" | *[!A-Za-z0-9._/+-]*) + echo "::error::Tag '${TAG}' must be non-empty and use only A-Z a-z 0-9 . _ / + -" + exit 1 + ;; + esac + + # One API call rather than cloning every commit, branch and tag of the repository + # onto a runner to answer a yes/no question. The deploy job resolves the commit + # it builds from its own checkout, so nothing needs to be handed on from here. + if ! object="$(gh api "repos/${REPO}/git/ref/tags/${TAG}" --jq .object.sha 2>/dev/null)"; then echo "::error::Tag '${TAG}' does not exist in this repository." exit 1 fi - echo "Deploying ${TAG} (${sha})" + echo "Tag ${TAG} exists (${object})." deploy: needs: verify-tag @@ -40,4 +53,6 @@ jobs: # Must equal the production projects' production branch, or this lands as a Preview # deployment and bosonapp.io keeps serving the previous build. cf_branch: main + # See the note in deploy-preview.yaml: the REACT_APP_* values are environment-scoped + # and an explicit allow-list would pass empty repository-scope values instead. secrets: inherit diff --git a/.github/workflows/deploy_reusable.yaml b/.github/workflows/deploy_reusable.yaml index 36d72f8be..0885e125c 100644 --- a/.github/workflows/deploy_reusable.yaml +++ b/.github/workflows/deploy_reusable.yaml @@ -48,7 +48,10 @@ jobs: outputs: deployment_url: ${{ steps.deploy.outputs.deployment-url }} strategy: - # Never cancel a sibling: one view mode failing must not leave the other half-deployed. + # dApp and DR Center are separate Cloudflare projects, so a deploy cannot be atomic + # across them either way. If one leg fails the other still publishes, and the two + # halves sit on different builds until the failed leg is re-run - which is the + # recoverable outcome, and the reason not to cancel the sibling as well. fail-fast: false matrix: view_mode: ${{ fromJSON(inputs.view_modes) }} @@ -84,7 +87,6 @@ jobs: REACT_APP_META_TX_API_IDS_MAP: ${{ vars.REACT_APP_META_TX_API_IDS_MAP }} REACT_APP_META_TX_RELAYER_URL: ${{ vars.REACT_APP_META_TX_RELAYER_URL }} REACT_APP_OFFER_CURATION_LIST: ${{ vars.REACT_APP_OFFER_CURATION_LIST }} - REACT_APP_ENABLE_SENTRY_LOGGING: ${{ vars.REACT_APP_ENABLE_SENTRY_LOGGING }} # A preview serves both view modes from one deployment, so each half must link to itself. REACT_APP_DAPP_VIEW_MODE: ${{ inputs.is_preview && 'same_origin' || vars.REACT_APP_DAPP_VIEW_MODE }} @@ -110,24 +112,24 @@ jobs: # Full history so `git describe --tags` can name untagged testing builds. fetch-depth: 0 - - name: Install pnpm - uses: pnpm/action-setup@v4 + # Resolved from the checked-out tree, not from the ref this workflow came from, so a + # tag cut before this action existed cannot be deployed by re-running the workflow. + # Roll back from the Cloudflare dashboard instead, which redeploys a build that has + # already been uploaded. + - uses: ./.github/actions/setup-node-pnpm - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version-file: ".nvmrc" - registry-url: "https://registry.npmjs.org" - cache: "pnpm" - cache-dependency-path: "./pnpm-lock.yaml" - - - name: Resolve Cloudflare project and release tag + - name: Resolve deployment identity env: VIEW_MODE: ${{ matrix.view_mode }} + # The Sentry release belongs to the deploy, not to a view mode, so exactly one + # leg of the matrix owns it. + PRIMARY_VIEW_MODE: ${{ fromJSON(inputs.view_modes)[0] }} ENVIRONMENT: ${{ inputs.environment }} INPUT_RELEASE_TAG: ${{ inputs.release_tag }} + CF_BRANCH: ${{ inputs.cf_branch }} CF_PROJECT_DAPP: ${{ vars.CF_PROJECT_DAPP }} CF_PROJECT_DR_CENTER: ${{ vars.CF_PROJECT_DR_CENTER }} + PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }} run: | set -euo pipefail @@ -144,39 +146,121 @@ jobs: "Set it to the exact Cloudflare project name from 'wrangler pages project list'." exit 1 fi - echo "CF_PROJECT=$project" >> "$GITHUB_ENV" - tag="$INPUT_RELEASE_TAG" - if [ -z "$tag" ]; then - # Testing and preview builds are not tagged; name them after the nearest tag. - tag="$(git describe --tags --always)" + # RELEASE_TAG names the release a build belongs to; RELEASE_NAME names the build + # itself. They must not be conflated: src/lib/utils/release.ts wipes the seller + # in-progress create-product draft out of localStorage whenever + # REACT_APP_RELEASE_TAG changes, so a value that moves with every commit would + # clear drafts on every push to main instead of once per release. + if [ -n "$INPUT_RELEASE_TAG" ]; then + release_tag="$INPUT_RELEASE_TAG" + release_name="$INPUT_RELEASE_TAG" + else + release_tag="$(git describe --tags --abbrev=0 2>/dev/null || git rev-parse --short HEAD)" + release_name="$(git describe --tags --always)" + fi + + # The commit that was actually built. github.sha is the ref that triggered the + # run, which for a tag dispatch is the tip of the branch the workflow was + # launched from - not the tag being deployed. + commit_sha="${PR_HEAD_SHA:-$(git rev-parse HEAD)}" + + # These get spliced into the wrangler command line below, which is split into + # arguments before wrangler sees it. A space, quote or shell metacharacter would + # silently change what runs, and the release tag is free-form text typed into a + # workflow_dispatch form. + require_safe() { + case "$2" in + "" | *[!A-Za-z0-9._/+-]*) + echo "::error::$1 is '$2'; it must be non-empty and use only A-Z a-z 0-9 . _ / + -" + exit 1 + ;; + esac + } + require_safe "Cloudflare project name" "$project" + require_safe "Cloudflare branch" "$CF_BRANCH" + require_safe "Release name" "$release_name" + + if [ "$VIEW_MODE" = "$PRIMARY_VIEW_MODE" ]; then + primary_leg=true + else + primary_leg=false fi - echo "RELEASE_TAG=$tag" >> "$GITHUB_ENV" - echo "REACT_APP_RELEASE_TAG=$tag" >> "$GITHUB_ENV" - echo "REACT_APP_RELEASE_NAME=$tag" >> "$GITHUB_ENV" - - name: Check required build variables are set + { + echo "CF_PROJECT=$project" + echo "COMMIT_SHA=$commit_sha" + echo "RELEASE_NAME=$release_name" + echo "IS_PRIMARY_LEG=$primary_leg" + echo "REACT_APP_RELEASE_TAG=$release_tag" + echo "REACT_APP_RELEASE_NAME=$release_name" + } >> "$GITHUB_ENV" + + - name: Check the build configuration is complete env: ENVIRONMENT: ${{ inputs.environment }} + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} run: | set -euo pipefail - # config.ts throws on these at *module load*, so an empty value builds green and - # then serves a blank page. Fail here instead of shipping it. + # Nothing downstream fails on an unset value. Every REACT_APP_* is inlined at + # build time, so an unset one becomes an empty string and the feature it + # configures is silently dead in a bundle that built and deployed green: + # WalletConnect with no project id, email login with no Magic key, gasless + # transactions with an empty key map. Listed here is what the app cannot work + # without; anything with a real fallback in src/lib/config.ts is left out. missing="" - for name in REACT_APP_ENV_NAME REACT_APP_INFURA_KEY REACT_APP_WIDGETS_URL; do + for name in \ + REACT_APP_ENV_NAME \ + REACT_APP_INFURA_KEY \ + REACT_APP_WIDGETS_URL \ + REACT_APP_WALLET_CONNECT_PROJECT_ID \ + REACT_APP_MAGIC_API_KEY \ + REACT_APP_META_TX_API_KEY_MAP \ + REACT_APP_META_TX_API_IDS_MAP \ + REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS \ + REACT_APP_UNISWAP_API_URL \ + REACT_APP_AWS_API_ENDPOINT \ + REACT_APP_MOONPAY_API \ + REACT_APP_MOONPAY_API_KEY \ + REACT_APP_MOONPAY_LINK \ + REACT_APP_MOONPAY_EXTERNAL_LINK \ + REACT_APP_IPFS_GATEWAY \ + REACT_APP_RNFT_LICENSE_TEMPLATE \ + REACT_APP_BUYER_SELLER_AGREEMENT_TEMPLATE \ + REACT_APP_FAIR_EXCHANGE_POLICY_RULES \ + REACT_APP_DAPP_VIEW_MODE \ + REACT_APP_DR_CENTER_VIEW_MODE \ + CLOUDFLARE_API_TOKEN \ + CLOUDFLARE_ACCOUNT_ID; do if [ -z "${!name:-}" ]; then missing="$missing $name" fi done if [ -n "$missing" ]; then - echo "::error::Missing required build variables for environment '${ENVIRONMENT}':$missing" + echo "::error::Missing required build configuration for environment '${ENVIRONMENT}':$missing" exit 1 fi + # A value config.ts does not recognise is as fatal as an empty one, and the + # emptiness check above does not catch it: getEnvConfigs() returns [], and + # reading defaultEnvConfig.chainId throws while the module is still loading. + case "$REACT_APP_ENV_NAME" in + testing | staging | production) ;; + *) + echo "::error::REACT_APP_ENV_NAME is '${REACT_APP_ENV_NAME}' on the '${ENVIRONMENT}' environment;" \ + "src/lib/config.ts only accepts testing, staging or production." + exit 1 + ;; + esac + - run: pnpm install --frozen-lockfile - name: Create Sentry release - if: ${{ !inputs.is_preview }} + # One release per deploy, not one per view mode: both legs of the matrix would + # otherwise create the same version at the same time and race each other + # associating its commits. + if: ${{ !inputs.is_preview && env.IS_PRIMARY_LEG == 'true' }} uses: getsentry/action-release@v1 env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} @@ -184,7 +268,7 @@ jobs: SENTRY_PROJECT: "v2-dapp" with: environment: ${{ inputs.environment }} - version: ${{ env.RELEASE_TAG }} + version: ${{ env.RELEASE_NAME }} - run: pnpm build @@ -196,19 +280,25 @@ jobs: accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} wranglerVersion: "4.129.0" # cf_branch must equal the project's production branch to publish a Production - # deployment; anything else (pr-123) lands as a Preview. + # deployment; anything else (pr-123) lands as a Preview. Every value interpolated + # into this command line is validated in "Resolve deployment identity" above. command: >- pages deploy build --project-name=${{ env.CF_PROJECT }} --branch=${{ inputs.cf_branch }} - --commit-hash=${{ github.sha }} - --commit-message=${{ env.RELEASE_TAG }} + --commit-hash=${{ env.COMMIT_SHA }} + --commit-message=${{ env.RELEASE_NAME }} - name: Smoke check the deployment env: DEPLOY_URL: ${{ steps.deploy.outputs.deployment-url }} run: | set -euo pipefail + # This runs against a deployment that is already serving traffic, and what it + # fetches is an SPA shell: a build that throws in config.ts still returns 200 + # with a non-empty body, because the crash happens in the browser. So it catches + # a failed or empty upload, not a broken build - keeping a broken build from + # shipping is what the configuration check before `pnpm build` is for. if [ -z "$DEPLOY_URL" ]; then echo "::error::wrangler returned no deployment URL." exit 1 @@ -234,6 +324,7 @@ jobs: echo "| View mode | \`${VIEW_MODE}\` |" echo "| CF project | ${CF_PROJECT} |" echo "| CF branch | \`${CF_BRANCH}\` |" - echo "| Release | ${RELEASE_TAG} |" + echo "| Release | ${RELEASE_NAME} |" + echo "| Commit | ${COMMIT_SHA} |" echo "| URL | ${DEPLOY_URL} |" } >> "$GITHUB_STEP_SUMMARY" diff --git a/README.md b/README.md index 4242bddd3..1a334a7ac 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,20 @@ Deployments are triggered as follows: Build-time configuration lives in GitHub: values common to all environments are repository variables/secrets, and environment-specific values override them in the -`testing`, `staging` and `production` GitHub Environments. +`testing`, `staging` and `production` GitHub Environments. Every `REACT_APP_*` value is +inlined into the bundle at build time, so an unset one is not an error — it becomes an +empty string and silently disables whatever it configures. The **Check the build +configuration is complete** step in `deploy_reusable.yaml` lists the values a deployment +cannot work without and fails the run before building if any is missing; add to that list +when you add a variable the app depends on. + +Each environment also needs `CF_PROJECT_DAPP` and `CF_PROJECT_DR_CENTER` variables holding +the exact Cloudflare project names (`wrangler pages project list`), plus the repository +secrets `CLOUDFLARE_API_TOKEN` and `CLOUDFLARE_ACCOUNT_ID`. + +Branch protection on `main` should require the **Format, lint, types and build** job of +**CI - Interface** and the **Deploy PR preview** workflow. Required checks are matched by +name, so renaming either workflow or job detaches the rule silently. ## Local development From 05f59492ae60ed0e6cd5da2317a74d1fe0d56577 Mon Sep 17 00:00:00 2001 From: Ludovic Levalleux Date: Mon, 7 Sep 2026 17:19:00 +0100 Subject: [PATCH 3/4] ci: add default resolution period days environment variable to deployment --- .github/workflows/deploy_reusable.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_reusable.yaml b/.github/workflows/deploy_reusable.yaml index 0885e125c..f738e1ba4 100644 --- a/.github/workflows/deploy_reusable.yaml +++ b/.github/workflows/deploy_reusable.yaml @@ -87,6 +87,7 @@ jobs: REACT_APP_META_TX_API_IDS_MAP: ${{ vars.REACT_APP_META_TX_API_IDS_MAP }} REACT_APP_META_TX_RELAYER_URL: ${{ vars.REACT_APP_META_TX_RELAYER_URL }} REACT_APP_OFFER_CURATION_LIST: ${{ vars.REACT_APP_OFFER_CURATION_LIST }} + REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS: ${{ vars.REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS }} # A preview serves both view modes from one deployment, so each half must link to itself. REACT_APP_DAPP_VIEW_MODE: ${{ inputs.is_preview && 'same_origin' || vars.REACT_APP_DAPP_VIEW_MODE }} @@ -99,7 +100,6 @@ jobs: REACT_APP_MOONPAY_API_KEY: ${{ secrets.REACT_APP_MOONPAY_API_KEY }} REACT_APP_GOOGLE_TAG_ID: ${{ secrets.REACT_APP_GOOGLE_TAG_ID }} REACT_APP_META_TX_API_KEY_MAP: ${{ secrets.REACT_APP_META_TX_API_KEY_MAP }} - REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS: ${{ secrets.REACT_APP_DEFAULT_RESOLUTION_PERIOD_DAYS }} REACT_APP_INFURA_IPFS_PROJECT_ID: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_ID }} REACT_APP_INFURA_IPFS_PROJECT_SECRET: ${{ secrets.REACT_APP_INFURA_IPFS_PROJECT_SECRET }} From a5852ae624ec1e93be9bd53665d6b2c01833ef7a Mon Sep 17 00:00:00 2001 From: Ludovic Levalleux Date: Mon, 7 Sep 2026 18:01:42 +0100 Subject: [PATCH 4/4] ci: build without source maps for the Cloudflare Pages upload Cloudflare Pages rejects any file over 25 MiB, and the main bundle's source map is ~38 MiB, so every deploy failed before uploading anything. Nothing reads these maps. The Sentry release is created before the build and uploads no artifacts, and the deployments this workflow replaced were already built without them - the bundles live on bosonapp.io carry no sourceMappingURL. Generating them only published the full source alongside a deploy that could not complete. Set GENERATE_SOURCEMAP=false on the build step rather than switching to the build:nomaps script, which drops the --max-old-space-size=8192 heap bump. Co-Authored-By: Claude Opus 5 --- .github/workflows/deploy_reusable.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy_reusable.yaml b/.github/workflows/deploy_reusable.yaml index f738e1ba4..e0fb3e352 100644 --- a/.github/workflows/deploy_reusable.yaml +++ b/.github/workflows/deploy_reusable.yaml @@ -270,7 +270,16 @@ jobs: environment: ${{ inputs.environment }} version: ${{ env.RELEASE_NAME }} - - run: pnpm build + - name: Build + env: + # Cloudflare Pages rejects any file over 25 MiB and the main bundle's source map + # is ~38 MiB, so a build carrying maps cannot be uploaded at all. Nothing reads + # them either: the Sentry release above uploads no artifacts, and the deployments + # this workflow replaced were already built without maps - the bundles live on + # bosonapp.io carry no sourceMappingURL. Generating them would only publish the + # full source alongside a deploy that fails. + GENERATE_SOURCEMAP: "false" + run: pnpm build - name: Deploy to Cloudflare Pages id: deploy