diff --git a/.env.example b/.env.example index a26b7b8b..bc559def 100644 --- a/.env.example +++ b/.env.example @@ -14,6 +14,8 @@ NEXT_PUBLIC_SUBGRAPH_ID=FE63YgkzcpVocxdCEyEYbvjYqEf2kb1A6daMYRxmejYC NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID= NEXT_PUBLIC_METRICS_SERVER_URL=https://leaderboard-serverless.vercel.app NEXT_PUBLIC_AI_METRICS_SERVER_URL=https://leaderboard-api.livepeer.cloud +UPSTASH_REDIS_REST_URL= +UPSTASH_REDIS_REST_TOKEN= # Optional dev overrides (e.g. Graph Studio sandbox; leave empty in prod) -NEXT_PUBLIC_SUBGRAPH_ENDPOINT= +NEXT_PUBLIC_SUBGRAPH_ENDPOINT= \ No newline at end of file diff --git a/components/Profile/index.tsx b/components/Profile/index.tsx index 3c3021a1..389b68c0 100644 --- a/components/Profile/index.tsx +++ b/components/Profile/index.tsx @@ -1,6 +1,7 @@ import { ExplorerTooltip } from "@components/ExplorerTooltip"; import ShowMoreRichText from "@components/ShowMoreRichText"; import { EnsIdentity } from "@lib/api/types/get-ens"; +import dayjs from "@lib/dayjs"; import { Box, Button, @@ -271,6 +272,11 @@ const Index = ({ )} + {identity?.computedAt && identity?.name && ( + + ENS last verified {dayjs(identity.computedAt).fromNow()} + + )} {identity?.url && ( { @@ -36,16 +36,34 @@ export const useRegionsData = (): Regions => { }; export const useEnsData = (address: string | undefined | null): EnsIdentity => { - const { data, isValidating, error } = useSWR( - address ? `/ens-data/${address.toLowerCase()}` : null + const normalizedAddress = address?.toLowerCase(); + + const { cache } = useSWRConfig(); + const bulkEntry = cache.get("/ens-data") as + | { data?: EnsIdentity[] } + | undefined; + const matched = bulkEntry?.data?.find( + (e) => e.id.toLowerCase() === normalizedAddress ); + const soloKey = + normalizedAddress && !matched ? `/ens-data/${normalizedAddress}` : null; + + const { data, isValidating, error } = useSWR(soloKey); + const fallbackIdentity: EnsIdentity = { id: address ?? "", idShort: formatAddress(address), name: null, }; + if (matched) { + return { + ...matched, + isLoading: false, + }; + } + return { ...(data ?? fallbackIdentity), isLoading: Boolean(address && !data && isValidating && !error), diff --git a/lib/api/api.ts b/lib/api/api.ts index 67740435..7284d2e4 100644 --- a/lib/api/api.ts +++ b/lib/api/api.ts @@ -1,4 +1,4 @@ -const cacheControlValues = { +export const cacheControlValues = { revalidate: { maxAge: 0, swr: 10, diff --git a/lib/api/ens.ts b/lib/api/ens.ts index f63d7de5..3a50be44 100644 --- a/lib/api/ens.ts +++ b/lib/api/ens.ts @@ -1,11 +1,39 @@ +import { cacheControlValues } from "@lib/api/api"; import { l1PublicClient } from "@lib/chains"; +import { Redis } from "@upstash/redis"; import { formatAddress } from "@utils/web3"; +import { parseArweaveTxId, parseCid } from "livepeer/utils"; import sanitizeHtml from "sanitize-html"; import { isAddress } from "viem"; import { normalize } from "viem/ens"; import { EnsIdentity } from "./types/get-ens"; +export const ENS_BLACKLISTED_ADDRESSES = [ + "0xcb69ffc06d3c218472c50ee25f5a1d3ca9650c44", +].map((a) => a.toLowerCase()); + +export const ENS_CACHE_TTL = "week"; + +const redis = + typeof window === "undefined" && + process.env.UPSTASH_REDIS_REST_URL && + process.env.UPSTASH_REDIS_REST_TOKEN + ? new Redis({ + url: process.env.UPSTASH_REDIS_REST_URL, + token: process.env.UPSTASH_REDIS_REST_TOKEN, + }) + : null; + +if (!redis && typeof window === "undefined") { + console.warn( + "ENS cache: UPSTASH_REDIS_REST_URL/TOKEN not set, running without caching (every request will hit L1 directly)." + ); +} + +const ENS_CACHE_TTL_SECONDS = cacheControlValues[ENS_CACHE_TTL].maxAge; +const ENS_LOCK_TTL_SECONDS = 20; + const sanitizeOptions: sanitizeHtml.IOptions = { allowedTags: [ "b", @@ -54,13 +82,144 @@ const sanitizeOptions: sanitizeHtml.IOptions = { enforceHtmlBoundary: true, }; +export class LockBusyError extends Error { + constructor(message: string) { + super(message); + this.name = "LockBusyError"; + } +} + +export const getAvatarUrlCached = async ( + address: string, + name: string +): Promise => { + if (!redis) { + return resolveAvatarUrl(name); + } + + const key = `avatar-url:${address.toLowerCase()}`; + + try { + const cached = await redis.get(key); + if (cached) { + return cached; + } + } catch (err) { + console.error("Avatar URL cache read failed:", err); + return resolveAvatarUrl(name); + } + + const imageUrl = await resolveAvatarUrl(name); + + if (!imageUrl) { + return null; + } + + try { + await redis.set(key, imageUrl, { ex: ENS_CACHE_TTL_SECONDS }); + } catch (err) { + console.error("Avatar URL cache write failed:", err); + return imageUrl; + } + return imageUrl; +}; + +const resolveAvatarUrl = async (name: string): Promise => { + const avatar = await l1PublicClient.getEnsAvatar({ name: normalize(name) }); + + const cid = parseCid(avatar); + const arweaveId = parseArweaveTxId(avatar); + + const hasAvatarRecord = Boolean(avatar); + + const result = cid?.id + ? `https://dweb.link/ipfs/${cid.id}` + : arweaveId?.id + ? arweaveId?.url + : avatar?.startsWith("https://") + ? avatar + : hasAvatarRecord + ? `https://metadata.ens.domains/mainnet/avatar/${name}` + : null; + + return result; +}; + +export const getEnsForAddressCached = async ( + address: string | null | undefined +): Promise => { + const key = (address ?? "").toLowerCase(); + + if (!redis) { + const ens = await getEnsForAddress(address); + return { ...ens, computedAt: Date.now() }; + } + + try { + const cached = await redis.get(key); + + if (cached) { + return cached; + } + } catch (err) { + console.error("ENS cache read failed:", err); + const ens = await getEnsForAddress(address); + const stampedEns = { ...ens, computedAt: Date.now() }; + return stampedEns; + } + + const lockKey = `lock:${key}`; + let lockAcquired = true; + + try { + const lockResult = await redis.set(lockKey, "1", { + nx: true, + ex: ENS_LOCK_TTL_SECONDS, + }); + lockAcquired = lockResult !== null; + } catch (err) { + console.error("ENS lock acquisition failed, proceeding unlocked:", err); + lockAcquired = true; + } + + if (!lockAcquired) { + throw new LockBusyError( + "Another request is already resolving this address" + ); + } + + const ens = await getEnsForAddress(address); + const stampedEns = { ...ens, computedAt: Date.now() }; + + try { + await redis.set(key, stampedEns, { ex: ENS_CACHE_TTL_SECONDS }); + } catch (err) { + console.error("ENS cache write failed:", err); + return stampedEns; + } finally { + try { + await redis.del(lockKey); + } catch (err) { + console.error("ENS lock release failed:", err); + } + } + return stampedEns; +}; + export const getEnsForAddress = async (address: string | null | undefined) => { - const idShort = address?.replace(address?.slice(6, 38), "…"); + if (!address) { + return { + id: "", + idShort: "", + name: null, + } as EnsIdentity; + } - const name = - address && isAddress(address) - ? await l1PublicClient.getEnsName({ address }) - : null; + const idShort = address.replace(address.slice(6, 38), "…"); + + const name = isAddress(address) + ? await l1PublicClient.getEnsName({ address }) + : null; if (name) { const normalizedName = normalize(name); @@ -73,15 +232,15 @@ export const getEnsForAddress = async (address: string | null | undefined) => { ]); const ens: EnsIdentity = { - id: address ?? "", - idShort: idShort ?? "", + id: address, + idShort: idShort, name: name ?? null, description: sanitizeHtml(nl2br(description), sanitizeOptions), url, twitter, github, avatar: avatar - ? `/api/ens-data/image/${encodeURIComponent(normalizedName)}` + ? `/api/ens-data/image/${encodeURIComponent(address)}` : null, }; @@ -89,8 +248,8 @@ export const getEnsForAddress = async (address: string | null | undefined) => { } const ens: EnsIdentity = { - id: address ?? "", - idShort: idShort ?? "", + id: address, + idShort: idShort, name: null, }; diff --git a/lib/api/errors.ts b/lib/api/errors.ts index 90c86ea0..6389f9b4 100644 --- a/lib/api/errors.ts +++ b/lib/api/errors.ts @@ -62,3 +62,9 @@ export const methodNotAllowed = ( `Method ${method} Not Allowed` ); }; + +export const serviceBusy = ( + res: NextApiResponse, + message: string, + details?: string +) => apiError(res, 503, "SERVICE_BUSY", message, details); diff --git a/lib/api/types/api-error.ts b/lib/api/types/api-error.ts index 7db19b98..7dead24f 100644 --- a/lib/api/types/api-error.ts +++ b/lib/api/types/api-error.ts @@ -9,4 +9,5 @@ export type ErrorCode = | "VALIDATION_ERROR" | "NOT_FOUND" | "EXTERNAL_API_ERROR" - | "METHOD_NOT_ALLOWED"; + | "METHOD_NOT_ALLOWED" + | "SERVICE_BUSY"; diff --git a/lib/api/types/get-ens.ts b/lib/api/types/get-ens.ts index 948dd77e..d60eba82 100644 --- a/lib/api/types/get-ens.ts +++ b/lib/api/types/get-ens.ts @@ -8,4 +8,5 @@ export type EnsIdentity = { github?: string | null; description?: string | null; isLoading?: boolean; + computedAt?: number; }; diff --git a/next-env.d.ts b/next-env.d.ts index 19709046..7996d352 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/types/routes.d.ts"; +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/pages/api-reference/config/typescript for more information. diff --git a/package.json b/package.json index 8b09d585..48ce0c1d 100644 --- a/package.json +++ b/package.json @@ -34,11 +34,11 @@ "eslint": "^9.39.1", "eslint-config-next": "16.0.1", "eslint-config-prettier": "^10.1.8", - "prettier": "^2.8.8", "eslint-plugin-simple-import-sort": "^12.1.1", "husky": "^9.1.7", "jest": "^30.2.0", "jest-environment-jsdom": "^30.2.0", + "prettier": "^2.8.8", "ts-node": "^10.9.2", "typescript": "5.9.2" }, @@ -54,6 +54,7 @@ "@reach/tabs": "^0.17.0", "@stitches/react": "1.2.5", "@tanstack/react-query": "^5.90.5", + "@upstash/redis": "^1.38.2", "apollo-fetch": "^0.7.0", "change-case": "^4.1.2", "copy-to-clipboard": "^3.3.3", diff --git a/pages/api/ens-data/[address].tsx b/pages/api/ens-data/[address].tsx index 7d4cb178..ace16264 100644 --- a/pages/api/ens-data/[address].tsx +++ b/pages/api/ens-data/[address].tsx @@ -1,13 +1,21 @@ import { getCacheControlHeader } from "@lib/api"; -import { getEnsForAddress } from "@lib/api/ens"; -import { badRequest, internalError, methodNotAllowed } from "@lib/api/errors"; +import { + ENS_BLACKLISTED_ADDRESSES, + ENS_CACHE_TTL, + getEnsForAddressCached, + LockBusyError, +} from "@lib/api/ens"; +import { + badRequest, + internalError, + methodNotAllowed, + serviceBusy, +} from "@lib/api/errors"; import { EnsIdentity } from "@lib/api/types/get-ens"; import { NextApiRequest, NextApiResponse } from "next"; import { Address, isAddress } from "viem"; -const blacklist = ["0xcb69ffc06d3c218472c50ee25f5a1d3ca9650c44"].map((a) => - a.toLowerCase() -); +const blacklist = ENS_BLACKLISTED_ADDRESSES; const handler = async ( req: NextApiRequest, @@ -19,7 +27,7 @@ const handler = async ( if (method === "GET") { const { address } = req.query; - res.setHeader("Cache-Control", getCacheControlHeader("week")); + res.setHeader("Cache-Control", getCacheControlHeader(ENS_CACHE_TTL)); if ( !!address && @@ -27,7 +35,7 @@ const handler = async ( isAddress(address) && !blacklist.includes(address.toLowerCase()) ) { - const ens = await getEnsForAddress(address as Address); + const ens = await getEnsForAddressCached(address as Address); return res.status(200).json(ens); } else { @@ -37,6 +45,7 @@ const handler = async ( return methodNotAllowed(res, method ?? "unknown", ["GET"]); } catch (err) { + if (err instanceof LockBusyError) return serviceBusy(res, err.message); return internalError(res, err); } }; diff --git a/pages/api/ens-data/image/[address].tsx b/pages/api/ens-data/image/[address].tsx new file mode 100644 index 00000000..7bd32178 --- /dev/null +++ b/pages/api/ens-data/image/[address].tsx @@ -0,0 +1,82 @@ +import { getCacheControlHeader } from "@lib/api"; +import { + ENS_BLACKLISTED_ADDRESSES, + ENS_CACHE_TTL, + getAvatarUrlCached, + getEnsForAddressCached, + LockBusyError, +} from "@lib/api/ens"; +import { + badRequest, + internalError, + methodNotAllowed, + notFound, +} from "@lib/api/errors"; +import { NextApiRequest, NextApiResponse } from "next"; +import { Address, isAddress } from "viem"; + +const blacklist = ENS_BLACKLISTED_ADDRESSES; + +const handler = async ( + req: NextApiRequest, + res: NextApiResponse +) => { + try { + const method = req.method; + + if (method === "GET") { + const { address } = req.query; + + if ( + !!address && + !Array.isArray(address) && + isAddress(address) && + !blacklist.includes(address.toLowerCase()) + ) { + try { + const identity = await getEnsForAddressCached(address as Address); + + if (!identity.name) { + return notFound(res, "No ENS name for this address"); + } + + const imageUrl = await getAvatarUrlCached(address, identity.name); + + if (!imageUrl) { + return notFound(res, "ENS avatar not found"); + } + + const response = await fetch(imageUrl); + + if (!response.ok) { + return notFound(res, "ENS avatar not found"); + } + + const arrayBuffer = await response.arrayBuffer(); + + res.setHeader("Cache-Control", getCacheControlHeader(ENS_CACHE_TTL)); + + return res.end(Buffer.from(arrayBuffer)); + } catch (e) { + if (e instanceof LockBusyError) { + console.warn( + "Avatar route: cache-lock busy, address in-flight:", + address + ); + } else { + console.error("Avatar fetch error:", e instanceof Error ? e.message : e, e instanceof Error ? e.stack : ""); + } + return notFound(res, "ENS avatar not found"); + } + } else { + return badRequest(res, "Invalid address format"); + } + } + + return methodNotAllowed(res, method ?? "unknown", ["GET"]); + } catch (err) { + return internalError(res, err); + } +}; + +export default handler; diff --git a/pages/api/ens-data/image/[name].tsx b/pages/api/ens-data/image/[name].tsx deleted file mode 100644 index d2be5f8b..00000000 --- a/pages/api/ens-data/image/[name].tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { getCacheControlHeader } from "@lib/api"; -import { - badRequest, - internalError, - methodNotAllowed, - notFound, -} from "@lib/api/errors"; -import { l1PublicClient } from "@lib/chains"; -import { parseArweaveTxId, parseCid } from "livepeer/utils"; -import { NextApiRequest, NextApiResponse } from "next"; -import { normalize } from "viem/ens"; - -const blacklist = ["salty-minning.eth"]; - -const handler = async ( - req: NextApiRequest, - res: NextApiResponse -) => { - try { - const method = req.method; - - if (method === "GET") { - const { name } = req.query; - - if ( - name && - typeof name === "string" && - name.length > 0 && - !blacklist.includes(name) - ) { - try { - const avatar = await l1PublicClient.getEnsAvatar({ - name: normalize(name), - }); - - const cid = parseCid(avatar); - const arweaveId = parseArweaveTxId(avatar); - - const imageUrl = cid?.id - ? `https://dweb.link/ipfs/${cid.id}` - : arweaveId?.id - ? arweaveId.url - : avatar?.startsWith("https://") - ? avatar - : `https://metadata.ens.domains/mainnet/avatar/${name}`; - - const response = await fetch(imageUrl); - - const arrayBuffer = await response.arrayBuffer(); - - res.setHeader("Cache-Control", getCacheControlHeader("week")); - - return res.end(Buffer.from(arrayBuffer)); - } catch (e) { - console.error(e); - return notFound(res, "ENS avatar not found"); - } - } else { - return badRequest(res, "Invalid ENS name"); - } - } - - return methodNotAllowed(res, method ?? "unknown", ["GET"]); - } catch (err) { - return internalError(res, err); - } -}; - -export default handler; diff --git a/pages/api/ens-data/index.tsx b/pages/api/ens-data/index.tsx index 51ae19c8..718521db 100644 --- a/pages/api/ens-data/index.tsx +++ b/pages/api/ens-data/index.tsx @@ -1,5 +1,5 @@ import { getCacheControlHeader } from "@lib/api"; -import { getEnsForAddress } from "@lib/api/ens"; +import { ENS_CACHE_TTL, getEnsForAddressCached } from "@lib/api/ens"; import { internalError, methodNotAllowed } from "@lib/api/errors"; import { EnsIdentity } from "@lib/api/types/get-ens"; import { CHAIN_INFO, DEFAULT_CHAIN_ID } from "@lib/chains"; @@ -15,7 +15,7 @@ const handler = async ( const method = req.method; if (method === "GET") { - res.setHeader("Cache-Control", getCacheControlHeader("week")); + res.setHeader("Cache-Control", getCacheControlHeader(ENS_CACHE_TTL)); const response = await fetchWithRetry( CHAIN_INFO[DEFAULT_CHAIN_ID].subgraph, @@ -55,7 +55,7 @@ const handler = async ( await Promise.all( addresses.map(async (address) => { try { - return await getEnsForAddress(address as Address); + return await getEnsForAddressCached(address as Address); } catch { return null; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc902048..3024edfe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,7 +35,7 @@ importers: version: 1.3.2(react@19.2.1) '@rainbow-me/rainbowkit': specifier: ^2.2.10 - version: 2.2.10(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.2)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6)) + version: 2.2.10(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.2)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6)) '@reach/tabs': specifier: ^0.17.0 version: 0.17.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1) @@ -45,6 +45,9 @@ importers: '@tanstack/react-query': specifier: ^5.90.5 version: 5.90.21(react@19.2.1) + '@upstash/redis': + specifier: ^1.38.2 + version: 1.38.2 apollo-fetch: specifier: ^0.7.0 version: 0.7.0 @@ -158,7 +161,7 @@ importers: version: 2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) wagmi: specifier: ^2.19.1 - version: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6) + version: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6) zod: specifier: ^4.1.12 version: 4.3.6 @@ -4391,6 +4394,9 @@ packages: cpu: [x64] os: [win32] + '@upstash/redis@1.38.2': + resolution: {integrity: sha512-RZ+JaRCVIS+ZTGnjOnDMr+/0aqDxsBb5rV6aW+Pys4SGELwr5lwE3UbLHRCHqMQ5Ulxj0b/CFBHfbmE175Otog==} + '@vanilla-extract/css@1.17.3': resolution: {integrity: sha512-jHivr1UPoJTX5Uel4AZSOwrCf4mO42LcdmnhJtUxZaRWhW4FviFbIfs0moAWWld7GOT+2XnuVZjjA/K32uUnMQ==} @@ -14022,7 +14028,7 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.2)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6))': + '@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.2)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6))': dependencies: '@tanstack/react-query': 5.90.21(react@19.2.1) '@vanilla-extract/css': 1.17.3(babel-plugin-macros@3.1.0) @@ -14035,7 +14041,7 @@ snapshots: react-remove-scroll: 2.6.2(@types/react@19.2.2)(react@19.2.1) ua-parser-js: 1.0.41 viem: 2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - wagmi: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6) + wagmi: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6) transitivePeerDependencies: - '@types/react' - babel-plugin-macros @@ -14094,11 +14100,11 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@reown/appkit-controllers@1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6) - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/universal-provider': 2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) valtio: 1.13.2(@types/react@19.2.2)(react@19.2.1) viem: 2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) transitivePeerDependencies: @@ -14129,12 +14135,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@reown/appkit-pay@1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6) lit: 3.3.0 valtio: 1.13.2(@types/react@19.2.2)(react@19.2.1) transitivePeerDependencies: @@ -14169,12 +14175,12 @@ snapshots: dependencies: buffer: 6.0.3 - '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6)': + '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6) lit: 3.3.0 transitivePeerDependencies: @@ -14206,10 +14212,10 @@ snapshots: - valtio - zod - '@reown/appkit-ui@1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@reown/appkit-ui@1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6) lit: 3.3.0 qrcode: 1.5.3 @@ -14241,14 +14247,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6)': + '@reown/appkit-utils@1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@reown/appkit-polyfills': 1.7.8 '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6) '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/universal-provider': 2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) valtio: 1.13.2(@types/react@19.2.2)(react@19.2.1) viem: 2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) transitivePeerDependencies: @@ -14290,18 +14296,18 @@ snapshots: - typescript - utf-8-validate - '@reown/appkit@1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@reown/appkit@1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-pay': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@reown/appkit-pay': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6) - '@reown/appkit-ui': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@reown/appkit-utils': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6) + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(valtio@1.13.2(@types/react@19.2.2)(react@19.2.1))(zod@4.3.6) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6) - '@walletconnect/types': 2.21.0 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/types': 2.21.0(@upstash/redis@1.38.2) + '@walletconnect/universal-provider': 2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.2.2)(react@19.2.1) viem: 2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) @@ -15411,6 +15417,10 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true + '@upstash/redis@1.38.2': + dependencies: + uncrypto: 0.1.3 + '@vanilla-extract/css@1.17.3(babel-plugin-macros@3.1.0)': dependencies: '@emotion/hash': 0.9.2 @@ -15438,7 +15448,7 @@ snapshots: dependencies: '@vanilla-extract/css': 1.17.3(babel-plugin-macros@3.1.0) - '@wagmi/connectors@6.2.0(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)))(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6))(zod@4.3.6)': + '@wagmi/connectors@6.2.0(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)))(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6))(zod@4.3.6)': dependencies: '@base-org/account': 2.4.0(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@6.0.6)(zod@4.3.6) '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.2)(bufferutil@4.1.0)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@6.0.6)(zod@4.3.6) @@ -15447,9 +15457,9 @@ snapshots: '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@wagmi/core': 2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)) - '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - porto: 0.2.35(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)))(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6)) + porto: 0.2.35(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)))(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6)) viem: 2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) optionalDependencies: typescript: 5.9.2 @@ -15507,21 +15517,21 @@ snapshots: - react - use-sync-external-store - '@walletconnect/core@2.21.0(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@walletconnect/core@2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': 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.1.0)(utf-8-validate@6.0.6) - '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/keyvaluestorage': 1.1.1(@upstash/redis@1.38.2) '@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.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/types': 2.21.0(@upstash/redis@1.38.2) + '@walletconnect/utils': 2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -15551,21 +15561,21 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.21.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@walletconnect/core@2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': 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.1.0)(utf-8-validate@6.0.6) - '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/keyvaluestorage': 1.1.1(@upstash/redis@1.38.2) '@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.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/types': 2.21.1(@upstash/redis@1.38.2) + '@walletconnect/utils': 2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -15599,18 +15609,18 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.21.1(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@walletconnect/ethereum-provider@2.21.1(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': dependencies: - '@reown/appkit': 1.7.8(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@reown/appkit': 1.7.8(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@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.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@walletconnect/types': 2.21.1 - '@walletconnect/universal-provider': 2.21.1(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/keyvaluestorage': 1.1.1(@upstash/redis@1.38.2) + '@walletconnect/sign-client': 2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/types': 2.21.1(@upstash/redis@1.38.2) + '@walletconnect/universal-provider': 2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/utils': 2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -15687,11 +15697,11 @@ snapshots: - bufferutil - utf-8-validate - '@walletconnect/keyvaluestorage@1.1.1': + '@walletconnect/keyvaluestorage@1.1.1(@upstash/redis@1.38.2)': dependencies: '@walletconnect/safe-json': 1.0.2 idb-keyval: 6.2.2 - unstorage: 1.17.4(idb-keyval@6.2.2) + unstorage: 1.17.4(@upstash/redis@1.38.2)(idb-keyval@6.2.2) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -15733,16 +15743,16 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.21.0(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@walletconnect/sign-client@2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': dependencies: - '@walletconnect/core': 2.21.0(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/core': 2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@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.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/types': 2.21.0(@upstash/redis@1.38.2) + '@walletconnect/utils': 2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -15769,16 +15779,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.21.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@walletconnect/sign-client@2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': dependencies: - '@walletconnect/core': 2.21.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/core': 2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) '@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.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/types': 2.21.1(@upstash/redis@1.38.2) + '@walletconnect/utils': 2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -15809,12 +15819,12 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/types@2.21.0': + '@walletconnect/types@2.21.0(@upstash/redis@1.38.2)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/keyvaluestorage': 1.1.1(@upstash/redis@1.38.2) '@walletconnect/logger': 2.1.2 events: 3.3.0 transitivePeerDependencies: @@ -15838,12 +15848,12 @@ snapshots: - ioredis - uploadthing - '@walletconnect/types@2.21.1': + '@walletconnect/types@2.21.1(@upstash/redis@1.38.2)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/keyvaluestorage': 1.1.1(@upstash/redis@1.38.2) '@walletconnect/logger': 2.1.2 events: 3.3.0 transitivePeerDependencies: @@ -15867,18 +15877,18 @@ snapshots: - ioredis - uploadthing - '@walletconnect/universal-provider@2.21.0(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@walletconnect/universal-provider@2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': 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/keyvaluestorage': 1.1.1(@upstash/redis@1.38.2) '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.0(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/sign-client': 2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/types': 2.21.0(@upstash/redis@1.38.2) + '@walletconnect/utils': 2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -15907,18 +15917,18 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.21.1(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@walletconnect/universal-provider@2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': 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/keyvaluestorage': 1.1.1(@upstash/redis@1.38.2) '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) - '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/sign-client': 2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) + '@walletconnect/types': 2.21.1(@upstash/redis@1.38.2) + '@walletconnect/utils': 2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -15947,18 +15957,18 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.0(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@walletconnect/utils@2.21.0(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': 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/keyvaluestorage': 1.1.1(@upstash/redis@1.38.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/types': 2.21.0(@upstash/redis@1.38.2) '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 bs58: 6.0.0 @@ -15991,18 +16001,18 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': + '@walletconnect/utils@2.21.1(@upstash/redis@1.38.2)(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)': 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/keyvaluestorage': 1.1.1(@upstash/redis@1.38.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/types': 2.21.1(@upstash/redis@1.38.2) '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 bs58: 6.0.0 @@ -20507,7 +20517,7 @@ snapshots: pony-cause@2.1.11: {} - porto@0.2.35(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)))(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6)): + porto@0.2.35(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)))(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6)): dependencies: '@wagmi/core': 2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)) hono: 4.12.7 @@ -20521,7 +20531,7 @@ snapshots: '@tanstack/react-query': 5.90.21(react@19.2.1) react: 19.2.1 typescript: 5.9.2 - wagmi: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6) + wagmi: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6) transitivePeerDependencies: - '@types/react' - immer @@ -22042,7 +22052,7 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unstorage@1.17.4(idb-keyval@6.2.2): + unstorage@1.17.4(@upstash/redis@1.38.2)(idb-keyval@6.2.2): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -22053,6 +22063,7 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.3 optionalDependencies: + '@upstash/redis': 1.38.2 idb-keyval: 6.2.2 update-browserslist-db@1.2.3(browserslist@4.28.1): @@ -22265,10 +22276,10 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6): + wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6): dependencies: '@tanstack/react-query': 5.90.21(react@19.2.1) - '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)))(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6))(zod@4.3.6) + '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)))(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.1))(@types/react@19.2.2)(@upstash/redis@1.38.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.2)(utf-8-validate@6.0.6)(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6))(zod@4.3.6))(zod@4.3.6) '@wagmi/core': 2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.2)(react@19.2.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.47.1(bufferutil@4.1.0)(typescript@5.9.2)(utf-8-validate@6.0.6)(zod@4.3.6)) react: 19.2.1 use-sync-external-store: 1.4.0(react@19.2.1)