diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..642dc36 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +node_modules +.next +.git +.env* +!.env.production +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..4288457 --- /dev/null +++ b/.env.example @@ -0,0 +1,55 @@ +# Environment +NEXT_PUBLIC_ENVIRONMENT= + +# Sentry +NEXT_PUBLIC_SENTRY_DSN= +SENTRY_AUTH_TOKEN= + +# GTM +NEXT_PUBLIC_GTM_ID= + +# Braze +BRAZE_INSTANCE_URL= +BRAZE_API_KEY= +BRAZE_GENERAL_WAITLIST_GROUP_ID= +BRAZE_DEVELOPERS_WAITLIST_GROUP_ID= + +# OneTrust +NEXT_PUBLIC_ONE_TRUST_ID= + +# Dune +NEXT_PUBLIC_DUNE_API_KEY= + +# WalletConnect +NEXT_PUBLIC_WC_PROJECT_ID= + +# hCaptcha +HCAPTCHA_SECRET= +NEXT_PUBLIC_HCAPTCHA_SITEKEY= + +# Segment +NEXT_PUBLIC_SEGMENT_WRITE_KEY= + +# Kraken Connect +NEXT_PUBLIC_KRAKEN_CLIENT_ID= +KRAKEN_CLIENT_SECRET= + +# App Submission Bot +INK_APP_SUBMISSION_BOT_GITHUB_APP_ID= +INK_APP_SUBMISSION_BOT_GITHUB_PRIVATE_KEY= +INK_APP_SUBMISSION_BOT_GITHUB_INSTALLATION_ID= +INK_APP_SUBMISSION_TARGET_ORG= +INK_APP_SUBMISSION_TARGET_REPO= +INK_APP_SUBMISSION_TARGET_BRANCH= +INK_APP_SUBMISSION_SLACK_NOTIFICATION_CHANNEL= +INK_APP_SUBMISSION_SLACK_BOT_TOKEN= + +# Smart Account Experiment +NEXT_PUBLIC_BUNDLER_URL= +NEXT_PUBLIC_PASSKEY_SERVER_URL= +NEXT_PUBLIC_PAYMASTER_URL= +NEXT_PUBLIC_GELATO_BRIDGE_URL= +NEXT_PUBLIC_FAUCET_API_URL= + +# Testnet Faucet Experiment +MULTIPLIER_JWT_SECRET= \ No newline at end of file diff --git a/.github/actions/base-setup/action.yaml b/.github/actions/base-setup/action.yaml index ce0af58..e775447 100644 --- a/.github/actions/base-setup/action.yaml +++ b/.github/actions/base-setup/action.yaml @@ -12,7 +12,19 @@ runs: uses: actions/setup-node@v4 with: node-version: "20.x" + cache: "pnpm" - - name: Install dependencies + - name: Add pnpm store path to env var + id: pnpm-cache shell: bash - run: pnpm install --frozen-lockfile + run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - name: Restore Cache + uses: actions/cache@v4 + with: + path: | + ${{ steps.pnpm-cache.outputs.STORE_PATH }} + **/node_modules + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- diff --git a/.github/actions/image-build-push/action.yaml b/.github/actions/image-build-push/action.yaml new file mode 100644 index 0000000..ba52bef --- /dev/null +++ b/.github/actions/image-build-push/action.yaml @@ -0,0 +1,34 @@ +name: image-build-push +description: Build and push a Docker image to GitHub Container Registry +inputs: + repository-name: + description: The name of the service to build and push + required: true + dockerfile-path: + description: The path to the Dockerfile for the service + required: true + github-token: + description: The GitHub token + required: true + docker-context: + description: The docker context path + required: true +runs: + using: composite + steps: + - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ inputs.github-token }} + - id: metadata + uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 + with: + images: ghcr.io/inkonchain/${{ inputs.repository-name }} + - uses: docker/build-push-action@1a162644f9a7e87d8f4b053101d1d9a712edc18c + with: + context: ${{ inputs.docker-context }} + file: ${{ inputs.dockerfile-path }} + push: true + tags: ${{ steps.metadata.outputs.tags }} + labels: ${{ steps.metadata.outputs.labels }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 6c12c6b..7fc9719 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -12,14 +12,25 @@ jobs: with: node-version: "20.x" cache: "pnpm" - - name: Clear pnpm store and modules - run: | - rm -rf node_modules || true - rm -rf ~/.pnpm-store || true - pnpm store path && pnpm store prune || true + - name: Install dependencies run: pnpm install --frozen-lockfile + - name: Add pnpm store path to env var + id: pnpm-cache + shell: bash + run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - name: Cache node modules + uses: actions/cache@v4 + with: + path: | + ${{ steps.pnpm-cache.outputs.STORE_PATH }} + **/node_modules + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + lint: needs: install_modules runs-on: ubuntu-latest diff --git a/.github/workflows/ship.yml b/.github/workflows/ship.yml new file mode 100644 index 0000000..06b5054 --- /dev/null +++ b/.github/workflows/ship.yml @@ -0,0 +1,88 @@ +name: ship +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +on: + push: + branches: ["main"] + paths: + - .github/workflows/ship.yml + - "**" + pull_request: + branches: ["main"] + paths: + - .github/workflows/ship.yml + - "**" +jobs: + image-build-push: + runs-on: ubuntu-latest + environment: production + steps: + - uses: actions/checkout@v4 + + - name: Generate .env.production file + run: | + cat << EOF > .env.production + # Environment + NEXT_PUBLIC_ENVIRONMENT=${{ vars.NEXT_PUBLIC_ENVIRONMENT }} + + # Sentry + NEXT_PUBLIC_SENTRY_DSN=${{ secrets.NEXT_PUBLIC_SENTRY_DSN }} + SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} + + # GTM + NEXT_PUBLIC_GTM_ID=${{ secrets.NEXT_PUBLIC_GTM_ID }} + + # Braze + BRAZE_INSTANCE_URL=${{ secrets.BRAZE_INSTANCE_URL }} + BRAZE_API_KEY=${{ secrets.BRAZE_API_KEY }} + BRAZE_GENERAL_WAITLIST_GROUP_ID=${{ secrets.BRAZE_GENERAL_WAITLIST_GROUP_ID }} + BRAZE_DEVELOPERS_WAITLIST_GROUP_ID=${{ secrets.BRAZE_DEVELOPERS_WAITLIST_GROUP_ID }} + + # OneTrust + NEXT_PUBLIC_ONE_TRUST_ID=${{ secrets.NEXT_PUBLIC_ONE_TRUST_ID }} + + # Dune + NEXT_PUBLIC_DUNE_API_KEY=${{ secrets.NEXT_PUBLIC_DUNE_API_KEY }} + + # WalletConnect + NEXT_PUBLIC_WC_PROJECT_ID=${{ secrets.NEXT_PUBLIC_WC_PROJECT_ID }} + + # hCaptcha + HCAPTCHA_SECRET=${{ secrets.HCAPTCHA_SECRET }} + NEXT_PUBLIC_HCAPTCHA_SITEKEY=${{ secrets.NEXT_PUBLIC_HCAPTCHA_SITEKEY }} + + # Segment + NEXT_PUBLIC_SEGMENT_WRITE_KEY=${{ secrets.NEXT_PUBLIC_SEGMENT_WRITE_KEY }} + + # Kraken Connect + NEXT_PUBLIC_KRAKEN_CLIENT_ID=${{ secrets.NEXT_PUBLIC_KRAKEN_CLIENT_ID }} + KRAKEN_CLIENT_SECRET=${{ secrets.KRAKEN_CLIENT_SECRET }} + + # App Submission Bot + INK_APP_SUBMISSION_BOT_GITHUB_APP_ID=${{ secrets.INK_APP_SUBMISSION_BOT_GITHUB_APP_ID }} + INK_APP_SUBMISSION_BOT_GITHUB_PRIVATE_KEY=${{ secrets.INK_APP_SUBMISSION_BOT_GITHUB_PRIVATE_KEY }} + INK_APP_SUBMISSION_BOT_GITHUB_INSTALLATION_ID=${{ secrets.INK_APP_SUBMISSION_BOT_GITHUB_INSTALLATION_ID }} + INK_APP_SUBMISSION_TARGET_ORG=${{ secrets.INK_APP_SUBMISSION_TARGET_ORG }} + INK_APP_SUBMISSION_TARGET_REPO=${{ secrets.INK_APP_SUBMISSION_TARGET_REPO }} + INK_APP_SUBMISSION_TARGET_BRANCH=${{ secrets.INK_APP_SUBMISSION_TARGET_BRANCH }} + INK_APP_SUBMISSION_SLACK_NOTIFICATION_CHANNEL=${{ secrets.INK_APP_SUBMISSION_SLACK_NOTIFICATION_CHANNEL }} + INK_APP_SUBMISSION_SLACK_BOT_TOKEN=${{ secrets.INK_APP_SUBMISSION_SLACK_BOT_TOKEN }} + + # Smart Account Experiment + NEXT_PUBLIC_BUNDLER_URL=${{ secrets.NEXT_PUBLIC_BUNDLER_URL }} + NEXT_PUBLIC_PASSKEY_SERVER_URL=${{ secrets.NEXT_PUBLIC_PASSKEY_SERVER_URL }} + NEXT_PUBLIC_PAYMASTER_URL=${{ secrets.NEXT_PUBLIC_PAYMASTER_URL }} + NEXT_PUBLIC_GELATO_BRIDGE_URL=${{ secrets.NEXT_PUBLIC_GELATO_BRIDGE_URL }} + NEXT_PUBLIC_FAUCET_API_URL=${{ secrets.NEXT_PUBLIC_FAUCET_API_URL }} + + # Testnet Faucet Experiment + MULTIPLIER_JWT_SECRET=${{ secrets.MULTIPLIER_JWT_SECRET }} + EOF + + - uses: ./.github/actions/image-build-push + with: + repository-name: ink-web-app + dockerfile-path: ./Dockerfile + docker-context: ./ + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index ce4d22a..70c7e42 100644 --- a/.gitignore +++ b/.gitignore @@ -21,8 +21,7 @@ next-env.d.ts # Environment and local files .env* -.env*.local -.env.sentry-build-plugin +!.env.example # Debug logs npm-debug.log* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..dca2935 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +# Build +FROM node:20 AS base + +WORKDIR /app + +RUN npm i -g pnpm@9.12.1 + +COPY package.json pnpm-lock.yaml ./ + +RUN pnpm install + +COPY . . + +RUN pnpm build + +# Run +FROM node:20-alpine3.19 AS release + +WORKDIR /app + +RUN npm i -g pnpm@9.12.1 + +RUN addgroup --system --gid 1001 nodejs && \ + adduser --system --uid 1001 nextjs + +COPY --from=base --chown=nextjs:nodejs /app/node_modules ./node_modules +COPY --from=base --chown=nextjs:nodejs /app/package.json ./package.json +COPY --from=base --chown=nextjs:nodejs /app/.next ./.next +COPY --from=base --chown=nextjs:nodejs /app/public ./public + +USER nextjs + +CMD ["pnpm", "start"] \ No newline at end of file diff --git a/README.md b/README.md index 971c161..acdbaaf 100644 --- a/README.md +++ b/README.md @@ -63,3 +63,5 @@ Check out our [Next.js deployment documentation](https://nextjs.org/docs/deploym # Setup - Define the env variable `INK_DIRECTORY` in your .bashrc or .zshrc file to the directory where Ink specific .gitconfig is stored + +# Deployment diff --git a/next.config.mjs b/next.config.ts similarity index 84% rename from next.config.mjs rename to next.config.ts index 1d42b38..b4b6a47 100644 --- a/next.config.mjs +++ b/next.config.ts @@ -1,10 +1,12 @@ import { withSentryConfig } from "@sentry/nextjs"; import createNextIntlPlugin from "next-intl/plugin"; +import type { NextConfig } from "next"; +import { env } from "@/env"; +import { clientEnv } from "@/env-client"; const withNextIntl = createNextIntlPlugin(); -/** @type {import('next').NextConfig} */ -const nextConfig = { +const nextConfig: NextConfig = { transpilePackages: ["three"], images: { unoptimized: true, @@ -22,12 +24,12 @@ export default withSentryConfig(withNextIntl(nextConfig), { // https://github.com/getsentry/sentry-webpack-plugin#options org: "payward-inc", - project: "ink-web-app", + project: "ink-landingpage", // TODO: Create project ink-web-app // Only print logs for uploading source maps in CI - silent: !process.env.CI, + silent: clientEnv.NEXT_PUBLIC_ENVIRONMENT !== "ci", - authToken: process.env.SENTRY_AUTH_TOKEN, + authToken: env.SENTRY_AUTH_TOKEN, // For all available options, see: // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ diff --git a/package.json b/package.json index c4d886e..fb4c57d 100644 --- a/package.json +++ b/package.json @@ -26,9 +26,11 @@ "@react-three/postprocessing": "2.16.2", "@reservoir0x/relay-kit-hooks": "1.4.16", "@reservoir0x/relay-kit-ui": "2.4.0", + "@reservoir0x/relay-sdk": "1.5.0", "@segment/analytics-next": "1.70.0", "@sentry/nextjs": "8.38.0", "@slack/web-api": "7.8.0", + "@t3-oss/env-nextjs": "0.12.0", "@tanstack/react-query": "5.60.6", "@types/react": "19.0.7", "@types/react-dom": "19.0.3", @@ -38,9 +40,9 @@ "@zerodev/sdk": "5.4.0-beta.0", "class-variance-authority": "0.7.1", "cookies-next": "4.2.1", - "dompurify": "3.2.3", "ethers": "6.13.1", "framer-motion": "12.0.0-alpha.1", + "isomorphic-dompurify": "2.21.0", "jose": "5.9.6", "leva": "0.9.35", "lottie-react": "2.4.0", @@ -61,7 +63,7 @@ "three": "0.165.0", "viem": "2.22.11", "wagmi": "2.14.9", - "zod": "3.23.8" + "zod": "3.24.1" }, "devDependencies": { "@playwright/test": "1.45.0", @@ -86,11 +88,8 @@ "tailwindcss": "3.4.4", "typescript": "5.7.3" }, - "packageManager": "pnpm@9.15.2", + "packageManager": "pnpm@9.12.1", "pnpm": { - "patchedDependencies": { - "@rainbow-me/rainbowkit": "patches/@rainbow-me__rainbowkit.patch" - }, "overrides": { "@types/react": "19.0.7", "@types/react-dom": "19.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0941347..67434b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,11 +10,6 @@ overrides: react: 19.0.0 react-dom: 19.0.0 -patchedDependencies: - '@rainbow-me/rainbowkit': - hash: vshmhxinfwp5z6bhqyx4p6sgem - path: patches/@rainbow-me__rainbowkit.patch - importers: .: @@ -27,7 +22,7 @@ importers: version: 3.9.1(react-hook-form@7.54.1(react@19.0.0)) '@inkonchain/ink-kit': specifier: 0.5.3 - version: 0.5.3(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.4)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)) + version: 0.5.3(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.4)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1)) '@next/third-parties': specifier: 15.1.6 version: 15.1.6(next@15.1.6(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.77.6))(react@19.0.0) @@ -39,7 +34,7 @@ importers: version: 21.0.2 '@rainbow-me/rainbowkit': specifier: 2.2.3 - version: 2.2.3(patch_hash=vshmhxinfwp5z6bhqyx4p6sgem)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)) + version: 2.2.3(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1)) '@react-three/drei': specifier: 9.107.2 version: 9.107.2(@react-three/fiber@9.0.0-rc.0(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(three@0.165.0))(@types/react@19.0.7)(@types/three@0.170.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(three@0.165.0) @@ -51,10 +46,13 @@ importers: version: 2.16.2(@react-three/fiber@9.0.0-rc.0(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(three@0.165.0))(@types/three@0.170.0)(react@19.0.0)(three@0.165.0) '@reservoir0x/relay-kit-hooks': specifier: 1.4.16 - version: 1.4.16(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + version: 1.4.16(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) '@reservoir0x/relay-kit-ui': specifier: 2.4.0 - version: 2.4.0(@pandacss/dev@0.51.1(typescript@5.7.3))(@radix-ui/colors@3.0.0)(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)) + version: 2.4.0(@pandacss/dev@0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3))(@radix-ui/colors@3.0.0)(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1)) + '@reservoir0x/relay-sdk': + specifier: 1.5.0 + version: 1.5.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) '@segment/analytics-next': specifier: 1.70.0 version: 1.70.0 @@ -64,6 +62,9 @@ importers: '@slack/web-api': specifier: 7.8.0 version: 7.8.0 + '@t3-oss/env-nextjs': + specifier: 0.12.0 + version: 0.12.0(typescript@5.7.3)(zod@3.24.1) '@tanstack/react-query': specifier: 5.60.6 version: 5.60.6(react@19.0.0) @@ -81,25 +82,25 @@ importers: version: 2.13.3(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10) '@zerodev/passkey-validator': specifier: 5.5.0-beta.0 - version: 5.5.0-beta.0(@zerodev/sdk@5.4.0-beta.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(@zerodev/webauthn-key@5.4.2(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + version: 5.5.0-beta.0(@zerodev/sdk@5.4.0-beta.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)))(@zerodev/webauthn-key@5.4.2(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) '@zerodev/sdk': specifier: 5.4.0-beta.0 - version: 5.4.0-beta.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + version: 5.4.0-beta.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) class-variance-authority: specifier: 0.7.1 version: 0.7.1 cookies-next: specifier: 4.2.1 version: 4.2.1 - dompurify: - specifier: 3.2.3 - version: 3.2.3 ethers: specifier: 6.13.1 version: 6.13.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) framer-motion: specifier: 12.0.0-alpha.1 version: 12.0.0-alpha.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + isomorphic-dompurify: + specifier: 2.21.0 + version: 2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) jose: specifier: 5.9.6 version: 5.9.6 @@ -156,13 +157,13 @@ importers: version: 0.165.0 viem: specifier: 2.22.11 - version: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + version: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) wagmi: specifier: 2.14.9 - version: 2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + version: 2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1) zod: - specifier: 3.23.8 - version: 3.23.8 + specifier: 3.24.1 + version: 3.24.1 devDependencies: '@playwright/test': specifier: 1.45.0 @@ -172,10 +173,10 @@ importers: version: 22.12.0 '@typescript-eslint/eslint-plugin': specifier: 8.14.0 - version: 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) + version: 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/parser': specifier: 8.14.0 - version: 8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) + version: 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.5.1) @@ -187,25 +188,25 @@ importers: version: 16.4.5 eslint: specifier: 9.14.0 - version: 9.14.0(jiti@1.21.7) + version: 9.14.0(jiti@2.4.2) eslint-config-next: specifier: 15.0.3 - version: 15.0.3(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) + version: 15.0.3(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) eslint-config-prettier: specifier: 9.1.0 - version: 9.1.0(eslint@9.14.0(jiti@1.21.7)) + version: 9.1.0(eslint@9.14.0(jiti@2.4.2)) eslint-plugin-import: specifier: 2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)) + version: 2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)) eslint-plugin-simple-import-sort: specifier: 12.1.0 - version: 12.1.0(eslint@9.14.0(jiti@1.21.7)) + version: 12.1.0(eslint@9.14.0(jiti@2.4.2)) eslint-plugin-svg-jsx: specifier: 1.2.4 version: 1.2.4 eslint-plugin-unused-imports: specifier: 4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)) + version: 4.1.4(@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)) pino-pretty: specifier: 11.2.1 version: 11.2.1 @@ -244,6 +245,9 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@asamuzakjp/css-color@2.8.3': + resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==} + '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -325,6 +329,34 @@ packages: '@coinbase/wallet-sdk@4.2.3': resolution: {integrity: sha512-BcyHZ/Ec84z0emORzqdXDv4P0oV+tV3a0OirfA8Ko1JGBIAVvB+hzLvZzCDvnuZx7MTK+Dd8Y9Tjlo446BpCIg==} + '@csstools/color-helpers@5.0.1': + resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.1': + resolution: {integrity: sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-color-parser@3.0.7': + resolution: {integrity: sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-parser-algorithms@3.0.4': + resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-tokenizer@3.0.3': + resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} + engines: {node: '>=18'} + '@csstools/postcss-cascade-layers@4.0.6': resolution: {integrity: sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA==} engines: {node: ^14 || ^16 || >=18} @@ -2800,6 +2832,34 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@t3-oss/env-core@0.12.0': + resolution: {integrity: sha512-lOPj8d9nJJTt81mMuN9GMk8x5veOt7q9m11OSnCBJhwp1QrL/qR+M8Y467ULBSm9SunosryWNbmQQbgoiMgcdw==} + peerDependencies: + typescript: '>=5.0.0' + valibot: ^1.0.0-beta.7 || ^1.0.0 + zod: ^3.24.0 + peerDependenciesMeta: + typescript: + optional: true + valibot: + optional: true + zod: + optional: true + + '@t3-oss/env-nextjs@0.12.0': + resolution: {integrity: sha512-rFnvYk1049RnNVUPvY8iQ55AuQh1Rr+qZzQBh3t++RttCGK4COpXGNxS4+45afuQq02lu+QAOy/5955aU8hRKw==} + peerDependencies: + typescript: '>=5.0.0' + valibot: ^1.0.0-beta.7 || ^1.0.0 + zod: ^3.24.0 + peerDependenciesMeta: + typescript: + optional: true + valibot: + optional: true + zod: + optional: true + '@tanstack/query-core@5.60.6': resolution: {integrity: sha512-tI+k0KyCo1EBJ54vxK1kY24LWj673ujTydCZmzEZKAew4NqZzTaVQJEuaG1qKj2M03kUHN46rchLRd+TxVq/zQ==} @@ -3246,6 +3306,10 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -3639,12 +3703,20 @@ packages: peerDependencies: postcss: ^8.4.31 + cssstyle@4.2.1: + resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==} + engines: {node: '>=18'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -4401,10 +4473,26 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + idb-keyval@6.2.1: resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} @@ -4538,6 +4626,9 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@2.2.2: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} @@ -4601,6 +4692,10 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + isomorphic-dompurify@2.21.0: + resolution: {integrity: sha512-IjBG/D6ApEiO6ciXvrzPqbE4xOLbjRTshSWRSeeycQVhvsxf1O9PhA7LoqwMYS0/2PKLNFJRugwsNV5UihtLxQ==} + engines: {node: '>=18'} + isomorphic-unfetch@3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} @@ -4632,6 +4727,10 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + jose@5.9.6: resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} @@ -4650,6 +4749,15 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsdom@26.0.0: + resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -5093,6 +5201,9 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} + nwsapi@2.2.16: + resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + obj-case@0.2.1: resolution: {integrity: sha512-PquYBBTy+Y6Ob/O2574XHhDtHJlV1cJHMCgW+rDRc9J5hhmRelJB3k5dTK/3cVmFVtzvAKuENeuLpoyTzMzkOg==} @@ -5226,6 +5337,9 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -5727,6 +5841,9 @@ packages: engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -5752,11 +5869,18 @@ packages: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sass@1.77.6: resolution: {integrity: sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==} engines: {node: '>=14.0.0'} hasBin: true + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} @@ -6019,6 +6143,9 @@ packages: peerDependencies: react: 19.0.0 + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} @@ -6098,6 +6225,13 @@ packages: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} + tldts-core@6.1.76: + resolution: {integrity: sha512-uzhJ02RaMzgQR3yPoeE65DrcHI6LoM4saUqXOt/b5hmb3+mc4YWpdSeAQqVqRUlQ14q8ZuLRWyBR1ictK1dzzg==} + + tldts@6.1.76: + resolution: {integrity: sha512-6U2ti64/nppsDxQs9hw8ephA3nO6nSQvVVfxwRw8wLQPFtLI1cFI1a1eP22g+LUP+1TA2pKKjUTwWB+K2coqmQ==} + hasBin: true + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -6106,9 +6240,17 @@ packages: resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} engines: {node: '>=12'} + tough-cookie@5.1.0: + resolution: {integrity: sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + troika-three-text@0.49.1: resolution: {integrity: sha512-lXGWxgjJP9kw4i4Wh+0k0Q/7cRfS6iOME4knKht/KozPu9GcFA9NnNpRvehIhrUawq9B0ZRw+0oiFHgRO+4Wig==} peerDependencies: @@ -6405,6 +6547,10 @@ packages: typescript: optional: true + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + wagmi@2.14.9: resolution: {integrity: sha512-nDJ5hwPaiVpn/8Bi82m5K4BCqDiOSnOV976p/jKXt0svQABGdAxUxej0UgDRoVlrp+NutmejN+SyQKmhV477/A==} peerDependencies: @@ -6432,6 +6578,10 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} @@ -6449,6 +6599,18 @@ packages: webpack-cli: optional: true + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.1.0: + resolution: {integrity: sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==} + engines: {node: '>=18'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -6535,6 +6697,13 @@ packages: utf-8-validate: optional: true + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xmlhttprequest-ssl@2.1.2: resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} engines: {node: '>=0.4.0'} @@ -6566,8 +6735,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod@3.23.8: - resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} zustand@3.7.2: resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==} @@ -6624,6 +6793,14 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 + '@asamuzakjp/css-color@2.8.3': + dependencies: + '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + lru-cache: 10.4.3 + '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.25.9 @@ -6758,6 +6935,26 @@ snapshots: eventemitter3: 5.0.1 preact: 10.25.4 + '@csstools/color-helpers@5.0.1': {} + + '@csstools/css-calc@2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-color-parser@3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/color-helpers': 5.0.1 + '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-tokenizer@3.0.3': {} + '@csstools/postcss-cascade-layers@4.0.6(postcss@8.4.49)': dependencies: '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2) @@ -6848,9 +7045,9 @@ snapshots: '@esbuild/win32-x64@0.20.2': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.14.0(jiti@1.21.7))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.14.0(jiti@2.4.2))': dependencies: - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -7164,7 +7361,7 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true - '@inkonchain/ink-kit@0.5.3(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.4)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8))': + '@inkonchain/ink-kit@0.5.3(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.4)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1))': dependencies: '@headlessui/react': 2.2.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tanstack/react-query': 5.60.6(react@19.0.0) @@ -7173,8 +7370,8 @@ snapshots: react-dom: 19.0.0(react@19.0.0) tailwind-merge: 2.6.0 tailwindcss: 3.4.4 - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) - wagmi: 2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + wagmi: 2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1) '@isaacs/cliui@8.0.2': dependencies: @@ -7940,13 +8137,13 @@ snapshots: postcss-selector-parser: 6.1.2 ts-pattern: 5.0.8 - '@pandacss/dev@0.51.1(typescript@5.7.3)': + '@pandacss/dev@0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3)': dependencies: '@clack/prompts': 0.7.0 '@pandacss/config': 0.51.1 '@pandacss/logger': 0.51.1 - '@pandacss/node': 0.51.1(typescript@5.7.3) - '@pandacss/postcss': 0.51.1(typescript@5.7.3) + '@pandacss/node': 0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3) + '@pandacss/postcss': 0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3) '@pandacss/preset-panda': 0.51.1 '@pandacss/shared': 0.51.1 '@pandacss/token-dictionary': 0.51.1 @@ -7956,10 +8153,10 @@ snapshots: - jsdom - typescript - '@pandacss/extractor@0.51.1(typescript@5.7.3)': + '@pandacss/extractor@0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3)': dependencies: '@pandacss/shared': 0.51.1 - ts-evaluator: 1.2.0(typescript@5.7.3) + ts-evaluator: 1.2.0(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3) ts-morph: 24.0.0 transitivePeerDependencies: - jsdom @@ -7986,13 +8183,13 @@ snapshots: '@pandacss/types': 0.51.1 kleur: 4.1.5 - '@pandacss/node@0.51.1(typescript@5.7.3)': + '@pandacss/node@0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3)': dependencies: '@pandacss/config': 0.51.1 '@pandacss/core': 0.51.1 '@pandacss/generator': 0.51.1 '@pandacss/logger': 0.51.1 - '@pandacss/parser': 0.51.1(typescript@5.7.3) + '@pandacss/parser': 0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3) '@pandacss/reporter': 0.51.1 '@pandacss/shared': 0.51.1 '@pandacss/token-dictionary': 0.51.1 @@ -8019,11 +8216,11 @@ snapshots: - jsdom - typescript - '@pandacss/parser@0.51.1(typescript@5.7.3)': + '@pandacss/parser@0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3)': dependencies: '@pandacss/config': 0.51.1 '@pandacss/core': 0.51.1 - '@pandacss/extractor': 0.51.1(typescript@5.7.3) + '@pandacss/extractor': 0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3) '@pandacss/logger': 0.51.1 '@pandacss/shared': 0.51.1 '@pandacss/types': 0.51.1 @@ -8035,9 +8232,9 @@ snapshots: - jsdom - typescript - '@pandacss/postcss@0.51.1(typescript@5.7.3)': + '@pandacss/postcss@0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3)': dependencies: - '@pandacss/node': 0.51.1(typescript@5.7.3) + '@pandacss/node': 0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3) postcss: 8.4.49 transitivePeerDependencies: - jsdom @@ -8455,7 +8652,7 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@rainbow-me/rainbowkit@2.2.3(patch_hash=vshmhxinfwp5z6bhqyx4p6sgem)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8))': + '@rainbow-me/rainbowkit@2.2.3(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1))': dependencies: '@tanstack/react-query': 5.60.6(react@19.0.0) '@vanilla-extract/css': 1.15.5 @@ -8467,8 +8664,8 @@ snapshots: react-dom: 19.0.0(react@19.0.0) react-remove-scroll: 2.6.2(@types/react@19.0.7)(react@19.0.0) ua-parser-js: 1.0.40 - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) - wagmi: 2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + wagmi: 2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1) transitivePeerDependencies: - '@types/react' - babel-plugin-macros @@ -8622,33 +8819,33 @@ snapshots: '@reservoir0x/relay-design-system@0.0.2': {} - '@reservoir0x/relay-kit-hooks@1.4.16(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@reservoir0x/relay-kit-hooks@1.4.16(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))': dependencies: - '@reservoir0x/relay-sdk': 1.4.10(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@reservoir0x/relay-sdk': 1.4.10(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) '@tanstack/react-query': 5.60.6(react@19.0.0) '@types/react': 19.0.7 '@types/react-dom': 19.0.3(@types/react@19.0.7) axios: 1.7.9 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) transitivePeerDependencies: - debug - '@reservoir0x/relay-kit-hooks@1.5.0(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@reservoir0x/relay-kit-hooks@1.5.0(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))': dependencies: - '@reservoir0x/relay-sdk': 1.5.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@reservoir0x/relay-sdk': 1.5.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) '@tanstack/react-query': 5.60.6(react@19.0.0) '@types/react': 19.0.7 '@types/react-dom': 19.0.3(@types/react@19.0.7) axios: 1.7.9 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) transitivePeerDependencies: - debug - '@reservoir0x/relay-kit-ui@2.4.0(@pandacss/dev@0.51.1(typescript@5.7.3))(@radix-ui/colors@3.0.0)(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8))': + '@reservoir0x/relay-kit-ui@2.4.0(@pandacss/dev@0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3))(@radix-ui/colors@3.0.0)(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1))': dependencies: '@fortawesome/fontawesome-svg-core': 6.7.2 '@fortawesome/free-solid-svg-icons': 6.7.2 @@ -8661,8 +8858,8 @@ snapshots: '@radix-ui/react-toggle-group': 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-tooltip': 1.1.7(@types/react-dom@19.0.3(@types/react@19.0.7))(@types/react@19.0.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@reservoir0x/relay-design-system': 0.0.2 - '@reservoir0x/relay-kit-hooks': 1.5.0(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) - '@reservoir0x/relay-sdk': 1.5.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@reservoir0x/relay-kit-hooks': 1.5.0(@tanstack/react-query@5.60.6(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) + '@reservoir0x/relay-sdk': 1.5.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) '@tanstack/react-query': 5.60.6(react@19.0.0) '@types/react': 19.0.7 '@types/react-dom': 19.0.3(@types/react@19.0.7) @@ -8670,30 +8867,30 @@ snapshots: dayjs: 1.11.13 framer-motion: 11.18.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) fuse.js: 7.0.0 - pandacss-preset-radix-colors: 0.2.0(@pandacss/dev@0.51.1(typescript@5.7.3))(@radix-ui/colors@3.0.0) + pandacss-preset-radix-colors: 0.2.0(@pandacss/dev@0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3))(@radix-ui/colors@3.0.0) qrcode.react: 4.2.0(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) usehooks-ts: 3.1.0(react@19.0.0) - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) - wagmi: 2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + wagmi: 2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1) transitivePeerDependencies: - '@emotion/is-prop-valid' - '@pandacss/dev' - '@radix-ui/colors' - debug - '@reservoir0x/relay-sdk@1.4.10(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@reservoir0x/relay-sdk@1.4.10(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))': dependencies: axios: 1.7.9 - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) transitivePeerDependencies: - debug - '@reservoir0x/relay-sdk@1.5.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@reservoir0x/relay-sdk@1.5.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))': dependencies: axios: 1.7.9 - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) transitivePeerDependencies: - debug @@ -8720,9 +8917,9 @@ snapshots: '@rushstack/eslint-patch@1.10.5': {} - '@safe-global/safe-apps-provider@0.18.5(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)': + '@safe-global/safe-apps-provider@0.18.5(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)': dependencies: - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) events: 3.3.0 transitivePeerDependencies: - bufferutil @@ -8730,10 +8927,10 @@ snapshots: - utf-8-validate - zod - '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)': + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.22.9 - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) transitivePeerDependencies: - bufferutil - typescript @@ -9774,6 +9971,18 @@ snapshots: dependencies: tslib: 2.8.1 + '@t3-oss/env-core@0.12.0(typescript@5.7.3)(zod@3.24.1)': + optionalDependencies: + typescript: 5.7.3 + zod: 3.24.1 + + '@t3-oss/env-nextjs@0.12.0(typescript@5.7.3)(zod@3.24.1)': + dependencies: + '@t3-oss/env-core': 0.12.0(typescript@5.7.3)(zod@3.24.1) + optionalDependencies: + typescript: 5.7.3 + zod: 3.24.1 + '@tanstack/query-core@5.60.6': {} '@tanstack/react-query@5.60.6(react@19.0.0)': @@ -9888,15 +10097,15 @@ snapshots: '@types/webxr@0.5.21': {} - '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/type-utils': 8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.14.0 - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -9906,14 +10115,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.14.0 '@typescript-eslint/types': 8.14.0 '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.14.0 debug: 4.4.0 - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: @@ -9924,10 +10133,10 @@ snapshots: '@typescript-eslint/types': 8.14.0 '@typescript-eslint/visitor-keys': 8.14.0 - '@typescript-eslint/type-utils@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 ts-api-utils: 1.4.3(typescript@5.7.3) optionalDependencies: @@ -9953,13 +10162,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/utils@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.14.0 '@typescript-eslint/types': 8.14.0 '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.7.3) - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) transitivePeerDependencies: - supports-color - typescript @@ -10035,16 +10244,16 @@ snapshots: '@vue/shared@3.4.19': {} - '@wagmi/connectors@5.7.5(@types/react@19.0.7)(@wagmi/core@2.16.3(@tanstack/query-core@5.60.6)(@types/react@19.0.7)(react@19.0.0)(typescript@5.7.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + '@wagmi/connectors@5.7.5(@types/react@19.0.7)(@wagmi/core@2.16.3(@tanstack/query-core@5.60.6)(@types/react@19.0.7)(react@19.0.0)(typescript@5.7.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)))(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1)': dependencies: '@coinbase/wallet-sdk': 4.2.3 '@metamask/sdk': 0.31.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.5(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) - '@wagmi/core': 2.16.3(@tanstack/query-core@5.60.6)(@types/react@19.0.7)(react@19.0.0)(typescript@5.7.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@safe-global/safe-apps-provider': 0.18.5(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + '@wagmi/core': 2.16.3(@tanstack/query-core@5.60.6)(@types/react@19.0.7)(react@19.0.0)(typescript@5.7.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) '@walletconnect/ethereum-provider': 2.17.0(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: @@ -10074,11 +10283,11 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.16.3(@tanstack/query-core@5.60.6)(@types/react@19.0.7)(react@19.0.0)(typescript@5.7.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@wagmi/core@2.16.3(@tanstack/query-core@5.60.6)(@types/react@19.0.7)(react@19.0.0)(typescript@5.7.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.7.3) - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) zustand: 5.0.0(@types/react@19.0.7)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)) optionalDependencies: '@tanstack/query-core': 5.60.6 @@ -10756,30 +10965,30 @@ snapshots: '@xtuc/long@4.2.2': {} - '@zerodev/passkey-validator@5.5.0-beta.0(@zerodev/sdk@5.4.0-beta.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(@zerodev/webauthn-key@5.4.2(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@zerodev/passkey-validator@5.5.0-beta.0(@zerodev/sdk@5.4.0-beta.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)))(@zerodev/webauthn-key@5.4.2(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))': dependencies: '@noble/curves': 1.8.1 '@simplewebauthn/browser': 8.3.7 - '@zerodev/sdk': 5.4.0-beta.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) - '@zerodev/webauthn-key': 5.4.2(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + '@zerodev/sdk': 5.4.0-beta.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) + '@zerodev/webauthn-key': 5.4.2(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) - '@zerodev/sdk@5.4.0-beta.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@zerodev/sdk@5.4.0-beta.0(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))': dependencies: semver: 7.7.0 - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) - '@zerodev/webauthn-key@5.4.2(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@zerodev/webauthn-key@5.4.2(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))': dependencies: '@noble/curves': 1.8.1 '@simplewebauthn/browser': 8.3.7 '@simplewebauthn/types': 12.0.0 - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) - abitype@1.0.7(typescript@5.7.3)(zod@3.23.8): + abitype@1.0.7(typescript@5.7.3)(zod@3.24.1): optionalDependencies: typescript: 5.7.3 - zod: 3.23.8 + zod: 3.24.1 abort-controller@3.0.0: dependencies: @@ -10803,6 +11012,8 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.3: {} + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -11205,10 +11416,20 @@ snapshots: dependencies: postcss: 8.4.49 + cssstyle@4.2.1: + dependencies: + '@asamuzakjp/css-color': 2.8.3 + rrweb-cssom: 0.8.0 + csstype@3.1.3: {} damerau-levenshtein@1.0.8: {} + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.1.0 + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.3 @@ -11516,19 +11737,19 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.0.3(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3): + eslint-config-next@15.0.3(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3): dependencies: '@next/eslint-plugin-next': 15.0.3 '@rushstack/eslint-patch': 1.10.5 - '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) - eslint: 9.14.0(jiti@1.21.7) + '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.14.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.14.0(jiti@1.21.7)) - eslint-plugin-react: 7.37.4(eslint@9.14.0(jiti@1.21.7)) - eslint-plugin-react-hooks: 5.1.0(eslint@9.14.0(jiti@1.21.7)) + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-react: 7.37.4(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-react-hooks: 5.1.0(eslint@9.14.0(jiti@2.4.2)) optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: @@ -11536,9 +11757,9 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@9.1.0(eslint@9.14.0(jiti@1.21.7)): + eslint-config-prettier@9.1.0(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) eslint-import-resolver-node@0.3.9: dependencies: @@ -11548,34 +11769,34 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)): + eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0 enhanced-resolve: 5.18.0 - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.3.0 is-glob: 4.0.3 stable-hash: 0.0.4 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) - eslint: 9.14.0(jiti@1.21.7) + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.14.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)) + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -11584,9 +11805,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)))(eslint@9.14.0(jiti@1.21.7)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -11598,13 +11819,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@9.14.0(jiti@1.21.7)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.14.0(jiti@2.4.2)): dependencies: aria-query: 5.3.2 array-includes: 3.1.8 @@ -11614,7 +11835,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -11623,11 +11844,11 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@5.1.0(eslint@9.14.0(jiti@1.21.7)): + eslint-plugin-react-hooks@5.1.0(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) - eslint-plugin-react@7.37.4(eslint@9.14.0(jiti@1.21.7)): + eslint-plugin-react@7.37.4(eslint@9.14.0(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -11635,7 +11856,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -11649,17 +11870,17 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-simple-import-sort@12.1.0(eslint@9.14.0(jiti@1.21.7)): + eslint-plugin-simple-import-sort@12.1.0(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) eslint-plugin-svg-jsx@1.2.4: {} - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@1.21.7) + eslint: 9.14.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.14.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.3) eslint-scope@5.1.1: dependencies: @@ -11675,9 +11896,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.14.0(jiti@1.21.7): + eslint@9.14.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.18.0 '@eslint/core': 0.7.0 @@ -11713,7 +11934,7 @@ snapshots: optionator: 0.9.4 text-table: 0.2.0 optionalDependencies: - jiti: 1.21.7 + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -12100,6 +12321,17 @@ snapshots: hookable@5.5.3: {} + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -12107,6 +12339,17 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + idb-keyval@6.2.1: {} ieee754@1.2.1: {} @@ -12243,6 +12486,8 @@ snapshots: dependencies: isobject: 3.0.1 + is-potential-custom-element-name@1.0.1: {} + is-promise@2.2.2: {} is-reference@1.2.1: @@ -12300,6 +12545,16 @@ snapshots: isobject@3.0.1: {} + isomorphic-dompurify@2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + dompurify: 3.2.3 + jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + isomorphic-unfetch@3.1.0: dependencies: node-fetch: 2.7.0 @@ -12343,6 +12598,9 @@ snapshots: jiti@1.21.7: {} + jiti@2.4.2: + optional: true + jose@5.9.6: {} joycon@3.1.1: {} @@ -12355,6 +12613,34 @@ snapshots: dependencies: argparse: 2.0.1 + jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + cssstyle: 4.2.1 + data-urls: 5.0.0 + decimal.js: 10.5.0 + form-data: 4.0.1 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.16 + parse5: 7.2.1 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.1.0 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -12757,6 +13043,8 @@ snapshots: normalize-range@0.1.2: {} + nwsapi@2.2.16: {} + obj-case@0.2.1: {} obj-multiplex@1.0.0: @@ -12843,14 +13131,14 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - ox@0.6.5(typescript@5.7.3)(zod@3.23.8): + ox@0.6.5(typescript@5.7.3)(zod@3.24.1): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.7.0 '@noble/hashes': 1.6.1 '@scure/bip32': 1.6.0 '@scure/bip39': 1.5.0 - abitype: 1.0.7(typescript@5.7.3)(zod@3.23.8) + abitype: 1.0.7(typescript@5.7.3)(zod@3.24.1) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.7.3 @@ -12895,15 +13183,19 @@ snapshots: package-manager-detector@0.1.0: {} - pandacss-preset-radix-colors@0.2.0(@pandacss/dev@0.51.1(typescript@5.7.3))(@radix-ui/colors@3.0.0): + pandacss-preset-radix-colors@0.2.0(@pandacss/dev@0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3))(@radix-ui/colors@3.0.0): dependencies: - '@pandacss/dev': 0.51.1(typescript@5.7.3) + '@pandacss/dev': 0.51.1(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3) '@radix-ui/colors': 3.0.0 parent-module@1.0.1: dependencies: callsites: 3.1.0 + parse5@7.2.1: + dependencies: + entities: 4.5.0 + path-browserify@1.0.1: {} path-exists@4.0.0: {} @@ -13394,6 +13686,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + rrweb-cssom@0.8.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -13423,12 +13717,18 @@ snapshots: safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} + sass@1.77.6: dependencies: chokidar: 3.6.0 immutable: 4.3.7 source-map-js: 1.2.1 + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + scheduler@0.25.0: {} scheduler@0.25.0-rc.0: {} @@ -13776,6 +14076,8 @@ snapshots: dependencies: react: 19.0.0 + symbol-tree@3.2.4: {} + tabbable@6.2.0: {} table@6.9.0: @@ -13876,14 +14178,28 @@ snapshots: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 + tldts-core@6.1.76: {} + + tldts@6.1.76: + dependencies: + tldts-core: 6.1.76 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 toad-cache@3.7.0: {} + tough-cookie@5.1.0: + dependencies: + tldts: 6.1.76 + tr46@0.0.3: {} + tr46@5.0.0: + dependencies: + punycode: 2.3.1 + troika-three-text@0.49.1(three@0.165.0): dependencies: bidi-js: 1.0.3 @@ -13902,12 +14218,14 @@ snapshots: dependencies: typescript: 5.7.3 - ts-evaluator@1.2.0(typescript@5.7.3): + ts-evaluator@1.2.0(jsdom@26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.7.3): dependencies: ansi-colors: 4.1.3 crosspath: 2.0.0 object-path: 0.11.8 typescript: 5.7.3 + optionalDependencies: + jsdom: 26.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) ts-interface-checker@0.1.13: {} @@ -14125,15 +14443,15 @@ snapshots: '@types/react': 19.0.7 react: 19.0.0 - viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8): + viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1): dependencies: '@noble/curves': 1.7.0 '@noble/hashes': 1.6.1 '@scure/bip32': 1.6.0 '@scure/bip39': 1.5.0 - abitype: 1.0.7(typescript@5.7.3)(zod@3.23.8) + abitype: 1.0.7(typescript@5.7.3)(zod@3.24.1) isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.6.5(typescript@5.7.3)(zod@3.23.8) + ox: 0.6.5(typescript@5.7.3)(zod@3.24.1) ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.7.3 @@ -14142,14 +14460,18 @@ snapshots: - utf-8-validate - zod - wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + wagmi@2.14.9(@tanstack/query-core@5.60.6)(@tanstack/react-query@5.60.6(react@19.0.0))(@types/react@19.0.7)(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1): dependencies: '@tanstack/react-query': 5.60.6(react@19.0.0) - '@wagmi/connectors': 5.7.5(@types/react@19.0.7)(@wagmi/core@2.16.3(@tanstack/query-core@5.60.6)(@types/react@19.0.7)(react@19.0.0)(typescript@5.7.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) - '@wagmi/core': 2.16.3(@tanstack/query-core@5.60.6)(@types/react@19.0.7)(react@19.0.0)(typescript@5.7.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@wagmi/connectors': 5.7.5(@types/react@19.0.7)(@wagmi/core@2.16.3(@tanstack/query-core@5.60.6)(@types/react@19.0.7)(react@19.0.0)(typescript@5.7.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)))(bufferutil@4.0.9)(react@19.0.0)(typescript@5.7.3)(utf-8-validate@5.0.10)(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1))(zod@3.24.1) + '@wagmi/core': 2.16.3(@tanstack/query-core@5.60.6)(@types/react@19.0.7)(react@19.0.0)(typescript@5.7.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1)) react: 19.0.0 use-sync-external-store: 1.4.0(react@19.0.0) - viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.22.11(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: @@ -14193,6 +14515,8 @@ snapshots: webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} + webpack-sources@3.2.3: {} webpack-virtual-modules@0.5.0: {} @@ -14227,6 +14551,17 @@ snapshots: - esbuild - uglify-js + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.1.0: + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -14317,6 +14652,10 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + xmlhttprequest-ssl@2.1.2: {} xtend@4.0.2: {} @@ -14348,7 +14687,7 @@ snapshots: yocto-queue@0.1.0: {} - zod@3.23.8: {} + zod@3.24.1: {} zustand@3.7.2(react@19.0.0): optionalDependencies: diff --git a/sentry.client.config.ts b/sentry.client.config.ts index f65a3cb..d1347f3 100644 --- a/sentry.client.config.ts +++ b/sentry.client.config.ts @@ -5,6 +5,7 @@ import * as Sentry from "@sentry/nextjs"; import Consent, { ConsentType } from "@/integrations/consent"; +import { clientEnv } from "@/env-client"; const integrations = [ Sentry.replayIntegration({ @@ -24,8 +25,8 @@ const integrations = [ Consent.on(ConsentType.CONSENT, () => { Sentry.init({ - dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, - enabled: process.env.NEXT_PUBLIC_ENVIRONMENT !== "ci", + dsn: clientEnv.NEXT_PUBLIC_SENTRY_DSN, + enabled: clientEnv.NEXT_PUBLIC_ENVIRONMENT !== "ci", // Adjust this value in production, or use tracesSampler for greater control tracesSampleRate: 0.05, diff --git a/sentry.edge.config.ts b/sentry.edge.config.ts index 6880625..88e603f 100644 --- a/sentry.edge.config.ts +++ b/sentry.edge.config.ts @@ -3,11 +3,12 @@ // Note that this config is unrelated to the Vercel Edge Runtime and is also required when running locally. // https://docs.sentry.io/platforms/javascript/guides/nextjs/ +import { clientEnv } from "@/env-client"; import * as Sentry from "@sentry/nextjs"; Sentry.init({ - dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, - enabled: process.env.NEXT_PUBLIC_ENVIRONMENT !== "ci", + dsn: clientEnv.NEXT_PUBLIC_SENTRY_DSN, + enabled: clientEnv.NEXT_PUBLIC_ENVIRONMENT !== "ci", // Adjust this value in production, or use tracesSampler for greater control tracesSampleRate: 0.05, diff --git a/sentry.server.config.ts b/sentry.server.config.ts index aae6669..606e8e3 100644 --- a/sentry.server.config.ts +++ b/sentry.server.config.ts @@ -2,11 +2,12 @@ // The config you add here will be used whenever the server handles a request. // https://docs.sentry.io/platforms/javascript/guides/nextjs/ +import { clientEnv } from "@/env-client"; import * as Sentry from "@sentry/nextjs"; Sentry.init({ - dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, - enabled: process.env.NEXT_PUBLIC_ENVIRONMENT !== "ci", + dsn: clientEnv.NEXT_PUBLIC_SENTRY_DSN, + enabled: clientEnv.NEXT_PUBLIC_ENVIRONMENT !== "ci", // Adjust this value in production, or use tracesSampler for greater control tracesSampleRate: 0.05, @@ -15,5 +16,5 @@ Sentry.init({ debug: false, // Uncomment the line below to enable Spotlight (https://spotlightjs.com) - // spotlight: process.env.NODE_ENV === 'development', + // spotlight: env.NODE_ENV === 'development', }); diff --git a/src/actions/submit-your-app.ts b/src/actions/submit-your-app.ts index be95d8c..8d5941b 100644 --- a/src/actions/submit-your-app.ts +++ b/src/actions/submit-your-app.ts @@ -6,7 +6,15 @@ import { WebClient } from "@slack/web-api"; import sharp from "sharp"; import { InkApp } from "@/app/[locale]/(dashboard)/dashboard/_components/InkApp"; +import { env } from "@/env"; +import { validateCaptcha } from "@/lib/hcaptcha"; import { + AppSubmissionFormData, + appSubmissionSchema, +} from "@/schemas/app-submission-schema"; +import { isSquareAspectRatio } from "@/util/validation"; + +const { INK_APP_SUBMISSION_BOT_GITHUB_APP_ID, INK_APP_SUBMISSION_BOT_GITHUB_INSTALLATION_ID, INK_APP_SUBMISSION_BOT_GITHUB_PRIVATE_KEY, @@ -15,13 +23,7 @@ import { INK_APP_SUBMISSION_TARGET_BRANCH, INK_APP_SUBMISSION_TARGET_ORG, INK_APP_SUBMISSION_TARGET_REPO, -} from "@/env"; -import { validateCaptcha } from "@/lib/hcaptcha"; -import { - AppSubmissionFormData, - appSubmissionSchema, -} from "@/schemas/app-submission-schema"; -import { isSquareAspectRatio } from "@/util/validation"; +} = env; const octokit = new Octokit({ authStrategy: createAppAuth, diff --git a/src/app/[locale]/(dashboard)/dashboard/_components/InkApp.ts b/src/app/[locale]/(dashboard)/dashboard/_components/InkApp.ts index 0d29441..12b76f8 100644 --- a/src/app/[locale]/(dashboard)/dashboard/_components/InkApp.ts +++ b/src/app/[locale]/(dashboard)/dashboard/_components/InkApp.ts @@ -1,4 +1,4 @@ -import DOMPurify from "dompurify"; +import DOMPurify from "isomorphic-dompurify"; import appsData from "./apps-data.json"; diff --git a/src/app/[locale]/(home)/faucet/_components/FaucetRequestButton.tsx b/src/app/[locale]/(home)/faucet/_components/FaucetRequestButton.tsx index 03766ed..827aa53 100644 --- a/src/app/[locale]/(home)/faucet/_components/FaucetRequestButton.tsx +++ b/src/app/[locale]/(home)/faucet/_components/FaucetRequestButton.tsx @@ -19,7 +19,7 @@ import { inputContainerClassNames, inputIconClassNames, } from "@/components/InputWithSubmit/styles"; -import { NEXT_PUBLIC_FAUCET_API_URL } from "@/env-client"; +import { clientEnv } from "@/env-client"; import { useFaucetInfoAndCaptcha } from "@/hooks/useFaucetInfoAndHCaptcha"; interface FaucetRequestButtonProps { @@ -188,7 +188,7 @@ export const FaucetRequestButton = forwardRef< try { // Check rate limit first const rateLimitRes = await fetch( - `${NEXT_PUBLIC_FAUCET_API_URL}/api/check-rate-limit`, + `${clientEnv.NEXT_PUBLIC_FAUCET_API_URL}/api/check-rate-limit`, { method: "POST", headers: { @@ -311,18 +311,21 @@ export const FaucetRequestButton = forwardRef< } // If captcha is solved, proceed with the claim - const res = await fetch(`${NEXT_PUBLIC_FAUCET_API_URL}/api/claim`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - address: resolvedAddress, - chainId, - hcaptchaToken, - multiplierToken: localStorage.getItem("multiplierToken"), - }), - }); + const res = await fetch( + `${clientEnv.NEXT_PUBLIC_FAUCET_API_URL}/api/claim`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + address: resolvedAddress, + chainId, + hcaptchaToken, + multiplierToken: localStorage.getItem("multiplierToken"), + }), + } + ); const responseData = await res.json(); diff --git a/src/app/[locale]/(home)/smart-wallet/utils/constants.ts b/src/app/[locale]/(home)/smart-wallet/utils/constants.ts index 68296ff..caece05 100644 --- a/src/app/[locale]/(home)/smart-wallet/utils/constants.ts +++ b/src/app/[locale]/(home)/smart-wallet/utils/constants.ts @@ -6,9 +6,11 @@ import { } from "viem/account-abstraction"; import { inkSepolia } from "viem/chains"; -export const BUNDLER_URL = process.env.NEXT_PUBLIC_BUNDLER_URL!; -export const PAYMASTER_URL = process.env.NEXT_PUBLIC_PAYMASTER_URL!; -export const PASSKEY_SERVER_URL = process.env.NEXT_PUBLIC_PASSKEY_SERVER_URL!; +import { clientEnv } from "@/env-client"; + +export const BUNDLER_URL = clientEnv.NEXT_PUBLIC_BUNDLER_URL; +export const PAYMASTER_URL = clientEnv.NEXT_PUBLIC_PAYMASTER_URL; +export const PASSKEY_SERVER_URL = clientEnv.NEXT_PUBLIC_PASSKEY_SERVER_URL; export const CHAIN = inkSepolia; export const contractAddress = "0xA07F56aeeb535856FdEC39a9d685C62536150B1f"; diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx index e125741..f346d57 100644 --- a/src/app/[locale]/layout.tsx +++ b/src/app/[locale]/layout.tsx @@ -11,7 +11,7 @@ import { GlobalSvgStuff } from "@/components/icons/GlobalSvgStuff"; import { NewsletterModal } from "@/components/NewsletterModal"; import { Providers } from "@/components/Providers"; import { ToggleThemeShortcut } from "@/components/ToggleThemeShortcut"; -import { NEXT_PUBLIC_GTM_ID } from "@/env-client"; +import { clientEnv } from "@/env-client"; import { COOKIE_CONSENT } from "@/integrations/consent"; import { inter, plus_jakarta_sans } from "../fonts"; @@ -49,7 +49,7 @@ export default async function LocaleLayout({ > {userHasAcceptedCookiePolicy && ( <> - + )} diff --git a/src/app/api/validate-tweet/route.ts b/src/app/api/validate-tweet/route.ts index c782d71..3436de1 100644 --- a/src/app/api/validate-tweet/route.ts +++ b/src/app/api/validate-tweet/route.ts @@ -1,13 +1,12 @@ import { SignJWT } from "jose"; import { NextResponse } from "next/server"; -import { NEXT_PUBLIC_FAUCET_API_URL } from "@/env-client"; +import { env } from "@/env"; +import { clientEnv } from "@/env-client"; import { formatDuration } from "@/util/formatDuration"; -const MULTIPLIER_JWT_SECRET = process.env.MULTIPLIER_JWT_SECRET!; - const MULTIPLIER_JWT_SECRET_KEY = new TextEncoder().encode( - MULTIPLIER_JWT_SECRET! + env.MULTIPLIER_JWT_SECRET ); const TWEET_AGE_LIMIT = 30 * 60 * 1000; // 30 minutes in milliseconds @@ -93,7 +92,7 @@ export async function POST(request: Request) { // Check with faucet API if this X/Twitter user is rate limited const rateCheckResponse = await fetch( - `${NEXT_PUBLIC_FAUCET_API_URL}/api/check-tweet-user`, + `${clientEnv.NEXT_PUBLIC_FAUCET_API_URL}/api/check-tweet-user`, { method: "POST", headers: { diff --git a/src/app/robots.ts b/src/app/robots.ts index 6ae3b39..5a2524a 100644 --- a/src/app/robots.ts +++ b/src/app/robots.ts @@ -1,6 +1,6 @@ import { MetadataRoute } from "next"; -import { ORIGIN } from "@/env"; +import { env } from "@/env"; export default function robots(): MetadataRoute.Robots { return { @@ -8,6 +8,6 @@ export default function robots(): MetadataRoute.Robots { userAgent: "*", allow: "/", }, - sitemap: ORIGIN + "/sitemap.xml", + sitemap: env.ORIGIN + "/sitemap.xml", }; } diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 5cf39d0..40dd0ff 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -1,6 +1,6 @@ import { MetadataRoute } from "next"; -import { ORIGIN } from "@/env"; +import { env } from "@/env"; import { routing } from "@/routing"; export default function sitemap(): MetadataRoute.Sitemap { @@ -8,13 +8,13 @@ export default function sitemap(): MetadataRoute.Sitemap { return [ { - url: ORIGIN, + url: env.ORIGIN, priority: 1, }, ...basicPaths.flatMap((path) => routing.locales.map((lang) => ({ url: - ORIGIN + + env.ORIGIN + (lang !== routing.defaultLocale ? "/" + lang : "") + "/" + path, diff --git a/src/components/BridgeButton.tsx b/src/components/BridgeButton.tsx index 2b3d40d..67eee02 100644 --- a/src/components/BridgeButton.tsx +++ b/src/components/BridgeButton.tsx @@ -3,13 +3,17 @@ import { useState } from "react"; import { motion } from "framer-motion"; -import { NEXT_PUBLIC_GELATO_BRIDGE_URL } from "@/env-client"; +import { clientEnv } from "@/env-client"; export const BridgeButton: React.FC = () => { const [isHovered, setIsHovered] = useState(false); const handleClick = () => { - window.open(NEXT_PUBLIC_GELATO_BRIDGE_URL, "_blank", "noopener,noreferrer"); + window.open( + clientEnv.NEXT_PUBLIC_GELATO_BRIDGE_URL, + "_blank", + "noopener,noreferrer" + ); }; return ( diff --git a/src/components/CookieConsent/CookieConsent.tsx b/src/components/CookieConsent/CookieConsent.tsx index 98ade05..d7e4b34 100644 --- a/src/components/CookieConsent/CookieConsent.tsx +++ b/src/components/CookieConsent/CookieConsent.tsx @@ -1,20 +1,16 @@ import { cookies } from "next/headers"; import { onAcceptCookiePolicy, onRefuseCookiePolicy } from "@/actions/consent"; -import { - NEXT_PUBLIC_ENVIRONMENT, - NEXT_PUBLIC_ONE_TRUST_ID, -} from "@/env-client"; +import { clientEnv } from "@/env-client"; import { COOKIE_CONSENT } from "@/integrations/consent"; import { ConsentAcceptAll } from "./ConsentAcceptAll"; import { CookieConsentForm } from "./CookieConsentForm"; import { OneTrustCookieConsent } from "./OneTrustCookiesConsent"; -const IS_OPEN_TRUST_ENABLE_FOR_ENV = - NEXT_PUBLIC_ENVIRONMENT !== "local" && - NEXT_PUBLIC_ENVIRONMENT !== "development" && - NEXT_PUBLIC_ENVIRONMENT !== "ci"; +const IS_OPEN_TRUST_ENABLE_FOR_ENV = !["local", "development", "ci"].includes( + clientEnv.NEXT_PUBLIC_ENVIRONMENT +); export const CookieConsent = async () => { const isEuropeanCountry = true; @@ -30,8 +26,8 @@ export const CookieConsent = async () => { return ( <> - {NEXT_PUBLIC_ONE_TRUST_ID && IS_OPEN_TRUST_ENABLE_FOR_ENV ? ( - + {clientEnv.NEXT_PUBLIC_ONE_TRUST_ID && IS_OPEN_TRUST_ENABLE_FOR_ENV ? ( + ) : isEuropeanCountry ? ( = ({ onChange }) => { try { // Check rate limit first const rateLimitRes = await fetch( - `${NEXT_PUBLIC_FAUCET_API_URL}/api/check-rate-limit`, + `${clientEnv.NEXT_PUBLIC_FAUCET_API_URL}/api/check-rate-limit`, { method: "POST", headers: { @@ -66,13 +66,16 @@ export const FaucetButton: React.FC = ({ onChange }) => { } // If captcha is solved, proceed with the claim - const res = await fetch(`${NEXT_PUBLIC_FAUCET_API_URL}/api/claim`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ address, chainId, hcaptchaToken }), - }); + const res = await fetch( + `${clientEnv.NEXT_PUBLIC_FAUCET_API_URL}/api/claim`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ address, chainId, hcaptchaToken }), + } + ); const responseData = await res.json(); diff --git a/src/components/Providers.tsx b/src/components/Providers.tsx index acb7b59..ae9738d 100644 --- a/src/components/Providers.tsx +++ b/src/components/Providers.tsx @@ -7,7 +7,7 @@ import { AnalyticsProvider } from "@/contexts/AnalyticsProvider"; import { RelayProvider } from "@/contexts/RelayProvider"; import { ThemeProvider } from "@/contexts/ThemeProvider"; import { WalletProvider } from "@/contexts/WalletProvider"; -import { NEXT_PUBLIC_SEGMENT_WRITE_KEY } from "@/env-client"; +import { clientEnv } from "@/env-client"; import { useGlobalKeyCallback } from "@/hooks/useGlobalKey"; import { AppSubmissionModalProvider } from "./AppSubmissionModal/AppSubmissionModalContext"; @@ -22,7 +22,7 @@ export const Providers: React.FC = ({ children }) => { return ( - + diff --git a/src/contexts/AnalyticsProvider.tsx b/src/contexts/AnalyticsProvider.tsx index 79f19ee..122b37a 100644 --- a/src/contexts/AnalyticsProvider.tsx +++ b/src/contexts/AnalyticsProvider.tsx @@ -9,7 +9,7 @@ import { } from "react"; import { AnalyticsBrowser } from "@segment/analytics-next"; -import { NEXT_PUBLIC_ENVIRONMENT } from "@/env-client"; +import { clientEnv } from "@/env-client"; import Consent, { ConsentType } from "@/integrations/consent"; interface AnalyticsContextProps { @@ -32,7 +32,7 @@ export const AnalyticsProvider = ({ const analytics = useMemo(() => new AnalyticsBrowser(), []); useEffect(() => { - if (NEXT_PUBLIC_ENVIRONMENT === "local" && !writeKey) { + if (clientEnv.NEXT_PUBLIC_ENVIRONMENT === "local" && !writeKey) { return; } diff --git a/src/contexts/RelayProvider.tsx b/src/contexts/RelayProvider.tsx index af1f6c7..938aff7 100644 --- a/src/contexts/RelayProvider.tsx +++ b/src/contexts/RelayProvider.tsx @@ -5,7 +5,7 @@ import { useRelayChains } from "@reservoir0x/relay-kit-hooks"; import { RelayKitProvider } from "@reservoir0x/relay-kit-ui"; import { MAINNET_RELAY_API } from "@reservoir0x/relay-sdk"; -import { NEXT_PUBLIC_DUNE_API_KEY } from "@/env-client"; +import { clientEnv } from "@/env-client"; import { useCurrentInkAppName } from "@/hooks/useCurrentInkAppName"; import { theme } from "@/util/relay-kit-theme"; @@ -26,7 +26,7 @@ export const RelayProvider: React.FC = ({ children }) => { appName: appName, appFees: [], chains: chains, - duneApiKey: NEXT_PUBLIC_DUNE_API_KEY, + duneApiKey: clientEnv.NEXT_PUBLIC_DUNE_API_KEY, baseApiUrl: MAINNET_RELAY_API, }} > diff --git a/src/contexts/WalletProvider.tsx b/src/contexts/WalletProvider.tsx index 30b01ba..df62a36 100644 --- a/src/contexts/WalletProvider.tsx +++ b/src/contexts/WalletProvider.tsx @@ -34,7 +34,7 @@ import { } from "wagmi"; import { mainnet } from "wagmi/chains"; -import { NEXT_PUBLIC_WC_PROJECT_ID } from "@/env-client"; +import { clientEnv } from "@/env-client"; import { useCurrentInkAppName } from "@/hooks/useCurrentInkAppName"; import "@reservoir0x/relay-kit-ui/styles.css"; @@ -113,7 +113,7 @@ export const WalletProvider: React.FC = ({ children }) => { appName: "inkonchain.com", appIcon: "https://inkonchain.com/icon.svg", appUrl: "https://inkonchain.com", - projectId: NEXT_PUBLIC_WC_PROJECT_ID, + projectId: clientEnv.NEXT_PUBLIC_WC_PROJECT_ID, chains: (viemChains && viemChains.length === 0 ? [mainnet] : viemChains) as [Chain, ...Chain[]], diff --git a/src/env-client.ts b/src/env-client.ts index 083838f..dbe3530 100644 --- a/src/env-client.ts +++ b/src/env-client.ts @@ -1,52 +1,37 @@ -const NEXT_PUBLIC_FAUCET_API_URL = process.env.NEXT_PUBLIC_FAUCET_API_URL!; -const NEXT_PUBLIC_GELATO_BRIDGE_URL = - process.env.NEXT_PUBLIC_GELATO_BRIDGE_URL!; - -const NEXT_PUBLIC_ENVIRONMENT = process.env.NEXT_PUBLIC_ENVIRONMENT!; -const NEXT_PUBLIC_SENTRY_DSN = process.env.NEXT_PUBLIC_SENTRY_DSN!; -const NEXT_PUBLIC_GTM_ID = process.env.NEXT_PUBLIC_GTM_ID!; -const NEXT_PUBLIC_SEGMENT_WRITE_KEY = - process.env.NEXT_PUBLIC_SEGMENT_WRITE_KEY!; -const NEXT_PUBLIC_ONE_TRUST_ID = process.env.NEXT_PUBLIC_ONE_TRUST_ID; -const NEXT_PUBLIC_DUNE_API_KEY = process.env.NEXT_PUBLIC_DUNE_API_KEY; -const NEXT_PUBLIC_WC_PROJECT_ID = process.env.NEXT_PUBLIC_WC_PROJECT_ID!; -const NEXT_PUBLIC_HCAPTCHA_SITEKEY = process.env.NEXT_PUBLIC_HCAPTCHA_SITEKEY!; - -if (!NEXT_PUBLIC_FAUCET_API_URL && NEXT_PUBLIC_ENVIRONMENT !== "local") { - throw new Error("Missing environment variable NEXT_PUBLIC_FAUCET_API_URL"); -} - -if (!NEXT_PUBLIC_GELATO_BRIDGE_URL && NEXT_PUBLIC_ENVIRONMENT !== "local") { - throw new Error("Missing environment variable NEXT_PUBLIC_GELATO_BRIDGE_URL"); -} - -if (!NEXT_PUBLIC_SENTRY_DSN && NEXT_PUBLIC_ENVIRONMENT !== "local") { - throw new Error("Missing environment variable NEXT_PUBLIC_SENTRY_DSN."); -} - -if (!NEXT_PUBLIC_GTM_ID && NEXT_PUBLIC_ENVIRONMENT !== "local") { - throw new Error("Missing environment variable NEXT_PUBLIC_GTM_ID."); -} - -if (!NEXT_PUBLIC_SEGMENT_WRITE_KEY && NEXT_PUBLIC_ENVIRONMENT !== "local") { - throw new Error( - "Missing environment variable NEXT_PUBLIC_SEGMENT_WRITE_KEY." - ); -} - -if (!NEXT_PUBLIC_WC_PROJECT_ID && NEXT_PUBLIC_ENVIRONMENT !== "local") { - throw new Error("Missing environment variable NEXT_PUBLIC_WC_PROJECT_ID."); -} - -export { - NEXT_PUBLIC_DUNE_API_KEY, - NEXT_PUBLIC_ENVIRONMENT, - NEXT_PUBLIC_FAUCET_API_URL, - NEXT_PUBLIC_GELATO_BRIDGE_URL, - NEXT_PUBLIC_GTM_ID, - NEXT_PUBLIC_HCAPTCHA_SITEKEY, - NEXT_PUBLIC_ONE_TRUST_ID, - NEXT_PUBLIC_SEGMENT_WRITE_KEY, - NEXT_PUBLIC_SENTRY_DSN, - NEXT_PUBLIC_WC_PROJECT_ID, -}; +import { createEnv } from "@t3-oss/env-nextjs"; +import { z } from "zod"; + +export const clientEnv = createEnv({ + client: { + NEXT_PUBLIC_ENVIRONMENT: z + .enum(["local", "development", "ci", "production"]) + .default("local"), + NEXT_PUBLIC_SENTRY_DSN: z.string().min(1), + NEXT_PUBLIC_GTM_ID: z.string().min(1), + NEXT_PUBLIC_SEGMENT_WRITE_KEY: z.string().min(1), + NEXT_PUBLIC_ONE_TRUST_ID: z.string().min(1), + NEXT_PUBLIC_DUNE_API_KEY: z.string().optional(), + NEXT_PUBLIC_WC_PROJECT_ID: z.string().min(1), + NEXT_PUBLIC_HCAPTCHA_SITEKEY: z.string().min(1), + NEXT_PUBLIC_FAUCET_API_URL: z.string().url(), + NEXT_PUBLIC_GELATO_BRIDGE_URL: z.string().url(), + NEXT_PUBLIC_BUNDLER_URL: z.string().url(), + NEXT_PUBLIC_PAYMASTER_URL: z.string().url(), + NEXT_PUBLIC_PASSKEY_SERVER_URL: z.string().url(), + }, + runtimeEnv: { + NEXT_PUBLIC_ENVIRONMENT: process.env.NEXT_PUBLIC_ENVIRONMENT, + NEXT_PUBLIC_SENTRY_DSN: process.env.NEXT_PUBLIC_SENTRY_DSN, + NEXT_PUBLIC_GTM_ID: process.env.NEXT_PUBLIC_GTM_ID, + NEXT_PUBLIC_SEGMENT_WRITE_KEY: process.env.NEXT_PUBLIC_SEGMENT_WRITE_KEY, + NEXT_PUBLIC_ONE_TRUST_ID: process.env.NEXT_PUBLIC_ONE_TRUST_ID, + NEXT_PUBLIC_DUNE_API_KEY: process.env.NEXT_PUBLIC_DUNE_API_KEY, + NEXT_PUBLIC_WC_PROJECT_ID: process.env.NEXT_PUBLIC_WC_PROJECT_ID, + NEXT_PUBLIC_HCAPTCHA_SITEKEY: process.env.NEXT_PUBLIC_HCAPTCHA_SITEKEY, + NEXT_PUBLIC_FAUCET_API_URL: process.env.NEXT_PUBLIC_FAUCET_API_URL, + NEXT_PUBLIC_GELATO_BRIDGE_URL: process.env.NEXT_PUBLIC_GELATO_BRIDGE_URL, + NEXT_PUBLIC_BUNDLER_URL: process.env.NEXT_PUBLIC_BUNDLER_URL, + NEXT_PUBLIC_PAYMASTER_URL: process.env.NEXT_PUBLIC_PAYMASTER_URL, + NEXT_PUBLIC_PASSKEY_SERVER_URL: process.env.NEXT_PUBLIC_PASSKEY_SERVER_URL, + }, +}); diff --git a/src/env.ts b/src/env.ts index 23a639b..795a105 100644 --- a/src/env.ts +++ b/src/env.ts @@ -1,116 +1,25 @@ -// We can assign them as non-null since we check for this below. -// This also allows for imports to trust they're strings. -// TODO: Alternatively in the future we could use zod for much better validation in this file. -const ORIGIN = process.env.ORIGIN!; - -const BRAZE_INSTANCE_URL = process.env.BRAZE_INSTANCE_URL!; -const BRAZE_API_KEY = process.env.BRAZE_API_KEY!; -const BRAZE_GENERAL_WAITLIST_GROUP_ID = - process.env.BRAZE_GENERAL_WAITLIST_GROUP_ID!; -const BRAZE_DEVELOPERS_WAITLIST_GROUP_ID = - process.env.BRAZE_DEVELOPERS_WAITLIST_GROUP_ID!; -const INK_APP_SUBMISSION_BOT_GITHUB_APP_ID = - process.env.INK_APP_SUBMISSION_BOT_GITHUB_APP_ID!; -const INK_APP_SUBMISSION_BOT_GITHUB_PRIVATE_KEY = - process.env.INK_APP_SUBMISSION_BOT_GITHUB_PRIVATE_KEY!; -const INK_APP_SUBMISSION_BOT_GITHUB_INSTALLATION_ID = - process.env.INK_APP_SUBMISSION_BOT_GITHUB_INSTALLATION_ID!; -const INK_APP_SUBMISSION_SLACK_BOT_TOKEN = - process.env.INK_APP_SUBMISSION_SLACK_BOT_TOKEN!; -const INK_APP_SUBMISSION_TARGET_ORG = - process.env.INK_APP_SUBMISSION_TARGET_ORG!; -const INK_APP_SUBMISSION_TARGET_REPO = - process.env.INK_APP_SUBMISSION_TARGET_REPO!; -const INK_APP_SUBMISSION_TARGET_BRANCH = - process.env.INK_APP_SUBMISSION_TARGET_BRANCH!; -const INK_APP_SUBMISSION_SLACK_NOTIFICATION_CHANNEL = - process.env.INK_APP_SUBMISSION_SLACK_NOTIFICATION_CHANNEL!; -const HCAPTCHA_SECRET = process.env.HCAPTCHA_SECRET!; - -if (typeof window === "undefined") { - if (!BRAZE_INSTANCE_URL) { - throw new Error("Missing environment variable BRAZE_INSTANCE_URL."); - } - - if (!BRAZE_API_KEY) { - throw new Error("Missing environment variable BRAZE_API_KEY."); - } - - if (!BRAZE_GENERAL_WAITLIST_GROUP_ID) { - throw new Error( - "Missing environment variable BRAZE_GENERAL_WAITLIST_GROUP_ID." - ); - } - - if (!BRAZE_DEVELOPERS_WAITLIST_GROUP_ID) { - throw new Error( - "Missing environment variable BRAZE_DEVELOPERS_WAITLIST_GROUP_ID." - ); - } - - if (!ORIGIN) { - throw new Error("Missing environment variable ORIGIN."); - } - - if (!INK_APP_SUBMISSION_BOT_GITHUB_APP_ID) { - throw new Error( - "Missing environment variable INK_APP_SUBMISSION_BOT_GITHUB_APP_ID" - ); - } - if (!INK_APP_SUBMISSION_BOT_GITHUB_PRIVATE_KEY) { - throw new Error( - "Missing environment variable INK_APP_SUBMISSION_BOT_GITHUB_PRIVATE_KEY" - ); - } - if (!INK_APP_SUBMISSION_BOT_GITHUB_INSTALLATION_ID) { - throw new Error( - "Missing environment variable INK_APP_SUBMISSION_BOT_GITHUB_INSTALLATION_ID" - ); - } - if (!INK_APP_SUBMISSION_SLACK_BOT_TOKEN) { - throw new Error( - "Missing environment variable INK_APP_SUBMISSION_SLACK_BOT_TOKEN" - ); - } - if (!INK_APP_SUBMISSION_TARGET_ORG) { - throw new Error( - "Missing environment variable INK_APP_SUBMISSION_TARGET_ORG" - ); - } - if (!INK_APP_SUBMISSION_TARGET_REPO) { - throw new Error( - "Missing environment variable INK_APP_SUBMISSION_TARGET_REPO" - ); - } - if (!INK_APP_SUBMISSION_TARGET_BRANCH) { - throw new Error( - "Missing environment variable INK_APP_SUBMISSION_TARGET_BRANCH" - ); - } - if (!INK_APP_SUBMISSION_SLACK_NOTIFICATION_CHANNEL) { - throw new Error( - "Missing environment variable INK_APP_SUBMISSION_SLACK_NOTIFICATION_CHANNEL" - ); - } - if (!HCAPTCHA_SECRET) { - throw new Error("Missing environment variable HCAPTCHA_SECRET"); - } -} - -export * from "@/env-client"; -export { - BRAZE_API_KEY, - BRAZE_DEVELOPERS_WAITLIST_GROUP_ID, - BRAZE_GENERAL_WAITLIST_GROUP_ID, - BRAZE_INSTANCE_URL, - HCAPTCHA_SECRET, - INK_APP_SUBMISSION_BOT_GITHUB_APP_ID, - INK_APP_SUBMISSION_BOT_GITHUB_INSTALLATION_ID, - INK_APP_SUBMISSION_BOT_GITHUB_PRIVATE_KEY, - INK_APP_SUBMISSION_SLACK_BOT_TOKEN, - INK_APP_SUBMISSION_SLACK_NOTIFICATION_CHANNEL, - INK_APP_SUBMISSION_TARGET_BRANCH, - INK_APP_SUBMISSION_TARGET_ORG, - INK_APP_SUBMISSION_TARGET_REPO, - ORIGIN, -}; +import { createEnv } from "@t3-oss/env-nextjs"; +import { z } from "zod"; + +export const env = createEnv({ + server: { + CI: z.string().optional(), + SENTRY_AUTH_TOKEN: z.string().min(1), + ORIGIN: z.string().min(1).default("inkonchain.com"), + BRAZE_INSTANCE_URL: z.string().url(), + BRAZE_API_KEY: z.string().min(1), + BRAZE_GENERAL_WAITLIST_GROUP_ID: z.string().min(1), + BRAZE_DEVELOPERS_WAITLIST_GROUP_ID: z.string().min(1), + INK_APP_SUBMISSION_BOT_GITHUB_APP_ID: z.string().min(1), + INK_APP_SUBMISSION_BOT_GITHUB_PRIVATE_KEY: z.string().min(1), + INK_APP_SUBMISSION_BOT_GITHUB_INSTALLATION_ID: z.string().min(1), + INK_APP_SUBMISSION_SLACK_BOT_TOKEN: z.string().min(1), + INK_APP_SUBMISSION_TARGET_ORG: z.string().min(1), + INK_APP_SUBMISSION_TARGET_REPO: z.string().min(1), + INK_APP_SUBMISSION_TARGET_BRANCH: z.string().min(1), + INK_APP_SUBMISSION_SLACK_NOTIFICATION_CHANNEL: z.string().min(1), + HCAPTCHA_SECRET: z.string().min(1), + MULTIPLIER_JWT_SECRET: z.string().min(1), + }, + experimental__runtimeEnv: process.env, +}); diff --git a/src/hooks/useFaucetInfoAndHCaptcha.ts b/src/hooks/useFaucetInfoAndHCaptcha.ts index 210a172..dc25cbf 100644 --- a/src/hooks/useFaucetInfoAndHCaptcha.ts +++ b/src/hooks/useFaucetInfoAndHCaptcha.ts @@ -1,7 +1,7 @@ import { useCallback, useEffect, useState } from "react"; import { toast } from "react-toastify"; -import { NEXT_PUBLIC_FAUCET_API_URL } from "@/env-client"; +import { clientEnv } from "@/env-client"; import { useHCaptcha } from "./useHCaptcha"; @@ -26,11 +26,14 @@ export function useFaucetInfoAndCaptcha(chainId: number | undefined) { const fetchFaucetInfo = useCallback(async () => { try { console.trace("Fetching faucet info for network:", chainId); - const res = await fetch(`${NEXT_PUBLIC_FAUCET_API_URL}/api/info`, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ chainId }), - }); + const res = await fetch( + `${clientEnv.NEXT_PUBLIC_FAUCET_API_URL}/api/info`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ chainId }), + } + ); if (res.ok) { const newFaucetInfo = await res.json(); console.trace("New faucet info:", newFaucetInfo); diff --git a/src/hooks/useForm.ts b/src/hooks/useForm.ts index 4dfc558..3024826 100644 --- a/src/hooks/useForm.ts +++ b/src/hooks/useForm.ts @@ -8,7 +8,7 @@ import { import { zodResolver } from "@hookform/resolvers/zod"; import { ZodSchema } from "zod"; -import { NEXT_PUBLIC_HCAPTCHA_SITEKEY } from "@/env-client"; +import { clientEnv } from "@/env-client"; import { useHCaptcha } from "./useHCaptcha"; @@ -32,7 +32,7 @@ export function useForm( ): UseFormHook { const [isSubmitting, startTransition] = useTransition(); const { executeHCaptcha, hcaptchaLoaded } = useHCaptcha( - NEXT_PUBLIC_HCAPTCHA_SITEKEY, + clientEnv.NEXT_PUBLIC_HCAPTCHA_SITEKEY, true ); diff --git a/src/hooks/useLegacyForm.ts b/src/hooks/useLegacyForm.ts index 92104aa..a3ab39b 100644 --- a/src/hooks/useLegacyForm.ts +++ b/src/hooks/useLegacyForm.ts @@ -1,7 +1,7 @@ // Adapted from https://allanlasser.com/posts/2024-01-26-avoid-using-reacts-useformstatus import { SyntheticEvent, useActionState, useTransition } from "react"; -import { NEXT_PUBLIC_HCAPTCHA_SITEKEY } from "@/env-client"; +import { clientEnv } from "@/env-client"; import { useHCaptcha } from "./useHCaptcha"; @@ -17,7 +17,7 @@ export function useLegacyForm( initialState: Awaited ): UseLegacyFormHook { const { executeHCaptcha, hcaptchaLoaded } = useHCaptcha( - NEXT_PUBLIC_HCAPTCHA_SITEKEY, + clientEnv.NEXT_PUBLIC_HCAPTCHA_SITEKEY, true ); const [isPending, startTransition] = useTransition(); diff --git a/src/instrumentation.ts b/src/instrumentation.ts index 10aaace..ee08dd5 100644 --- a/src/instrumentation.ts +++ b/src/instrumentation.ts @@ -1,3 +1,4 @@ +// TODO: Is this used? export async function register() { if (process.env.NEXT_RUNTIME === "nodejs") { await import("../sentry.server.config"); diff --git a/src/integrations/braze.ts b/src/integrations/braze.ts index ed4ab4c..37f416c 100644 --- a/src/integrations/braze.ts +++ b/src/integrations/braze.ts @@ -1,11 +1,6 @@ import { randomUUID } from "crypto"; -import { - BRAZE_API_KEY, - BRAZE_DEVELOPERS_WAITLIST_GROUP_ID, - BRAZE_GENERAL_WAITLIST_GROUP_ID, - BRAZE_INSTANCE_URL, -} from "@/env"; +import { env } from "@/env"; import { CustomError, ErrorCode } from "@/util/custom-error"; import { captureError } from "./sentry"; @@ -68,11 +63,11 @@ export async function subscribeUserToGroup( function getSubscriptionGroupId(group: SubscriptionGroup) { if (group === SubscriptionGroup.DEVELOPER_WAITLIST) { - return BRAZE_DEVELOPERS_WAITLIST_GROUP_ID; + return env.BRAZE_DEVELOPERS_WAITLIST_GROUP_ID; } if (group === SubscriptionGroup.GENERAL_WAITLIST) { - return BRAZE_GENERAL_WAITLIST_GROUP_ID; + return env.BRAZE_GENERAL_WAITLIST_GROUP_ID; } throw new Error(`Invalid subscription group ${group}`); @@ -251,7 +246,7 @@ export async function retrieveUserEmailById( } async function getFromBraze(path: string) { - const url = `${BRAZE_INSTANCE_URL}${path}`; + const url = `${env.BRAZE_INSTANCE_URL}${path}`; const res = await fetch(url, { headers: getHeaders(), }); @@ -265,7 +260,7 @@ async function getFromBraze(path: string) { } async function postToBraze(path: string, data: Record) { - const url = `${BRAZE_INSTANCE_URL}${path}`; + const url = `${env.BRAZE_INSTANCE_URL}${path}`; const res = await fetch(url, { method: "POST", headers: getHeaders(), @@ -282,7 +277,7 @@ async function postToBraze(path: string, data: Record) { function getHeaders() { return { - Authorization: `Bearer ${BRAZE_API_KEY}`, + Authorization: `Bearer ${env.BRAZE_API_KEY}`, "Content-Type": "application/json", }; } diff --git a/src/lib/hcaptcha.ts b/src/lib/hcaptcha.ts index 8560b1a..474b68b 100644 --- a/src/lib/hcaptcha.ts +++ b/src/lib/hcaptcha.ts @@ -1,4 +1,4 @@ -import { HCAPTCHA_SECRET } from "@/env"; +import { env } from "@/env"; interface HCaptchaVerifyResponse { success: boolean; @@ -11,7 +11,7 @@ interface HCaptchaVerifyResponse { export async function validateCaptcha(token: string): Promise { try { const formData = new URLSearchParams(); - formData.append("secret", HCAPTCHA_SECRET); + formData.append("secret", env.HCAPTCHA_SECRET); formData.append("response", token); const response = await fetch("https://api.hcaptcha.com/siteverify", {