From 36603aa1d1f970a5605705ed5a009086d13ba7a5 Mon Sep 17 00:00:00 2001 From: Kem Date: Thu, 4 Sep 2025 22:43:57 +0100 Subject: [PATCH 01/60] fix --- app/api/v1/transactions/[id]/route.ts | 2 +- app/lib/config.ts | 22 ++++++++++++++++++ app/lib/supabase.ts | 32 +++++++++++++-------------- app/types.ts | 22 ++++++++++++++++++ 4 files changed, 60 insertions(+), 18 deletions(-) diff --git a/app/api/v1/transactions/[id]/route.ts b/app/api/v1/transactions/[id]/route.ts index 7176161e..33f67aae 100644 --- a/app/api/v1/transactions/[id]/route.ts +++ b/app/api/v1/transactions/[id]/route.ts @@ -6,7 +6,7 @@ import { withRateLimit } from "@/app/lib/rate-limit"; export const PUT = withRateLimit( async (request: NextRequest, { params }: { params: { id: string } }) => { try { - const { id } = await params; + const { id } = params; const walletAddress = request.headers .get("x-wallet-address") diff --git a/app/lib/config.ts b/app/lib/config.ts index fdf60cbe..b40f1c51 100644 --- a/app/lib/config.ts +++ b/app/lib/config.ts @@ -10,6 +10,28 @@ const config: Config = { googleVerificationCode: process.env.NEXT_PUBLIC_GOOGLE_VERIFICATION_CODE || "", noticeBannerText: process.env.NEXT_PUBLIC_NOTICE_BANNER_TEXT || "", + cdpApiKey: process.env.NEXT_PUBLIC_CDP_API_KEY || "", + appUrl: process.env.NEXT_PUBLIC_URL || "https://noblocks.xyz", + supabaseUrl: process.env.SUPABASE_URL || "", + supabaseRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY || "", + farcasterHeader: process.env.FARCASTER_HEADER || "", + farcasterPayload: process.env.FARCASTER_PAYLOAD || "", + farcasterSignatuure: process.env.FARCASTER_SIGNATURE || "", + publicUrl: process.env.NEXT_PUBLIC_URL || "", + onchainKitProjectName: process.env.NEXT_PUBLIC_ONCHAINKIT_PROJECT_NAME || "", + appSubstitle: process.env.NEXT_PUBLIC_APP_SUBTITLE || "", + appDescription: process.env.NEXT_PUBLIC_APP_DESCRIPTION || "", + appIcon: process.env.NEXT_PUBLIC_APP_ICON || "", + appSpashImage: process.env.NEXT_PUBLIC_APP_SPLASH_IMAGE || "", + splashBackgroundColor: process.env.NEXT_PUBLIC_SPLASH_BACKGROUND_COLOR || "", + appPrimaryCategory: process.env.NEXT_PUBLIC_APP_PRIMARY_CATEGORY || "", + appHeroImageprocess: process.env.NEXT_PUBLIC_APP_HERO_IMAGE || "", + appTagline: process.env.NEXT_PUBLIC_APP_TAGLINE || "", + appOgTitle: process.env.NEXT_PUBLIC_APP_OG_TITLE || "", + appOgDescription: process.env.NEXT_PUBLIC_APP_OG_DESCRIPTION || "", + publicAppOGImage: process.env.NEXT_PUBLIC_APP_OG_IMAGE || "", + noIndex: process.env.NEXT_PUBLIC_NOINDEX || "", + nodeEnv: process.env.NODE_ENV || "", }; export default config; diff --git a/app/lib/supabase.ts b/app/lib/supabase.ts index 211c8377..04a13aa7 100644 --- a/app/lib/supabase.ts +++ b/app/lib/supabase.ts @@ -1,20 +1,18 @@ -import { createClient } from '@supabase/supabase-js'; +import { createClient } from "@supabase/supabase-js"; +import config from "./config"; -if (!process.env.SUPABASE_URL) { - throw new Error('Missing env.SUPABASE_URL'); -} -if (!process.env.SUPABASE_SERVICE_ROLE_KEY) { - throw new Error('Missing env.SUPABASE_SERVICE_ROLE_KEY'); +const { supabaseRoleKey, supabaseUrl } = config; + +// Initialize Supabase client with service role key only when envs are available. +// Avoid throwing at module import time to keep Next.js build workable. +let client: any = null; +if (supabaseUrl && supabaseRoleKey) { + client = createClient(supabaseUrl, supabaseRoleKey, { + auth: { + autoRefreshToken: false, + persistSession: false, + }, + }); } -// Initialize Supabase client with service role key -export const supabaseAdmin = createClient( - process.env.SUPABASE_URL, - process.env.SUPABASE_SERVICE_ROLE_KEY, - { - auth: { - autoRefreshToken: false, - persistSession: false, - }, - } -); \ No newline at end of file +export const supabaseAdmin: any = client; diff --git a/app/types.ts b/app/types.ts index c95996ce..52c3785f 100644 --- a/app/types.ts +++ b/app/types.ts @@ -247,6 +247,27 @@ export type KYCStatusResponse = { }; export type Config = { + nodeEnv: string; + noIndex: string; + onchainKitProjectName: string; + appSubstitle: string; + appDescription: string; + appIcon: string; + appSpashImage: string; + splashBackgroundColor: string; + appPrimaryCategory: string; + appHeroImageprocess: string; + appTagline: string; + appOgTitle: string; + appOgDescription: string; + publicAppOGImage: string; + publicUrl: string; + farcasterHeader: string; + farcasterPayload: string; + farcasterSignatuure: string; + supabaseUrl: string; + supabaseRoleKey: string; + appUrl: string; aggregatorUrl: string; privyAppId: string; thirdwebClientId: string; @@ -255,6 +276,7 @@ export type Config = { contactSupportUrl: string; googleVerificationCode: string; noticeBannerText?: string; // Optional, for dynamic notice banner text + cdpApiKey?: string; }; export type Network = { From 9f7040769d25f9985b6225c36ad4cb1243a7dd78 Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 00:31:12 +0100 Subject: [PATCH 02/60] added farcaster file --- app/early-ready.tsx | 52 + app/head.tsx | 29 + app/lib/manifest-utils.ts | 22 + app/utils.ts | 58 +- package.json | 7 +- pnpm-lock.yaml | 2190 ++++++++++++++++++++++++++--- providers/MiniKitProvider.tsx | 44 + public/.well-known/farcaster.json | 35 + public/.well-known/route.ts | 82 ++ public/_redirects | 1 + public/farcaster-manifest.json | 34 + 11 files changed, 2319 insertions(+), 235 deletions(-) create mode 100644 app/early-ready.tsx create mode 100644 app/head.tsx create mode 100644 app/lib/manifest-utils.ts create mode 100644 providers/MiniKitProvider.tsx create mode 100644 public/.well-known/farcaster.json create mode 100644 public/.well-known/route.ts create mode 100644 public/_redirects create mode 100644 public/farcaster-manifest.json diff --git a/app/early-ready.tsx b/app/early-ready.tsx new file mode 100644 index 00000000..fb9cd3be --- /dev/null +++ b/app/early-ready.tsx @@ -0,0 +1,52 @@ +"use client"; + +import { useEffect } from "react"; + +export function EarlyReady() { + useEffect(() => { + let cancelled = false; + (async () => { + try { + if ( + typeof window !== "undefined" && + (window as any).__farcasterMiniAppReady + ) { + return; + } + const { sdk } = await import("@farcaster/miniapp-sdk"); + if (cancelled) return; + await sdk.actions.ready(); + // Post defensive ready messages for hosts that listen to postMessage + try { + if ( + typeof window !== "undefined" && + window.parent && + window.top !== window.self + ) { + const msgs = [ + { type: "farcaster:ready" }, + { type: "miniapp:ready" }, + { type: "frame:ready" }, + { type: "farcaster:miniapp:ready" }, + ]; + msgs.forEach((m) => { + try { + window.parent!.postMessage(m as any, "*"); + } catch {} + }); + } + } catch {} + if (typeof window !== "undefined") { + (window as any).__farcasterMiniAppReady = true; + } + } catch (err) { + console.error("❌ Early ready failed", err); + } + })(); + return () => { + cancelled = true; + }; + }, []); + + return null; +} diff --git a/app/head.tsx b/app/head.tsx new file mode 100644 index 00000000..d440d198 --- /dev/null +++ b/app/head.tsx @@ -0,0 +1,29 @@ +import config from "./lib/config"; + +export default function Head() { + const { appUrl } = config; + + const baseUrl = appUrl.replace(/\/$/, ""); + const miniAppJson = JSON.stringify({ + url: baseUrl, + window: { height: 600, width: 400 }, + }); + + return ( + <> + Noblocks - Decentralized Payments Interface + + + {/* Farcaster Mini App embed */} + + + + + {/* Keep your other important tags */} + + + ); +} diff --git a/app/lib/manifest-utils.ts b/app/lib/manifest-utils.ts new file mode 100644 index 00000000..91988c2f --- /dev/null +++ b/app/lib/manifest-utils.ts @@ -0,0 +1,22 @@ +export function withValidProperties>( + properties: T, +): Partial { + const entries = Object.entries(properties).flatMap(([key, value]) => { + if (value == null) return []; + if (Array.isArray(value)) { + const filtered = value.filter((v) => + typeof v === "string" ? v.trim().length > 0 : v != null, + ); + return filtered.length > 0 ? [[key, filtered]] : []; + } + if (typeof value === "string") { + const trimmed = value.trim(); + return trimmed.length > 0 ? [[key, trimmed]] : []; + } + if (typeof value === "boolean") { + return value === true ? [[key, value]] : []; + } + return [[key, value]]; + }); + return Object.fromEntries(entries) as Partial; +} diff --git a/app/utils.ts b/app/utils.ts index 50b167a9..0b657af4 100644 --- a/app/utils.ts +++ b/app/utils.ts @@ -362,24 +362,6 @@ export async function getNetworkTokens(network = ""): Promise { tokens[networkName].push(transformToken(apiToken)); }); // Update cache with all networks - // Temporarily add USDT on Base for user withdrawal - if (tokens["Base"]) { - const usdtBase = { - name: "Tether USD", - symbol: "USDT", - decimals: 6, - address: "0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2", - imageUrl: "/logos/usdt-logo.svg", - }; - - // Check if USDT is not already in the list - const hasUSDT = tokens["Base"].some( - (token) => token.symbol === "USDT", - ); - if (!hasUSDT) { - tokens["Base"].push(usdtBase); - } - } tokensCache = tokens; lastTokenFetch = now; })(); @@ -574,7 +556,7 @@ export function clearFormState(formMethods: any) { } /** - * Determines if the app should use an injected wallet. + * Determines whether to use the injected wallet based on URL parameters and environment detection. * * @param searchParams - The URL search parameters to check for the 'injected' flag * @returns boolean indicating whether to use injected wallet @@ -583,7 +565,43 @@ export function shouldUseInjectedWallet( searchParams: URLSearchParams, ): boolean { const injectedParam = searchParams.get("injected"); - return Boolean(injectedParam === "true" && window.ethereum); + const hasEthereum = typeof window !== "undefined" && (window as any).ethereum; + + // Detect if running inside Farcaster Mini App environment + const isLikelyFarcasterMiniApp = (() => { + if (typeof window === "undefined") return false; + try { + const w = window as any; + const ua = navigator.userAgent || ""; + const ref = document.referrer || ""; + const url = window.location.href || ""; + + // More aggressive detection for Farcaster Mini App + return ( + Boolean(w.__farcasterMiniAppReady) || + Boolean(w.farcaster) || + Boolean(w.warpcast) || + /Farcaster|Warpcast/i.test(ua) || + /warpcast\.com/i.test(ref) || + /warpcast\.com/i.test(url) || + /farcaster\.xyz/i.test(url) || + /farcaster\.xyz/i.test(ref) || + // Check if we're in an iframe or embedded context + window !== window.top || + // Check for Farcaster-specific query parameters + searchParams.has("farcaster") || + searchParams.has("warpcast") || + searchParams.has("miniapp") + ); + } catch { + return false; + } + })(); + + // Treat Farcaster Mini App as injected flow if a provider exists + if (isLikelyFarcasterMiniApp && hasEthereum) return true; + + return Boolean(injectedParam === "true" && hasEthereum); } /** diff --git a/package.json b/package.json index 84bdb39a..e1e7a1ba 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,8 @@ "sanity:undeploy": "sanity undeploy" }, "dependencies": { + "@coinbase/onchainkit": "^0.38.19", + "@farcaster/miniapp-sdk": "^0.1.9", "@headlessui/react": "^2.2.4", "@hotjar/browser": "^1.0.9", "@portabletext/react": "^3.2.1", @@ -38,6 +40,8 @@ "@thirdweb-dev/auth": "^4.1.97", "@thirdweb-dev/wallets": "^2.5.39", "@vidstack/react": "^0.6.15", + "@wagmi/chains": "^1.8.0", + "@wagmi/core": "^2.20.3", "axios": "^1.9.0", "canvas-confetti": "^1.9.3", "critters": "^0.0.25", @@ -64,7 +68,8 @@ "sonner": "^1.7.4", "styled-components": "^6.1.19", "thirdweb": "^5.102.6", - "viem": "^2.31.0" + "viem": "^2.31.0", + "wagmi": "^2.16.9" }, "devDependencies": { "@sanity/cli": "^3.99.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f263dae5..1fddf415 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,6 +12,12 @@ importers: .: dependencies: + '@coinbase/onchainkit': + specifier: ^0.38.19 + version: 0.38.19(@farcaster/miniapp-sdk@0.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(immer@10.1.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(utf-8-validate@5.0.10)(zod@3.25.24) + '@farcaster/miniapp-sdk': + specifier: ^0.1.9 + version: 0.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) '@headlessui/react': specifier: ^2.2.4 version: 2.2.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -47,13 +53,19 @@ importers: version: 5.80.7(react@19.0.0) '@thirdweb-dev/auth': specifier: ^4.1.97 - version: 4.1.97(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/properties@5.8.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(fastify@4.29.1)(localforage@1.10.0)(next@15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tweetnacl@1.0.3)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 4.1.97(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/properties@5.8.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(fastify@4.29.1)(localforage@1.10.0)(next@15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tweetnacl@1.0.3)(typescript@5.8.3)(utf-8-validate@5.0.10) '@thirdweb-dev/wallets': specifier: ^2.5.39 version: 2.5.39(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/properties@5.8.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(localforage@1.10.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tweetnacl@1.0.3)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) '@vidstack/react': specifier: ^0.6.15 version: 0.6.15(@types/react@19.0.8)(maverick.js@0.37.0)(react@19.0.0)(vidstack@0.6.15) + '@wagmi/chains': + specifier: ^1.8.0 + version: 1.8.0(typescript@5.8.3) + '@wagmi/core': + specifier: ^2.20.3 + version: 2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)) axios: specifier: ^1.9.0 version: 1.9.0 @@ -92,10 +104,10 @@ importers: version: 2.65.0 next: specifier: ^15.3.3 - version: 15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) next-sanity: specifier: ^10.0.4 - version: 10.0.10(@emotion/is-prop-valid@1.3.1)(@sanity/client@7.8.2)(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-is@19.1.1)(react@19.0.0)(sanity@4.4.1(@emotion/is-prop-valid@1.3.1)(@portabletext/sanity-bridge@1.1.2(@sanity/schema@4.4.1(@types/react@19.0.8)(debug@4.4.1))(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)))(@types/node@22.15.31)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)(utf-8-validate@5.0.10)(yaml@2.8.1))(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3) + version: 10.0.10(@emotion/is-prop-valid@1.3.1)(@sanity/client@7.8.2)(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-is@19.1.1)(react@19.0.0)(sanity@4.4.1(@emotion/is-prop-valid@1.3.1)(@portabletext/sanity-bridge@1.1.2(@sanity/schema@4.4.1(@types/react@19.0.8)(debug@4.4.1))(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)))(@types/node@22.15.31)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(jiti@2.5.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)(utf-8-validate@5.0.10)(yaml@2.8.1))(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -122,7 +134,7 @@ importers: version: 3.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) sanity: specifier: ^4.4.1 - version: 4.4.1(@emotion/is-prop-valid@1.3.1)(@portabletext/sanity-bridge@1.1.2(@sanity/schema@4.4.1(@types/react@19.0.8)(debug@4.4.1))(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)))(@types/node@22.15.31)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)(utf-8-validate@5.0.10)(yaml@2.8.1) + version: 4.4.1(@emotion/is-prop-valid@1.3.1)(@portabletext/sanity-bridge@1.1.2(@sanity/schema@4.4.1(@types/react@19.0.8)(debug@4.4.1))(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)))(@types/node@22.15.31)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(jiti@2.5.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)(utf-8-validate@5.0.10)(yaml@2.8.1) sonner: specifier: ^1.7.4 version: 1.7.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -135,6 +147,9 @@ importers: viem: specifier: ^2.31.0 version: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + wagmi: + specifier: ^2.16.9 + version: 2.16.9(@tanstack/query-core@5.80.7)(@tanstack/react-query@5.80.7(react@19.0.0))(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(zod@3.25.24) devDependencies: '@sanity/cli': specifier: ^3.99.0 @@ -162,10 +177,10 @@ importers: version: 19.0.3(@types/react@19.0.8) eslint: specifier: ^9.28.0 - version: 9.28.0(jiti@2.4.2) + version: 9.28.0(jiti@2.5.1) eslint-config-next: specifier: 15.1.6 - version: 15.1.6(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + version: 15.1.6(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3) postcss: specifier: ^8.5.5 version: 8.5.5 @@ -912,6 +927,9 @@ packages: resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} + '@base-org/account@1.1.1': + resolution: {integrity: sha512-IfVJPrDPhHfqXRDb89472hXkpvJuQQR7FDI9isLPHEqSYt/45whIoBxSPgZ0ssTt379VhQo4+87PWI1DoLSfAQ==} + '@blocto/sdk@0.10.2': resolution: {integrity: sha512-9gCIUKA7/7/hMHaa5n94+OYU/3tHd6vmBgTgv4o2h3z9SFueQXAJMO4aBggH9+EldgHQDI6wHsnvytEt9AWb6g==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -948,6 +966,12 @@ packages: '@codemirror/view@6.38.1': resolution: {integrity: sha512-RmTOkE7hRU3OVREqFVITWHz6ocgBjv08GoePscAakgVQfciA3SGCEk7mb9IzwW61cKKmlTpHXG6DUE5Ubx+MGQ==} + '@coinbase/onchainkit@0.38.19': + resolution: {integrity: sha512-4uiujoTO5/8/dpWVZoTlBC7z0Y1N5fgBYDR6pKN/r6a8pX83ObUuOSGhSzJ8Xbu8NpPU6TXX+VuzLiwiLg/irg==} + peerDependencies: + react: ^18 || ^19 + react-dom: ^18 || ^19 + '@coinbase/wallet-sdk@3.9.3': resolution: {integrity: sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw==} @@ -960,6 +984,9 @@ packages: '@coinbase/wallet-sdk@4.3.4': resolution: {integrity: sha512-4Lt9AtMCGpmKJLwWtMVt/GqhSlC52L7hTfe4HnKHdWm/0IaIGeuEM0LzvXekEyYc2/E/FeBTJ0IlyOODb4I/rQ==} + '@coinbase/wallet-sdk@4.3.6': + resolution: {integrity: sha512-4q8BNG1ViL4mSAAvPAtpwlOs1gpC+67eQtgIwNvT3xyeyFFd+guwkc8bcX5rTmQhXpqnhzC4f0obACbP9CqMSA==} + '@csstools/color-helpers@5.0.2': resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} engines: {node: '>=18'} @@ -1025,6 +1052,12 @@ packages: peerDependencies: react: '>=16.8.0' + '@ecies/ciphers@0.2.4': + resolution: {integrity: sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==} + engines: {bun: '>=1', deno: '>=2', node: '>=16'} + peerDependencies: + '@noble/ciphers': ^1.0.0 + '@emnapi/core@1.4.3': resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} @@ -1688,6 +1721,28 @@ packages: '@ethersproject/wordlists@5.8.0': resolution: {integrity: sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==} + '@farcaster/frame-sdk@0.1.9': + resolution: {integrity: sha512-r5cAKgHn4w8Q1jaCi84uKqItfNRd6h8Lk0YyQaz5kMoEIeJ4C0gXPpyqKPYP2TVDFuvaexg2KvzCO2CQdygWyQ==} + engines: {node: '>=22.11.0'} + + '@farcaster/miniapp-core@0.3.8': + resolution: {integrity: sha512-LaRG1L3lxHqo5pP/E2CX9hNqusR0C8hX3QTV2+hzmQJz6IGvmSpH6Q9ivlLyDfbdqokiMFo5Y3Z1EX1zBHMEQQ==} + + '@farcaster/miniapp-sdk@0.1.9': + resolution: {integrity: sha512-hn0dlIy0JP2Hx6PgKcn9bjYwyPS/SQgYJ/a0qjzG8ZsDfUdjsMPf3yI/jicBipTml/UUoKcbqXM68fsrsbNMKA==} + + '@farcaster/miniapp-wagmi-connector@1.0.0': + resolution: {integrity: sha512-vMRZbekUUctnAUvBFhNoEsJlujRRdxop94fDy5LrKiRR9ax0wtp8gCvLYO+LpaP2PtGs0HFpRwlHNDJWvBR8bg==} + peerDependencies: + '@farcaster/miniapp-sdk': ^0.1.0 + '@wagmi/core': ^2.14.1 + viem: ^2.21.55 + + '@farcaster/quick-auth@0.0.6': + resolution: {integrity: sha512-tiZndhpfDtEhaKlkmS5cVDuS+A/tafqZT3y9I44rC69m3beJok6e8dIH2JhxVy3EvOWTyTBnrmNn6GOOh+qK6A==} + peerDependencies: + typescript: 5.8.3 + '@fastify/ajv-compiler@3.6.0': resolution: {integrity: sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==} @@ -1737,6 +1792,11 @@ packages: '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@gemini-wallet/core@0.2.0': + resolution: {integrity: sha512-vv9aozWnKrrPWQ3vIFcWk7yta4hQW1Ie0fsNNPeXnjAxkbXr2hqMagEptLuMxpEP2W3mnRu05VDNKzcvAuuZDw==} + peerDependencies: + viem: '>=2.0.0' + '@google-cloud/kms@4.5.0': resolution: {integrity: sha512-i2vC0DI7bdfEhQszqASTw0KVvbB7HsO2CwTBod423NawAu7FWi+gVVa7NLfXVNGJaZZayFfci2Hu+om/HmyEjQ==} engines: {node: '>=14.0.0'} @@ -1745,6 +1805,11 @@ packages: resolution: {integrity: sha512-5umyLoD5vMxlSVQwtmUXeNCNWs9dzmWykGm1qrHe/pCYrj/1lyJIgJRw+IxoMNodGqtcHEtfDhdNjRDM9yo/TA==} engines: {node: '>=6.0.0'} + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@grpc/grpc-js@1.13.4': resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} engines: {node: '>=12.10.0'} @@ -2234,10 +2299,33 @@ packages: resolution: {integrity: sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==} engines: {node: '>=16.0.0'} + '@metamask/json-rpc-engine@8.0.2': + resolution: {integrity: sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA==} + engines: {node: '>=16.0.0'} + + '@metamask/json-rpc-middleware-stream@7.0.2': + resolution: {integrity: sha512-yUdzsJK04Ev98Ck4D7lmRNQ8FPioXYhEUZOMS01LXW8qTvPGiRVXmVltj2p4wrLkh0vW7u6nv0mNl5xzC5Qmfg==} + engines: {node: '>=16.0.0'} + + '@metamask/object-multiplex@2.1.0': + resolution: {integrity: sha512-4vKIiv0DQxljcXwfpnbsXcfa5glMj5Zg9mqn4xpIWqkv6uJ2ma5/GtUfLFSxhlxnR8asRMv8dDmWya1Tc1sDFA==} + engines: {node: ^16.20 || ^18.16 || >=20} + + '@metamask/onboarding@1.0.1': + resolution: {integrity: sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ==} + + '@metamask/providers@16.1.0': + resolution: {integrity: sha512-znVCvux30+3SaUwcUGaSf+pUckzT5ukPRpcBmy+muBLC0yaWnBcvDqGfcsw6CBIenUdFrVoAFa8B6jsuCY/a+g==} + engines: {node: ^18.18 || >=20} + '@metamask/rpc-errors@6.4.0': resolution: {integrity: sha512-1ugFO1UoirU2esS3juZanS/Fo8C8XYocCuBpfZI5N7ECtoG+zu0wF+uWZASik6CkO6w9n/Iebt4iI4pT0vptpg==} engines: {node: '>=16.0.0'} + '@metamask/rpc-errors@7.0.2': + resolution: {integrity: sha512-YYYHsVYd46XwY2QZzpGeU4PSdRhHdxnzkB8piWGvJW2xbikZ3R+epAYEL4q/K8bh9JPTucsUdwRFnACor1aOYw==} + engines: {node: ^18.20 || ^20.17 || >=22} + '@metamask/safe-event-emitter@2.0.0': resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} @@ -2245,10 +2333,29 @@ packages: resolution: {integrity: sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==} engines: {node: '>=12.0.0'} + '@metamask/sdk-communication-layer@0.32.0': + resolution: {integrity: sha512-dmj/KFjMi1fsdZGIOtbhxdg3amxhKL/A5BqSU4uh/SyDKPub/OT+x5pX8bGjpTL1WPWY/Q0OIlvFyX3VWnT06Q==} + peerDependencies: + cross-fetch: ^4.0.0 + eciesjs: '*' + eventemitter2: ^6.4.9 + readable-stream: ^3.6.2 + socket.io-client: ^4.5.1 + + '@metamask/sdk-install-modal-web@0.32.0': + resolution: {integrity: sha512-TFoktj0JgfWnQaL3yFkApqNwcaqJ+dw4xcnrJueMP3aXkSNev2Ido+WVNOg4IIMxnmOrfAC9t0UJ0u/dC9MjOQ==} + + '@metamask/sdk@0.32.0': + resolution: {integrity: sha512-WmGAlP1oBuD9hk4CsdlG1WJFuPtYJY+dnTHJMeCyohTWD2GgkcLMUUuvu9lO1/NVzuOoSi1OrnjbuY1O/1NZ1g==} + '@metamask/superstruct@3.2.1': resolution: {integrity: sha512-fLgJnDOXFmuVlB38rUN5SmU7hAFQcCjrg3Vrxz67KTY7YHFnSNEKvX4avmEBdOI0yTCxZjwMCFEqsC8k2+Wd3g==} engines: {node: '>=16.0.0'} + '@metamask/utils@11.7.0': + resolution: {integrity: sha512-IamqpZF8Lr4WeXJ84fD+Sy+v1Zo05SYuMPHHBrZWpzVbnHAmXQpL4ckn9s5dfA+zylp3WGypaBPb6SBZdOhuNQ==} + engines: {node: ^18.18 || ^20.14 || >=22} + '@metamask/utils@3.6.0': resolution: {integrity: sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ==} engines: {node: '>=14.0.0'} @@ -2530,6 +2637,10 @@ packages: '@passwordless-id/webauthn@2.3.0': resolution: {integrity: sha512-D3+ncFPHutmwYVI84+5aQrFa42rRu+Rg0/Pxw8fjfyhMEydmeWIwp7kNONdZpqBjzXI1IMcGUBuJy931aE/Y7Q==} + '@paulmillr/qr@0.2.1': + resolution: {integrity: sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==} + deprecated: 'The package is now available as "qr": npm install qr' + '@pedrouid/environment@1.0.1': resolution: {integrity: sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug==} @@ -3246,33 +3357,51 @@ packages: '@reown/appkit-common@1.7.3': resolution: {integrity: sha512-wKTr6N3z8ly17cc51xBEVkZK4zAd8J1m7RubgsdQ1olFY9YJGe61RYoNv9yFjt6tUVeYT+z7iMUwPhX2PziefQ==} + '@reown/appkit-common@1.7.8': + resolution: {integrity: sha512-ridIhc/x6JOp7KbDdwGKY4zwf8/iK8EYBl+HtWrruutSLwZyVi5P8WaZa+8iajL6LcDcDF7LoyLwMTym7SRuwQ==} + '@reown/appkit-common@1.7.9': resolution: {integrity: sha512-HUXvZQIqVXO7j7m+Gr3o7ZZFtOpO8xrVzo+RVYu1jXVe1aR2xqqfS6qih97ZfM6vH2AVpEswCtAV+CgsRqVCvQ==} '@reown/appkit-controllers@1.7.3': resolution: {integrity: sha512-aqAcX/nZe0gwqjncyCkVrAk3lEw0qZ9xGrdLOmA207RreO4J0Vxu8OJXCBn4C2AUI2OpBxCPah+vyuKTUJTeHQ==} + '@reown/appkit-controllers@1.7.8': + resolution: {integrity: sha512-IdXlJlivrlj6m63VsGLsjtPHHsTWvKGVzWIP1fXZHVqmK+rZCBDjCi9j267Rb9/nYRGHWBtlFQhO8dK35WfeDA==} + '@reown/appkit-controllers@1.7.9': resolution: {integrity: sha512-HW9yy/J1Ab6WpxjZNOjXUBWLQA7zlG1WnJKTUSs1MMQynRlMHcm5i9jr7SAdFCbEWSnVHNgbjnQ0mkd0iM/xgw==} + '@reown/appkit-pay@1.7.8': + resolution: {integrity: sha512-OSGQ+QJkXx0FEEjlpQqIhT8zGJKOoHzVnyy/0QFrl3WrQTjCzg0L6+i91Ad5Iy1zb6V5JjqtfIFpRVRWN4M3pw==} + '@reown/appkit-pay@1.7.9': resolution: {integrity: sha512-PejCfJssiMxhOdlxGw056bAfc1aDGZJ+Uylj1XlLYbGIleVrftmCw5zZhrATfRHEGZNMfJc0SrUWgs8u68T97Q==} '@reown/appkit-polyfills@1.7.3': resolution: {integrity: sha512-vQUiAyI7WiNTUV4iNwv27iigdeg8JJTEo6ftUowIrKZ2/gtE2YdMtGpavuztT/qrXhrIlTjDGp5CIyv9WOTu4g==} + '@reown/appkit-polyfills@1.7.8': + resolution: {integrity: sha512-W/kq786dcHHAuJ3IV2prRLEgD/2iOey4ueMHf1sIFjhhCGMynMkhsOhQMUH0tzodPqUgAC494z4bpIDYjwWXaA==} + '@reown/appkit-polyfills@1.7.9': resolution: {integrity: sha512-w0t99sRDxJf9UdmAKpfMXcjSX3XD/EihXZOxlHdE3H6JQ7PL62PNmwIFyTphjjKxV5eCcUK6pn5Uss0SY3vbNA==} '@reown/appkit-scaffold-ui@1.7.3': resolution: {integrity: sha512-ssB15fcjmoKQ+VfoCo7JIIK66a4SXFpCH8uK1CsMmXmKIKqPN54ohLo291fniV6mKtnJxh5Xm68slGtGrO3bmA==} + '@reown/appkit-scaffold-ui@1.7.8': + resolution: {integrity: sha512-RCeHhAwOrIgcvHwYlNWMcIDibdI91waaoEYBGw71inE0kDB8uZbE7tE6DAXJmDkvl0qPh+DqlC4QbJLF1FVYdQ==} + '@reown/appkit-scaffold-ui@1.7.9': resolution: {integrity: sha512-032Ca84+kLlOidyTP7Hr0EWj3yrqi4A9hS3qotHZZ8TaTCWQHPDU8qcYiVNdRU0O8lKeVJ/SZqxoJGDWgy4sJQ==} '@reown/appkit-ui@1.7.3': resolution: {integrity: sha512-zKmFIjLp0X24pF9KtPtSHmdsh/RjEWIvz+faIbPGm4tQbwcxdg9A35HeoP0rMgKYx49SX51LgPwVXne2gYacqQ==} + '@reown/appkit-ui@1.7.8': + resolution: {integrity: sha512-1hjCKjf6FLMFzrulhl0Y9Vb9Fu4royE+SXCPSWh4VhZhWqlzUFc7kutnZKx8XZFVQH4pbBvY62SpRC93gqoHow==} + '@reown/appkit-ui@1.7.9': resolution: {integrity: sha512-7ELAIQZfBBC3dwRZUmX0z2ftRhrcnhW8UFki1Z9aqHUEWlEEewfO6RbvJu/LgNx3ltk+slp/b0PwBmwEDkfjHg==} @@ -3281,6 +3410,11 @@ packages: peerDependencies: valtio: 1.13.2 + '@reown/appkit-utils@1.7.8': + resolution: {integrity: sha512-8X7UvmE8GiaoitCwNoB86pttHgQtzy4ryHZM9kQpvjQ0ULpiER44t1qpVLXNM4X35O0v18W0Dk60DnYRMH2WRw==} + peerDependencies: + valtio: 1.13.2 + '@reown/appkit-utils@1.7.9': resolution: {integrity: sha512-2cTteGUAzUNO/+q1kEwJf4DU4DNYI8mQtov+V7P/oO7JoNoZGkSu8tvqmaqwW6h0HWLoTmX9Dz29/VknLM3GZQ==} peerDependencies: @@ -3289,12 +3423,18 @@ packages: '@reown/appkit-wallet@1.7.3': resolution: {integrity: sha512-D0pExd0QUE71ursQPp3pq/0iFrz2oz87tOyFifrPANvH5X0RQCYn/34/kXr+BFVQzNFfCBDlYP+CniNA/S0KiQ==} + '@reown/appkit-wallet@1.7.8': + resolution: {integrity: sha512-kspz32EwHIOT/eg/ZQbFPxgXq0B/olDOj3YMu7gvLEFz4xyOFd/wgzxxAXkp5LbG4Cp++s/elh79rVNmVFdB9A==} + '@reown/appkit-wallet@1.7.9': resolution: {integrity: sha512-55ChR1TfOLkrdprDDNb8fseLl/37kV79q3Q/Le989+0JIrp7QDbq/5Zk0/CNcjA++xe5Od9lUAswq8uIZOUu1g==} '@reown/appkit@1.7.3': resolution: {integrity: sha512-aA/UIwi/dVzxEB62xlw3qxHa3RK1YcPMjNxoGj/fHNCqL2qWmbcOXT7coCUa9RG7/Bh26FZ3vdVT2v71j6hebQ==} + '@reown/appkit@1.7.8': + resolution: {integrity: sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA==} + '@reown/appkit@1.7.9': resolution: {integrity: sha512-fbpzHVX+/cF5ID0Yca7V4mFd7S2MuUGZbQvSGkOUbUvWOzyzvcqB3mN/jH9N6gncoKR0iQ65rKsXJ27KA+psLQ==} @@ -3424,6 +3564,12 @@ packages: '@rushstack/eslint-patch@1.11.0': resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} + '@safe-global/safe-apps-provider@0.18.6': + resolution: {integrity: sha512-4LhMmjPWlIO8TTDC2AwLk44XKXaK6hfBTWyljDm0HQ6TWlOEijVWNrt2s3OCVMSxlXAcEzYfqyu1daHZooTC2Q==} + + '@safe-global/safe-apps-sdk@9.1.0': + resolution: {integrity: sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q==} + '@safe-global/safe-core-sdk-types@1.10.1': resolution: {integrity: sha512-BKvuYTLOlY16Rq6qCXglmnL6KxInDuXMFqZMaCzwDKiEh+uoHu3xCumG5tVtWOkCgBF4XEZXMqwZUiLcon7IsA==} deprecated: 'WARNING: This project has been renamed to @safe-global/types-kit. Please, migrate from @safe-global/safe-core-sdk-types@5.1.0 to @safe-global/types-kit@1.0.0.' @@ -3451,6 +3597,10 @@ packages: resolution: {integrity: sha512-WhzcmNun0s0VxeVQKRqaapV0vEpdm76zZBR2Du+S+58u1r57OjZkOSL2Gru0tdwkt3FIZZtE3OhDu09M70pVkA==} deprecated: 'WARNING: This package is now bundled in @safe-global/protocol-kit. Please, follow the migration guide https://docs.safe.global/safe-core-aa-sdk/protocol-kit/reference/v1' + '@safe-global/safe-gateway-typescript-sdk@3.23.1': + resolution: {integrity: sha512-6ORQfwtEJYpalCeVO21L4XXGSdbEMfyp2hEv6cP82afKXSwvse6d3sdelgaPWUxHIsFRkWvHDdzh8IyyKHZKxw==} + engines: {node: '>=16'} + '@sanity/asset-utils@2.2.1': resolution: {integrity: sha512-dBsZWH5X6ANcvclFRnQT9Y+NNvoWTJZIMKR5HT6hzoRpRb48p7+vWn+wi1V1wPvqgZg2ScsOQQcGXWXskbPbQQ==} engines: {node: '>=18'} @@ -3791,6 +3941,9 @@ packages: '@simplewebauthn/types@9.0.1': resolution: {integrity: sha512-tGSRP1QvsAvsJmnOlRQyw/mvK9gnPtjEc5fg2+m8n+QUa+D7rvrKkOYyfpy42GTs90X3RDOnqJgfHt+qO67/+w==} + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@solana/buffer-layout@4.0.1': resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} engines: {node: '>=5.10'} @@ -4168,6 +4321,9 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/lodash@4.17.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/long@4.0.2': resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} @@ -4454,6 +4610,36 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@wagmi/chains@1.8.0': + resolution: {integrity: sha512-UXo0GF0Cl0+neKC2KAmVAahv8L/5rACbFRRqkDvHMefzY6Fh7yzJd8F4GaGNNG3w4hj8eUB/E3+dEpaTYDN62w==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + '@wagmi/connectors@5.9.9': + resolution: {integrity: sha512-6+eqU7P2OtxU2PkIw6kHojfYYUJykYG2K5rSkzVh29RDCAjhJqGEZW5f1b8kV5rUBORip1NpST8QTBNi96JHGQ==} + peerDependencies: + '@wagmi/core': 2.20.3 + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + + '@wagmi/core@2.20.3': + resolution: {integrity: sha512-gsbuHnWxf0AYZISvR8LvF/vUCIq6/ZwT5f5/FKd6wLA7Wq05NihCvmQpIgrcVbpSJPL67wb6S8fXm3eJGJA1vQ==} + peerDependencies: + '@tanstack/query-core': '>=5.0.0' + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + '@tanstack/query-core': + optional: true + typescript: + optional: true + '@wallet-standard/app@1.1.0': resolution: {integrity: sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==} engines: {node: '>=16'} @@ -4489,6 +4675,14 @@ packages: resolution: {integrity: sha512-DxybNfznr7aE/U9tJqvpEorUW2f/6kR0S1Zk78NqKam1Ex+BQFDM5j2Az3WayfFDZz3adkxkLAszfdorvPxDlw==} engines: {node: '>=18'} + '@walletconnect/core@2.21.0': + resolution: {integrity: sha512-o6R7Ua4myxR8aRUAJ1z3gT9nM+jd2B2mfamu6arzy1Cc6vi10fIwFWb6vg3bC8xJ6o9H3n/cN5TOW3aA9Y1XVw==} + engines: {node: '>=18'} + + '@walletconnect/core@2.21.1': + resolution: {integrity: sha512-Tp4MHJYcdWD846PH//2r+Mu4wz1/ZU/fr9av1UWFiaYQ2t2TPLDiZxjLw54AAEpMqlEHemwCgiRiAmjR1NDdTQ==} + engines: {node: '>=18'} + '@walletconnect/core@2.21.2': resolution: {integrity: sha512-t7iW+VYkNM6sO0F6G8n9qZ/32RtM4LTeye/XqfFOeoUaWzuu2xk7iR7oy1o04cu5lLy6+OV1xKDMYcOR74z49Q==} engines: {node: '>=18'} @@ -4505,6 +4699,9 @@ packages: '@walletconnect/ethereum-provider@2.20.1': resolution: {integrity: sha512-D/T7ctrVHSSCxKGPIRpWR3ICAU4Q5jKsUkYhaW3C8LFeIpgXoCllZHVgjYBmgjicqjT3faixIZ1tgmJmOeuY6g==} + '@walletconnect/ethereum-provider@2.21.1': + resolution: {integrity: sha512-SSlIG6QEVxClgl1s0LMk4xr2wg4eT3Zn/Hb81IocyqNSGfXpjtawWxKxiC5/9Z95f1INyBD6MctJbL/R1oBwIw==} + '@walletconnect/events@1.0.1': resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} @@ -4585,6 +4782,12 @@ packages: '@walletconnect/sign-client@2.20.1': resolution: {integrity: sha512-QXzIAHbyZZ52+97Bp/+/SBkN3hX0pam8l4lnA4P7g+aFPrVZUrMwZPIf+FV7UbEswqqwo3xmFI41TKgj8w8B9w==} + '@walletconnect/sign-client@2.21.0': + resolution: {integrity: sha512-z7h+PeLa5Au2R591d/8ZlziE0stJvdzP9jNFzFolf2RG/OiXulgFKum8PrIyXy+Rg2q95U9nRVUF9fWcn78yBA==} + + '@walletconnect/sign-client@2.21.1': + resolution: {integrity: sha512-QaXzmPsMnKGV6tc4UcdnQVNOz4zyXgarvdIQibJ4L3EmLat73r5ZVl4c0cCOcoaV7rgM9Wbphgu5E/7jNcd3Zg==} + '@walletconnect/sign-client@2.21.2': resolution: {integrity: sha512-3cgd5j2itbbB9SiSk0lT3P/39vVW7PA8uN+BIouzlZw74RwQnzVu+Lms21hH2aY3S44EvnZoU2DtLjKNSTYc7g==} @@ -4603,6 +4806,12 @@ packages: '@walletconnect/types@2.20.1': resolution: {integrity: sha512-HM0YZxT+wNqskoZkuju5owbKTlqUXNKfGlJk/zh9pWaVWBR2QamvQ+47Cx09OoGPRQjQH0JmgRiUV4bOwWNeHg==} + '@walletconnect/types@2.21.0': + resolution: {integrity: sha512-ll+9upzqt95ZBWcfkOszXZkfnpbJJ2CmxMfGgE5GmhdxxxCcO5bGhXkI+x8OpiS555RJ/v/sXJYMSOLkmu4fFw==} + + '@walletconnect/types@2.21.1': + resolution: {integrity: sha512-UeefNadqP6IyfwWC1Yi7ux+ljbP2R66PLfDrDm8izmvlPmYlqRerJWJvYO4t0Vvr9wrG4Ko7E0c4M7FaPKT/sQ==} + '@walletconnect/types@2.21.2': resolution: {integrity: sha512-4uvE01iPV5GgvHRREVb/gHc9qDoDwSgaI+eFO2hVO/HYZdg5KTQ50lbFX7VGuvdCG4YQqXd9PHHxfcS+/GLU0g==} @@ -4615,6 +4824,12 @@ packages: '@walletconnect/universal-provider@2.20.1': resolution: {integrity: sha512-0WfO4Unb+8UMEUr65vrVjd/a/3tF5059KLP7gX2kaDFjXXOma1/cjq/9/STd3hbHB8LKfxpXvOty97vuD8xfWQ==} + '@walletconnect/universal-provider@2.21.0': + resolution: {integrity: sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg==} + + '@walletconnect/universal-provider@2.21.1': + resolution: {integrity: sha512-Wjx9G8gUHVMnYfxtasC9poGm8QMiPCpXpbbLFT+iPoQskDDly8BwueWnqKs4Mx2SdIAWAwuXeZ5ojk5qQOxJJg==} + '@walletconnect/universal-provider@2.21.2': resolution: {integrity: sha512-LeOmtAqGx+Y0hoG4p1+3Qdi+fJ8uIRJY4wXh6D1/yCfsqCIRwiRffZH1mCuFQcpJWuPI4n17na5OvsdhPBvKgA==} @@ -4630,6 +4845,12 @@ packages: '@walletconnect/utils@2.20.1': resolution: {integrity: sha512-u/uyJkVyxLLUbHbpMv7MmuOkGfElG08l6P2kMTAfN7nAVyTgpb8g6kWLMNqfmYXVz+h+finf5FSV4DgL2vOvPQ==} + '@walletconnect/utils@2.21.0': + resolution: {integrity: sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig==} + + '@walletconnect/utils@2.21.1': + resolution: {integrity: sha512-VPZvTcrNQCkbGOjFRbC24mm/pzbRMUq2DSQoiHlhh0X1U7ZhuIrzVtAoKsrzu6rqjz0EEtGxCr3K1TGRqDG4NA==} + '@walletconnect/utils@2.21.2': resolution: {integrity: sha512-gtKKa4qw33/XgKpO2ADoo8wgGml9lvMxY5B0LLWzlIma89dbDcx80LWT2Fd4+7CXb/PKt2/2kJLLGjD8MzKoqQ==} @@ -4677,6 +4898,17 @@ packages: zod: optional: true + abitype@1.1.0: + resolution: {integrity: sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -5011,6 +5243,9 @@ packages: borsh@0.7.0: resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + bowser@2.12.1: + resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -5366,6 +5601,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comlink@4.4.2: + resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -5611,6 +5849,15 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -5825,6 +6072,10 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + eciesjs@0.4.15: + resolution: {integrity: sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==} + engines: {bun: '>=1', deno: '>=2', node: '>=16'} + eip1193-provider@1.0.1: resolution: {integrity: sha512-kSuqwQ26d7CzuS/t3yRXo2Su2cVH0QfvyKbr2H7Be7O5YDyIq4hQGCNTo5wRdP07bt+E2R/8nPCzey4ojBHf7g==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -5867,6 +6118,13 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + engine.io-client@6.6.3: + resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==} + + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -6155,6 +6413,9 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + eventemitter2@6.4.9: + resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} + eventemitter3@4.0.4: resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} @@ -6199,6 +6460,10 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + extension-port-stream@3.0.0: + resolution: {integrity: sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw==} + engines: {node: '>=12.0.0'} + external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -6623,6 +6888,15 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphql-request@6.1.0: + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + groq-js@1.17.3: resolution: {integrity: sha512-Z6/n5Ro246RlntMoZKTIjB3GDCFcs8NLCkIrI8AbS1Ho7yVAtNQqxxJd2W4ENk9+a03gTQYtunNGlcHJM9hhQw==} engines: {node: '>= 14'} @@ -6806,6 +7080,9 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + idb-keyval@6.2.1: + resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + idb-keyval@6.2.2: resolution: {integrity: sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==} @@ -7208,6 +7485,9 @@ packages: jose@4.15.9: resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} + jose@6.0.11: resolution: {integrity: sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg==} @@ -7930,6 +8210,9 @@ packages: engines: {node: ^14.16.0 || >=16.10.0} hasBin: true + obj-multiplex@1.0.0: + resolution: {integrity: sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -8034,6 +8317,14 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + ox@0.4.4: + resolution: {integrity: sha512-oJPEeCDs9iNiPs6J0rTx+Y0KGeCGyCAA3zo94yZhm8G5WpOxrwUtn2Ie/Y8IyARSqqY/j9JTKA3Fc1xs1DvFnw==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + ox@0.6.7: resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==} peerDependencies: @@ -8066,6 +8357,14 @@ packages: typescript: optional: true + ox@0.9.3: + resolution: {integrity: sha512-KzyJP+fPV4uhuuqrTZyok4DC7vFzi7HLUFiUNEmpbyh59htKWkOC98IONC1zgXJPbHAhQgqs6B0Z6StCGhmQvg==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + p-finally@2.0.1: resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} engines: {node: '>=8'} @@ -8388,6 +8687,9 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + preact@10.24.2: + resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} + preact@10.26.9: resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==} @@ -9155,6 +9457,14 @@ packages: slate@0.118.0: resolution: {integrity: sha512-XAHgaoN3IikTz83DlJWZWR7e4SjuRn1Ps6I717fL7yaITF7zhZm5z8zbU+TaPlHu4APCV6TCMIF33EZdW3GqfQ==} + socket.io-client@4.8.1: + resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} + engines: {node: '>=10.0.0'} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + solady@0.0.180: resolution: {integrity: sha512-9QVCyMph+wk78Aq/GxtDAQg7dvNoVWx2dS2Zwf11XlwFKDZ+YJG2lrQsK9NEIth9NOebwjBXAYk4itdwOOE4aw==} @@ -9425,6 +9735,9 @@ packages: tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + tailwindcss@3.4.17: resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} @@ -10014,6 +10327,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + use-sync-external-store@1.5.0: resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} peerDependencies: @@ -10146,6 +10464,14 @@ packages: typescript: optional: true + viem@2.37.3: + resolution: {integrity: sha512-hwoZqkFSy13GCFzIftgfIH8hNENvdlcHIvtLt73w91tL6rKmZjQisXWTahi1Vn5of8/JQ1FBKfwUus3YkDXwbw==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + vite-compatible-readable-stream@3.6.1: resolution: {integrity: sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==} engines: {node: '>= 6'} @@ -10252,6 +10578,17 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} + wagmi@2.16.9: + resolution: {integrity: sha512-5NbjvuNNhT0t0lQsDD5otQqZ5RZBM1UhInHoBq/Lpnr6xLLa8AWxYqHg5oZtGCdiUNltys11iBOS6z4mLepIqw==} + peerDependencies: + '@tanstack/react-query': '>=5.0.0' + react: '>=18' + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -10343,6 +10680,9 @@ packages: resolution: {integrity: sha512-quTtTeQJHYSxAwIBOCGEcQtqdVcFWX6mCFNoqnp+mRbq+Hxbs8CGgO/6oqfBx4OvxIOfCpgJWYVHswRXnbEu9Q==} engines: {node: '>=8.0.0'} + webextension-polyfill@0.10.0: + resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -10470,6 +10810,18 @@ packages: utf-8-validate: optional: true + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -10557,6 +10909,10 @@ packages: 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'} + xregexp@2.0.0: resolution: {integrity: sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==} @@ -10672,6 +11028,42 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zustand@5.0.0: + resolution: {integrity: sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': 19.0.8 + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + + zustand@5.0.3: + resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': 19.0.8 + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + zustand@5.0.5: resolution: {integrity: sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==} engines: {node: '>=12.20.0'} @@ -12269,6 +12661,26 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@base-org/account@1.1.1(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@noble/hashes': 1.4.0 + clsx: 1.2.1 + eventemitter3: 5.0.1 + idb-keyval: 6.2.1 + ox: 0.6.9(typescript@5.8.3)(zod@3.25.24) + preact: 10.24.2 + viem: 2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + zustand: 5.0.3(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)) + transitivePeerDependencies: + - '@types/react' + - bufferutil + - immer + - react + - typescript + - use-sync-external-store + - utf-8-validate + - zod + '@blocto/sdk@0.10.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: buffer: 6.0.3 @@ -12342,9 +12754,55 @@ snapshots: style-mod: 4.1.2 w3c-keyname: 2.2.8 + '@coinbase/onchainkit@0.38.19(@farcaster/miniapp-sdk@0.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(immer@10.1.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@farcaster/frame-sdk': 0.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@farcaster/miniapp-wagmi-connector': 1.0.0(@farcaster/miniapp-sdk@0.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(@wagmi/core@2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)))(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)) + '@tanstack/react-query': 5.80.7(react@19.0.0) + '@wagmi/core': 2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)) + clsx: 2.1.1 + graphql: 16.11.0 + graphql-request: 6.1.0(encoding@0.1.13)(graphql@16.11.0) + qrcode: 1.5.4 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + tailwind-merge: 2.6.0 + viem: 2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + wagmi: 2.16.9(@tanstack/query-core@5.80.7)(@tanstack/react-query@5.80.7(react@19.0.0))(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(zod@3.25.24) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@farcaster/miniapp-sdk' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/query-core' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - immer + - ioredis + - supports-color + - typescript + - uploadthing + - use-sync-external-store + - utf-8-validate + - zod + '@coinbase/wallet-sdk@3.9.3': dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 buffer: 6.0.3 clsx: 1.2.1 eth-block-tracker: 7.1.0 @@ -12367,7 +12825,7 @@ snapshots: '@coinbase/wallet-sdk@4.3.0': dependencies: - '@noble/hashes': 1.7.2 + '@noble/hashes': 1.8.0 clsx: 1.2.1 eventemitter3: 5.0.1 preact: 10.26.9 @@ -12385,18 +12843,38 @@ snapshots: - utf-8-validate - zod - '@csstools/color-helpers@5.0.2': {} - - '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@coinbase/wallet-sdk@4.3.6(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: - '@csstools/color-helpers': 5.0.2 - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@noble/hashes': 1.4.0 + clsx: 1.2.1 + eventemitter3: 5.0.1 + idb-keyval: 6.2.1 + ox: 0.6.9(typescript@5.8.3)(zod@3.25.24) + preact: 10.24.2 + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + zustand: 5.0.3(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)) + transitivePeerDependencies: + - '@types/react' + - bufferutil + - immer + - react + - typescript + - use-sync-external-store + - utf-8-validate + - zod + + '@csstools/color-helpers@5.0.2': {} + + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.0.2 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': @@ -12443,6 +12921,10 @@ snapshots: react: 19.0.0 tslib: 2.8.1 + '@ecies/ciphers@0.2.4(@noble/ciphers@1.3.0)': + dependencies: + '@noble/ciphers': 1.3.0 + '@emnapi/core@1.4.3': dependencies: '@emnapi/wasi-threads': 1.0.2 @@ -12739,9 +13221,9 @@ snapshots: '@esbuild/win32-x64@0.25.9': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@2.5.1))': dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.28.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -12975,7 +13457,7 @@ snapshots: dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/logger': 5.7.0 - bn.js: 5.2.1 + bn.js: 5.2.2 '@ethersproject/bignumber@5.8.0': dependencies: @@ -13240,7 +13722,7 @@ snapshots: '@ethersproject/bytes': 5.7.0 '@ethersproject/logger': 5.7.0 '@ethersproject/properties': 5.7.0 - bn.js: 5.2.1 + bn.js: 5.2.2 elliptic: 6.5.4 hash.js: 1.1.7 @@ -13387,6 +13869,57 @@ snapshots: '@ethersproject/properties': 5.8.0 '@ethersproject/strings': 5.8.0 + '@farcaster/frame-sdk@0.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@farcaster/miniapp-sdk': 0.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@farcaster/quick-auth': 0.0.6(typescript@5.8.3) + comlink: 4.4.2 + eventemitter3: 5.0.1 + ox: 0.4.4(typescript@5.8.3)(zod@3.25.24) + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + + '@farcaster/miniapp-core@0.3.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10) + ox: 0.4.4(typescript@5.8.3)(zod@3.25.76) + zod: 3.25.76 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@farcaster/miniapp-sdk@0.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@farcaster/miniapp-core': 0.3.8(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@farcaster/quick-auth': 0.0.6(typescript@5.8.3) + comlink: 4.4.2 + eventemitter3: 5.0.1 + ox: 0.4.4(typescript@5.8.3)(zod@3.25.24) + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + + '@farcaster/miniapp-wagmi-connector@1.0.0(@farcaster/miniapp-sdk@0.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(@wagmi/core@2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)))(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))': + dependencies: + '@farcaster/miniapp-sdk': 0.1.9(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@wagmi/core': 2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)) + viem: 2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + + '@farcaster/quick-auth@0.0.6(typescript@5.8.3)': + dependencies: + jose: 5.10.0 + typescript: 5.8.3 + zod: 3.25.76 + '@fastify/ajv-compiler@3.6.0': dependencies: ajv: 8.17.1 @@ -13443,6 +13976,22 @@ snapshots: '@floating-ui/utils@0.2.9': {} + '@gemini-wallet/core@0.2.0(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))': + dependencies: + '@metamask/rpc-errors': 7.0.2 + eventemitter3: 5.0.1 + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + transitivePeerDependencies: + - supports-color + + '@gemini-wallet/core@0.2.0(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))': + dependencies: + '@metamask/rpc-errors': 7.0.2 + eventemitter3: 5.0.1 + viem: 2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + transitivePeerDependencies: + - supports-color + '@google-cloud/kms@4.5.0(encoding@0.1.13)': dependencies: google-gax: 4.6.1(encoding@0.1.13) @@ -13455,6 +14004,10 @@ snapshots: lit: 2.8.0 three: 0.146.0 + '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': + dependencies: + graphql: 16.11.0 + '@grpc/grpc-js@1.13.4': dependencies: '@grpc/proto-loader': 0.7.15 @@ -13949,6 +14502,49 @@ snapshots: transitivePeerDependencies: - supports-color + '@metamask/json-rpc-engine@8.0.2': + dependencies: + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + transitivePeerDependencies: + - supports-color + + '@metamask/json-rpc-middleware-stream@7.0.2': + dependencies: + '@metamask/json-rpc-engine': 8.0.2 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + readable-stream: 3.6.2 + transitivePeerDependencies: + - supports-color + + '@metamask/object-multiplex@2.1.0': + dependencies: + once: 1.4.0 + readable-stream: 3.6.2 + + '@metamask/onboarding@1.0.1': + dependencies: + bowser: 2.12.1 + + '@metamask/providers@16.1.0': + dependencies: + '@metamask/json-rpc-engine': 8.0.2 + '@metamask/json-rpc-middleware-stream': 7.0.2 + '@metamask/object-multiplex': 2.1.0 + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + detect-browser: 5.3.0 + extension-port-stream: 3.0.0 + fast-deep-equal: 3.1.3 + is-stream: 2.0.1 + readable-stream: 3.6.2 + webextension-polyfill: 0.10.0 + transitivePeerDependencies: + - supports-color + '@metamask/rpc-errors@6.4.0': dependencies: '@metamask/utils': 9.3.0 @@ -13956,12 +14552,81 @@ snapshots: transitivePeerDependencies: - supports-color + '@metamask/rpc-errors@7.0.2': + dependencies: + '@metamask/utils': 11.7.0 + fast-safe-stringify: 2.1.1 + transitivePeerDependencies: + - supports-color + '@metamask/safe-event-emitter@2.0.0': {} '@metamask/safe-event-emitter@3.1.2': {} + '@metamask/sdk-communication-layer@0.32.0(cross-fetch@4.1.0(encoding@0.1.13))(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + bufferutil: 4.0.9 + cross-fetch: 4.1.0(encoding@0.1.13) + date-fns: 2.30.0 + debug: 4.4.1(supports-color@8.1.1) + eciesjs: 0.4.15 + eventemitter2: 6.4.9 + readable-stream: 3.6.2 + socket.io-client: 4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + utf-8-validate: 5.0.10 + uuid: 8.3.2 + transitivePeerDependencies: + - supports-color + + '@metamask/sdk-install-modal-web@0.32.0': + dependencies: + '@paulmillr/qr': 0.2.1 + + '@metamask/sdk@0.32.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.28.3 + '@metamask/onboarding': 1.0.1 + '@metamask/providers': 16.1.0 + '@metamask/sdk-communication-layer': 0.32.0(cross-fetch@4.1.0(encoding@0.1.13))(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@metamask/sdk-install-modal-web': 0.32.0 + '@paulmillr/qr': 0.2.1 + bowser: 2.12.1 + cross-fetch: 4.1.0(encoding@0.1.13) + debug: 4.4.1(supports-color@8.1.1) + eciesjs: 0.4.15 + eth-rpc-errors: 4.0.3 + eventemitter2: 6.4.9 + obj-multiplex: 1.0.0 + pump: 3.0.3 + readable-stream: 3.6.2 + socket.io-client: 4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + tslib: 2.8.1 + util: 0.12.5 + uuid: 8.3.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + '@metamask/superstruct@3.2.1': {} + '@metamask/utils@11.7.0': + dependencies: + '@ethereumjs/tx': 4.2.0 + '@metamask/superstruct': 3.2.1 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@types/debug': 4.1.12 + '@types/lodash': 4.17.20 + debug: 4.4.1(supports-color@8.1.1) + lodash: 4.17.21 + pony-cause: 2.1.11 + semver: 7.7.2 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + '@metamask/utils@3.6.0': dependencies: '@types/debug': 4.1.12 @@ -14298,6 +14963,8 @@ snapshots: '@passwordless-id/webauthn@2.3.0': {} + '@paulmillr/qr@0.2.1': {} + '@pedrouid/environment@1.0.1': {} '@pkgjs/parseargs@0.11.0': @@ -15172,6 +15839,28 @@ snapshots: - utf-8-validate - zod + '@reown/appkit-common@1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4)': + dependencies: + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@reown/appkit-common@1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + '@reown/appkit-common@1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: big.js: 6.2.2 @@ -15228,11 +15917,11 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + '@reown/appkit-controllers@1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: - '@reown/appkit-common': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-wallet': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) valtio: 1.13.2(@types/react@19.0.8)(react@19.0.0) viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) transitivePeerDependencies: @@ -15262,14 +15951,13 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + '@reown/appkit-controllers@1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: '@reown/appkit-common': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-controllers': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-ui': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-utils': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24) - lit: 3.3.0 + '@reown/appkit-wallet': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.21.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) valtio: 1.13.2(@types/react@19.0.8)(react@19.0.0) + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -15297,22 +15985,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-polyfills@1.7.3': - dependencies: - buffer: 6.0.3 - - '@reown/appkit-polyfills@1.7.9': - dependencies: - buffer: 6.0.3 - - '@reown/appkit-scaffold-ui@1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24)': + '@reown/appkit-pay@1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: - '@reown/appkit-common': 1.7.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-controllers': 1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-ui': 1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-utils': 1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24) - '@reown/appkit-wallet': 1.7.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - lit: 3.1.0 + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-controllers': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-ui': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-utils': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24) + lit: 3.3.0 + valtio: 1.13.2(@types/react@19.0.8)(react@19.0.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -15338,17 +16018,16 @@ snapshots: - typescript - uploadthing - utf-8-validate - - valtio - zod - '@reown/appkit-scaffold-ui@1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24)': + '@reown/appkit-pay@1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: '@reown/appkit-common': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) '@reown/appkit-controllers': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) '@reown/appkit-ui': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) '@reown/appkit-utils': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24) - '@reown/appkit-wallet': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) lit: 3.3.0 + valtio: 1.13.2(@types/react@19.0.8)(react@19.0.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -15374,16 +16053,28 @@ snapshots: - typescript - uploadthing - utf-8-validate - - valtio - zod - '@reown/appkit-ui@1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + '@reown/appkit-polyfills@1.7.3': + dependencies: + buffer: 6.0.3 + + '@reown/appkit-polyfills@1.7.8': + dependencies: + buffer: 6.0.3 + + '@reown/appkit-polyfills@1.7.9': + dependencies: + buffer: 6.0.3 + + '@reown/appkit-scaffold-ui@1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24)': dependencies: '@reown/appkit-common': 1.7.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) '@reown/appkit-controllers': 1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-ui': 1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-utils': 1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24) '@reown/appkit-wallet': 1.7.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) lit: 3.1.0 - qrcode: 1.5.3 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -15409,15 +16100,17 @@ snapshots: - typescript - uploadthing - utf-8-validate + - valtio - zod - '@reown/appkit-ui@1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24)': dependencies: - '@reown/appkit-common': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-controllers': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-wallet': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-controllers': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-ui': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-utils': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) lit: 3.3.0 - qrcode: 1.5.3 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -15443,18 +16136,194 @@ snapshots: - typescript - uploadthing - utf-8-validate + - valtio - zod - '@reown/appkit-utils@1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24)': + '@reown/appkit-scaffold-ui@1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24)': dependencies: - '@reown/appkit-common': 1.7.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-controllers': 1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@reown/appkit-polyfills': 1.7.3 - '@reown/appkit-wallet': 1.7.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.19.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - valtio: 1.13.2(@types/react@19.0.8)(react@19.0.0) - viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-common': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-controllers': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-ui': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-utils': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24) + '@reown/appkit-wallet': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + lit: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - valtio + - zod + + '@reown/appkit-ui@1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@reown/appkit-common': 1.7.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-controllers': 1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-wallet': 1.7.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + lit: 3.1.0 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-ui@1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-controllers': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + lit: 3.3.0 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-ui@1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@reown/appkit-common': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-controllers': 1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-wallet': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + lit: 3.3.0 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-utils@1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24)': + dependencies: + '@reown/appkit-common': 1.7.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-controllers': 1.7.3(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-polyfills': 1.7.3 + '@reown/appkit-wallet': 1.7.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/logger': 2.1.2 + '@walletconnect/universal-provider': 2.19.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + valtio: 1.13.2(@types/react@19.0.8)(react@19.0.0) + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-utils@1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-controllers': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/logger': 2.1.2 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + valtio: 1.13.2(@types/react@19.0.8)(react@19.0.0) + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -15530,6 +16399,17 @@ snapshots: - typescript - utf-8-validate + '@reown/appkit-wallet@1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-polyfills': 1.7.8 + '@walletconnect/logger': 2.1.2 + zod: 3.22.4 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + '@reown/appkit-wallet@1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4) @@ -15582,6 +16462,48 @@ snapshots: - utf-8-validate - zod + '@reown/appkit@1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-controllers': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-pay': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24) + '@reown/appkit-ui': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@reown/appkit-utils': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.8)(react@19.0.0))(zod@3.25.24) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.21.0 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + bs58: 6.0.0 + valtio: 1.13.2(@types/react@19.0.8)(react@19.0.0) + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + '@reown/appkit@1.7.9(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: '@reown/appkit-common': 1.7.9(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) @@ -15705,6 +16627,26 @@ snapshots: '@rushstack/eslint-patch@1.11.0': {} + '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + events: 3.3.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.23.1 + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + '@safe-global/safe-core-sdk-types@1.10.1(encoding@0.1.13)': dependencies: '@ethersproject/bignumber': 5.8.0 @@ -15771,6 +16713,8 @@ snapshots: - supports-color - utf-8-validate + '@safe-global/safe-gateway-typescript-sdk@3.23.1': {} + '@sanity/asset-utils@2.2.1': {} '@sanity/bifur-client@0.4.1': @@ -16105,13 +17049,13 @@ snapshots: - '@types/react' - supports-color - '@sanity/next-loader@2.0.0(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)': + '@sanity/next-loader@2.0.0(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)': dependencies: '@sanity/client': 7.8.2(debug@4.4.1) '@sanity/comlink': 3.0.9 '@sanity/presentation-comlink': 1.0.28(@sanity/client@7.8.2)(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)) dequal: 2.0.3 - next: 15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 use-effect-event: 2.0.3(react@19.0.0) transitivePeerDependencies: @@ -16152,7 +17096,7 @@ snapshots: ora: 8.2.0 tar-stream: 3.1.7 vite: 7.1.2(@types/node@22.15.31)(jiti@2.5.1)(yaml@2.8.1) - vite-tsconfig-paths: 5.1.4(typescript@5.8.3)(vite@7.1.2(@types/node@22.15.31)(jiti@2.4.2)(yaml@2.8.1)) + vite-tsconfig-paths: 5.1.4(typescript@5.8.3)(vite@7.1.2(@types/node@22.15.31)(jiti@2.5.1)(yaml@2.8.1)) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) xdg-basedir: 5.1.0 transitivePeerDependencies: @@ -16383,7 +17327,7 @@ snapshots: optionalDependencies: '@sanity/types': 4.4.1(@types/react@19.0.8)(debug@4.4.1) - '@sanity/visual-editing@3.0.2(@emotion/is-prop-valid@1.3.1)(@sanity/client@7.8.2)(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-is@19.1.1)(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)': + '@sanity/visual-editing@3.0.2(@emotion/is-prop-valid@1.3.1)(@sanity/client@7.8.2)(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-is@19.1.1)(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)': dependencies: '@sanity/comlink': 3.0.9 '@sanity/icons': 3.7.4(react@19.0.0) @@ -16406,7 +17350,7 @@ snapshots: xstate: 5.20.2 optionalDependencies: '@sanity/client': 7.8.2(debug@4.4.1) - next: 15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) transitivePeerDependencies: - '@emotion/is-prop-valid' - '@sanity/types' @@ -16502,6 +17446,8 @@ snapshots: '@simplewebauthn/types@9.0.1': {} + '@socket.io/component-emitter@3.1.2': {} + '@solana/buffer-layout@4.0.1': dependencies: buffer: 6.0.3 @@ -16771,7 +17717,7 @@ snapshots: '@tanstack/virtual-core@3.13.12': {} - '@thirdweb-dev/auth@4.1.97(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/properties@5.8.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(fastify@4.29.1)(localforage@1.10.0)(next@15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tweetnacl@1.0.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@thirdweb-dev/auth@4.1.97(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/properties@5.8.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(fastify@4.29.1)(localforage@1.10.0)(next@15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tweetnacl@1.0.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@fastify/cookie': 9.4.0 '@thirdweb-dev/wallets': 2.5.39(@ethersproject/abstract-provider@5.8.0)(@ethersproject/abstract-signer@5.8.0)(@ethersproject/bignumber@5.8.0)(@ethersproject/properties@5.8.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(localforage@1.10.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tweetnacl@1.0.3)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.62) @@ -16781,7 +17727,7 @@ snapshots: zod: 3.25.62 optionalDependencies: fastify: 4.29.1 - next: 15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) transitivePeerDependencies: - '@aws-sdk/client-lambda' - '@aws-sdk/client-secrets-manager' @@ -17185,6 +18131,8 @@ snapshots: '@types/json5@0.0.29': {} + '@types/lodash@4.17.20': {} + '@types/long@4.0.2': {} '@types/minimist@1.2.5': {} @@ -17266,15 +18214,15 @@ snapshots: dependencies: '@types/node': 22.15.31 - '@typescript-eslint/eslint-plugin@8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.34.0 - '@typescript-eslint/type-utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.34.0 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.28.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -17283,14 +18231,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.34.0 '@typescript-eslint/types': 8.34.0 '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.34.0 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.28.0(jiti@2.5.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -17313,12 +18261,12 @@ snapshots: dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.28.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -17342,13 +18290,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.34.0 '@typescript-eslint/types': 8.34.0 '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.28.0(jiti@2.5.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -17455,7 +18403,7 @@ snapshots: react: 19.0.0 vidstack: 0.6.15 - '@vitejs/plugin-react@4.7.0(vite@7.1.2(@types/node@22.15.31)(jiti@2.4.2)(yaml@2.8.1))': + '@vitejs/plugin-react@4.7.0(vite@7.1.2(@types/node@22.15.31)(jiti@2.5.1)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.3 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.3) @@ -17463,41 +18411,191 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.1.2(@types/node@22.15.31)(jiti@2.4.2)(yaml@2.8.1) + vite: 7.1.2(@types/node@22.15.31)(jiti@2.5.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@wallet-standard/app@1.1.0': - dependencies: - '@wallet-standard/base': 1.1.0 - - '@wallet-standard/base@1.1.0': {} - - '@wallet-standard/features@1.1.0': - dependencies: - '@wallet-standard/base': 1.1.0 - - '@wallet-standard/wallet@1.1.0': - dependencies: - '@wallet-standard/base': 1.1.0 + '@wagmi/chains@1.8.0(typescript@5.8.3)': + optionalDependencies: + typescript: 5.8.3 - '@walletconnect/auth-client@2.1.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': - dependencies: - '@ethersproject/hash': 5.8.0 - '@ethersproject/transactions': 5.8.0 - '@stablelib/random': 1.0.2 - '@stablelib/sha256': 1.0.1 - '@walletconnect/core': 2.21.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/logger': 2.1.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/utils': 2.21.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) - events: 3.3.0 - isomorphic-unfetch: 3.1.0(encoding@0.1.13) - transitivePeerDependencies: - - '@azure/app-configuration' + '@wagmi/connectors@5.9.9(@types/react@19.0.8)(@wagmi/core@2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)))(bufferutil@4.0.9)(encoding@0.1.13)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(utf-8-validate@5.0.10)(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(zod@3.25.24)': + dependencies: + '@base-org/account': 1.1.1(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(utf-8-validate@5.0.10)(zod@3.25.24) + '@coinbase/wallet-sdk': 4.3.6(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(utf-8-validate@5.0.10)(zod@3.25.24) + '@gemini-wallet/core': 0.2.0(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)) + '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@wagmi/core': 2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + cbw-sdk: '@coinbase/wallet-sdk@3.9.3' + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - immer + - ioredis + - react + - supports-color + - uploadthing + - use-sync-external-store + - utf-8-validate + - zod + + '@wagmi/connectors@5.9.9(@types/react@19.0.8)(@wagmi/core@2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)))(bufferutil@4.0.9)(encoding@0.1.13)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(utf-8-validate@5.0.10)(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(zod@3.25.24)': + dependencies: + '@base-org/account': 1.1.1(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(utf-8-validate@5.0.10)(zod@3.25.24) + '@coinbase/wallet-sdk': 4.3.6(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(utf-8-validate@5.0.10)(zod@3.25.24) + '@gemini-wallet/core': 0.2.0(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)) + '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@wagmi/core': 2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + cbw-sdk: '@coinbase/wallet-sdk@3.9.3' + viem: 2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - immer + - ioredis + - react + - supports-color + - uploadthing + - use-sync-external-store + - utf-8-validate + - zod + + '@wagmi/core@2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))': + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7(typescript@5.8.3) + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + zustand: 5.0.0(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)) + optionalDependencies: + '@tanstack/query-core': 5.80.7 + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + + '@wagmi/core@2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))': + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7(typescript@5.8.3) + viem: 2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + zustand: 5.0.0(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)) + optionalDependencies: + '@tanstack/query-core': 5.80.7 + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + + '@wagmi/core@2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))': + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7(typescript@5.8.3) + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + zustand: 5.0.0(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.5.0(react@19.0.0)) + optionalDependencies: + '@tanstack/query-core': 5.80.7 + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + + '@wagmi/core@2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))': + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7(typescript@5.8.3) + viem: 2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + zustand: 5.0.0(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.5.0(react@19.0.0)) + optionalDependencies: + '@tanstack/query-core': 5.80.7 + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + + '@wallet-standard/app@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@wallet-standard/base@1.1.0': {} + + '@wallet-standard/features@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@wallet-standard/wallet@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@walletconnect/auth-client@2.1.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@ethersproject/hash': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@walletconnect/core': 2.21.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/utils': 2.21.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + events: 3.3.0 + isomorphic-unfetch: 3.1.0(encoding@0.1.13) + transitivePeerDependencies: + - '@azure/app-configuration' - '@azure/cosmos' - '@azure/data-tables' - '@azure/identity' @@ -17730,6 +18828,92 @@ snapshots: - utf-8-validate - zod + '@walletconnect/core@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.33.0 + events: 3.3.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/core@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.33.0 + events: 3.3.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + '@walletconnect/core@2.21.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: '@walletconnect/heartbeat': 1.2.2 @@ -17937,6 +19121,46 @@ snapshots: - utf-8-validate - zod + '@walletconnect/ethereum-provider@2.21.1(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@reown/appkit': 1.7.8(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/types': 2.21.1 + '@walletconnect/universal-provider': 2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + '@walletconnect/events@1.0.1': dependencies: keyvaluestorage-interface: 1.0.0 @@ -18076,7 +19300,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 tslib: 1.14.1 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 '@walletconnect/relay-auth@1.1.0': dependencies: @@ -18090,16 +19314,83 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.12.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + '@walletconnect/sign-client@2.12.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/core': 2.12.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.12.2 + '@walletconnect/utils': 2.12.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - uploadthing + - utf-8-validate + + '@walletconnect/sign-client@2.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/core': 2.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.17.1 + '@walletconnect/utils': 2.17.1 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - uploadthing + - utf-8-validate + + '@walletconnect/sign-client@2.19.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: - '@walletconnect/core': 2.12.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@walletconnect/core': 2.19.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.12.2 - '@walletconnect/utils': 2.12.2 + '@walletconnect/types': 2.19.2 + '@walletconnect/utils': 2.19.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -18119,21 +19410,22 @@ snapshots: - aws4fetch - bufferutil - db0 - - encoding - ioredis + - typescript - uploadthing - utf-8-validate + - zod - '@walletconnect/sign-client@2.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@walletconnect/sign-client@2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: - '@walletconnect/core': 2.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/core': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.17.1 - '@walletconnect/utils': 2.17.1 + '@walletconnect/types': 2.20.1 + '@walletconnect/utils': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -18154,19 +19446,21 @@ snapshots: - bufferutil - db0 - ioredis + - typescript - uploadthing - utf-8-validate + - zod - '@walletconnect/sign-client@2.19.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + '@walletconnect/sign-client@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: - '@walletconnect/core': 2.19.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/core': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.19.2 - '@walletconnect/utils': 2.19.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -18192,16 +19486,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + '@walletconnect/sign-client@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: - '@walletconnect/core': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/core': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.20.1 - '@walletconnect/utils': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -18413,6 +19707,62 @@ snapshots: - ioredis - uploadthing + '@walletconnect/types@2.21.0': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/types@2.21.1': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + '@walletconnect/types@2.21.2': dependencies: '@walletconnect/events': 1.0.1 @@ -18553,6 +19903,84 @@ snapshots: - utf-8-validate - zod + '@walletconnect/universal-provider@2.21.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + es-toolkit: 1.33.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/universal-provider@2.21.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + es-toolkit: 1.33.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + '@walletconnect/universal-provider@2.21.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: '@walletconnect/events': 1.0.1 @@ -18640,16 +20068,98 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/relay-api': 1.0.11 - '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.17.1 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + elliptic: 6.5.7 + query-string: 7.1.3 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/utils@2.19.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@noble/ciphers': 1.2.1 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.19.2 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + bs58: 6.0.0 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: 3.1.0 + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/utils@2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + dependencies: + '@noble/ciphers': 1.2.1 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.17.1 + '@walletconnect/types': 2.20.1 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 + bs58: 6.0.0 detect-browser: 5.3.0 - elliptic: 6.5.7 query-string: 7.1.3 uint8arrays: 3.1.0 + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -18666,11 +20176,15 @@ snapshots: - '@vercel/blob' - '@vercel/kv' - aws4fetch + - bufferutil - db0 - ioredis + - typescript - uploadthing + - utf-8-validate + - zod - '@walletconnect/utils@2.19.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + '@walletconnect/utils@2.21.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -18681,7 +20195,7 @@ snapshots: '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.19.2 + '@walletconnect/types': 2.21.0 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 bs58: 6.0.0 @@ -18713,7 +20227,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': + '@walletconnect/utils@2.21.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -18724,7 +20238,7 @@ snapshots: '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.20.1 + '@walletconnect/types': 2.21.1 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 bs58: 6.0.0 @@ -18959,6 +20473,16 @@ snapshots: typescript: 5.8.3 zod: 3.25.62 + abitype@1.1.0(typescript@5.8.3)(zod@3.25.24): + optionalDependencies: + typescript: 5.8.3 + zod: 3.25.24 + + abitype@1.1.0(typescript@5.8.3)(zod@3.25.76): + optionalDependencies: + typescript: 5.8.3 + zod: 3.25.76 + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -19347,6 +20871,8 @@ snapshots: bs58: 4.0.1 text-encoding-utf-8: 1.0.2 + bowser@2.12.1: {} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -19390,13 +20916,13 @@ snapshots: browserify-rsa@4.1.1: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 randombytes: 2.1.0 safe-buffer: 5.2.1 browserify-sign@4.2.3: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 browserify-rsa: 4.1.1 create-hash: 1.2.0 create-hmac: 1.1.7 @@ -19755,6 +21281,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comlink@4.4.2: {} + comma-separated-tokens@2.0.3: {} commander@13.0.0: {} @@ -20019,6 +21547,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.3.7: + dependencies: + ms: 2.1.3 + debug@4.4.1(supports-color@8.1.1): dependencies: ms: 2.1.3 @@ -20235,6 +21767,13 @@ snapshots: dependencies: safe-buffer: 5.2.1 + eciesjs@0.4.15: + dependencies: + '@ecies/ciphers': 0.2.4(@noble/ciphers@1.3.0) + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.2 + '@noble/hashes': 1.8.0 + eip1193-provider@1.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@json-rpc-tools/provider': 1.7.6(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -20297,6 +21836,20 @@ snapshots: dependencies: once: 1.4.0 + engine.io-client@6.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + xmlhttprequest-ssl: 2.1.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + engine.io-parser@5.2.3: {} + entities@4.5.0: {} entities@6.0.1: {} @@ -20516,19 +22069,19 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.1.6(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + eslint-config-next@15.1.6(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3): dependencies: '@next/eslint-plugin-next': 15.1.6 '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3) + eslint: 9.28.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-react: 7.37.5(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.28.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0(jiti@2.5.1)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.28.0(jiti@2.5.1)) + eslint-plugin-react: 7.37.5(eslint@9.28.0(jiti@2.5.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.28.0(jiti@2.5.1)) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -20544,33 +22097,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.28.0(jiti@2.5.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 unrs-resolver: 1.9.0 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3) + eslint: 9.28.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.5.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -20579,9 +22132,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.28.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0(jiti@2.5.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -20593,13 +22146,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.5.1))(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.28.0(jiti@2.5.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -20609,7 +22162,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.28.0(jiti@2.5.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -20618,11 +22171,11 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@5.2.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.28.0(jiti@2.5.1)): dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.28.0(jiti@2.5.1) - eslint-plugin-react@7.37.5(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-react@7.37.5(eslint@9.28.0(jiti@2.5.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -20630,7 +22183,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.28.0(jiti@2.5.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -20653,9 +22206,9 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.28.0(jiti@2.4.2): + eslint@9.28.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.1 '@eslint/config-helpers': 0.2.3 @@ -20691,7 +22244,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.4.2 + jiti: 2.5.1 transitivePeerDependencies: - supports-color @@ -20914,6 +22467,8 @@ snapshots: event-target-shim@5.0.1: {} + eventemitter2@6.4.9: {} + eventemitter3@4.0.4: {} eventemitter3@4.0.7: {} @@ -20957,6 +22512,11 @@ snapshots: extend@3.0.2: {} + extension-port-stream@3.0.0: + dependencies: + readable-stream: 4.7.0 + webextension-polyfill: 0.10.0 + external-editor@3.1.0: dependencies: chardet: 0.7.0 @@ -21463,6 +23023,16 @@ snapshots: graphemer@1.4.0: {} + graphql-request@6.1.0(encoding@0.1.13)(graphql@16.11.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + cross-fetch: 3.2.0(encoding@0.1.13) + graphql: 16.11.0 + transitivePeerDependencies: + - encoding + + graphql@16.11.0: {} + groq-js@1.17.3: dependencies: debug: 4.4.1(supports-color@8.1.1) @@ -21677,6 +23247,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + idb-keyval@6.2.1: {} + idb-keyval@6.2.2: {} ieee754@1.2.1: {} @@ -21993,6 +23565,10 @@ snapshots: dependencies: ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isows@1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 @@ -22048,6 +23624,8 @@ snapshots: jose@4.15.9: {} + jose@5.10.0: {} + jose@6.0.11: {} joycon@3.1.1: {} @@ -22693,19 +24271,19 @@ snapshots: neo-async@2.6.2: {} - next-sanity@10.0.10(@emotion/is-prop-valid@1.3.1)(@sanity/client@7.8.2)(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-is@19.1.1)(react@19.0.0)(sanity@4.4.1(@emotion/is-prop-valid@1.3.1)(@portabletext/sanity-bridge@1.1.2(@sanity/schema@4.4.1(@types/react@19.0.8)(debug@4.4.1))(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)))(@types/node@22.15.31)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)(utf-8-validate@5.0.10)(yaml@2.8.1))(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3): + next-sanity@10.0.10(@emotion/is-prop-valid@1.3.1)(@sanity/client@7.8.2)(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-is@19.1.1)(react@19.0.0)(sanity@4.4.1(@emotion/is-prop-valid@1.3.1)(@portabletext/sanity-bridge@1.1.2(@sanity/schema@4.4.1(@types/react@19.0.8)(debug@4.4.1))(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)))(@types/node@22.15.31)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(jiti@2.5.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)(utf-8-validate@5.0.10)(yaml@2.8.1))(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3): dependencies: '@portabletext/react': 3.2.1(react@19.0.0) '@sanity/client': 7.8.2(debug@4.4.1) - '@sanity/next-loader': 2.0.0(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) + '@sanity/next-loader': 2.0.0(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.8.2) - '@sanity/visual-editing': 3.0.2(@emotion/is-prop-valid@1.3.1)(@sanity/client@7.8.2)(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-is@19.1.1)(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3) + '@sanity/visual-editing': 3.0.2(@emotion/is-prop-valid@1.3.1)(@sanity/client@7.8.2)(@sanity/types@4.4.1(@types/react@19.0.8))(next@15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-is@19.1.1)(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3) groq: 4.3.0 history: 5.3.0 - next: 15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - sanity: 4.4.1(@emotion/is-prop-valid@1.3.1)(@portabletext/sanity-bridge@1.1.2(@sanity/schema@4.4.1(@types/react@19.0.8)(debug@4.4.1))(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)))(@types/node@22.15.31)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)(utf-8-validate@5.0.10)(yaml@2.8.1) + sanity: 4.4.1(@emotion/is-prop-valid@1.3.1)(@portabletext/sanity-bridge@1.1.2(@sanity/schema@4.4.1(@types/react@19.0.8)(debug@4.4.1))(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)))(@types/node@22.15.31)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(jiti@2.5.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)(utf-8-validate@5.0.10)(yaml@2.8.1) styled-components: 6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0) transitivePeerDependencies: - '@emotion/is-prop-valid' @@ -22725,7 +24303,7 @@ snapshots: next-tick@1.1.0: {} - next@15.3.3(@babel/core@7.28.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.3.3(@babel/core@7.28.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@next/env': 15.3.3 '@swc/counter': 0.1.3 @@ -22735,7 +24313,7 @@ snapshots: postcss: 8.4.31 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - styled-jsx: 5.1.6(@babel/core@7.28.0)(react@19.0.0) + styled-jsx: 5.1.6(@babel/core@7.28.3)(react@19.0.0) optionalDependencies: '@next/swc-darwin-arm64': 15.3.3 '@next/swc-darwin-x64': 15.3.3 @@ -22845,6 +24423,12 @@ snapshots: tinyexec: 0.3.2 ufo: 1.6.1 + obj-multiplex@1.0.0: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + readable-stream: 2.3.8 + object-assign@4.1.1: {} object-hash@3.0.0: {} @@ -22979,13 +24563,41 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + ox@0.4.4(typescript@5.8.3)(zod@3.25.24): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.9.2 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.3)(zod@3.25.24) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - zod + + ox@0.4.4(typescript@5.8.3)(zod@3.25.76): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.9.2 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.3)(zod@3.25.76) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - zod + ox@0.6.7(typescript@5.8.3)(zod@3.25.24): dependencies: '@adraffy/ens-normalize': 1.11.0 - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 - '@scure/bip32': 1.6.2 - '@scure/bip39': 1.5.4 + '@noble/curves': 1.9.2 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 abitype: 1.0.8(typescript@5.8.3)(zod@3.25.24) eventemitter3: 5.0.1 optionalDependencies: @@ -22996,10 +24608,10 @@ snapshots: ox@0.6.9(typescript@5.8.3)(zod@3.25.24): dependencies: '@adraffy/ens-normalize': 1.11.0 - '@noble/curves': 1.8.2 - '@noble/hashes': 1.7.2 - '@scure/bip32': 1.6.2 - '@scure/bip39': 1.5.4 + '@noble/curves': 1.9.2 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 abitype: 1.0.8(typescript@5.8.3)(zod@3.25.24) eventemitter3: 5.0.1 optionalDependencies: @@ -23011,7 +24623,7 @@ snapshots: dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.8.2 - '@noble/hashes': 1.7.2 + '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 abitype: 1.0.8(typescript@5.8.3)(zod@3.25.24) @@ -23066,6 +24678,21 @@ snapshots: transitivePeerDependencies: - zod + ox@0.9.3(typescript@5.8.3)(zod@3.25.24): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.3)(zod@3.25.24) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - zod + p-finally@2.0.1: {} p-limit@2.3.0: @@ -23394,6 +25021,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + preact@10.24.2: {} + preact@10.26.9: {} preferred-pm@4.1.1: @@ -24012,7 +25641,7 @@ snapshots: safer-buffer@2.1.2: {} - sanity@4.4.1(@emotion/is-prop-valid@1.3.1)(@portabletext/sanity-bridge@1.1.2(@sanity/schema@4.4.1(@types/react@19.0.8)(debug@4.4.1))(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)))(@types/node@22.15.31)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)(utf-8-validate@5.0.10)(yaml@2.8.1): + sanity@4.4.1(@emotion/is-prop-valid@1.3.1)(@portabletext/sanity-bridge@1.1.2(@sanity/schema@4.4.1(@types/react@19.0.8)(debug@4.4.1))(@sanity/types@4.4.1(@types/react@19.0.8)(debug@4.4.1)))(@types/node@22.15.31)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(bufferutil@4.0.9)(immer@10.1.1)(jiti@2.5.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(styled-components@6.1.19(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3)(utf-8-validate@5.0.10)(yaml@2.8.1): dependencies: '@dnd-kit/core': 6.3.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@dnd-kit/modifiers': 6.0.1(@dnd-kit/core@6.3.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) @@ -24064,7 +25693,7 @@ snapshots: '@types/tar-stream': 3.1.4 '@types/use-sync-external-store': 1.5.0 '@types/which': 3.0.4 - '@vitejs/plugin-react': 4.7.0(vite@7.1.2(@types/node@22.15.31)(jiti@2.4.2)(yaml@2.8.1)) + '@vitejs/plugin-react': 4.7.0(vite@7.1.2(@types/node@22.15.31)(jiti@2.5.1)(yaml@2.8.1)) '@xstate/react': 6.0.0(@types/react@19.0.8)(react@19.0.0)(xstate@5.20.2) archiver: 7.0.1 arrify: 2.0.1 @@ -24153,7 +25782,7 @@ snapshots: use-hot-module-reload: 2.0.0(react@19.0.0) use-sync-external-store: 1.5.0(react@19.0.0) uuid: 11.1.0 - vite: 7.1.2(@types/node@22.15.31)(jiti@2.4.2)(yaml@2.8.1) + vite: 7.1.2(@types/node@22.15.31)(jiti@2.5.1)(yaml@2.8.1) which: 5.0.0 xstate: 5.20.2 yargs: 17.7.2 @@ -24378,6 +26007,24 @@ snapshots: immer: 10.1.1 tiny-warning: 1.0.3 + socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-client: 6.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.4: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + solady@0.0.180: {} sonic-boom@2.8.0: @@ -24610,12 +26257,12 @@ snapshots: stylis: 4.3.2 tslib: 2.6.2 - styled-jsx@5.1.6(@babel/core@7.28.0)(react@19.0.0): + styled-jsx@5.1.6(@babel/core@7.28.3)(react@19.0.0): dependencies: client-only: 0.0.1 react: 19.0.0 optionalDependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 stylis@4.2.0: {} @@ -24677,6 +26324,8 @@ snapshots: tabbable@6.2.0: {} + tailwind-merge@2.6.0: {} + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 @@ -25289,6 +26938,10 @@ snapshots: dependencies: react: 19.0.0 + use-sync-external-store@1.4.0(react@19.0.0): + dependencies: + react: 19.0.0 + use-sync-external-store@1.5.0(react@19.0.0): dependencies: react: 19.0.0 @@ -25503,6 +27156,23 @@ snapshots: - utf-8-validate - zod + viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.3)(zod@3.25.24) + isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.9.3(typescript@5.8.3)(zod@3.25.24) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + vite-compatible-readable-stream@3.6.1: dependencies: inherits: 2.0.4 @@ -25520,13 +27190,13 @@ snapshots: - supports-color - typescript - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.1.2(@types/node@22.15.31)(jiti@2.4.2)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.1.2(@types/node@22.15.31)(jiti@2.5.1)(yaml@2.8.1)): dependencies: debug: 4.4.1(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.8.3) optionalDependencies: - vite: 7.1.2(@types/node@22.15.31)(jiti@2.4.2)(yaml@2.8.1) + vite: 7.1.2(@types/node@22.15.31)(jiti@2.5.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript @@ -25545,20 +27215,6 @@ snapshots: jiti: 2.4.2 yaml: 2.8.1 - vite@7.1.2(@types/node@22.15.31)(jiti@2.4.2)(yaml@2.8.1): - dependencies: - esbuild: 0.25.9 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.46.2 - tinyglobby: 0.2.14 - optionalDependencies: - '@types/node': 22.15.31 - fsevents: 2.3.3 - jiti: 2.4.2 - yaml: 2.8.1 - vite@7.1.2(@types/node@22.15.31)(jiti@2.5.1)(yaml@2.8.1): dependencies: esbuild: 0.25.9 @@ -25583,6 +27239,82 @@ snapshots: dependencies: xml-name-validator: 5.0.0 + wagmi@2.16.9(@tanstack/query-core@5.80.7)(@tanstack/react-query@5.80.7(react@19.0.0))(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(zod@3.25.24): + dependencies: + '@tanstack/react-query': 5.80.7(react@19.0.0) + '@wagmi/connectors': 5.9.9(@types/react@19.0.8)(@wagmi/core@2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)))(bufferutil@4.0.9)(encoding@0.1.13)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(utf-8-validate@5.0.10)(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(zod@3.25.24) + '@wagmi/core': 2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)) + react: 19.0.0 + use-sync-external-store: 1.4.0(react@19.0.0) + viem: 2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/query-core' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - immer + - ioredis + - supports-color + - uploadthing + - utf-8-validate + - zod + + wagmi@2.16.9(@tanstack/query-core@5.80.7)(@tanstack/react-query@5.80.7(react@19.0.0))(@types/react@19.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(zod@3.25.24): + dependencies: + '@tanstack/react-query': 5.80.7(react@19.0.0) + '@wagmi/connectors': 5.9.9(@types/react@19.0.8)(@wagmi/core@2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)))(bufferutil@4.0.9)(encoding@0.1.13)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(utf-8-validate@5.0.10)(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24))(zod@3.25.24) + '@wagmi/core': 2.20.3(@tanstack/query-core@5.80.7)(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24)) + react: 19.0.0 + use-sync-external-store: 1.4.0(react@19.0.0) + viem: 2.37.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.24) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/query-core' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - immer + - ioredis + - supports-color + - uploadthing + - utf-8-validate + - zod + wcwidth@1.0.1: dependencies: defaults: 1.0.4 @@ -25680,7 +27412,7 @@ snapshots: web3-eth-iban@1.10.4: dependencies: - bn.js: 5.2.1 + bn.js: 5.2.2 web3-utils: 1.10.4 web3-eth-iban@1.5.2: @@ -25749,6 +27481,8 @@ snapshots: randombytes: 2.1.0 utf8: 3.0.0 + webextension-polyfill@0.10.0: {} + webidl-conversions@3.0.1: {} webidl-conversions@7.0.0: {} @@ -25887,6 +27621,11 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 + ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.9 @@ -25945,6 +27684,8 @@ snapshots: xmlchars@2.2.0: {} + xmlhttprequest-ssl@2.1.2: {} + xregexp@2.0.0: {} xstate@5.20.2: {} @@ -26045,6 +27786,27 @@ snapshots: zod@3.25.76: {} + zustand@5.0.0(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)): + optionalDependencies: + '@types/react': 19.0.8 + immer: 10.1.1 + react: 19.0.0 + use-sync-external-store: 1.4.0(react@19.0.0) + + zustand@5.0.0(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.5.0(react@19.0.0)): + optionalDependencies: + '@types/react': 19.0.8 + immer: 10.1.1 + react: 19.0.0 + use-sync-external-store: 1.5.0(react@19.0.0) + + zustand@5.0.3(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)): + optionalDependencies: + '@types/react': 19.0.8 + immer: 10.1.1 + react: 19.0.0 + use-sync-external-store: 1.4.0(react@19.0.0) + zustand@5.0.5(@types/react@19.0.8)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.5.0(react@19.0.0)): optionalDependencies: '@types/react': 19.0.8 diff --git a/providers/MiniKitProvider.tsx b/providers/MiniKitProvider.tsx new file mode 100644 index 00000000..0038b3dc --- /dev/null +++ b/providers/MiniKitProvider.tsx @@ -0,0 +1,44 @@ +"use client"; + +import config from "@/app/lib/config"; +import { MiniKitProvider } from "@coinbase/onchainkit/minikit"; +import { ReactNode } from "react"; + +// Define the Base chain object inline or in a separate file +const baseChain = { + id: 8453, + name: "Base Mainnet", + network: "base", + nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, + rpcUrls: { + default: ["https://mainnet.base.org"], + }, + blockExplorers: { + default: { name: "BaseScan", url: "https://basescan.org" }, + baseScan: { name: "BaseScan", url: "https://basescan.org" }, + }, + contracts: {}, // optional + testnet: false, // optional + blockTime: 12, // optional +}; + +export function MiniKitContextProvider({ children }: { children: ReactNode }) { + const { cdpApiKey, nodeEnv } = config; + + if (!cdpApiKey) { + if (nodeEnv !== "production") { + // eslint-disable-next-line no-console + console.warn( + "MiniKitContextProvider: NEXT_PUBLIC_CDP_API_KEY is not set. Rendering without MiniKitProvider.", + ); + } + return <>{children}; + } + + return ( + // @ts-expect-error: ignoring type mismatch for chain + + {children} + + ); +} diff --git a/public/.well-known/farcaster.json b/public/.well-known/farcaster.json new file mode 100644 index 00000000..31590f10 --- /dev/null +++ b/public/.well-known/farcaster.json @@ -0,0 +1,35 @@ +{ + "name": "Noblocks", + "description": "A crypto-enabled mini app for sending and receiving stablecoins on Base using Farcaster.", + "app": { + "url": "https://noblocks.xyz", + "window": { + "height": 600, + "width": 400 + } + }, + "icon": { + "light": "https://noblocks.xyz/icons/android-chrome-192x192.png", + "dark": "https://noblocks.xyz/icons/android-chrome-192x192.png" + }, + "splash_screen": { + "light": "https://noblocks.xyz/images/desktop-wide.png", + "dark": "https://noblocks.xyz/images/desktop-wide.png" + }, + "navigation_bar": { + "visible": true, + "title": "Noblocks" + }, + "version": "1.0.0", + "categories": ["finance", "web3"], + "developer": { + "name": "CONSOLATION LOTACHI", + "website": "https://github.com/KEM-CONSOLATION", + "contact": "mailto:consolationlotachi@email.com" + }, + "accountAssociation": { + "header": "eyJmaWQiOjExNjI4ODAsInR5cGUiOiJjdXN0b2R5Iiwia2V5IjoiMHhBNzQ2N0M1RDczNzk3NjNhZERkM2Y4ZmVkMzJGRDk0MEY2Qzc3QzVkIn0", + "payload": "eyJkb21haW4iOiJub2Jsb2Nrei54eXoifQ", + "signature": "MHhkMzlmZjE0MzM2ZGIxNzk4NTkxNGE4ZGU3NzkwZWRjZWNhYWY0ODU4YTdiZTJkMjMyOTNhN2I3Yzc4YTE0ZjVkNzk0Y2EyMzYxYTZhYjM3NGVmMDQ0MTEyMTdlYjBkZWU4YWU4N2YwMTkzODQ3Mjg4ZGZiMjNkZmU5MWFjYjY4YzFj" + } +} diff --git a/public/.well-known/route.ts b/public/.well-known/route.ts new file mode 100644 index 00000000..4b0bbf84 --- /dev/null +++ b/public/.well-known/route.ts @@ -0,0 +1,82 @@ +import { withValidProperties } from "../../app/lib/manifest-utils"; +import config from "../../app/lib/config"; + +export async function GET() { + const { + farcasterHeader, + farcasterPayload, + farcasterSignatuure, + publicUrl, + onchainKitProjectName, + appSubstitle, + appDescription, + appIcon, + appSpashImage, + splashBackgroundColor, + appPrimaryCategory, + appHeroImageprocess, + appTagline, + appOgTitle, + appOgDescription, + publicAppOGImage, + noIndex, + } = config; + const baseUrl = publicUrl; + if (!baseUrl) { + return Response.json( + { error: "NEXT_PUBLIC_URL is required" }, + { status: 500 }, + ); + } + + const farcaster = { + header: farcasterHeader, + payload: farcasterPayload, + signature: farcasterSignatuure, + }; + + const hasAnyFarcasterVar = Object.values(farcaster).some(Boolean); + if (!hasAnyFarcasterVar) { + // Allow non-Farcaster deployments to return 404 for this endpoint + return new Response("Not configured as Farcaster mini app", { + status: 404, + }); + } + const missing = Object.entries(farcaster) + .filter(([, v]) => !v) + .map(([k]) => `FARCASTER_${k.toUpperCase()}`); + if (missing.length) { + return Response.json( + { error: `Incomplete Farcaster config. Missing: ${missing.join(", ")}` }, + { status: 500 }, + ); + } + return Response.json({ + accountAssociation: farcaster, + + frame: withValidProperties({ + version: "1", + name: onchainKitProjectName, + subtitle: appSubstitle, + description: appDescription, + screenshotUrls: [], + iconUrl: appIcon, + splashImageUrl: appSpashImage, + splashBackgroundColor: splashBackgroundColor, + + homeUrl: baseUrl, + webhookUrl: new URL("/api/webhook", baseUrl).toString(), + primaryCategory: appPrimaryCategory, + tags: [], + heroImageUrl: appHeroImageprocess, + tagline: appTagline, + ogTitle: appOgTitle, + ogDescription: appOgDescription, + ogImageUrl: publicAppOGImage, + // use only while testing + // Enable only during testing via env + ...(noIndex === "true" && { noindex: "true" }), + // noindex?: string | string[] | boolean | undefined; + }), + }); +} diff --git a/public/_redirects b/public/_redirects new file mode 100644 index 00000000..0c12dd7e --- /dev/null +++ b/public/_redirects @@ -0,0 +1 @@ +/.well-known/farcaster.json https://api.farcaster.xyz/miniapps/hosted-manifest/019881b8-e177-2105-8981-6c315f1d3e7d 307 diff --git a/public/farcaster-manifest.json b/public/farcaster-manifest.json new file mode 100644 index 00000000..29fdd3d3 --- /dev/null +++ b/public/farcaster-manifest.json @@ -0,0 +1,34 @@ +{ + "name": "Noblocks", + "description": "A crypto-enabled mini app for sending and receiving stablecoins on Base using Farcaster.", + "app": { + "url": "https://noblocks.xyz", + "window": { + "height": 600, + "width": 400 + } + }, + "icon": { + "light": "https://noblocks.xyz/icons/android-chrome-192x192.png", + "dark": "https://noblocks.xyz/icons/android-chrome-192x192.png" + }, + "splash_screen": { + "light": "https://noblocks.xyz/images/desktop-wide.png", + "dark": "https://noblocks.xyz/images/desktop-wide.png" + }, + "navigation_bar": { + "visible": true, + "title": "Noblocks" + }, + "version": "1.0.0", + "categories": ["finance", "web3"], + "developer": { + "name": "CONSOLATION", + "url": "https://noblocks.xyz" + }, + "accountAssociation": { + "header": "eyJmaWQiOjExNjI4ODAsInR5cGUiOiJjdXN0b2R5Iiwia2V5IjoiMHhBNzQ2N0M1RDczNzk3NjNhZERkM2Y4ZmVkMzJGRDk0MEY2Qzc3QzVkIn0", + "payload": "eyJkb21haW4iOiJub2Jsb2Nrei54eXoifQ", + "signature": "MHhkMzlmZjE0MzM2ZGIxNzk4NTkxNGE4ZGU3NzkwZWRjZWNhYWY0ODU4YTdiZTJkMjMyOTNhN2I3Yzc4YTE0ZjVkNzk0Y2EyMzYxYTZhYjM3NGVmMDQ0MTEyMTdlYjBkZWU4YWU4N2YwMTkzODQ3Mjg4ZGZiMjNkZmU5MWFjYjY4YzFj" + } +} From 97e9fafeaa6ec25be728c5e8bfdad2e179042f8b Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 05:18:05 +0100 Subject: [PATCH 03/60] worked on farcaster json file edit --- public/.well-known/farcaster.json | 16 ++++++++-------- public/farcaster-manifest.json | 19 ++++++++++--------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/public/.well-known/farcaster.json b/public/.well-known/farcaster.json index 31590f10..51ead7a1 100644 --- a/public/.well-known/farcaster.json +++ b/public/.well-known/farcaster.json @@ -2,19 +2,19 @@ "name": "Noblocks", "description": "A crypto-enabled mini app for sending and receiving stablecoins on Base using Farcaster.", "app": { - "url": "https://noblocks.xyz", + "url": "https://noblocks-ialc.vercel.app", "window": { "height": 600, "width": 400 } }, "icon": { - "light": "https://noblocks.xyz/icons/android-chrome-192x192.png", - "dark": "https://noblocks.xyz/icons/android-chrome-192x192.png" + "light": "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png", + "dark": "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png" }, "splash_screen": { - "light": "https://noblocks.xyz/images/desktop-wide.png", - "dark": "https://noblocks.xyz/images/desktop-wide.png" + "light": "https://noblocks-ialc.vercel.app/images/desktop-wide.png", + "dark": "https://noblocks-ialc.vercel.app/images/desktop-wide.png" }, "navigation_bar": { "visible": true, @@ -28,8 +28,8 @@ "contact": "mailto:consolationlotachi@email.com" }, "accountAssociation": { - "header": "eyJmaWQiOjExNjI4ODAsInR5cGUiOiJjdXN0b2R5Iiwia2V5IjoiMHhBNzQ2N0M1RDczNzk3NjNhZERkM2Y4ZmVkMzJGRDk0MEY2Qzc3QzVkIn0", - "payload": "eyJkb21haW4iOiJub2Jsb2Nrei54eXoifQ", - "signature": "MHhkMzlmZjE0MzM2ZGIxNzk4NTkxNGE4ZGU3NzkwZWRjZWNhYWY0ODU4YTdiZTJkMjMyOTNhN2I3Yzc4YTE0ZjVkNzk0Y2EyMzYxYTZhYjM3NGVmMDQ0MTEyMTdlYjBkZWU4YWU4N2YwMTkzODQ3Mjg4ZGZiMjNkZmU5MWFjYjY4YzFj" + "header": "eyJmaWQiOjExNjI4ODAsInR5cGUiOiJhdXRoIiwia2V5IjoiMHgzZERCMTQ5RGNBMEZjMDcxM0ZjMzhBQ2IxNjdDMzM2NzIwQjVGMDdmIn0", + "payload": "eyJkb21haW4iOiJub2Jsb2Nrcy1pYWxjLnZlcmNlbC5hcHAifQ", + "signature": "qV6dj7aiufYm6/Lnb79FhFQD3jETpubKivIbqXyFVdZK8kvLOsE/bMw0b3YN2iTbp44RAD83IXt0mJVjW8NuVRw=" } } diff --git a/public/farcaster-manifest.json b/public/farcaster-manifest.json index 29fdd3d3..237c469f 100644 --- a/public/farcaster-manifest.json +++ b/public/farcaster-manifest.json @@ -2,19 +2,19 @@ "name": "Noblocks", "description": "A crypto-enabled mini app for sending and receiving stablecoins on Base using Farcaster.", "app": { - "url": "https://noblocks.xyz", + "url": "https://noblocks-ialc.vercel.app", "window": { "height": 600, "width": 400 } }, "icon": { - "light": "https://noblocks.xyz/icons/android-chrome-192x192.png", - "dark": "https://noblocks.xyz/icons/android-chrome-192x192.png" + "light": "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png", + "dark": "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png" }, "splash_screen": { - "light": "https://noblocks.xyz/images/desktop-wide.png", - "dark": "https://noblocks.xyz/images/desktop-wide.png" + "light": "https://noblocks-ialc.vercel.app/images/desktop-wide.png", + "dark": "https://noblocks-ialc.vercel.app/images/desktop-wide.png" }, "navigation_bar": { "visible": true, @@ -24,11 +24,12 @@ "categories": ["finance", "web3"], "developer": { "name": "CONSOLATION", - "url": "https://noblocks.xyz" + "url": "https://noblocks-ialc.vercel.app" }, + "accountAssociation": { - "header": "eyJmaWQiOjExNjI4ODAsInR5cGUiOiJjdXN0b2R5Iiwia2V5IjoiMHhBNzQ2N0M1RDczNzk3NjNhZERkM2Y4ZmVkMzJGRDk0MEY2Qzc3QzVkIn0", - "payload": "eyJkb21haW4iOiJub2Jsb2Nrei54eXoifQ", - "signature": "MHhkMzlmZjE0MzM2ZGIxNzk4NTkxNGE4ZGU3NzkwZWRjZWNhYWY0ODU4YTdiZTJkMjMyOTNhN2I3Yzc4YTE0ZjVkNzk0Y2EyMzYxYTZhYjM3NGVmMDQ0MTEyMTdlYjBkZWU4YWU4N2YwMTkzODQ3Mjg4ZGZiMjNkZmU5MWFjYjY4YzFj" + "header": "eyJmaWQiOjExNjI4ODAsInR5cGUiOiJhdXRoIiwia2V5IjoiMHgzZERCMTQ5RGNBMEZjMDcxM0ZjMzhBQ2IxNjdDMzM2NzIwQjVGMDdmIn0", + "payload": "eyJkb21haW4iOiJub2Jsb2Nrcy1pYWxjLnZlcmNlbC5hcHAifQ", + "signature": "qV6dj7aiufYm6/Lnb79FhFQD3jETpubKivIbqXyFVdZK8kvLOsE/bMw0b3YN2iTbp44RAD83IXt0mJVjW8NuVRw=" } } From 81545cc7b72591f33ed8d5cb44eb4868ce2560d2 Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 05:28:50 +0100 Subject: [PATCH 04/60] Added Redirect URL --- public/.well-known/farcaster.json | 4 ++-- public/_redirects | 2 +- public/farcaster-manifest.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/public/.well-known/farcaster.json b/public/.well-known/farcaster.json index 51ead7a1..9434d0fe 100644 --- a/public/.well-known/farcaster.json +++ b/public/.well-known/farcaster.json @@ -13,8 +13,8 @@ "dark": "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png" }, "splash_screen": { - "light": "https://noblocks-ialc.vercel.app/images/desktop-wide.png", - "dark": "https://noblocks-ialc.vercel.app/images/desktop-wide.png" + "light": "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png", + "dark": "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png" }, "navigation_bar": { "visible": true, diff --git a/public/_redirects b/public/_redirects index 0c12dd7e..783f5ce4 100644 --- a/public/_redirects +++ b/public/_redirects @@ -1 +1 @@ -/.well-known/farcaster.json https://api.farcaster.xyz/miniapps/hosted-manifest/019881b8-e177-2105-8981-6c315f1d3e7d 307 +/.well-known/farcaster.json https://api.farcaster.xyz/miniapps/hosted-manifest/01991820-b784-c889-4e4c-3b48e8c2aada 307 diff --git a/public/farcaster-manifest.json b/public/farcaster-manifest.json index 237c469f..374c5ae0 100644 --- a/public/farcaster-manifest.json +++ b/public/farcaster-manifest.json @@ -13,8 +13,8 @@ "dark": "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png" }, "splash_screen": { - "light": "https://noblocks-ialc.vercel.app/images/desktop-wide.png", - "dark": "https://noblocks-ialc.vercel.app/images/desktop-wide.png" + "light": "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png", + "dark": "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png" }, "navigation_bar": { "visible": true, From f59b85cc16e4573b2067375a11fb787b2b71e258 Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 05:45:15 +0100 Subject: [PATCH 05/60] added minikitprovider --- app/layout.tsx | 35 +++++++++++++++++++++-------------- providers/MiniKitProvider.tsx | 12 +++++------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/app/layout.tsx b/app/layout.tsx index c47febc9..cae6e9bd 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -14,6 +14,8 @@ import { PWAInstall, NoticeBanner, } from "./components"; +import { EarlyReady } from "./early-ready"; +import { MiniKitContextProvider } from "@/providers/MiniKitProvider"; const inter = Inter({ subsets: ["latin"] }); @@ -237,21 +239,26 @@ export default function RootLayout({ strategy="afterInteractive" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} /> - -
-
- - {config.noticeBannerText && ( - - )} -
- }> - {children} - + + + +
+
+ + {config.noticeBannerText && ( + + )} +
+ }> + {children} + - -
-
+ +
+
+ ); diff --git a/providers/MiniKitProvider.tsx b/providers/MiniKitProvider.tsx index 0038b3dc..c5c31e67 100644 --- a/providers/MiniKitProvider.tsx +++ b/providers/MiniKitProvider.tsx @@ -4,22 +4,22 @@ import config from "@/app/lib/config"; import { MiniKitProvider } from "@coinbase/onchainkit/minikit"; import { ReactNode } from "react"; -// Define the Base chain object inline or in a separate file const baseChain = { id: 8453, name: "Base Mainnet", network: "base", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { - default: ["https://mainnet.base.org"], + default: { http: ["https://mainnet.base.org"] }, + public: { http: ["https://mainnet.base.org"] }, }, blockExplorers: { default: { name: "BaseScan", url: "https://basescan.org" }, baseScan: { name: "BaseScan", url: "https://basescan.org" }, }, - contracts: {}, // optional - testnet: false, // optional - blockTime: 12, // optional + contracts: {}, + testnet: false, + blockTime: 12, }; export function MiniKitContextProvider({ children }: { children: ReactNode }) { @@ -27,7 +27,6 @@ export function MiniKitContextProvider({ children }: { children: ReactNode }) { if (!cdpApiKey) { if (nodeEnv !== "production") { - // eslint-disable-next-line no-console console.warn( "MiniKitContextProvider: NEXT_PUBLIC_CDP_API_KEY is not set. Rendering without MiniKitProvider.", ); @@ -36,7 +35,6 @@ export function MiniKitContextProvider({ children }: { children: ReactNode }) { } return ( - // @ts-expect-error: ignoring type mismatch for chain {children} From a0b2138237aefd8cea931a590b749dd8a9607d0a Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 05:55:10 +0100 Subject: [PATCH 06/60] removed deny --- next.config.mjs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/next.config.mjs b/next.config.mjs index 95a0334e..f102eb8e 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -18,7 +18,11 @@ const nextConfig = { }, { key: "X-Frame-Options", - value: "DENY", + value: "ALLOWALL", + }, + { + key: "Content-Security-Policy", + value: "frame-ancestors *", }, { key: "X-XSS-Protection", From 68684f8f149487a52950da0303712970e2001c1c Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 06:07:18 +0100 Subject: [PATCH 07/60] making it discoverable --- app/early-ready.tsx | 1 + public/.well-known/route.ts | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/early-ready.tsx b/app/early-ready.tsx index fb9cd3be..898e8843 100644 --- a/app/early-ready.tsx +++ b/app/early-ready.tsx @@ -15,6 +15,7 @@ export function EarlyReady() { } const { sdk } = await import("@farcaster/miniapp-sdk"); if (cancelled) return; + console.log("✅ Ready called"); await sdk.actions.ready(); // Post defensive ready messages for hosts that listen to postMessage try { diff --git a/public/.well-known/route.ts b/public/.well-known/route.ts index 4b0bbf84..b08e4a95 100644 --- a/public/.well-known/route.ts +++ b/public/.well-known/route.ts @@ -73,10 +73,9 @@ export async function GET() { ogTitle: appOgTitle, ogDescription: appOgDescription, ogImageUrl: publicAppOGImage, - // use only while testing - // Enable only during testing via env - ...(noIndex === "true" && { noindex: "true" }), - // noindex?: string | string[] | boolean | undefined; + ...(noIndex === "true" && process.env.NODE_ENV !== "production" + ? { noindex: "true" } + : {}), }), }); } From 2c0114131fc1f015b3ecd5f84a1af9ae42e73fbd Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 06:30:14 +0100 Subject: [PATCH 08/60] fix --- app/lib/config.ts | 26 +++++++++++++++++++------- app/types.ts | 2 +- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/lib/config.ts b/app/lib/config.ts index b40f1c51..8d37ea60 100644 --- a/app/lib/config.ts +++ b/app/lib/config.ts @@ -21,15 +21,27 @@ const config: Config = { onchainKitProjectName: process.env.NEXT_PUBLIC_ONCHAINKIT_PROJECT_NAME || "", appSubstitle: process.env.NEXT_PUBLIC_APP_SUBTITLE || "", appDescription: process.env.NEXT_PUBLIC_APP_DESCRIPTION || "", - appIcon: process.env.NEXT_PUBLIC_APP_ICON || "", - appSpashImage: process.env.NEXT_PUBLIC_APP_SPLASH_IMAGE || "", + appIcon: + process.env.NEXT_PUBLIC_APP_ICON || + "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png", + appSpashImage: + process.env.NEXT_PUBLIC_APP_SPLASH_IMAGE || + "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png", splashBackgroundColor: process.env.NEXT_PUBLIC_SPLASH_BACKGROUND_COLOR || "", appPrimaryCategory: process.env.NEXT_PUBLIC_APP_PRIMARY_CATEGORY || "", - appHeroImageprocess: process.env.NEXT_PUBLIC_APP_HERO_IMAGE || "", - appTagline: process.env.NEXT_PUBLIC_APP_TAGLINE || "", - appOgTitle: process.env.NEXT_PUBLIC_APP_OG_TITLE || "", - appOgDescription: process.env.NEXT_PUBLIC_APP_OG_DESCRIPTION || "", - publicAppOGImage: process.env.NEXT_PUBLIC_APP_OG_IMAGE || "", + appHeroImage: + process.env.NEXT_PUBLIC_APP_HERO_IMAGE || + "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png", + appTagline: + process.env.NEXT_PUBLIC_APP_TAGLINE || "Stablecoin payments made easy.", + appOgTitle: + process.env.NEXT_PUBLIC_APP_OG_TITLE || "Noblocks – Stablecoin mini app", + appOgDescription: + process.env.NEXT_PUBLIC_APP_OG_DESCRIPTION || + "Send & receive stablecoins on Base without leaving Warpcast.", + publicAppOGImage: + process.env.NEXT_PUBLIC_APP_OG_IMAGE || + "https://noblocks-ialc.vercel.app/og-preview.png", noIndex: process.env.NEXT_PUBLIC_NOINDEX || "", nodeEnv: process.env.NODE_ENV || "", }; diff --git a/app/types.ts b/app/types.ts index 52c3785f..3bdaf836 100644 --- a/app/types.ts +++ b/app/types.ts @@ -256,7 +256,7 @@ export type Config = { appSpashImage: string; splashBackgroundColor: string; appPrimaryCategory: string; - appHeroImageprocess: string; + appHeroImage: string; appTagline: string; appOgTitle: string; appOgDescription: string; From 81c441fb8989dd6b2b54fc063b154996d1d61fb1 Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 06:50:25 +0100 Subject: [PATCH 09/60] added redirect --- next.config.mjs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/next.config.mjs b/next.config.mjs index f102eb8e..c55431e5 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -88,6 +88,17 @@ const nextConfig = { : []), ], }, + + async redirects() { + return [ + { + source: "/.well-known/farcaster.json", + destination: + "https://api.farcaster.xyz/miniapps/hosted-manifest/01991820-b784-c889-4e4c-3b48e8c2aada", + permanent: false, + }, + ]; + }, }; export default nextConfig; From 6ac4e1d0e8f08114e0973df25bd02252824eb977 Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 07:36:17 +0100 Subject: [PATCH 10/60] fix --- next.config.mjs | 11 -------- public/.well-known/route.ts | 51 ++++++++++++++++++++++--------------- public/_redirects | 2 +- 3 files changed, 31 insertions(+), 33 deletions(-) diff --git a/next.config.mjs b/next.config.mjs index c55431e5..f102eb8e 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -88,17 +88,6 @@ const nextConfig = { : []), ], }, - - async redirects() { - return [ - { - source: "/.well-known/farcaster.json", - destination: - "https://api.farcaster.xyz/miniapps/hosted-manifest/01991820-b784-c889-4e4c-3b48e8c2aada", - permanent: false, - }, - ]; - }, }; export default nextConfig; diff --git a/public/.well-known/route.ts b/public/.well-known/route.ts index b08e4a95..2cae36ff 100644 --- a/public/.well-known/route.ts +++ b/public/.well-known/route.ts @@ -5,7 +5,7 @@ export async function GET() { const { farcasterHeader, farcasterPayload, - farcasterSignatuure, + farcasterSignature, // fixed typo publicUrl, onchainKitProjectName, appSubstitle, @@ -21,39 +21,42 @@ export async function GET() { publicAppOGImage, noIndex, } = config; - const baseUrl = publicUrl; - if (!baseUrl) { - return Response.json( - { error: "NEXT_PUBLIC_URL is required" }, - { status: 500 }, + + if (!publicUrl) { + return new Response( + JSON.stringify({ error: "NEXT_PUBLIC_URL is required" }), + { status: 500, headers: { "Content-Type": "application/json" } }, ); } const farcaster = { header: farcasterHeader, payload: farcasterPayload, - signature: farcasterSignatuure, + signature: farcasterSignature, }; const hasAnyFarcasterVar = Object.values(farcaster).some(Boolean); if (!hasAnyFarcasterVar) { - // Allow non-Farcaster deployments to return 404 for this endpoint return new Response("Not configured as Farcaster mini app", { status: 404, }); } + const missing = Object.entries(farcaster) - .filter(([, v]) => !v) - .map(([k]) => `FARCASTER_${k.toUpperCase()}`); + .filter(([, value]) => !value) + .map(([key]) => `FARCASTER_${key.toUpperCase()}`); + if (missing.length) { - return Response.json( - { error: `Incomplete Farcaster config. Missing: ${missing.join(", ")}` }, - { status: 500 }, + return new Response( + JSON.stringify({ + error: `Incomplete Farcaster config. Missing: ${missing.join(", ")}`, + }), + { status: 500, headers: { "Content-Type": "application/json" } }, ); } - return Response.json({ - accountAssociation: farcaster, + const manifest = { + accountAssociation: farcaster, frame: withValidProperties({ version: "1", name: onchainKitProjectName, @@ -63,9 +66,8 @@ export async function GET() { iconUrl: appIcon, splashImageUrl: appSpashImage, splashBackgroundColor: splashBackgroundColor, - - homeUrl: baseUrl, - webhookUrl: new URL("/api/webhook", baseUrl).toString(), + homeUrl: publicUrl, + webhookUrl: new URL("/api/webhook", publicUrl).toString(), primaryCategory: appPrimaryCategory, tags: [], heroImageUrl: appHeroImageprocess, @@ -73,9 +75,16 @@ export async function GET() { ogTitle: appOgTitle, ogDescription: appOgDescription, ogImageUrl: publicAppOGImage, - ...(noIndex === "true" && process.env.NODE_ENV !== "production" - ? { noindex: "true" } - : {}), + ...(noIndex === "true" ? { noindex: true } : {}), }), + }; + + return new Response(JSON.stringify(manifest), { + status: 200, + headers: { + "Content-Type": "application/json", + "Cache-Control": "public, max-age=0, must-revalidate", + "Access-Control-Allow-Origin": "*", + }, }); } diff --git a/public/_redirects b/public/_redirects index 783f5ce4..069da976 100644 --- a/public/_redirects +++ b/public/_redirects @@ -1 +1 @@ -/.well-known/farcaster.json https://api.farcaster.xyz/miniapps/hosted-manifest/01991820-b784-c889-4e4c-3b48e8c2aada 307 + From 496b64960956b82e8c195b4ae469833ea8171469 Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 08:02:51 +0100 Subject: [PATCH 11/60] added preview page --- app/api/og/route.tsx | 81 ++++++++++++++++++++++++++++++++++++++++++++ app/layout.tsx | 6 ++++ 2 files changed, 87 insertions(+) create mode 100644 app/api/og/route.tsx diff --git a/app/api/og/route.tsx b/app/api/og/route.tsx new file mode 100644 index 00000000..f1a5757a --- /dev/null +++ b/app/api/og/route.tsx @@ -0,0 +1,81 @@ +import { ImageResponse } from "next/og"; + +export async function GET() { + return new ImageResponse( + ( +
+ {/* Logo/Brand */} +
+ Noblocks +
+ + {/* Tagline */} +
+ Change stablecoins to cash in seconds +
+ + {/* Subtitle */} +
+ Decentralized payments to any bank or mobile wallet +
+ + {/* Visual element */} +
+ noblocks.xyz +
+
+ ), + { + width: 1200, + height: 630, + }, + ); +} diff --git a/app/layout.tsx b/app/layout.tsx index cae6e9bd..b0e36a9b 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -36,6 +36,12 @@ export const metadata: Metadata = { "mobile-web-app-capable": "yes", "msapplication-TileColor": "#317EFB", "msapplication-tap-highlight": "no", + + "fc:frame": "vNext", + "fc:frame:image": "https://noblocks-ialc.vercel.app/api/og", + "fc:frame:button:1": "Open App", + "fc:frame:button:1:action": "link", + "fc:frame:button:1:target": "https://noblocks-ialc.vercel.app", }, keywords: [ // Stablecoin Primary Keywords From 810611d73dacff9852f0d44f973eb461b1334cf5 Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 12:36:26 +0100 Subject: [PATCH 12/60] fix --- public/.well-known/route.ts | 88 +++---------------------------------- public/_redirects | 1 - vercel.json | 9 ++++ 3 files changed, 14 insertions(+), 84 deletions(-) delete mode 100644 public/_redirects create mode 100644 vercel.json diff --git a/public/.well-known/route.ts b/public/.well-known/route.ts index 2cae36ff..02a378aa 100644 --- a/public/.well-known/route.ts +++ b/public/.well-known/route.ts @@ -1,90 +1,12 @@ -import { withValidProperties } from "../../app/lib/manifest-utils"; -import config from "../../app/lib/config"; - export async function GET() { - const { - farcasterHeader, - farcasterPayload, - farcasterSignature, // fixed typo - publicUrl, - onchainKitProjectName, - appSubstitle, - appDescription, - appIcon, - appSpashImage, - splashBackgroundColor, - appPrimaryCategory, - appHeroImageprocess, - appTagline, - appOgTitle, - appOgDescription, - publicAppOGImage, - noIndex, - } = config; - - if (!publicUrl) { - return new Response( - JSON.stringify({ error: "NEXT_PUBLIC_URL is required" }), - { status: 500, headers: { "Content-Type": "application/json" } }, - ); - } - - const farcaster = { - header: farcasterHeader, - payload: farcasterPayload, - signature: farcasterSignature, - }; - - const hasAnyFarcasterVar = Object.values(farcaster).some(Boolean); - if (!hasAnyFarcasterVar) { - return new Response("Not configured as Farcaster mini app", { - status: 404, - }); - } - - const missing = Object.entries(farcaster) - .filter(([, value]) => !value) - .map(([key]) => `FARCASTER_${key.toUpperCase()}`); - - if (missing.length) { - return new Response( - JSON.stringify({ - error: `Incomplete Farcaster config. Missing: ${missing.join(", ")}`, - }), - { status: 500, headers: { "Content-Type": "application/json" } }, - ); - } - - const manifest = { - accountAssociation: farcaster, - frame: withValidProperties({ - version: "1", - name: onchainKitProjectName, - subtitle: appSubstitle, - description: appDescription, - screenshotUrls: [], - iconUrl: appIcon, - splashImageUrl: appSpashImage, - splashBackgroundColor: splashBackgroundColor, - homeUrl: publicUrl, - webhookUrl: new URL("/api/webhook", publicUrl).toString(), - primaryCategory: appPrimaryCategory, - tags: [], - heroImageUrl: appHeroImageprocess, - tagline: appTagline, - ogTitle: appOgTitle, - ogDescription: appOgDescription, - ogImageUrl: publicAppOGImage, - ...(noIndex === "true" ? { noindex: true } : {}), - }), - }; + const hostedManifestUrl = + "https://api.farcaster.xyz/miniapps/hosted-manifest/01991820-b784-c889-4e4c-3b48e8c2aada"; - return new Response(JSON.stringify(manifest), { - status: 200, + return new Response(null, { + status: 307, headers: { - "Content-Type": "application/json", + Location: hostedManifestUrl, "Cache-Control": "public, max-age=0, must-revalidate", - "Access-Control-Allow-Origin": "*", }, }); } diff --git a/public/_redirects b/public/_redirects deleted file mode 100644 index 069da976..00000000 --- a/public/_redirects +++ /dev/null @@ -1 +0,0 @@ - diff --git a/vercel.json b/vercel.json new file mode 100644 index 00000000..03e41765 --- /dev/null +++ b/vercel.json @@ -0,0 +1,9 @@ +{ + "redirects": [ + { + "source": "/.well-known/farcaster.json", + "destination": "https://api.farcaster.xyz/miniapps/hosted-manifest/01991820-b784-c889-4e4c-3b48e8c2aada", + "permanent": false + } + ] +} From 97ac2fae1928924fb832d6726f939b27a3ad0b7e Mon Sep 17 00:00:00 2001 From: Kem Date: Fri, 5 Sep 2025 12:48:43 +0100 Subject: [PATCH 13/60] version change --- public/.well-known/farcaster.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/.well-known/farcaster.json b/public/.well-known/farcaster.json index 9434d0fe..8564faac 100644 --- a/public/.well-known/farcaster.json +++ b/public/.well-known/farcaster.json @@ -20,7 +20,7 @@ "visible": true, "title": "Noblocks" }, - "version": "1.0.0", + "version": "2.0.0", "categories": ["finance", "web3"], "developer": { "name": "CONSOLATION LOTACHI", From 8b7187b7c6d8c9f6d3a1d9acad92221157eeb38e Mon Sep 17 00:00:00 2001 From: Kem Date: Sat, 6 Sep 2025 07:38:49 +0100 Subject: [PATCH 14/60] fix versioning --- public/.well-known/farcaster.json | 2 +- public/farcaster-manifest.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/public/.well-known/farcaster.json b/public/.well-known/farcaster.json index 8564faac..9c0fe240 100644 --- a/public/.well-known/farcaster.json +++ b/public/.well-known/farcaster.json @@ -20,7 +20,7 @@ "visible": true, "title": "Noblocks" }, - "version": "2.0.0", + "version": "10.0.0", "categories": ["finance", "web3"], "developer": { "name": "CONSOLATION LOTACHI", diff --git a/public/farcaster-manifest.json b/public/farcaster-manifest.json index 374c5ae0..9c0fe240 100644 --- a/public/farcaster-manifest.json +++ b/public/farcaster-manifest.json @@ -20,13 +20,13 @@ "visible": true, "title": "Noblocks" }, - "version": "1.0.0", + "version": "10.0.0", "categories": ["finance", "web3"], "developer": { - "name": "CONSOLATION", - "url": "https://noblocks-ialc.vercel.app" + "name": "CONSOLATION LOTACHI", + "website": "https://github.com/KEM-CONSOLATION", + "contact": "mailto:consolationlotachi@email.com" }, - "accountAssociation": { "header": "eyJmaWQiOjExNjI4ODAsInR5cGUiOiJhdXRoIiwia2V5IjoiMHgzZERCMTQ5RGNBMEZjMDcxM0ZjMzhBQ2IxNjdDMzM2NzIwQjVGMDdmIn0", "payload": "eyJkb21haW4iOiJub2Jsb2Nrcy1pYWxjLnZlcmNlbC5hcHAifQ", From ef0f467ce0841aa630330545d296c31bb223dd00 Mon Sep 17 00:00:00 2001 From: Kem Date: Sat, 6 Sep 2025 08:17:25 +0100 Subject: [PATCH 15/60] fix frame issue --- next.config.mjs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/next.config.mjs b/next.config.mjs index f102eb8e..fa418edb 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -22,7 +22,8 @@ const nextConfig = { }, { key: "Content-Security-Policy", - value: "frame-ancestors *", + value: + "frame-ancestors 'self' https://noblocks-ialc.vercel.app http://localhost:3000 https://auth.privy.io;", }, { key: "X-XSS-Protection", From eb50745db9b970b34cc520dc959c4862e74da9de Mon Sep 17 00:00:00 2001 From: Kem Date: Sat, 6 Sep 2025 10:37:47 +0100 Subject: [PATCH 16/60] fix the embed stuff --- next.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/next.config.mjs b/next.config.mjs index fa418edb..c600d13a 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -23,7 +23,7 @@ const nextConfig = { { key: "Content-Security-Policy", value: - "frame-ancestors 'self' https://noblocks-ialc.vercel.app http://localhost:3000 https://auth.privy.io;", + "frame-ancestors 'self' https://noblocks-ialc.vercel.app http://localhost:3000 https://auth.privy.io https://warpcast.com https://*.farcaster.xyz;", }, { key: "X-XSS-Protection", From 010ec2d754f7d4b9a8b6518ceba5487611ca063e Mon Sep 17 00:00:00 2001 From: Kem Date: Sat, 6 Sep 2025 11:01:23 +0100 Subject: [PATCH 17/60] fix --- app/early-ready.tsx | 106 ++++++++++++++++++++++++++------------------ 1 file changed, 62 insertions(+), 44 deletions(-) diff --git a/app/early-ready.tsx b/app/early-ready.tsx index 898e8843..d7fdcc47 100644 --- a/app/early-ready.tsx +++ b/app/early-ready.tsx @@ -1,52 +1,70 @@ -"use client"; +// "use client"; + +// import { useEffect } from "react"; + +// export function EarlyReady() { +// useEffect(() => { +// let cancelled = false; +// (async () => { +// try { +// if ( +// typeof window !== "undefined" && +// (window as any).__farcasterMiniAppReady +// ) { +// return; +// } +// const { sdk } = await import("@farcaster/miniapp-sdk"); +// if (cancelled) return; +// console.log("✅ Ready called"); +// await sdk.actions.ready(); +// // Post defensive ready messages for hosts that listen to postMessage +// try { +// if ( +// typeof window !== "undefined" && +// window.parent && +// window.top !== window.self +// ) { +// const msgs = [ +// { type: "farcaster:ready" }, +// { type: "miniapp:ready" }, +// { type: "frame:ready" }, +// { type: "farcaster:miniapp:ready" }, +// ]; +// msgs.forEach((m) => { +// try { +// window.parent!.postMessage(m as any, "*"); +// } catch {} +// }); +// } +// } catch {} +// if (typeof window !== "undefined") { +// (window as any).__farcasterMiniAppReady = true; +// } +// } catch (err) { +// console.error("❌ Early ready failed", err); +// } +// })(); +// return () => { +// cancelled = true; +// }; +// }, []); +// return null; +// } + +"use client"; import { useEffect } from "react"; +import { sdk } from "@farcaster/miniapp-sdk"; export function EarlyReady() { useEffect(() => { - let cancelled = false; - (async () => { - try { - if ( - typeof window !== "undefined" && - (window as any).__farcasterMiniAppReady - ) { - return; - } - const { sdk } = await import("@farcaster/miniapp-sdk"); - if (cancelled) return; - console.log("✅ Ready called"); - await sdk.actions.ready(); - // Post defensive ready messages for hosts that listen to postMessage - try { - if ( - typeof window !== "undefined" && - window.parent && - window.top !== window.self - ) { - const msgs = [ - { type: "farcaster:ready" }, - { type: "miniapp:ready" }, - { type: "frame:ready" }, - { type: "farcaster:miniapp:ready" }, - ]; - msgs.forEach((m) => { - try { - window.parent!.postMessage(m as any, "*"); - } catch {} - }); - } - } catch {} - if (typeof window !== "undefined") { - (window as any).__farcasterMiniAppReady = true; - } - } catch (err) { - console.error("❌ Early ready failed", err); - } - })(); - return () => { - cancelled = true; - }; + if ( + typeof window !== "undefined" && + !(window as any).__farcasterMiniAppReady + ) { + sdk.actions.ready(); + (window as any).__farcasterMiniAppReady = true; + } }, []); return null; From 15e07aa44f351f1493216fc46ef8788e4c81a474 Mon Sep 17 00:00:00 2001 From: Kem Date: Sat, 6 Sep 2025 11:06:19 +0100 Subject: [PATCH 18/60] fix --- next.config.mjs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/next.config.mjs b/next.config.mjs index c600d13a..d9298ddd 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -23,7 +23,8 @@ const nextConfig = { { key: "Content-Security-Policy", value: - "frame-ancestors 'self' https://noblocks-ialc.vercel.app http://localhost:3000 https://auth.privy.io https://warpcast.com https://*.farcaster.xyz;", + "frame-ancestors 'self' https://warpcast.com https://*.farcaster.xyz https://auth.privy.io;", + // "frame-ancestors 'self' https://noblocks-ialc.vercel.app http://localhost:3000 https://auth.privy.io https://warpcast.com https://*.farcaster.xyz;", }, { key: "X-XSS-Protection", From 06f7b5e13f17f77f9e08dbe95c662fde3d8a058b Mon Sep 17 00:00:00 2001 From: Kem Date: Sat, 6 Sep 2025 11:21:47 +0100 Subject: [PATCH 19/60] fix --- app/early-ready.tsx | 71 +++++++++++---------------------------------- app/layout.tsx | 17 +++++++++++ 2 files changed, 34 insertions(+), 54 deletions(-) diff --git a/app/early-ready.tsx b/app/early-ready.tsx index d7fdcc47..aa7af623 100644 --- a/app/early-ready.tsx +++ b/app/early-ready.tsx @@ -1,57 +1,3 @@ -// "use client"; - -// import { useEffect } from "react"; - -// export function EarlyReady() { -// useEffect(() => { -// let cancelled = false; -// (async () => { -// try { -// if ( -// typeof window !== "undefined" && -// (window as any).__farcasterMiniAppReady -// ) { -// return; -// } -// const { sdk } = await import("@farcaster/miniapp-sdk"); -// if (cancelled) return; -// console.log("✅ Ready called"); -// await sdk.actions.ready(); -// // Post defensive ready messages for hosts that listen to postMessage -// try { -// if ( -// typeof window !== "undefined" && -// window.parent && -// window.top !== window.self -// ) { -// const msgs = [ -// { type: "farcaster:ready" }, -// { type: "miniapp:ready" }, -// { type: "frame:ready" }, -// { type: "farcaster:miniapp:ready" }, -// ]; -// msgs.forEach((m) => { -// try { -// window.parent!.postMessage(m as any, "*"); -// } catch {} -// }); -// } -// } catch {} -// if (typeof window !== "undefined") { -// (window as any).__farcasterMiniAppReady = true; -// } -// } catch (err) { -// console.error("❌ Early ready failed", err); -// } -// })(); -// return () => { -// cancelled = true; -// }; -// }, []); - -// return null; -// } - "use client"; import { useEffect } from "react"; import { sdk } from "@farcaster/miniapp-sdk"; @@ -62,7 +8,24 @@ export function EarlyReady() { typeof window !== "undefined" && !(window as any).__farcasterMiniAppReady ) { + // Notify Farcaster SDK sdk.actions.ready(); + + // Defensive fallback for iframe hosts + try { + if (window.parent && window.top !== window.self) { + const msgs = [ + { type: "farcaster:ready" }, + { type: "miniapp:ready" }, + { type: "frame:ready" }, + { type: "farcaster:miniapp:ready" }, + ]; + msgs.forEach((m) => { + window.parent!.postMessage(m, "*"); + }); + } + } catch {} + (window as any).__farcasterMiniAppReady = true; } }, []); diff --git a/app/layout.tsx b/app/layout.tsx index b0e36a9b..aab3da2c 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -245,6 +245,23 @@ export default function RootLayout({ strategy="afterInteractive" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} /> + + + From f246d190b2cf430571c9a9943578bbf13044fede Mon Sep 17 00:00:00 2001 From: Kem Date: Sat, 6 Sep 2025 11:32:18 +0100 Subject: [PATCH 20/60] fix --- next.config.mjs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/next.config.mjs b/next.config.mjs index d9298ddd..119f7b17 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -23,8 +23,7 @@ const nextConfig = { { key: "Content-Security-Policy", value: - "frame-ancestors 'self' https://warpcast.com https://*.farcaster.xyz https://auth.privy.io;", - // "frame-ancestors 'self' https://noblocks-ialc.vercel.app http://localhost:3000 https://auth.privy.io https://warpcast.com https://*.farcaster.xyz;", + "frame-ancestors 'self' https://warpcast.com https://*.warpcast.com https://*.farcaster.xyz https://farcaster.xyz https://auth.privy.io https://client.warpcast.com;", }, { key: "X-XSS-Protection", @@ -54,13 +53,16 @@ const nextConfig = { ], }, ], + experimental: { optimizeCss: true, optimizePackageImports: ["@headlessui/react", "framer-motion"], }, + compiler: { removeConsole: process.env.NODE_ENV === "production", }, + images: { remotePatterns: [ { @@ -71,7 +73,6 @@ const nextConfig = { { protocol: "https", hostname: "cdn.sanity.io", - // Sanity image assets are served under /images/... pathname: "/images/**", }, { From 79c674b531e17a149596d3d562681f406603daea Mon Sep 17 00:00:00 2001 From: Kem Date: Sat, 6 Sep 2025 11:46:29 +0100 Subject: [PATCH 21/60] fix --- next.config.mjs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/next.config.mjs b/next.config.mjs index 119f7b17..36e5b5ee 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -46,10 +46,6 @@ const nextConfig = { key: "Cache-Control", value: "no-cache, no-store, must-revalidate", }, - { - key: "Content-Security-Policy", - value: "default-src 'self'; script-src 'self'", - }, ], }, ], From d1b3bf881f3190cd55258d8f91aa1920ecf8f7c2 Mon Sep 17 00:00:00 2001 From: Kem Date: Sat, 6 Sep 2025 11:55:14 +0100 Subject: [PATCH 22/60] fix --- app/layout.tsx | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/app/layout.tsx b/app/layout.tsx index aab3da2c..56c15255 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -244,24 +244,7 @@ export default function RootLayout({ type="application/ld+json" strategy="afterInteractive" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} - /> - - - + > From e9453ef9230076b7a523b61ac42db88e0de3b8ba Mon Sep 17 00:00:00 2001 From: Kem Date: Sat, 6 Sep 2025 18:07:17 +0100 Subject: [PATCH 23/60] Enhance wallet connection logic to prioritize Farcaster SDK's Ethereum provider and improve error handling during connection attempts. --- app/context/InjectedWalletContext.tsx | 51 +++++++++++++++++++++++---- app/utils.ts | 5 ++- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/app/context/InjectedWalletContext.tsx b/app/context/InjectedWalletContext.tsx index 6a13dacb..9c2a5fc8 100644 --- a/app/context/InjectedWalletContext.tsx +++ b/app/context/InjectedWalletContext.tsx @@ -11,6 +11,7 @@ import { createWalletClient, custom } from "viem"; import { toast } from "sonner"; import { useSearchParams } from "next/navigation"; import { shouldUseInjectedWallet } from "../utils"; +import { sdk } from "@farcaster/miniapp-sdk"; interface InjectedWalletContextType { isInjectedWallet: boolean; @@ -40,19 +41,46 @@ function InjectedWalletProviderContent({ children }: { children: ReactNode }) { setIsInjectedWallet(shouldUse); - if (shouldUse && window.ethereum) { + if (shouldUse) { try { - const client = createWalletClient({ - transport: custom(window.ethereum as any), + let ethereumProvider = window.ethereum; + let client; + + // Try to use Farcaster SDK's Ethereum provider first + try { + const farcasterProvider = await sdk.wallet.getEthereumProvider(); + if (farcasterProvider) { + ethereumProvider = farcasterProvider; + console.log("Using Farcaster SDK Ethereum provider"); + } + } catch (farcasterError) { + console.warn( + "Farcaster SDK provider not available, falling back to window.ethereum:", + farcasterError, + ); + } + + if (!ethereumProvider) { + throw new Error("No Ethereum provider available"); + } + + client = createWalletClient({ + transport: custom(ethereumProvider as any), }); - await (window.ethereum as any).request({ method: "eth_requestAccounts" }); + // Add a small delay to ensure provider is ready + await new Promise((resolve) => setTimeout(resolve, 100)); + + await (ethereumProvider as any).request({ + method: "eth_requestAccounts", + }); const [address] = await client.getAddresses(); if (address) { - setInjectedProvider(window.ethereum); + setInjectedProvider(ethereumProvider); setInjectedAddress(address); setInjectedReady(true); + console.log("Successfully connected to wallet:", address); } else { console.warn("No address returned from injected wallet."); toast.error( @@ -72,9 +100,17 @@ function InjectedWalletProviderContent({ children }: { children: ReactNode }) { setInjectedProvider(null); setInjectedAddress(null); setInjectedReady(false); + } else if ((error as any)?.message?.includes("User rejected")) { + toast.error("Wallet connection was cancelled by user.", { + description: "You can try connecting again later.", + }); + setIsInjectedWallet(false); } else { toast.error( "Failed to connect to wallet. Please refresh and try again.", + { + description: "If the problem persists, try restarting the app.", + }, ); setIsInjectedWallet(false); } @@ -82,7 +118,10 @@ function InjectedWalletProviderContent({ children }: { children: ReactNode }) { } }; - initInjectedWallet(); + // Add a small delay to ensure the page is fully loaded + const timeoutId = setTimeout(initInjectedWallet, 200); + + return () => clearTimeout(timeoutId); }, [searchParams]); return ( diff --git a/app/utils.ts b/app/utils.ts index 0b657af4..011b2165 100644 --- a/app/utils.ts +++ b/app/utils.ts @@ -581,6 +581,7 @@ export function shouldUseInjectedWallet( Boolean(w.__farcasterMiniAppReady) || Boolean(w.farcaster) || Boolean(w.warpcast) || + Boolean(w.farcasterMiniApp) || /Farcaster|Warpcast/i.test(ua) || /warpcast\.com/i.test(ref) || /warpcast\.com/i.test(url) || @@ -591,7 +592,9 @@ export function shouldUseInjectedWallet( // Check for Farcaster-specific query parameters searchParams.has("farcaster") || searchParams.has("warpcast") || - searchParams.has("miniapp") + searchParams.has("miniapp") || + // Check for Farcaster SDK availability + (typeof w !== "undefined" && w.sdk && w.sdk.wallet) ); } catch { return false; From 659b567ccf5418ac3f935c717f1a6e48ffdcd40c Mon Sep 17 00:00:00 2001 From: Kem Date: Mon, 8 Sep 2025 11:47:23 +0100 Subject: [PATCH 24/60] fixed coderabbit reviews --- {public => app}/.well-known/farcaster.json | 15 ++++++++------- app/.well-known/route.ts | 10 ++++++++++ app/context/InjectedWalletContext.tsx | 8 ++++++-- app/layout.tsx | 4 ++-- app/lib/config.ts | 16 ++++++++-------- app/lib/manifest-utils.ts | 2 +- app/lib/supabase.ts | 4 +++- app/types.ts | 7 +++---- public/.well-known/route.ts | 12 ------------ public/farcaster-manifest.json | 15 ++++++++------- 10 files changed, 49 insertions(+), 44 deletions(-) rename {public => app}/.well-known/farcaster.json (66%) create mode 100644 app/.well-known/route.ts delete mode 100644 public/.well-known/route.ts diff --git a/public/.well-known/farcaster.json b/app/.well-known/farcaster.json similarity index 66% rename from public/.well-known/farcaster.json rename to app/.well-known/farcaster.json index 9c0fe240..74da113b 100644 --- a/public/.well-known/farcaster.json +++ b/app/.well-known/farcaster.json @@ -2,26 +2,27 @@ "name": "Noblocks", "description": "A crypto-enabled mini app for sending and receiving stablecoins on Base using Farcaster.", "app": { - "url": "https://noblocks-ialc.vercel.app", + "url": "https://noblocks.xyz", "window": { "height": 600, "width": 400 } }, "icon": { - "light": "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png", - "dark": "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png" + "light": "https://noblocks.xyz/icons/android-chrome-192x192.png", + "dark": "https://noblocks.xyz/icons/android-chrome-192x192.png" }, "splash_screen": { - "light": "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png", - "dark": "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png" + "light": "https://noblocks.xyz/android-chrome-192x192.png", + "dark": "https://noblocks.xyz/android-chrome-192x192.png" }, "navigation_bar": { "visible": true, "title": "Noblocks" }, - "version": "10.0.0", - "categories": ["finance", "web3"], + "version": "1.0.0", + "primaryCategory": "finance", + "tags": ["web3"], "developer": { "name": "CONSOLATION LOTACHI", "website": "https://github.com/KEM-CONSOLATION", diff --git a/app/.well-known/route.ts b/app/.well-known/route.ts new file mode 100644 index 00000000..d41009cb --- /dev/null +++ b/app/.well-known/route.ts @@ -0,0 +1,10 @@ +export async function GET() { + const hostedManifestUrl = process.env.NEXT_PUBLIC_FC_HOSTED_MANIFEST_URL!; + return new Response(null, { + status: 307, + headers: { + Location: hostedManifestUrl, + "Cache-Control": "public, s-maxage=300, stale-while-revalidate=86400", + }, + }); +} diff --git a/app/context/InjectedWalletContext.tsx b/app/context/InjectedWalletContext.tsx index 9c2a5fc8..9265edd5 100644 --- a/app/context/InjectedWalletContext.tsx +++ b/app/context/InjectedWalletContext.tsx @@ -119,9 +119,13 @@ function InjectedWalletProviderContent({ children }: { children: ReactNode }) { }; // Add a small delay to ensure the page is fully loaded - const timeoutId = setTimeout(initInjectedWallet, 200); - return () => clearTimeout(timeoutId); + let cancelled = false; + const timeoutId = setTimeout(() => !cancelled && initInjectedWallet(), 200); + return () => { + cancelled = true; + clearTimeout(timeoutId); + }; }, [searchParams]); return ( diff --git a/app/layout.tsx b/app/layout.tsx index 56c15255..20a01efb 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -38,10 +38,10 @@ export const metadata: Metadata = { "msapplication-tap-highlight": "no", "fc:frame": "vNext", - "fc:frame:image": "https://noblocks-ialc.vercel.app/api/og", + "fc:frame:image": `${config.publicUrl ?? "https://noblocks.xyz"}/images/og-image.jpg`, "fc:frame:button:1": "Open App", "fc:frame:button:1:action": "link", - "fc:frame:button:1:target": "https://noblocks-ialc.vercel.app", + "fc:frame:button:1:target": `${config.publicUrl ?? "https://noblocks.xyz"}`, }, keywords: [ // Stablecoin Primary Keywords diff --git a/app/lib/config.ts b/app/lib/config.ts index 8d37ea60..1c255164 100644 --- a/app/lib/config.ts +++ b/app/lib/config.ts @@ -13,25 +13,24 @@ const config: Config = { cdpApiKey: process.env.NEXT_PUBLIC_CDP_API_KEY || "", appUrl: process.env.NEXT_PUBLIC_URL || "https://noblocks.xyz", supabaseUrl: process.env.SUPABASE_URL || "", - supabaseRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY || "", farcasterHeader: process.env.FARCASTER_HEADER || "", farcasterPayload: process.env.FARCASTER_PAYLOAD || "", - farcasterSignatuure: process.env.FARCASTER_SIGNATURE || "", + farcasterSignature: process.env.FARCASTER_SIGNATURE || "", publicUrl: process.env.NEXT_PUBLIC_URL || "", onchainKitProjectName: process.env.NEXT_PUBLIC_ONCHAINKIT_PROJECT_NAME || "", - appSubstitle: process.env.NEXT_PUBLIC_APP_SUBTITLE || "", + appSubtitle: process.env.NEXT_PUBLIC_APP_SUBTITLE || "", appDescription: process.env.NEXT_PUBLIC_APP_DESCRIPTION || "", appIcon: process.env.NEXT_PUBLIC_APP_ICON || - "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png", - appSpashImage: + "https://https://noblocks.xyz/icons/android-chrome-192x192.png", + appSplashImage: process.env.NEXT_PUBLIC_APP_SPLASH_IMAGE || - "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png", + "https://https://noblocks.xyz/screenshots/desktop-wide.png", splashBackgroundColor: process.env.NEXT_PUBLIC_SPLASH_BACKGROUND_COLOR || "", appPrimaryCategory: process.env.NEXT_PUBLIC_APP_PRIMARY_CATEGORY || "", appHeroImage: process.env.NEXT_PUBLIC_APP_HERO_IMAGE || - "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png", + "https://https://noblocks.xyz/screenshots/desktop-wide.png", appTagline: process.env.NEXT_PUBLIC_APP_TAGLINE || "Stablecoin payments made easy.", appOgTitle: @@ -41,7 +40,7 @@ const config: Config = { "Send & receive stablecoins on Base without leaving Warpcast.", publicAppOGImage: process.env.NEXT_PUBLIC_APP_OG_IMAGE || - "https://noblocks-ialc.vercel.app/og-preview.png", + "https://https://noblocks.xyz/images/og-image.jpg", noIndex: process.env.NEXT_PUBLIC_NOINDEX || "", nodeEnv: process.env.NODE_ENV || "", }; @@ -79,4 +78,5 @@ export const serverConfig = { dataset: process.env.SANITY_STUDIO_DATASET || "", apiVersion: "2024-01-01", // Pin to a stable date useCdn: false, // Set to false for fresh data + supabaseRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY || "", }; diff --git a/app/lib/manifest-utils.ts b/app/lib/manifest-utils.ts index 91988c2f..5747cca9 100644 --- a/app/lib/manifest-utils.ts +++ b/app/lib/manifest-utils.ts @@ -14,7 +14,7 @@ export function withValidProperties>( return trimmed.length > 0 ? [[key, trimmed]] : []; } if (typeof value === "boolean") { - return value === true ? [[key, value]] : []; + return [[key, value]]; } return [[key, value]]; }); diff --git a/app/lib/supabase.ts b/app/lib/supabase.ts index 04a13aa7..5e912e2a 100644 --- a/app/lib/supabase.ts +++ b/app/lib/supabase.ts @@ -1,7 +1,9 @@ import { createClient } from "@supabase/supabase-js"; import config from "./config"; +import { serverConfig } from "./config"; -const { supabaseRoleKey, supabaseUrl } = config; +const { supabaseUrl } = config; +const { supabaseRoleKey } = serverConfig; // Initialize Supabase client with service role key only when envs are available. // Avoid throwing at module import time to keep Next.js build workable. diff --git a/app/types.ts b/app/types.ts index 3bdaf836..941f8b5e 100644 --- a/app/types.ts +++ b/app/types.ts @@ -250,10 +250,10 @@ export type Config = { nodeEnv: string; noIndex: string; onchainKitProjectName: string; - appSubstitle: string; + appSubtitle: string; appDescription: string; appIcon: string; - appSpashImage: string; + appSplashImage: string; splashBackgroundColor: string; appPrimaryCategory: string; appHeroImage: string; @@ -264,9 +264,8 @@ export type Config = { publicUrl: string; farcasterHeader: string; farcasterPayload: string; - farcasterSignatuure: string; + farcasterSignature: string; supabaseUrl: string; - supabaseRoleKey: string; appUrl: string; aggregatorUrl: string; privyAppId: string; diff --git a/public/.well-known/route.ts b/public/.well-known/route.ts deleted file mode 100644 index 02a378aa..00000000 --- a/public/.well-known/route.ts +++ /dev/null @@ -1,12 +0,0 @@ -export async function GET() { - const hostedManifestUrl = - "https://api.farcaster.xyz/miniapps/hosted-manifest/01991820-b784-c889-4e4c-3b48e8c2aada"; - - return new Response(null, { - status: 307, - headers: { - Location: hostedManifestUrl, - "Cache-Control": "public, max-age=0, must-revalidate", - }, - }); -} diff --git a/public/farcaster-manifest.json b/public/farcaster-manifest.json index 9c0fe240..1fa1bbef 100644 --- a/public/farcaster-manifest.json +++ b/public/farcaster-manifest.json @@ -2,26 +2,27 @@ "name": "Noblocks", "description": "A crypto-enabled mini app for sending and receiving stablecoins on Base using Farcaster.", "app": { - "url": "https://noblocks-ialc.vercel.app", + "url": "https://noblocks.xyz", "window": { "height": 600, "width": 400 } }, "icon": { - "light": "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png", - "dark": "https://noblocks-ialc.vercel.app/icons/android-chrome-192x192.png" + "light": "https://https://noblocks.xyz/icons/android-chrome-192x192.png", + "dark": "https://https://noblocks.xyz/icons/android-chrome-192x192.png" }, "splash_screen": { - "light": "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png", - "dark": "https://noblocks-ialc.vercel.app/screenshots/desktop-wide.png" + "light": "https://https://noblocks.xyz/android-chrome-192x192.png", + "dark": "https://https://noblocks.xyz/android-chrome-192x192.png" }, "navigation_bar": { "visible": true, "title": "Noblocks" }, - "version": "10.0.0", - "categories": ["finance", "web3"], + "version": "1.0.0", + "primaryCategory": "finance", + "tags": ["web3"], "developer": { "name": "CONSOLATION LOTACHI", "website": "https://github.com/KEM-CONSOLATION", From 56a458bbb471401095396ac761a413f2ff511fce Mon Sep 17 00:00:00 2001 From: Kem Date: Mon, 8 Sep 2025 16:21:22 +0100 Subject: [PATCH 25/60] Updated App Fav Icons --- app/.well-known/farcaster.json | 4 ++-- app/lib/config.ts | 2 +- public/farcaster-manifest.json | 4 ++-- public/icons/favicon.png | Bin 0 -> 21339 bytes public/icons/favicon_.png | Bin 0 -> 21261 bytes 5 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 public/icons/favicon.png create mode 100644 public/icons/favicon_.png diff --git a/app/.well-known/farcaster.json b/app/.well-known/farcaster.json index 74da113b..600feca9 100644 --- a/app/.well-known/farcaster.json +++ b/app/.well-known/farcaster.json @@ -9,8 +9,8 @@ } }, "icon": { - "light": "https://noblocks.xyz/icons/android-chrome-192x192.png", - "dark": "https://noblocks.xyz/icons/android-chrome-192x192.png" + "light": "https://noblocks.xyz/icons/favicon_.png", + "dark": "https://noblocks.xyz/icons/favicon.png" }, "splash_screen": { "light": "https://noblocks.xyz/android-chrome-192x192.png", diff --git a/app/lib/config.ts b/app/lib/config.ts index 1c255164..1a5f3fa8 100644 --- a/app/lib/config.ts +++ b/app/lib/config.ts @@ -22,7 +22,7 @@ const config: Config = { appDescription: process.env.NEXT_PUBLIC_APP_DESCRIPTION || "", appIcon: process.env.NEXT_PUBLIC_APP_ICON || - "https://https://noblocks.xyz/icons/android-chrome-192x192.png", + "https://https://noblocks.xyz/icons/favicon_.png", appSplashImage: process.env.NEXT_PUBLIC_APP_SPLASH_IMAGE || "https://https://noblocks.xyz/screenshots/desktop-wide.png", diff --git a/public/farcaster-manifest.json b/public/farcaster-manifest.json index 1fa1bbef..ac3a5623 100644 --- a/public/farcaster-manifest.json +++ b/public/farcaster-manifest.json @@ -9,8 +9,8 @@ } }, "icon": { - "light": "https://https://noblocks.xyz/icons/android-chrome-192x192.png", - "dark": "https://https://noblocks.xyz/icons/android-chrome-192x192.png" + "light": "https://noblocks.xyz/icons/favicon_.png", + "dark": "https://noblocks.xyz/icons/favicon.png" }, "splash_screen": { "light": "https://https://noblocks.xyz/android-chrome-192x192.png", diff --git a/public/icons/favicon.png b/public/icons/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..b917e4ccea0e6b043cd845e70a782a00110c50dd GIT binary patch literal 21339 zcmeHNcT`kY8oz*o6e+R5Dlm$LjRFqAf^>-m4Mk%K0?MEf1RRPGnv_W}0ud!^A(RnF zR7ipd2_Q%v1;r968bmq+$PB_Tzzj%{nf>k?Bztzx{;_}TIoY%Codf62cfWh@cYj}f z_rAEj_PZ7;EK@)TE!=Ih{ZoYG>ha$KS)imCSBE0BUuXCBZ3jZ623w!XTT3CCdk6LG z^qlnUhA%HIGxvD%=+cXURltm&i2#nIfsmBeY^!2k;B3prN>0*ZsMSkJS}W$*cFuLq z@oUU=e(;{3HrGi`h7gGvLZoRR(wz`u%moHAY9K@gM>06#1WN`-GB|=6kiiilvT{U- zthNy%%LB4Jz^RdZcOuIJoEpia2(ml?JNOfq2L@6oCb-;E2BeI9Tb$e|)%D2i{dpLf z(aDSsc0s=I0|sP9Co?*j!GAfUhvWx~ElwZdXvI_-xkxilCJq~{7&<3wW0j8%s=CaN zRfya6Gp&(N$%}a99P!4H-c?}T@?*lcoBQ=|*tki>Nh$uSD4%!YDdWU*Gk%!OzRfqs zL}i=~j?_|@Z@ymrtxRolT|}o0T0D34p_73FKRi}{R4URY5)#QK!C?gn2x%dI8kcEa zfR({<_b|++1gk$D?bqG#bYO#MYJHP?ov67kYP$Dp*XizHhsp{Qk?6&S%dX;~$NA~t z<$fc?B?e=Wmw&jg!1x<}TTeWM`-5-%50-+?>8skXkbm9=ap_MnTlu+G8{M&FSx^YAQ{X2YEG9 zqN4i{Ls*^*xF9O4x6rXdT;Ag-dN?lFG+2I8+@Afcmz~2Aw-59SDN&K{8Y_yFwGrxS zm6!0}iVjt*@eM$Kjq~8qF+B#+_WK0G?6U-1<2$}96mD|ybUMWwR$QQ zTXHEi8oxPohkP25SY=vc>8mzlX%TuU!QzaIcPCs2XWA1tz&n51F&f<}*yoU(-YAeC zo6PSQF8#edT^S+UtJm>8Gj-X(Zb5WqT4i1dlRrMzFLbE1wU`jsO!8fmY~g}A^Tc@X zPY7KfSD{2MK@3ChU&?j}KFsx~{OiCbzJ6vDo4&?MBw)F2L{xWCCccp_`Q3Vw-5wed z*Qf4L-ZyhTw{J;Rk__~=Y2W=Qn zv(+>L`56WUev!hI(q}O=^Q(~sDV&)E3g>!V+f@)fKAHjlk&;ttn9m~4{mJ1$gG<5u zIzj(;f^gwvPnmepO1LiPrb@UzRpij`-`(MKE@wuYXV5ox=H<&0#eT>DxrBYt_MR0~ zXmwtWENhvmN|(nSu96PbHh&8P-pW{yMg0!PLBCci1ifnyufrzNPn_asVNE~JGP%*T zeM;9F`l+V`AQf`?^7YP9Zikt8{O$7Y$w!6XiiT!FBZV(_np0t4)B|hr+Xmy4rnQ$S za{wmldhXa{9}wb^R^(dvk{}alta!10iZ(CV zg!3vaXL@<-<7rF73jl{w^s4nR$nSgGYXW+UiCE4#vq1_m+*FC>6pz1QUZxU!U-uAv zL$=ofmJN6cqeSVQoSJk?&G(O2ArF`QejW56GTpB7z>$fVwhM%$z zD8gXo;|}-H>qWOtagI6mgV-*a7l4YG&+qXUDR`VuIVw&|6LrE+q&(l4EWvp%~2rcE8<@m&8KOfrR zt5*I1zMEhOdJBljY*HuaBjLVAey^Rj`wq03{|4eSb#*~b)MZ*2a@0Ft{mX5hP4b!@ zV`}Okgay+8x){D|(u@KVhMol!j2dEcko{61vp$LA2!EI#s0KPRUY~_O{^+XvpsxP{ zmWO$D5g><#b*lry*8Bh)@?dX-#ZZ}*Syr$PSdE{P{RemwqwcN88>FY$M<@}{AN7|k z9QQI}Iq}b~pAl%bjgR03Pur^k)hcm$_tqXEcP#W!YCimCo+T{3w|zQbgt^a4C8i8? z){+N3!$$~{O)9?AH^pUGTdC@opCdfol!lPLR{6yyM1B7xg(2IDO}D z4PUG<;=J~A^fRgs6qMGBN75|8yjf4T8p1HvyuyPoc^v^sDZv%K1Jbb2X?qMT)o@@s zBj;E5pS9alJ)*n;o!P)eJBF1zo#FNbJjaQC40tC@2nDXa(H7(431=fjLo4#9RU-9mUVA$ zay|hrA`(->c(sD6QVVIucm5QBI12RX^keq@GFIRV~*&(pG#i` zTS(F-wzf0VF5S6ZIjgBV^vnXVf+THSU_~0qlnT$lrL}K{Yt5#e58ahPtluT_>d;5q z-UJy_cCDvelLD$SHXW8tK_l-g3Nw9%mplOKryXMg7135J^HVHh1TVGs94=Xch5ncj zTJ7Wu(3uP;+x$v*A&h^)Znp&XcveH&Dhrn@OY7~vhXpqp9|2pm;-Fm=Z9%sTezBx^au@EpEP0TvVYDNTcf55cE2EVEAG zF;`%W3o+(hSr10fKG`DXsRy3+;j`V#@tDu2G;g0H#%$q_<7q#JY2VEczDoVuO zcD$#0A*`h3*-$Ios#H~_h1nhwud{KTH4JU@eG34f9wNtE=?3{~%9+wMoXjjI zDwP8jU!X;qd533&&J8+9IRjLz>>zOL%+JO{`5-I9m78UK4 zQ%Z<&2DO+G2E}Ey7HP8GepL236CsUQjv>J+SS~7Cp{lUdX1u6uCxELYvAyCu6%k+T zXGX6KcmPYyCN~)mSSo$f5MZO+(F_8!SmtFXeqD0zc8-7N;gB3@WW|>Z&%0C6?sbwI z9diV5iXv)vrB~7PUBTQ3RiDiV4RNpSH-^QPUUjxB)WeCm=Ufv6uJ>&I;;q8E0S$zvRufCG2I(+v zNawH*)PLM~iFn7yjN+@-H>;f1O`gM^!dG4{Kf{ z5+Kd$&=$K}_Zya z1k7lbU-okkw|1lW$F&P{Jz=YH#8yFcM2yCb49Uh+hxXtUkS)=Hm0qr#MsoWOpj;&S zF{i3zerSF3@1`Ny{s~tS5E2k<1Ek9kD3CEk0)r&z;x-vn2}DRhB!)poO9BV7z#w2C zg98~H$jU(y8A)FteS!3a|6N~TSmyc4ZA4W_sVYpAQTgFU_ZP8n{)NzXe2$49265_y zTYvaEacYH0R>UC+ZYBNe;RB60uECw;WNO)(S&n&;-Su+gwK6o#+u7dv2*!p5x$GZ&x*PHMBFrDlH|$~x5&v5A~Az6 zbmr=yxf>VKG)U9HA%Zjwgvdw>pYMy%9O-;TF5t`_IkRpU(rcZ0P&}0qd zXsH`*V&$f_G!n8F^c|*{Kp(#bn*?IS9kzaS<>t-KY+>Toc%9ygESVy`a<^esO?~a* zj#YienvDx<`k$;mM8+@-VTNId8W@Jc3Byp9~>*Ht<+j5%(Tk zn_9tFIs77v1Q0jaKI4^da1`0qhuef!^}ktrxTdeL_7EAv5N3d7h#DxIKr%sD1H=B3 z94Q}$^QP^NhBo;wrTuz9V6xl#rs@gG>Ab_Ac8&E<1r*+ox&JkL%899T!HA*nkZ&v| z`tf@kb~s)$RZfXLd9{mtt&6A4WL2NWgq#<9*t+c5Uw-yz+Pi6iKE#i#84$yEt?h%D zuBB?_wM~z;$V6&zwKGP5;5bkaLm(ag%^~ylJKPJBrrlx^KP1?wTR$YkAY^GVOG$03 zpnEzxXsmeJK+u-JdKYcSonWRpF3&u>S_JC19}K)7;4Oc?*}!?ycXe0I>`3k{`QLkI z7h=uc<9jUwRr4Ch@w(67+uk0AbKs*R^JOV8J>6 z@q&|MmW6lQXi<%iZqZWbNwBS~t_t&JYqk7iyDziehRu}(1RGWGhpKLkT;Uy!3f8q; zJhTa@`Ss7?NFR60iJ0uHQhOQ^c+tH-E6UA5R#3#WG{H*q(l!o!cWiSCU7DgWUCtjwu6Fv^fK&8@~{Nk^I?UVZG531d1{I|?$X(L zUt$crq!z*KMz%V`tx=?W2E@#BKrM>cw^w~u{ zZ?)L1wwLdx47wses&dC?P_4e-#BcU$=$+e>!Wx;Pw?Iu-1JkhwsKS zD%|Coj~Y>rn!4y|2iwRTtl}??RPkfDPrE3dOB!d zdMeDbtzFmrqI=)KfJIzD8!*V&NH})jvL1V}G;mob=-^dwBA{*?GN6Z0 zfjS5-@rObvGB@9lf9k^f z5P(gRhV~w%XZmxf)^0KhRh<4DmJV?Fb7OX?u7&Qb9YRq7R4X!Tq@(()I z16Ap@fn0U)z!46OVOmP=TBql8(%Hp&%Vr?H2(h_D8L411hC99VWdMNl=inU5weDon zc#;E!w1gV=0?0Gl;Bb>2^tlm}7qvRx>}c5woFgnKXt3#Z9Q)exH`yD2CJrOx(y>12 zCUz9?7Iva=^X~oX;|xxze`}$i7)Ei0Q%gQm;FXZp-F2*850AMkgzEPE--cfHydReN z4W28_;h0ighn~LJ_L@ zO$mA*tST$HG}%;w9iv30rO@JrHv$_c2-UN9{d#6}sfBY^zte4Gf&2?Xep>ww3^?1=!6J6whO-UqZj7z?qYxy#*YagFbAb; z0_fulzky_Hs?y67rR}NZM#n(dD=0w*={ZO0+gGK~%(U;C0fs7UA*9b@Xk-2g@#8!k zhgIR*ImHLk@wv3vemL`udkL3Io4N866sJ?12!R}L2Uu)~OisI3{7L(R)*psJxDCTv z&RC_uJ7EaS^-1@EYCscbxMCZN_3-CXJX59PAJwUXiP{Qj7BEP&Ec8yuv8^3m7QraR zaOKGs-f8c2&m$3xi30`XL0f8O--m4Sqn=|RWf{LCrj0b->oi~B3rI$+SmeQ51Df69 zds*6M9+Qn)(I+zi+8}YRI3q$LUe*(jnOVms@(|& zgvoX$8g_ZGMD%8I8@Sz(Hn^@Pq3h<)89e~G~$z5AHYHWbAuh6G0Hn!BIpga`A|s$)S0p%Fnr zp0X84UVXD5%=-e20Dh69obKj-9T2N=yAkl456^KhD5dGlPQyAHyFj%j?DIAOu(_4{{G&eWa z2_!L0K)7XG;FI9nt&f8x3&FyUyyS{)JqKo-4woYJZAT32?g2x8(5M#&sc19_Mz-*s zGVeako0kdg#fBZe{V+84nP*?$%AP!n%s1qY7b zCBk0tJD9og8wygxVL*UD6c9rQ7*NPS98hu~=zy{%!~rcI5C)VSP;x*EC6O6XETC9G zv4CO$y+9Eh_+N_!cJxHAi4?^ct7qg&b(|U&YVNtWdCMX25d^=`K`9JF=fTh!IuHuz z*c-rL?L*^V4*h^#jM!A<`kz;Y9eGNQaUe zI_wJAh1NavQh;X}^iqH_EuaB Date: Fri, 12 Sep 2025 06:55:02 +0100 Subject: [PATCH 26/60] mini mode --- app/blog/[id]/page.tsx | 10 +++++++++- app/blog/page.tsx | 13 ++++++++++++- app/components/HomePage.tsx | 11 ++++++++--- app/components/MainPageContent.tsx | 11 ++++++++++- app/components/Navbar.tsx | 12 +++++++----- app/hooks/useMiniMode.ts | 16 ++++++++++++++++ 6 files changed, 62 insertions(+), 11 deletions(-) create mode 100644 app/hooks/useMiniMode.ts diff --git a/app/blog/[id]/page.tsx b/app/blog/[id]/page.tsx index 48d55931..60caae10 100644 --- a/app/blog/[id]/page.tsx +++ b/app/blog/[id]/page.tsx @@ -1,6 +1,6 @@ import DetailClient from "@/app/components/blog/post/detail-client"; import { getPost, getRecentPosts } from "@/app/lib/sanity-data"; -import { notFound } from "next/navigation"; +import { notFound, redirect } from "next/navigation"; import { Metadata } from "next"; import type { PortableTextBlock } from "@portabletext/types"; @@ -75,9 +75,17 @@ export async function generateMetadata({ export default async function BlogPostDetailPage({ params, + searchParams, }: { params: Promise<{ id: string }>; + searchParams: Promise<{ mini?: string }>; }) { + // Redirect to home page if in mini mode + const resolvedSearchParams = await searchParams; + if (resolvedSearchParams.mini === "true") { + redirect("/?mini=true"); + } + const { id } = await params; const post = await getPost(id); if (!post) notFound(); diff --git a/app/blog/page.tsx b/app/blog/page.tsx index d9ad1589..896977a4 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -2,6 +2,7 @@ import React, { Suspense } from "react"; import { getPosts, getCategories, getCachedPosts } from "@/app/lib/sanity-data"; import HomeClient from "@/app/components/blog/home-client"; import { Metadata } from "next"; +import { redirect } from "next/navigation"; // Force dynamic rendering to ensure fresh data export const dynamic = "force-dynamic"; @@ -37,7 +38,17 @@ export async function generateMetadata(): Promise { }; } -export default async function Home() { +export default async function Home({ + searchParams, +}: { + searchParams: Promise<{ mini?: string }>; +}) { + // Redirect to home page if in mini mode + const resolvedSearchParams = await searchParams; + if (resolvedSearchParams.mini === "true") { + redirect("/?mini=true"); + } + // Fetch data from Sanity (cached to avoid duplicate fetch in metadata) const sanityPosts = await getCachedPosts(); const sanityCategories = await getCategories(); diff --git a/app/components/HomePage.tsx b/app/components/HomePage.tsx index 667d973f..e8801035 100644 --- a/app/components/HomePage.tsx +++ b/app/components/HomePage.tsx @@ -15,6 +15,7 @@ import { import WalkthroughVideo from "./WalkthroughVideo"; import { ScrollArrowLine, ScrollArrowHead } from "./ImageAssets"; import { getBannerPadding } from "../utils"; +import { useMiniMode } from "../hooks/useMiniMode"; const crimsonPro = Crimson_Pro({ subsets: ["latin"], @@ -46,6 +47,8 @@ export function HomePage({ transactionFormComponent, isRecipientFormOpen, }: HomePageProps) { + const isMiniMode = useMiniMode(); + const handleScrollToForm = () => { const formElement = document.getElementById("hero"); if (formElement) { @@ -139,8 +142,9 @@ export function HomePage({ - {/* All additional content - always visible, scroll-triggered animations */} -
+ {/* All additional content - only visible in normal mode, scroll-triggered animations */} + {!isMiniMode && ( +
-
+
+ )} ); } diff --git a/app/components/MainPageContent.tsx b/app/components/MainPageContent.tsx index 4e836e11..56a15991 100644 --- a/app/components/MainPageContent.tsx +++ b/app/components/MainPageContent.tsx @@ -31,6 +31,7 @@ import { useInjectedWallet } from "../context/InjectedWalletContext"; import { useSearchParams } from "next/navigation"; import { HomePage } from "./HomePage"; import { useNetwork } from "../context/NetworksContext"; +import { useMiniMode } from "../hooks/useMiniMode"; export function MainPageContent() { const searchParams = useSearchParams(); @@ -38,6 +39,7 @@ export function MainPageContent() { const { currentStep, setCurrentStep } = useStep(); const { isInjectedWallet, injectedReady } = useInjectedWallet(); const { selectedNetwork } = useNetwork(); + const isMiniMode = useMiniMode(); const [isPageLoading, setIsPageLoading] = useState(true); const [isFetchingRate, setIsFetchingRate] = useState(false); const [isFetchingInstitutions, setIsFetchingInstitutions] = useState(false); @@ -328,12 +330,19 @@ export function MainPageContent() { {!isInjectedWallet && }{" "} - {currentStep === STEPS.FORM ? ( + {isMiniMode ? ( + // Mini mode: Show only transaction components +
+ {transactionFormComponent} +
+ ) : currentStep === STEPS.FORM ? ( + // Normal mode: Show full homepage with marketing content ) : ( + // Normal mode: Show transaction components with padding
{transactionFormComponent}
diff --git a/app/components/Navbar.tsx b/app/components/Navbar.tsx index 4f2eb7e0..8b79c344 100644 --- a/app/components/Navbar.tsx +++ b/app/components/Navbar.tsx @@ -27,6 +27,7 @@ import Image from "next/image"; import { useNetwork } from "../context/NetworksContext"; import { useInjectedWallet } from "../context"; import { useActualTheme } from "../hooks/useActualTheme"; +import { useMiniMode } from "../hooks/useMiniMode"; export const Navbar = () => { const [mounted, setMounted] = useState(false); @@ -37,6 +38,7 @@ export const Navbar = () => { const { selectedNetwork } = useNetwork(); const { isInjectedWallet, injectedAddress } = useInjectedWallet(); const isDark = useActualTheme(); + const isMiniMode = useMiniMode(); const { ready, authenticated, user } = usePrivy(); @@ -164,8 +166,8 @@ export const Navbar = () => { /> - {/* Blog Link - Desktop Only */} - {!pathname.startsWith("/blog") && ( + {/* Blog Link - Desktop Only - Hidden in mini mode */} + {!pathname.startsWith("/blog") && !isMiniMode && (
{
)} - {/* Swap Link - Show on /blog and nested blog routes */} - {pathname.startsWith("/blog") && ( + {/* Swap Link - Show on /blog and nested blog routes - Hidden in mini mode */} + {pathname.startsWith("/blog") && !isMiniMode && (
{ Home )} - {!pathname.startsWith("/blog") && ( + {!pathname.startsWith("/blog") && !isMiniMode && ( { + return searchParams.get("mini") === "true"; + }, [searchParams]); +} From 3f9e619d0eab21747f5d1a808f437fbb876a5b76 Mon Sep 17 00:00:00 2001 From: KEM-CONSOLATION Date: Fri, 12 Sep 2025 07:18:39 +0100 Subject: [PATCH 27/60] Refactor Navbar component to conditionally handle dropdown interactions and visibility based on mini mode. Updated aria attributes for accessibility and improved rendering logic for wallet and network details. --- app/components/Navbar.tsx | 108 ++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 50 deletions(-) diff --git a/app/components/Navbar.tsx b/app/components/Navbar.tsx index 8b79c344..17bf1e44 100644 --- a/app/components/Navbar.tsx +++ b/app/components/Navbar.tsx @@ -116,7 +116,7 @@ export const Navbar = () => { >
setIsDropdownOpen(true)} + onMouseEnter={() => !isMiniMode && setIsDropdownOpen(true)} onMouseLeave={(e) => { // Only close if we're not moving to the dropdown menu const relatedTarget = e.relatedTarget as Node; @@ -130,13 +130,15 @@ export const Navbar = () => { > - { - e.preventDefault(); - setIsDropdownOpen(!isDropdownOpen); - }} - /> + {!isMiniMode && ( + { + e.preventDefault(); + setIsDropdownOpen(!isDropdownOpen); + }} + /> + )}
{/* Blog Link - Desktop Only - Hidden in mini mode */} @@ -192,7 +196,7 @@ export const Navbar = () => {
)} - {isDropdownOpen && ( + {isDropdownOpen && !isMiniMode && ( <> {/* Invisible bridge to prevent dropdown from closing when moving cursor */}
@@ -247,45 +251,49 @@ export const Navbar = () => {
{(ready && authenticated) || isInjectedWallet ? ( <> -
- -
+ {!isMiniMode && ( + <> +
+ +
-
- -
+
+ +
-
- -
+
+ +
- + - - setIsMobileDropdownOpen(false)} - /> - + + setIsMobileDropdownOpen(false)} + /> + + + )} ) : ( - !isInjectedWallet && ( + !isInjectedWallet && !isMiniMode && (
- {/* All additional content - always visible, scroll-triggered animations */} -
- - - + {/* All additional content - only visible in normal mode, scroll-triggered animations */} + {!isMiniMode && ( +
+ + + - - - - Ways you can use{" "} - - - Noblocks - - + + + + Ways you can use{" "} + + + Noblocks + + - - {(() => { - const useCases = [ - { - title: "No Crypto Experience", - items: [ - { - icon: "/images/transfer-stable-coin.svg", - text: "Transfer stablecoins to cash in any bank account", - width: 60, - height: 60, - }, - { - icon: "/images/pay-for-groceries.svg", - text: "Pay for your groceries and expenses swiftly", - width: 60, - height: 30, - }, - { - icon: "/images/spend-usdc.svg", - text: "Spend USDC/USDT comfortably with no exchange", - width: 60, - height: 30, - }, - ], - }, - { - title: "Web3 Native & Degen", - items: [ - { - icon: "/images/turn-defi-to-cash.svg", - text: "Turn your DEFI yields into cash easily", - width: 60, - height: 30, - }, - { - icon: "/images/escape-p2p.svg", - text: "Escape P2P and liquidate your cash in no time", - width: 60, - height: 30, - }, - { - icon: "/images/no-issue-dex.svg", - text: "No issues of losses or security concerns like DEXes", - width: 60, - height: 30, - }, - ], - }, - ]; + + {(() => { + const useCases = [ + { + title: "No Crypto Experience", + items: [ + { + icon: "/images/transfer-stable-coin.svg", + text: "Transfer stablecoins to cash in any bank account", + width: 60, + height: 60, + }, + { + icon: "/images/pay-for-groceries.svg", + text: "Pay for your groceries and expenses swiftly", + width: 60, + height: 30, + }, + { + icon: "/images/spend-usdc.svg", + text: "Spend USDC/USDT comfortably with no exchange", + width: 60, + height: 30, + }, + ], + }, + { + title: "Web3 Native & Degen", + items: [ + { + icon: "/images/turn-defi-to-cash.svg", + text: "Turn your DEFI yields into cash easily", + width: 60, + height: 30, + }, + { + icon: "/images/escape-p2p.svg", + text: "Escape P2P and liquidate your cash in no time", + width: 60, + height: 30, + }, + { + icon: "/images/no-issue-dex.svg", + text: "No issues of losses or security concerns like DEXes", + width: 60, + height: 30, + }, + ], + }, + ]; + + return useCases.map((category, categoryIndex) => ( +
+

+ {category.title} +

+ {category.items.map((item, itemIndex) => ( +

+ + Icon + + + {item.text} + +

+ ))} +
+ )); + })()} +
+
+ + + +

+ Rates like no other +

+

+ You have no cause for worry when it comes to rates, Noblocks + offers the best rates that beat the speed and amount for P2Ps and + other stablecoin exchange options +

+ +
- return useCases.map((category, categoryIndex) => ( -
+ {(() => { + const rateImages = [ + { + src: "/images/rates-graph.svg", + alt: "Rates Graph", + className: "hidden w-full max-w-[834px] dark:md:block", + }, + { + src: "/images/rates-graph-mobile.svg", + alt: "Rates Graph", + className: "hidden w-full dark:block dark:md:hidden", + }, + { + src: "/images/rates-graph-mobile-light-mode.svg", + alt: "Rates Graph", + className: "block w-full dark:hidden md:hidden", + }, + { + src: "/images/rates-graph-desktop-light-mode.svg", + alt: "Rates Graph", + className: + "hidden w-full max-w-[834px] md:block dark:md:hidden", + }, + ]; + + return rateImages.map((image, index) => ( +
+ {image.alt} +
+ )); + })()} + + + + + + + + + {/* Desktop/Tablet Illustration */} +
+ Liquidity Illustration +
+ {/* Mobile Illustration */} +
+ Liquidity Illustration +
+ + {/* Content */} +
+
+

+ + Power the Liquidity + + + Engine on Noblocks + +

+

+ Maximize your earnings while enabling fast and seamless + stablecoin exchanges. Specify your rate, serve urgent customers + and lead the charge to operate in a truly decentralized world. +

+ -

- {category.title} -

- {category.items.map((item, itemIndex) => ( -

- - Icon - - - {item.text} - -

- ))} -
- )); - })()} - - + Become a Liquidity Provider + +
+
+
- - -

- Rates like no other -

-

- You have no cause for worry when it comes to rates, Noblocks - offers the best rates that beat the speed and amount for P2Ps and - other stablecoin exchange options -

- -
+ +
+ +

+ + Download Noblocks + + + Mobile App + +

+

+ Your no. 1 app to change stablecoins to cash in less than{" "} + + 30s + +

+
- {(() => { - const rateImages = [ - { - src: "/images/rates-graph.svg", - alt: "Rates Graph", - className: "hidden w-full max-w-[834px] dark:md:block", - }, + const images = [ { - src: "/images/rates-graph-mobile.svg", - alt: "Rates Graph", + src: "/images/mobile-app-illustration-mobile.png", + alt: "Mobile App Illustration Mobile Dark", className: "hidden w-full dark:block dark:md:hidden", }, { - src: "/images/rates-graph-mobile-light-mode.svg", - alt: "Rates Graph", + src: "/images/mobile-app-illustration-light-mode-mobile.png", + alt: "Mobile App Illustration Mobile Light", className: "block w-full dark:hidden md:hidden", }, { - src: "/images/rates-graph-desktop-light-mode.svg", - alt: "Rates Graph", + src: "/images/mobile-app-illustration-desktop.png", + alt: "Mobile App Illustration Desktop Dark", + className: "hidden w-full max-w-[800px] dark:md:block", + }, + { + src: "/images/mobile-app-illustration-light-mode-desktop.png", + alt: "Mobile App Illustration Desktop Light", className: - "hidden w-full max-w-[834px] md:block dark:md:hidden", + "hidden w-full max-w-[800px] md:block dark:md:hidden", }, ]; - return rateImages.map((image, index) => ( -
- {image.alt} -
+ return images.map((image, index) => ( + {image.alt} )); })()} -
-
- - - - - - - {/* Desktop/Tablet Illustration */} -
- Liquidity Illustration -
- {/* Mobile Illustration */} -
- Liquidity Illustration -
- - {/* Content */} -
-
-

- - Power the Liquidity - - - Engine on Noblocks - -

-

- Maximize your earnings while enabling fast and seamless - stablecoin exchanges. Specify your rate, serve urgent customers - and lead the charge to operate in a truly decentralized world. -

- - Become a Liquidity Provider - -
-
-
- - -
- -

- - Download Noblocks - - - Mobile App - -

-

- Your no. 1 app to change stablecoins to cash in less than{" "} - - 30s - -

-
- - {(() => { - const images = [ - { - src: "/images/mobile-app-illustration-mobile.png", - alt: "Mobile App Illustration Mobile Dark", - className: "hidden w-full dark:block dark:md:hidden", - }, - { - src: "/images/mobile-app-illustration-light-mode-mobile.png", - alt: "Mobile App Illustration Mobile Light", - className: "block w-full dark:hidden md:hidden", - }, - { - src: "/images/mobile-app-illustration-desktop.png", - alt: "Mobile App Illustration Desktop Dark", - className: "hidden w-full max-w-[800px] dark:md:block", - }, - { - src: "/images/mobile-app-illustration-light-mode-desktop.png", - alt: "Mobile App Illustration Desktop Light", - className: - "hidden w-full max-w-[800px] md:block dark:md:hidden", - }, - ]; - - return images.map((image, index) => ( - {image.alt} - )); - })()} -
-
+ +
+ )}
); } diff --git a/app/components/MainPageContent.tsx b/app/components/MainPageContent.tsx index 6949cdc4..a5ae5964 100644 --- a/app/components/MainPageContent.tsx +++ b/app/components/MainPageContent.tsx @@ -37,6 +37,7 @@ import { HomePage } from "./HomePage"; import { useNetwork } from "../context/NetworksContext"; import { useBlockFestModal } from "../context/BlockFestModalContext"; import { useInjectedWallet } from "../context"; +import { useMiniMode } from "../hooks/useMiniMode"; const PageLayout = ({ authenticated, @@ -45,6 +46,7 @@ const PageLayout = ({ transactionFormComponent, isRecipientFormOpen, isBlockFestReferral, + isMiniMode, }: { authenticated: boolean; ready: boolean; @@ -52,6 +54,7 @@ const PageLayout = ({ transactionFormComponent: React.ReactNode; isRecipientFormOpen: boolean; isBlockFestReferral: boolean; + isMiniMode: boolean; }) => { const { claimed, resetClaim } = useBlockFestClaim(); const { user } = usePrivy(); @@ -86,7 +89,12 @@ const PageLayout = ({ - {currentStep === STEPS.FORM ? ( + {isMiniMode ? ( + // Mini mode: Show only transaction components +
+ {transactionFormComponent} +
+ ) : currentStep === STEPS.FORM ? ( )} diff --git a/app/components/Navbar.tsx b/app/components/Navbar.tsx index 17cff2aa..a209d9f6 100644 --- a/app/components/Navbar.tsx +++ b/app/components/Navbar.tsx @@ -27,6 +27,7 @@ import Image from "next/image"; import { useNetwork } from "../context/NetworksContext"; import { useInjectedWallet } from "../context"; import { useActualTheme } from "../hooks/useActualTheme"; +import { useMiniMode } from "../hooks/useMiniMode"; export const Navbar = () => { const [mounted, setMounted] = useState(false); @@ -37,6 +38,7 @@ export const Navbar = () => { const { selectedNetwork } = useNetwork(); const { isInjectedWallet, injectedAddress } = useInjectedWallet(); const isDark = useActualTheme(); + const isMiniMode = useMiniMode(); const { ready, authenticated, user } = usePrivy(); @@ -176,8 +178,8 @@ export const Navbar = () => { )} - {/* Blog Link - Desktop Only */} - {!pathname.startsWith("/blog") && ( + {/* Blog Link - Desktop Only - Hidden in mini mode */} + {!pathname.startsWith("/blog") && !isMiniMode && (
{
)} - {/* Swap Link - Show on /blog and nested blog routes */} - {pathname.startsWith("/blog") && ( + {/* Swap Link - Show on /blog and nested blog routes - Hidden in mini mode */} + {pathname.startsWith("/blog") && !isMiniMode && (
{ Home )} - {!pathname.startsWith("/blog") && ( + {!pathname.startsWith("/blog") && !isMiniMode && ( { + return searchParams.get("mini") === "true"; + }, [searchParams]); +} From d9d95639e810f53961c10ffa6bda8d3ce4363516 Mon Sep 17 00:00:00 2001 From: KEM-CONSOLATION Date: Fri, 12 Sep 2025 07:18:39 +0100 Subject: [PATCH 55/60] Refactor Navbar component to conditionally handle dropdown interactions and visibility based on mini mode. Updated aria attributes for accessibility and improved rendering logic for wallet and network details. --- app/components/MainPageContent.tsx | 50 ++++++------- app/components/Navbar.tsx | 113 ++++++++++++++++------------- 2 files changed, 88 insertions(+), 75 deletions(-) diff --git a/app/components/MainPageContent.tsx b/app/components/MainPageContent.tsx index a5ae5964..66c6e6b5 100644 --- a/app/components/MainPageContent.tsx +++ b/app/components/MainPageContent.tsx @@ -71,7 +71,7 @@ const PageLayout = ({ const walletAddress = isInjectedWallet ? injectedAddress : user?.linkedAccounts.find((account) => account.type === "smart_wallet") - ?.address; + ?.address; return ( <> @@ -158,30 +158,30 @@ export function MainPageContent() { // State props for child components const stateProps: StateProps = { - formValues, - setFormValues, - - rate, - setRate, - isFetchingRate, - setIsFetchingRate, - rateError, - setRateError, - - institutions, - setInstitutions, - isFetchingInstitutions, - setIsFetchingInstitutions, - - selectedRecipient, - setSelectedRecipient, - - orderId, - setOrderId, - setCreatedAt, - setTransactionStatus, - } - + formValues, + setFormValues, + + rate, + setRate, + isFetchingRate, + setIsFetchingRate, + rateError, + setRateError, + + institutions, + setInstitutions, + isFetchingInstitutions, + setIsFetchingInstitutions, + + selectedRecipient, + setSelectedRecipient, + + orderId, + setOrderId, + setCreatedAt, + setTransactionStatus, + } + useEffect(function setPageLoadingState() { setOrderId(""); setIsPageLoading(false); diff --git a/app/components/Navbar.tsx b/app/components/Navbar.tsx index a209d9f6..861fa59f 100644 --- a/app/components/Navbar.tsx +++ b/app/components/Navbar.tsx @@ -118,7 +118,7 @@ export const Navbar = () => { >
setIsDropdownOpen(true)} + onMouseEnter={() => !isMiniMode && setIsDropdownOpen(true)} onMouseLeave={(e) => { // Only close if we're not moving to the dropdown menu const relatedTarget = e.relatedTarget as Node; @@ -132,12 +132,20 @@ export const Navbar = () => { > - { - e.preventDefault(); - setIsDropdownOpen(!isDropdownOpen); - }} - /> + {!isMiniMode && ( + { + e.preventDefault(); + setIsDropdownOpen(!isDropdownOpen); + }} + /> + )}
{/* Home Link */} @@ -195,16 +205,15 @@ export const Navbar = () => {
Swap
)} - {isDropdownOpen && ( + {isDropdownOpen && !isMiniMode && ( <> {/* Invisible bridge to prevent dropdown from closing when moving cursor */}
@@ -259,45 +268,49 @@ export const Navbar = () => {
{(ready && authenticated) || isInjectedWallet ? ( <> -
- -
+ {!isMiniMode && ( + <> +
+ +
-
- -
+
+ +
-
- -
+
+ +
- + - - setIsMobileDropdownOpen(false)} - /> - + + setIsMobileDropdownOpen(false)} + /> + + + )} ) : ( - !isInjectedWallet && ( + !isInjectedWallet && !isMiniMode && (
- {/* All additional content - only visible in normal mode, scroll-triggered animations */} - {!isMiniMode && ( -
+ {/* All additional content - scroll-triggered animations */} +
-
- )} +
); } diff --git a/app/components/MainPageContent.tsx b/app/components/MainPageContent.tsx index 66c6e6b5..e59d72ee 100644 --- a/app/components/MainPageContent.tsx +++ b/app/components/MainPageContent.tsx @@ -37,7 +37,6 @@ import { HomePage } from "./HomePage"; import { useNetwork } from "../context/NetworksContext"; import { useBlockFestModal } from "../context/BlockFestModalContext"; import { useInjectedWallet } from "../context"; -import { useMiniMode } from "../hooks/useMiniMode"; const PageLayout = ({ authenticated, @@ -46,7 +45,6 @@ const PageLayout = ({ transactionFormComponent, isRecipientFormOpen, isBlockFestReferral, - isMiniMode, }: { authenticated: boolean; ready: boolean; @@ -54,7 +52,6 @@ const PageLayout = ({ transactionFormComponent: React.ReactNode; isRecipientFormOpen: boolean; isBlockFestReferral: boolean; - isMiniMode: boolean; }) => { const { claimed, resetClaim } = useBlockFestClaim(); const { user } = usePrivy(); @@ -89,12 +86,7 @@ const PageLayout = ({ - {isMiniMode ? ( - // Mini mode: Show only transaction components -
- {transactionFormComponent} -
- ) : currentStep === STEPS.FORM ? ( + {currentStep === STEPS.FORM ? ( )}
diff --git a/app/components/Navbar.tsx b/app/components/Navbar.tsx index dcfe4334..12d09495 100644 --- a/app/components/Navbar.tsx +++ b/app/components/Navbar.tsx @@ -27,7 +27,6 @@ import Image from "next/image"; import { useNetwork } from "../context/NetworksContext"; import { useInjectedWallet } from "../context"; import { useActualTheme } from "../hooks/useActualTheme"; -import { useMiniMode } from "../hooks/useMiniMode"; export const Navbar = () => { const [mounted, setMounted] = useState(false); @@ -38,7 +37,6 @@ export const Navbar = () => { const { selectedNetwork } = useNetwork(); const { isInjectedWallet, injectedAddress } = useInjectedWallet(); const isDark = useActualTheme(); - const isMiniMode = useMiniMode(); const { ready, authenticated, user } = usePrivy(); @@ -118,7 +116,7 @@ export const Navbar = () => { >
!isMiniMode && setIsDropdownOpen(true)} + onMouseEnter={() => setIsDropdownOpen(true)} onMouseLeave={(e) => { // Only close if we're not moving to the dropdown menu const relatedTarget = e.relatedTarget as Node; @@ -132,15 +130,12 @@ export const Navbar = () => { > - {!isMiniMode && ( - { - e.preventDefault(); - setIsDropdownOpen(!isDropdownOpen); - }} - /> - )} + { + e.preventDefault(); + setIsDropdownOpen(!isDropdownOpen); + }} + />
- {/* Blog Link - Desktop Only - Hidden in mini mode */} - {!pathname.startsWith("/blog") && !isMiniMode && ( -
- - Blog - -
- )} {/* Home Link */} {pathname !== "/" && (
@@ -194,9 +176,8 @@ export const Navbar = () => {
)} - - {/* Blog Link - Desktop Only - Hidden in mini mode */} - {!pathname.startsWith("/blog") && !isMiniMode && ( + {/* Blog Link - Desktop Only */} + {!pathname.startsWith("/blog") && (
{
)} - {/* Swap Link - Show on /blog and nested blog routes - Hidden in mini mode */} - {pathname.startsWith("/blog") && !isMiniMode && ( + {/* Swap Link - Show on /blog and nested blog routes */} + {pathname.startsWith("/blog") && (
{
)} - {isDropdownOpen && !isMiniMode && ( + {isDropdownOpen && ( <> {/* Invisible bridge to prevent dropdown from closing when moving cursor */}
@@ -242,7 +223,7 @@ export const Navbar = () => { Home )} - {!pathname.startsWith("/blog") && !isMiniMode && ( + {!pathname.startsWith("/blog") && ( {
+
{(ready && authenticated) || isInjectedWallet ? ( <> - {!isMiniMode && ( - <> -
- -
+
+ +
-
- -
+
+ +
-
- -
+
+ +
- + - - setIsMobileDropdownOpen(false)} - /> - - - )} + + setIsMobileDropdownOpen(false)} + /> + ) : ( !isInjectedWallet && ( diff --git a/app/context/BaseAppContext.tsx b/app/context/BaseAppContext.tsx new file mode 100644 index 00000000..951be835 --- /dev/null +++ b/app/context/BaseAppContext.tsx @@ -0,0 +1,182 @@ +"use client"; +import { + ReactNode, + createContext, + useContext, + useState, + useEffect, + Suspense, +} from "react"; +import { useSearchParams } from "next/navigation"; + +interface BaseAppContextType { + isBaseApp: boolean; + isFarcaster: boolean; + baseAppWallet: string | null; + baseAppReady: boolean; + sdk: any | null; +} + +const BaseAppContext = createContext({ + isBaseApp: false, + isFarcaster: false, + baseAppWallet: null, + baseAppReady: false, + sdk: null, +}); + +function BaseAppProviderContent({ children }: { children: ReactNode }) { + const searchParams = useSearchParams(); + + // Always start with false to ensure server/client hydration match + // We'll update these in useEffect after mount + const [isBaseAppEnv, setIsBaseAppEnv] = useState(false); + const [isFarcasterEnv, setIsFarcasterEnv] = useState(false); + const [baseAppWallet, setBaseAppWallet] = useState(null); + const [baseAppReady, setBaseAppReady] = useState(false); + const [sdk, setSdk] = useState(null); + const [isMounted, setIsMounted] = useState(false); + + useEffect(() => { + setIsMounted(true); + + const initBaseApp = async () => { + // Check for query params for local testing (including Farcaster pattern) + const baseAppParam = searchParams?.get("baseApp"); + const miniParam = searchParams?.get("mini"); + const miniAppParam = searchParams?.get("miniApp"); + const shouldUseForTesting = baseAppParam === "true" || miniParam === "true" || miniAppParam === "true"; + + if (typeof window === "undefined") { + return; + } + + // Check URL query param and pathname (Farcaster pattern: /mini pathname) + const urlParams = new URLSearchParams(window.location.search); + const urlPathname = window.location.pathname; + const hasBaseAppParam = urlParams.get("baseApp") === "true" || urlParams.get("mini") === "true" || urlParams.get("miniApp") === "true"; + const hasMiniPathname = urlPathname.startsWith("/mini"); // Farcaster docs pattern + + // Check for Base App MiniKit API + const hasMinikit = !!(window as any).minikit; + + // Check user agent for Base App/Farcaster + const userAgent = window.navigator?.userAgent?.toLowerCase() || ""; + const hasBaseAppUA = userAgent.includes("baseapp"); + const hasFarcasterUA = userAgent.includes("farcaster") || userAgent.includes("warpcast"); + + if (hasBaseAppParam || hasMiniPathname || hasMinikit || hasBaseAppUA) { + setIsBaseAppEnv(true); + } + if (hasFarcasterUA || hasMiniPathname) { + setIsFarcasterEnv(true); + } + + try { + // Import and initialize Farcaster MiniApp SDK (works for both Farcaster and Base App) + const { sdk: farcasterSdk } = await import("@farcaster/miniapp-sdk"); + setSdk(farcasterSdk); + + try { + await farcasterSdk.actions.ready(); + setBaseAppReady(true); + } catch (readyError) { + // ready() may fail if not in actual mini app environment + console.warn("[BaseApp/Farcaster] SDK ready() call (may fail outside mini app):", readyError); + // For testing, mark as ready anyway + if (shouldUseForTesting) { + setBaseAppReady(true); + } + } + + // Check if we're actually in a Mini App using SDK method + let isInMiniApp = false; + try { + isInMiniApp = await farcasterSdk.isInMiniApp(); + } catch (error) { + console.warn("[BaseApp/Farcaster] isInMiniApp() check failed:", error); + } + + // Determine if it's Farcaster or Base App + let isFarcaster = false; + let isBaseApp = false; + + if (isInMiniApp || shouldUseForTesting) { + try { + const context = await farcasterSdk.context; + const platform = (context as any)?.client?.platformType; + const userAgent = window.navigator?.userAgent?.toLowerCase() || ""; + + // Check if it's Farcaster (Warpcast, etc.) + if (userAgent.includes("farcaster") || userAgent.includes("warpcast")) { + isFarcaster = true; + } else if (userAgent.includes("baseapp") || (window as any).minikit) { + // Check if it's Base App + isBaseApp = true; + } else if (platform === "mobile" || platform === "web") { + // Default to Farcaster if in mini app but platform type is generic + isFarcaster = true; + } + + setIsFarcasterEnv(isFarcaster); + setIsBaseAppEnv(isBaseApp || shouldUseForTesting); + + // Extract wallet address from user context + const walletAddress = + (context as any)?.user?.custodyAddress || + (context as any)?.user?.verifications?.[0] || + null; + + if (walletAddress) { + setBaseAppWallet(walletAddress); + console.log("[BaseApp/Farcaster] Wallet address extracted:", walletAddress); + } + } catch (error) { + console.warn("[BaseApp/Farcaster] Failed to get context:", error); + // Default to Base App for testing + if (shouldUseForTesting) { + setIsBaseAppEnv(true); + } + } + } else if (shouldUseForTesting) { + // For testing mode, default to Base App + setIsBaseAppEnv(true); + setBaseAppReady(true); + } + } catch (error) { + console.error("[BaseApp/Farcaster] Failed to initialize SDK:", error); + // For local testing, mark as ready even without SDK + if (shouldUseForTesting) { + setIsBaseAppEnv(true); + setBaseAppReady(true); + } + } + }; + + initBaseApp(); + }, [searchParams]); + + return ( + + {children} + + ); +} + +export const BaseAppProvider = ({ children }: { children: ReactNode }) => { + return ( + + {children} + + ); +}; + +export const useBaseApp = () => useContext(BaseAppContext); diff --git a/app/context/InjectedWalletContext.tsx b/app/context/InjectedWalletContext.tsx index 9265edd5..a7affb57 100644 --- a/app/context/InjectedWalletContext.tsx +++ b/app/context/InjectedWalletContext.tsx @@ -41,30 +41,24 @@ function InjectedWalletProviderContent({ children }: { children: ReactNode }) { setIsInjectedWallet(shouldUse); - if (shouldUse) { + if (shouldUse && window.ethereum) { try { let ethereumProvider = window.ethereum; - let client; - // Try to use Farcaster SDK's Ethereum provider first + // Try to use Farcaster SDK's Ethereum provider if we're in a mini app try { - const farcasterProvider = await sdk.wallet.getEthereumProvider(); - if (farcasterProvider) { - ethereumProvider = farcasterProvider; - console.log("Using Farcaster SDK Ethereum provider"); + const isInMiniApp = await sdk.isInMiniApp(); + if (isInMiniApp) { + const farcasterProvider = await sdk.wallet.getEthereumProvider(); + if (farcasterProvider && typeof farcasterProvider.request === "function") { + ethereumProvider = farcasterProvider; + } } - } catch (farcasterError) { - console.warn( - "Farcaster SDK provider not available, falling back to window.ethereum:", - farcasterError, - ); - } - - if (!ethereumProvider) { - throw new Error("No Ethereum provider available"); + } catch { + // Not in mini app or Farcaster SDK provider not available, use window.ethereum } - client = createWalletClient({ + const client = createWalletClient({ transport: custom(ethereumProvider as any), }); @@ -117,7 +111,6 @@ function InjectedWalletProviderContent({ children }: { children: ReactNode }) { } } }; - // Add a small delay to ensure the page is fully loaded let cancelled = false; diff --git a/app/context/index.ts b/app/context/index.ts index e82de079..98802e53 100644 --- a/app/context/index.ts +++ b/app/context/index.ts @@ -12,3 +12,4 @@ export { BlockFestModalProvider, useBlockFestModal, } from "./BlockFestModalContext"; +export { BaseAppProvider, useBaseApp } from "./BaseAppContext"; diff --git a/app/early-ready.tsx b/app/early-ready.tsx index aa7af623..5b45445d 100644 --- a/app/early-ready.tsx +++ b/app/early-ready.tsx @@ -2,31 +2,57 @@ import { useEffect } from "react"; import { sdk } from "@farcaster/miniapp-sdk"; +/** + * Early bootstrap component for Farcaster/Base App mini apps + * Follows Farcaster docs pattern with /mini pathname check for mobile compatibility + * Always calls ready() unconditionally (required for Base App preview tools) + */ export function EarlyReady() { useEffect(() => { - if ( - typeof window !== "undefined" && - !(window as any).__farcasterMiniAppReady - ) { - // Notify Farcaster SDK - sdk.actions.ready(); + if (typeof window === "undefined") return; - // Defensive fallback for iframe hosts + // Check if already initialized + if ((window as any).__farcasterMiniAppReady) return; + + // Check for mini app conditions (Farcaster docs pattern + Base App) + const url = new URL(window.location.href); + const isMini = + url.pathname.startsWith("/mini") || + url.searchParams.get("miniApp") === "true" || + url.searchParams.get("mini") === "true" || + url.searchParams.get("baseApp") === "true" || + !!(window as any).minikit || // Base App MiniKit + window.navigator?.userAgent?.toLowerCase().includes("baseapp") || + window.navigator?.userAgent?.toLowerCase().includes("farcaster") || + window.navigator?.userAgent?.toLowerCase().includes("warpcast") || + window.top !== window.self; // In iframe + + + if (isMini || true) { // Always call for Base App compatibility try { - if (window.parent && window.top !== window.self) { - const msgs = [ - { type: "farcaster:ready" }, - { type: "miniapp:ready" }, - { type: "frame:ready" }, - { type: "farcaster:miniapp:ready" }, - ]; - msgs.forEach((m) => { - window.parent!.postMessage(m, "*"); - }); - } - } catch {} + // Notify Farcaster SDK + sdk.actions.ready(); + + // Defensive fallback for iframe hosts + try { + if (window.parent && window.top !== window.self) { + const msgs = [ + { type: "farcaster:ready" }, + { type: "miniapp:ready" }, + { type: "frame:ready" }, + { type: "farcaster:miniapp:ready" }, + ]; + msgs.forEach((m) => { + window.parent!.postMessage(m, "*"); + }); + } + } catch { } - (window as any).__farcasterMiniAppReady = true; + (window as any).__farcasterMiniAppReady = true; + } catch (error) { + // May fail if not in actual mini app environment (expected) + console.warn("[EarlyReady] SDK ready() call failed (expected outside mini app):", error); + } } }, []); diff --git a/app/hooks/useMiniMode.ts b/app/hooks/useMiniMode.ts deleted file mode 100644 index f1687b9e..00000000 --- a/app/hooks/useMiniMode.ts +++ /dev/null @@ -1,38 +0,0 @@ -"use client"; - -import { useSearchParams } from "next/navigation"; -import { useState, useEffect } from "react"; -import { sdk } from "@farcaster/miniapp-sdk"; - -/** - * Custom hook to detect if the app is in mini mode (Farcaster Mini App) - * Uses the official Farcaster SDK method for reliable detection - * @see https://miniapps.farcaster.xyz/docs/sdk/is-in-mini-app - * @returns boolean indicating if mini mode is active - */ -export function useMiniMode(): boolean { - const searchParams = useSearchParams(); - const [isMiniApp, setIsMiniApp] = useState(false); - - useEffect(() => { - // Check for explicit mini mode query parameter (for testing) - if (searchParams.get("mini") === "true") { - setIsMiniApp(true); - return; - } - - // Use official Farcaster SDK method for detection - // This is the recommended way to detect Mini App environments - // https://miniapps.farcaster.xyz/docs/sdk/is-in-mini-app - sdk.isInMiniApp() - .then((result) => { - setIsMiniApp(result); - }) - .catch(() => { - // Fallback to false if detection fails - setIsMiniApp(false); - }); - }, [searchParams]); - - return isMiniApp; -} diff --git a/app/layout.tsx b/app/layout.tsx index bb4a3932..f57c3d50 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -4,17 +4,8 @@ import type { Metadata } from "next"; import { Inter } from "next/font/google"; import Script from "next/script"; import Providers from "./providers"; -import MainContent from "./mainContent"; -import { - Footer, - Navbar, - LayoutWrapper, - PWAInstall, - NoticeBanner, -} from "./components"; +import { AppLayout } from "./components"; import { EarlyReady } from "./early-ready"; -import { MiniKitContextProvider } from "@/providers/MiniKitProvider"; -import config from "./lib/config"; export const dynamic = "force-static"; @@ -34,15 +25,23 @@ export const metadata: Metadata = { title: "Noblocks", }, other: { + 'fc:miniapp': JSON.stringify({ + version: 'next', + imageUrl: 'https://noblocks.xyz/icons/android-chrome-192x192.png', + button: { + title: `Launch Noblocks`, + action: { + type: 'launch_frame', + name: 'Noblocks', + url: 'https://noblocks.xyz', + splashImageUrl: 'https://noblocks.xyz/images/noblocks-bg-image.png', + splashBackgroundColor: '#8B85F4', + }, + }, + }), "mobile-web-app-capable": "yes", "msapplication-TileColor": "#317EFB", "msapplication-tap-highlight": "no", - - "fc:frame": "vNext", - "fc:frame:image": `${config.publicUrl ?? "https://noblocks.xyz"}/images/og-image.jpg`, - "fc:frame:button:1": "Open App", - "fc:frame:button:1:action": "link", - "fc:frame:button:1:target": `${config.publicUrl ?? "https://noblocks.xyz"}`, }, applicationName: "Noblocks", category: "Finance", @@ -251,32 +250,16 @@ export default function RootLayout({ className={`${inter.className} overflow-x-hidden`} suppressHydrationWarning > + - - - -
-
- - {config.noticeBannerText && ( - - )} -
- }> - {children} - - - -
-
-
+ /> + + {children} + ); diff --git a/app/lib/config.ts b/app/lib/config.ts index 5f23a9c3..372f6983 100644 --- a/app/lib/config.ts +++ b/app/lib/config.ts @@ -46,6 +46,10 @@ const config: Config = { blockfestEndDate: process.env.NEXT_PUBLIC_BLOCKFEST_END_DATE || "2025-10-11T23:59:00+01:00", supabaseRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY || "", + baseBuilderOwnerAddress: process.env.BASE_BUILDER_OWNER_ADDRESS || "", + baseAppHeader: process.env.BASE_APP_HEADER || "", + baseAppPayload: process.env.BASE_APP_PAYLOAD || "", + baseAppSignature: process.env.BASE_APP_SIGNATURE || "", }; export default config; diff --git a/app/pages/TransactionForm.tsx b/app/pages/TransactionForm.tsx index 2f7117a0..af5b9e1b 100644 --- a/app/pages/TransactionForm.tsx +++ b/app/pages/TransactionForm.tsx @@ -37,6 +37,7 @@ import { useInjectedWallet, useNetwork, useTokens, + useBaseApp, } from "../context"; /** @@ -66,6 +67,7 @@ export const TransactionForm = ({ const { selectedNetwork } = useNetwork(); const { smartWalletBalance, injectedWalletBalance, isLoading } = useBalance(); const { isInjectedWallet, injectedAddress } = useInjectedWallet(); + const { isBaseApp, isFarcaster, baseAppWallet } = useBaseApp(); const { allTokens } = useTokens(); const embeddedWalletAddress = wallets.find( @@ -110,11 +112,23 @@ export const TransactionForm = ({ dependencies: [selectedNetwork], }); - const activeWallet = isInjectedWallet + // Prioritize wallet: Base App/Farcaster > Injected > Smart Wallet + const baseAppWalletObj = (isBaseApp || isFarcaster) && baseAppWallet + ? { address: baseAppWallet } + : null; + + const injectedWalletObj = isInjectedWallet ? { address: injectedAddress } + : null; + + const smartWalletObj = (isBaseApp || isFarcaster) || isInjectedWallet + ? null : user?.linkedAccounts.find((account) => account.type === "smart_wallet"); - const activeBalance = isInjectedWallet + const activeWallet = baseAppWalletObj || injectedWalletObj || smartWalletObj; + + // Balance priority: Base App uses injected balance (since it uses injected provider), then smart wallet + const activeBalance = (baseAppWalletObj || injectedWalletObj) ? injectedWalletBalance : smartWalletBalance; @@ -670,11 +684,10 @@ export const TransactionForm = ({ } }} value={formattedSentAmount} - className={`w-full rounded-xl border-b border-transparent bg-transparent py-2 text-2xl outline-none transition-all placeholder:text-gray-400 focus:outline-none disabled:cursor-not-allowed dark:placeholder:text-white/30 ${ - authenticated && (amountSent > balance || errors.amountSent) - ? "text-red-500 dark:text-red-500" - : "text-neutral-900 dark:text-white/80" - }`} + className={`w-full rounded-xl border-b border-transparent bg-transparent py-2 text-2xl outline-none transition-all placeholder:text-gray-400 focus:outline-none disabled:cursor-not-allowed dark:placeholder:text-white/30 ${authenticated && (amountSent > balance || errors.amountSent) + ? "text-red-500 dark:text-red-500" + : "text-neutral-900 dark:text-white/80" + }`} placeholder="0" title="Enter amount to send" /> @@ -692,16 +705,16 @@ export const TransactionForm = ({
{(errors.amountSent || (authenticated && totalRequired > balance)) && ( - - {errors.amountSent?.message || - (authenticated && totalRequired > balance - ? `Insufficient balance${senderFeeAmount > 0 ? ` (includes ${formatNumberWithCommas(senderFeeAmount)} ${token} fee)` : ""}` - : null)} - - )} + + {errors.amountSent?.message || + (authenticated && totalRequired > balance + ? `Insufficient balance${senderFeeAmount > 0 ? ` (includes ${formatNumberWithCommas(senderFeeAmount)} ${token} fee)` : ""}` + : null)} + + )} {/* Arrow showing swap direction */}
@@ -756,11 +769,10 @@ export const TransactionForm = ({ } }} value={formattedReceivedAmount} - className={`w-full rounded-xl border-b border-transparent bg-transparent py-2 text-2xl outline-none transition-all placeholder:text-gray-400 focus:outline-none disabled:cursor-not-allowed dark:placeholder:text-white/30 ${ - errors.amountReceived - ? "text-red-500 dark:text-red-500" - : "text-neutral-900 dark:text-white/80" - }`} + className={`w-full rounded-xl border-b border-transparent bg-transparent py-2 text-2xl outline-none transition-all placeholder:text-gray-400 focus:outline-none disabled:cursor-not-allowed dark:placeholder:text-white/30 ${errors.amountReceived + ? "text-red-500 dark:text-red-500" + : "text-neutral-900 dark:text-white/80" + }`} placeholder="0" title="Enter amount to receive" /> @@ -809,11 +821,10 @@ export const TransactionForm = ({ formMethods.setValue("memo", e.target.value); }} value={formMethods.watch("memo")} - className={`min-h-11 w-full rounded-xl border border-gray-300 bg-transparent py-2 pl-9 pr-4 text-sm transition-all placeholder:text-text-placeholder focus-within:border-gray-400 focus:outline-none disabled:cursor-not-allowed dark:border-white/20 dark:bg-input-focus dark:placeholder:text-white/30 dark:focus-within:border-white/40 ${ - errors.memo - ? "text-red-500 dark:text-red-500" - : "text-text-body dark:text-white/80" - }`} + className={`min-h-11 w-full rounded-xl border border-gray-300 bg-transparent py-2 pl-9 pr-4 text-sm transition-all placeholder:text-text-placeholder focus-within:border-gray-400 focus:outline-none disabled:cursor-not-allowed dark:border-white/20 dark:bg-input-focus dark:placeholder:text-white/30 dark:focus-within:border-white/40 ${errors.memo + ? "text-red-500 dark:text-red-500" + : "text-text-body dark:text-white/80" + }`} placeholder="Add description (optional)" maxLength={25} /> diff --git a/app/pages/TransactionPreview.tsx b/app/pages/TransactionPreview.tsx index 19cadd77..667dbb9f 100644 --- a/app/pages/TransactionPreview.tsx +++ b/app/pages/TransactionPreview.tsx @@ -36,7 +36,7 @@ import { createPublicClient, http, } from "viem"; -import { useBalance, useInjectedWallet, useStep } from "../context"; +import { useBalance, useInjectedWallet, useStep, useBaseApp } from "../context"; import { fetchAggregatorPublicKey, saveTransaction } from "../api/aggregator"; import { trackEvent } from "../hooks/analytics/client"; @@ -62,6 +62,7 @@ export const TransactionPreview = ({ const { client } = useSmartWallets(); const { isInjectedWallet, injectedAddress, injectedProvider, injectedReady } = useInjectedWallet(); + const { isBaseApp, isFarcaster, baseAppWallet } = useBaseApp(); const { selectedNetwork } = useNetwork(); const { allTokens } = useTokens(); @@ -116,17 +117,23 @@ export const TransactionPreview = ({ (t) => t.symbol.toUpperCase() === token.toUpperCase(), )?.decimals; + // Prioritize wallet: Base App/Farcaster > Injected > Smart Wallet + const baseAppWalletObj = (isBaseApp || isFarcaster) && baseAppWallet + ? { address: baseAppWallet, type: "base_app_wallet" } + : null; + const injectedWallet = isInjectedWallet ? { address: injectedAddress, type: "injected_wallet" } : null; - const smartWallet = isInjectedWallet + const smartWallet = (isBaseApp || isFarcaster) || isInjectedWallet ? null : user?.linkedAccounts.find((account) => account.type === "smart_wallet"); - const activeWallet = injectedWallet || smartWallet; + const activeWallet = baseAppWalletObj || injectedWallet || smartWallet; - const balance = injectedWallet + // Balance priority: Base App uses injected balance (since it uses injected provider), then smart wallet + const balance = (baseAppWalletObj || injectedWallet) ? injectedWalletBalance?.balances[token] || 0 : smartWalletBalance?.balances[token] || 0; @@ -190,10 +197,11 @@ export const TransactionPreview = ({ const createOrder = async () => { try { - if (isInjectedWallet && injectedProvider) { - // Injected wallet + + if ((isBaseApp || isFarcaster || isInjectedWallet) && injectedProvider) { + // Base App/Farcaster/Injected wallet if (!injectedReady) { - throw new Error("Injected wallet not ready"); + throw new Error("Wallet not ready"); } const params = await prepareCreateOrderParams(); @@ -270,7 +278,7 @@ export const TransactionPreview = ({ trackEvent("Swap started", { "Entry point": "Transaction preview", - "Wallet type": "Injected wallet", + "Wallet type": isBaseApp ? "Base App wallet" : isFarcaster ? "Farcaster wallet" : "Injected wallet", }); } else { // Smart wallet @@ -610,9 +618,8 @@ export const TransactionPreview = ({ ) : ( )}

Create Order

diff --git a/app/pages/TransactionStatus.tsx b/app/pages/TransactionStatus.tsx index 5f64c26a..d40d32cb 100644 --- a/app/pages/TransactionStatus.tsx +++ b/app/pages/TransactionStatus.tsx @@ -49,7 +49,7 @@ import { trackEvent } from "../hooks/analytics/client"; import { PDFReceipt } from "../components/PDFReceipt"; import { pdf } from "@react-pdf/renderer"; import { CancelCircleIcon, CheckmarkCircle01Icon } from "hugeicons-react"; -import { useBalance, useInjectedWallet, useNetwork } from "../context"; +import { useBalance, useInjectedWallet, useNetwork, useBaseApp } from "../context"; import { usePrivy } from "@privy-io/react-auth"; import { TransactionHelperText } from "../components/TransactionHelperText"; import { useConfetti } from "../hooks/useConfetti"; @@ -118,6 +118,7 @@ export function TransactionStatus({ const { refreshBalance, smartWalletBalance, injectedWalletBalance } = useBalance(); const { isInjectedWallet, injectedAddress } = useInjectedWallet(); + const { isBaseApp, isFarcaster, baseAppWallet } = useBaseApp(); const { user, getAccessToken } = usePrivy(); const { setRocketStatus } = useRocketStatus(); @@ -272,11 +273,11 @@ export function TransactionStatus({ if (transactionStatus !== status) { setTransactionStatus( status as - | "processing" - | "fulfilled" - | "validated" - | "settled" - | "refunded", + | "processing" + | "fulfilled" + | "validated" + | "settled" + | "refunded", ); } @@ -350,9 +351,18 @@ export function TransactionStatus({ supportedInstitutions, ); - const balance = isInjectedWallet - ? smartWalletBalance?.balances[token] || 0 - : injectedWalletBalance?.balances[token] || 0; + // Balance priority: Base App uses injected balance (since it uses injected provider), then smart wallet + const balance = (isBaseApp || isFarcaster || isInjectedWallet) + ? injectedWalletBalance?.balances[token] || 0 + : smartWalletBalance?.balances[token] || 0; + + const walletType = isBaseApp + ? "Base App wallet" + : isFarcaster + ? "Farcaster wallet" + : isInjectedWallet + ? "Injected" + : "Smart wallet"; const eventData = { Amount: amount, @@ -362,7 +372,7 @@ export function TransactionStatus({ "Wallet balance": balance, "Swap date": createdAt, "Transaction duration": calculateDuration(createdAt, completedAt), - "Wallet type": isInjectedWallet ? "Injected" : "Smart wallet", + "Wallet type": walletType, }; if (["validated", "settled"].includes(transactionStatus)) { @@ -494,15 +504,14 @@ export function TransactionStatus({

{transactionStatus}

@@ -639,10 +648,10 @@ export function TransactionStatus({ const getPaymentMessage = () => { const formattedRecipientName = recipientName ? recipientName - .toLowerCase() - .split(" ") - .map((name) => name.charAt(0).toUpperCase() + name.slice(1)) - .join(" ") + .toLowerCase() + .split(" ") + .map((name) => name.charAt(0).toUpperCase() + name.slice(1)) + .join(" ") : ""; if (transactionStatus === "refunded") { @@ -847,17 +856,17 @@ export function TransactionStatus({ orderDetails, orderId, ) && ( - - - - )} + + + + )} @@ -103,6 +105,7 @@ function ContextProviders({ children }: { children: ReactNode }) { + ); } diff --git a/app/types.ts b/app/types.ts index add6e914..15ad167e 100644 --- a/app/types.ts +++ b/app/types.ts @@ -268,6 +268,10 @@ export type Config = { supabaseUrl: string; supabaseRoleKey: string; appUrl: string; + baseBuilderOwnerAddress: string; + baseAppHeader: string; + baseAppPayload: string; + baseAppSignature: string; aggregatorUrl: string; privyAppId: string; thirdwebClientId: string; diff --git a/next.config.mjs b/next.config.mjs index defe5435..e22624ec 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -17,13 +17,14 @@ const nextConfig = { value: "nosniff", }, { - key: "X-Frame-Options", - value: "ALLOWALL", + "key": "X-Frame-Options", + "value": "" }, + { key: "Content-Security-Policy", - value: - "frame-ancestors 'self' https://warpcast.com https://*.warpcast.com https://*.farcaster.xyz https://farcaster.xyz https://auth.privy.io https://client.warpcast.com;", + value: "frame-ancestors 'self' https://*.base.org https://*.base.build https://*.base.dev https://base.org https://base.build https://base.dev https://warpcast.com https://*.warpcast.com https://*.farcaster.xyz https://farcaster.xyz https://client.warpcast.com https://browser-intake-datadoghq.com", + // value: "frame- ancestors 'self' https://*.base.org https://*.base.build https://*.base.dev https://base.org https://base.build https://base.dev https://warpcast.com https://*.warpcast.com https://*.farcaster.xyz https://farcaster.xyz https://client.warpcast.com", }, { key: "X-XSS-Protection", @@ -46,10 +47,13 @@ const nextConfig = { key: "Cache-Control", value: "no-cache, no-store, must-revalidate", }, + { + key: "Content-Security-Policy", + value: "default-src 'self'; script-src 'self'", + }, ], }, ], - experimental: { optimizeCss: true, optimizePackageImports: ["@headlessui/react", "framer-motion"], @@ -73,7 +77,7 @@ const nextConfig = { path: false, os: false, }; - + // Handle Mixpanel on server-side only if (isServer) { config.externals = config.externals || []; @@ -81,13 +85,12 @@ const nextConfig = { 'mixpanel': 'commonjs mixpanel' }); } - + return config; }, compiler: { removeConsole: process.env.NODE_ENV === "production", }, - images: { remotePatterns: [ { @@ -98,6 +101,7 @@ const nextConfig = { { protocol: "https", hostname: "cdn.sanity.io", + // Sanity image assets are served under /images/... pathname: "/images/**", }, { @@ -107,12 +111,12 @@ const nextConfig = { }, ...(process.env.NODE_ENV !== "production" ? [ - { - protocol: "https", - hostname: "picsum.photos", - pathname: "/**", - }, - ] + { + protocol: "https", + hostname: "picsum.photos", + pathname: "/**", + }, + ] : []), ], },