Compare commits

..
Author SHA1 Message Date
Joaquim VergesGitHubgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
59d226512c Version Packages (#8049)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-09-14 04:21:13 -07:00
Joaquim VergesandGitHub 778bf2cc4b [SDK] Add wallet validation before executing transactions (#8050) 2025-09-14 04:06:05 -07:00
Joaquim VergesandGitHub 97e5080fdf [SDK] Fix fiat payments with no wallet connected (#8048) 2025-09-14 03:54:57 -07:00
Joaquim VergesGitHubgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
9f9fadf242 Version Packages (#8047)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-09-13 03:08:48 -07:00
Joaquim VergesandGitHub 224c9d034f [SDK] Upgrade WalletConnect and improve chain switching reliability (#8046) 2025-09-13 02:54:32 -07:00
Jonas DanielsandGitHub 8b8dfd9bf9 Handle ENS resolution errors gracefully (#8045) 2025-09-12 16:52:09 -07:00
Jonas DanielsandGitHub 70e52188a1 Add tier6 for SMS country pricing (#8043) 2025-09-12 16:51:43 -07:00
MananTank c82b606cd2 [MNY-166] Dashboard: Add Dex Screener charts in public ERC20 token page (#8035)
<!--

## title your PR with this format: "[SDK/Dashboard/Portal] Feature/Fix: Concise title for the changes"

If you did not copy the branch name from Linear, paste the issue tag here (format is TEAM-0000):

## Notes for the reviewer

Anything important to call out? Be sure to also clarify these in your comments.

## How to test

Unit tests, playground, etc.

-->

<!-- start pr-codex -->

---

## PR-Codex overview
This PR primarily focuses on removing the `token-price-data` API and the `PriceChart` component, while introducing a new `DexScreener` feature that displays token price information based on the chain ID and contract address.

### Detailed summary
- Deleted `token-price-data.ts` and `PriceChart.tsx`.
- Added `mapChainIdToDexScreenerChainSlug` to map chain IDs to DexScreener chain slugs.
- Introduced `DexScreener` and `DexScreenerIframe` components for displaying token price data.
- Updated `erc20.tsx` to integrate `DexScreener` and remove token price fetching logic.

> ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}`

<!-- end pr-codex -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

* **New Features**
  * Added embedded DexScreener chart on ERC20 public pages for supported chains with automatic light/dark theming and responsive SSR fallback.
  * Introduced chain-to-DexScreener slug mapping for type-safe embeds.

* **Refactor**
  * Removed token price data fetching and the TokenStats/price chart UI from ERC20 public pages.

* **Style**
  * Widened layout to max-w-7xl, simplified Buy section spacing, and moved DexScreener before analytics; analytics and recent transfers now sit in a unified bottom container.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-09-12 19:25:59 +00:00
33 changed files with 568 additions and 724 deletions
+6 -3
View File
@@ -17,18 +17,21 @@ export async function resolveEns(
ensName: await resolveName({
address: ensNameOrAddress,
client,
}),
}).catch(() => null),
};
}
if (!isValidENSName(ensNameOrAddress)) {
throw new Error("Invalid ENS name");
return {
address: null,
ensName: null,
};
}
const address = await resolveAddress({
client,
name: ensNameOrAddress,
});
}).catch(() => null);
if (!address) {
return {
@@ -1,51 +0,0 @@
import "server-only";
import { isProd } from "@/constants/env-utils";
import { DASHBOARD_THIRDWEB_SECRET_KEY } from "@/constants/server-envs";
export type TokenPriceData = {
price_usd: number;
price_usd_cents: number;
percent_change_24h: number;
market_cap_usd: number;
volume_24h_usd: number;
volume_change_24h: number;
holders: number;
historical_prices: Array<{
date: string;
price_usd: number;
price_usd_cents: number;
}>;
};
export async function getTokenPriceData(params: {
chainId: number;
contractAddress: string;
}) {
try {
const url = new URL(
`https://insight.${isProd ? "thirdweb" : "thirdweb-dev"}.com/v1/tokens/price`,
);
url.searchParams.set("include_historical_prices", "true");
url.searchParams.set("chain_id", params.chainId.toString());
url.searchParams.set("address", params.contractAddress);
url.searchParams.set("include_holders", "true");
const res = await fetch(url, {
headers: {
"x-secret-key": DASHBOARD_THIRDWEB_SECRET_KEY,
},
});
if (!res.ok) {
console.error("Failed to fetch token price data", await res.text());
return undefined;
}
const json = await res.json();
const priceData = json.data[0] as TokenPriceData | undefined;
return priceData;
} catch {
return undefined;
}
}
@@ -1,264 +0,0 @@
"use client";
import { differenceInCalendarDays, format } from "date-fns";
import { ArrowDownIcon, ArrowUpIcon, InfoIcon } from "lucide-react";
import { useMemo, useState } from "react";
import { ThirdwebAreaChart } from "@/components/blocks/charts/area-chart";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { ToolTipLabel } from "@/components/ui/tooltip";
import { cn } from "@/lib/utils";
import type { TokenPriceData } from "../_apis/token-price-data";
function PriceChartUI(props: {
showTimeOfDay: boolean;
data: Array<{
date: string;
price_usd: number;
price_usd_cents: number;
}>;
}) {
const data = props.data.map((item) => ({
price: item.price_usd,
time: new Date(item.date).getTime(),
}));
return (
<ThirdwebAreaChart
cardContentClassName="p-0"
chartClassName="aspect-[1.5] lg:aspect-[3]"
className="border-none bg-transparent p-0"
config={{
price: {
color: "hsl(var(--chart-1))",
label: "Price",
},
}}
data={data}
hideLabel={false}
isPending={false}
toolTipLabelFormatter={getTooltipLabelFormatter(props.showTimeOfDay)}
toolTipValueFormatter={(value) => {
return tokenPriceUSDFormatter.format(value as number);
}}
/>
);
}
const tokenPriceUSDFormatter = new Intl.NumberFormat("en-US", {
currency: "USD",
maximumFractionDigits: 8,
minimumFractionDigits: 0,
notation: "compact",
roundingMode: "halfEven",
style: "currency",
});
const marketCapFormatter = new Intl.NumberFormat("en-US", {
currency: "USD",
maximumFractionDigits: 0,
minimumFractionDigits: 0,
notation: "compact",
roundingMode: "halfEven",
style: "currency",
});
const holdersFormatter = new Intl.NumberFormat("en-US", {
maximumFractionDigits: 0,
minimumFractionDigits: 0,
notation: "compact",
});
const percentChangeFormatter = new Intl.NumberFormat("en-US", {
maximumFractionDigits: 2,
minimumFractionDigits: 0,
});
function getTooltipLabelFormatter(includeTimeOfDay: boolean) {
return (_v: string, item: unknown) => {
if (Array.isArray(item)) {
const time = item[0].payload.time as number;
return format(
new Date(time),
includeTimeOfDay ? "MMM d, yyyy hh:mm a" : "MMM d, yyyy",
);
}
return undefined;
};
}
export function TokenStats(params: {
chainId: number;
contractAddress: string;
tokenPriceData: TokenPriceData;
}) {
const [interval, setInterval] = useState<Interval>("max");
const filteredHistoricalPrices = useMemo(() => {
const currentDate = new Date();
return params.tokenPriceData.historical_prices.filter((item) => {
const date = new Date(item.date);
const maxDiff =
interval === "24h"
? 1
: interval === "7d"
? 7
: interval === "30d"
? 30
: interval === "1y"
? 365
: Number.MAX_SAFE_INTEGER;
return differenceInCalendarDays(currentDate, date) <= maxDiff;
});
}, [params.tokenPriceData, interval]);
const priceUsd = params.tokenPriceData.price_usd;
const percentChange24h = params.tokenPriceData.percent_change_24h;
const marketCap = params.tokenPriceData.market_cap_usd;
const holders = params.tokenPriceData.holders;
const formattedAbsChange = percentChangeFormatter.format(
Math.abs(percentChange24h),
);
const isAlmostZeroChange =
formattedAbsChange === percentChangeFormatter.format(0);
const formattedPriceUSD = tokenPriceUSDFormatter.format(priceUsd);
return (
<div className="bg-card rounded-lg border">
{/* price and change */}
<div className="flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between p-4 lg:p-6">
<div>
<p className="mb-1 text-muted-foreground text-sm">Current Price</p>
<div className="flex items-center gap-3">
<p
className={cn(
"font-bold text-3xl lg:text-4xl tracking-tight",
formattedPriceUSD.length > 8 && "text-2xl lg:text-4xl",
)}
>
{typeof priceUsd === "number" ? formattedPriceUSD : priceUsd}
</p>
<Badge
className="gap-2 lg:text-sm text-xs px-1.5"
variant={
isAlmostZeroChange
? "default"
: percentChange24h > 0
? "success"
: "destructive"
}
>
<div className="flex items-center gap-0.5">
{isAlmostZeroChange ? null : percentChange24h > 0 ? (
<ArrowUpIcon className="size-3" />
) : (
<ArrowDownIcon className="size-3" />
)}
<span>
{isAlmostZeroChange ? "~0%" : `${formattedAbsChange}%`}
</span>
</div>
<span>(1d)</span>
</Badge>
</div>
</div>
<IntervalSelector interval={interval} setInterval={setInterval} />
</div>
<div className="px-0">
<PriceChartUI
data={filteredHistoricalPrices || []}
showTimeOfDay={interval === "24h"}
/>
</div>
<div className="px-4 lg:px-6 py-4 mt-6 border-t border-dashed flex gap-6 [&>*:not(:first-child)]:border-l [&>*:not(:first-child)]:pl-5 [&>*]:grow">
<TokenStat
label="Market Cap"
tooltip="Market capitalization is the total value of all tokens in circulation, calculated by multiplying the current price by the circulating supply"
value={
typeof marketCap === "number"
? marketCapFormatter.format(marketCap)
: marketCap
}
/>
<TokenStat
label="Number of Holders"
tooltip="The total number of unique wallet addresses that currently hold this token on the blockchain"
value={
// show 0 value as N/A
holders === 0
? "N/A"
: typeof holders === "number"
? holdersFormatter.format(holders)
: holders
}
/>
</div>
</div>
);
}
function TokenStat(props: {
value: string | number;
label: string;
tooltip: string;
}) {
return (
<div className="flex flex-col gap-0.5">
<div className="flex items-center gap-1.5">
<p className="text-muted-foreground text-sm">{props.label}</p>
<ToolTipLabel label={props.tooltip}>
<InfoIcon className="size-3.5 text-muted-foreground" />
</ToolTipLabel>
</div>
<div className="flex">
<p className="font-semibold text-foreground text-xl tracking-tight">
{props.value}
</p>
</div>
</div>
);
}
type Interval = "24h" | "7d" | "30d" | "1y" | "max";
function IntervalSelector(props: {
interval: Interval;
setInterval: (timeframe: Interval) => void;
}) {
const intervals: Record<Interval, string> = {
"1y": "1Y",
"7d": "1W",
"24h": "1D",
"30d": "1M",
max: "MAX",
};
return (
<div className="flex gap-2">
{Object.entries(intervals).map(([key, value]) => (
<Button
className={cn(
"rounded-full px-2.5 py-1.5 h-auto bg-background text-xs lg:text-sm",
props.interval === key && "border-active-border bg-accent",
)}
key={key}
onClick={() => props.setInterval(key as Interval)}
size="sm"
tabIndex={0}
variant="outline"
>
{value}
</Button>
))}
</div>
);
}
@@ -0,0 +1,77 @@
export const mapChainIdToDexScreenerChainSlug = {
8453: "base",
1: "ethereum",
56: "bsc",
369: "pulsechain",
137: "polygon",
2741: "abstract",
43114: "avalanche",
999: "hyperliquid",
480: "worldchain",
42161: "arbitrum",
388: "cronos",
59144: "linea",
1514: "story",
397: "near",
295: "hedera",
146: "sonic",
10: "optimism",
80094: "berachain",
57073: "ink",
130: "unichain",
5000: "mantle",
324: "zksync",
466: "apechain",
1116: "core",
250: "fantom",
1868: "soneium",
81457: "blast",
2000: "dogechain",
14: "flare",
2040: "vana",
4337: "beam",
109: "shibarium",
747: "flowevm",
1088: "metis",
1030: "conflux",
43113: "avalanchedfk",
534352: "scroll",
747474: "katana",
42220: "celo",
1284: "moonbeam",
4200: "merlinchain",
2222: "kava",
39797: "energi",
34443: "mode",
252: "fraxtal",
48900: "zircuit",
20: "elastos",
100: "gnosischain",
204: "opbnb",
169: "manta",
1313161554: "aurora",
3073: "movement",
4689: "iotex",
23294: "oasissapphire",
6001: "bouncebit",
42170: "arbitrumnova",
1101: "polygonzkevm",
40: "telos",
592: "astar",
42262: "oasisemerald",
1285: "moonriver",
245022934: "neonevm",
7777777: "zora",
122: "fuse",
321: "kcc",
1234: "stepnetwork",
106: "velas",
167000: "taiko",
288: "boba",
42766: "zkfair",
32520: "bitgert",
82: "meter",
} as const;
export type DexScreenerChainSlug =
(typeof mapChainIdToDexScreenerChainSlug)[keyof typeof mapChainIdToDexScreenerChainSlug];
@@ -0,0 +1,58 @@
"use client";
import { Spinner } from "@workspace/ui/components/spinner";
import { useTheme } from "next-themes";
import { useMemo } from "react";
import { ClientOnly } from "@/components/blocks/client-only";
import type { DexScreenerChainSlug } from "./dex-screener-chains";
function DexScreenerIframe(props: {
chain: DexScreenerChainSlug;
contractAddress: string;
}) {
const { theme } = useTheme();
const iframeUrl = useMemo(() => {
const resolvedTheme = theme === "light" ? "light" : "dark";
const url = new URL("https://dexscreener.com");
url.pathname = `${props.chain}/${props.contractAddress}`;
url.searchParams.set("embed", "1");
url.searchParams.set("loadChartSettings", "0");
url.searchParams.set("chartTheme", resolvedTheme);
url.searchParams.set("theme", resolvedTheme);
url.searchParams.set("trades", "1");
url.searchParams.set("chartStyle", "1");
url.searchParams.set("chartLeftToolbar", "0");
url.searchParams.set("chartType", "usd");
url.searchParams.set("interval", "15");
url.searchParams.set("chartDefaultOnMobile", "1");
return url.toString();
}, [theme, props.chain, props.contractAddress]);
return (
<iframe
className="w-full h-[500px] lg:h-[1000px] rounded-lg overflow-hidden border bg-card"
src={iframeUrl}
title="DexScreener"
></iframe>
);
}
export function DexScreener(props: {
chain: DexScreenerChainSlug;
contractAddress: string;
}) {
return (
<ClientOnly
ssr={
<div className="w-full h-[500px] lg:h-[1000px] rounded-lg border bg-card items-center justify-center flex">
<Spinner className="size-10" />
</div>
}
>
<DexScreenerIframe
chain={props.chain}
contractAddress={props.contractAddress}
/>
</ClientOnly>
);
}
@@ -9,12 +9,12 @@ import { resolveFunctionSelectors } from "@/lib/selectors";
import { AssetPageView } from "../_components/asset-page-view";
import { getContractCreator } from "../_components/getContractCreator";
import { PageHeader } from "../_components/PageHeader";
import { getTokenPriceData } from "./_apis/token-price-data";
import { ContractHeaderUI } from "./_components/ContractHeader";
import { TokenDropClaim } from "./_components/claim-tokens/claim-tokens-ui";
import { ContractAnalyticsOverview } from "./_components/contract-analytics/contract-analytics";
import { DexScreener } from "./_components/dex-screener";
import { mapChainIdToDexScreenerChainSlug } from "./_components/dex-screener-chains";
import { BuyTokenEmbed } from "./_components/PayEmbedSection";
import { TokenStats } from "./_components/PriceChart";
import { RecentTransfers } from "./_components/RecentTransfers";
import { fetchTokenInfoFromBridge } from "./_utils/fetch-coin-info";
import { getCurrencyMeta } from "./_utils/getCurrencyMeta";
@@ -30,7 +30,6 @@ export async function ERC20PublicPage(props: {
tokenDecimals,
tokenInfoFromUB,
functionSelectors,
tokenPriceData,
] = await Promise.all([
getContractMetadata({
contract: props.serverContract,
@@ -45,10 +44,6 @@ export async function ERC20PublicPage(props: {
tokenAddress: props.serverContract.address,
}),
resolveFunctionSelectors(props.serverContract),
getTokenPriceData({
chainId: props.serverContract.chain.id,
contractAddress: props.serverContract.address,
}),
]);
if (!contractMetadata.image && tokenInfoFromUB) {
@@ -83,10 +78,10 @@ export async function ERC20PublicPage(props: {
return (
<div className="flex grow flex-col">
<AssetPageView assetType="coin" chainId={props.chainMetadata.chainId} />
<PageHeader containerClassName="max-w-5xl" />
<PageHeader containerClassName="max-w-7xl" />
<div className="border-b">
<div className="container max-w-5xl">
<div className="container max-w-7xl">
<ContractHeaderUI
chainMetadata={props.chainMetadata}
clientContract={props.clientContract}
@@ -105,57 +100,59 @@ export async function ERC20PublicPage(props: {
</div>
</div>
<div className="container flex max-w-5xl grow flex-col pt-8 pb-10">
<div className="flex grow flex-col gap-8">
{showBuyEmbed && (
<div className="sm:flex sm:justify-center w-full sm:border sm:border-dashed sm:bg-accent/20 sm:py-12 rounded-lg overflow-hidden relative">
<GridPattern
width={30}
height={30}
x={-1}
y={-1}
strokeDasharray={"4 2"}
className="text-border dark:text-border/70"
style={{
maskImage:
"linear-gradient(to bottom right,white,transparent,transparent)",
}}
/>
<div className="sm:w-[420px] z-10">
<BuyEmbed
chainMetadata={props.chainMetadata}
claimConditionMeta={claimConditionMeta}
clientContract={props.clientContract}
tokenAddress={props.clientContract.address}
tokenDecimals={tokenDecimals}
tokenName={contractMetadata.name}
tokenSymbol={contractMetadata.symbol}
/>
</div>
</div>
)}
<div className="h-8" />
{tokenPriceData ? (
<>
<TokenStats
chainId={props.chainMetadata.chainId}
contractAddress={props.clientContract.address}
tokenPriceData={tokenPriceData}
/>
<ContractAnalyticsOverview
chainId={props.chainMetadata.chainId}
chainSlug={props.chainMetadata.slug}
contractAddress={props.clientContract.address}
/>
</>
) : (
<ContractAnalyticsOverview
chainId={props.chainMetadata.chainId}
chainSlug={props.chainMetadata.slug}
contractAddress={props.clientContract.address}
{showBuyEmbed && (
<div className="container max-w-7xl pb-10">
<div className=" sm:flex sm:justify-center w-full sm:border sm:border-dashed sm:bg-accent/20 sm:py-12 rounded-lg overflow-hidden relative">
<GridPattern
width={30}
height={30}
x={-1}
y={-1}
strokeDasharray={"4 2"}
className="text-border dark:text-border/70"
style={{
maskImage:
"linear-gradient(to bottom right,white,transparent,transparent)",
}}
/>
)}
<div className="sm:w-[420px] z-10">
<BuyEmbed
chainMetadata={props.chainMetadata}
claimConditionMeta={claimConditionMeta}
clientContract={props.clientContract}
tokenAddress={props.clientContract.address}
tokenDecimals={tokenDecimals}
tokenName={contractMetadata.name}
tokenSymbol={contractMetadata.symbol}
/>
</div>
</div>{" "}
</div>
)}
{props.chainMetadata.chainId in mapChainIdToDexScreenerChainSlug && (
<div className="container max-w-7xl pb-10">
<DexScreener
chain={
mapChainIdToDexScreenerChainSlug[
props.chainMetadata
.chainId as keyof typeof mapChainIdToDexScreenerChainSlug
]
}
contractAddress={props.clientContract.address}
/>
</div>
)}
<div className="container flex max-w-7xl grow flex-col pb-10">
<div className="flex grow flex-col gap-8">
<ContractAnalyticsOverview
chainId={props.chainMetadata.chainId}
chainSlug={props.chainMetadata.slug}
contractAddress={props.clientContract.address}
/>
<RecentTransfers
chainMetadata={props.chainMetadata}
@@ -8,6 +8,7 @@ export type SMSCountryTiers = {
tier3: string[];
tier4: string[];
tier5: string[];
tier6: string[];
};
export async function getSMSCountryTiers() {
@@ -40,6 +41,7 @@ export async function getSMSCountryTiers() {
tier3: [],
tier4: [],
tier5: [],
tier6: [],
};
}
@@ -53,6 +55,7 @@ export async function getSMSCountryTiers() {
tier3: [],
tier4: [],
tier5: [],
tier6: [],
};
}
}
@@ -66,6 +66,7 @@ function Variants(props: { currentPlan: Team["billingPlan"] }) {
tier3: ["FR", "DE", "ES", "IT"],
tier4: ["JP", "KR", "MX", "RU"],
tier5: ["BR", "AR", "CO", "CL", "PE", "VE", "SA"],
tier6: ["RU", "PG", "UZ", "TZ", "KM", "BT"],
}}
teamId="bar"
teamPlan={props.currentPlan}
@@ -5,6 +5,7 @@ export const tierPricing = {
tier3: "$0.10 per SMS",
tier4: "$0.20 per SMS",
tier5: "$0.40 per SMS",
tier6: "$1.00 per SMS",
} as const;
// Country names mapped to ISO codes
@@ -21,6 +22,14 @@ export const countryNames: Record<string, string> = {
AM: "Armenia",
AO: "Angola",
// Tier 6
RU: "Russia/Kazakhstan",
PG: "Papua New Guinea",
UZ: "Uzbekistan",
TZ: "Tanzania",
KM: "Comoros",
BT: "Bhutan",
// Tier 3
AR: "Argentina",
AS: "American Samoa",
@@ -244,6 +253,14 @@ export const countryPrefixes: Record<string, string> = {
AM: "+374",
AO: "+244",
// Tier 6
RU: "+7",
PG: "+675",
UZ: "+998",
TZ: "+255",
KM: "+269",
BT: "+975",
// Tier 3
AR: "+54",
AS: "+1",
+14
View File
@@ -1,5 +1,19 @@
# @thirdweb-dev/nebula
## 0.2.47
### Patch Changes
- Updated dependencies [[`97e5080`](https://github.com/thirdweb-dev/js/commit/97e5080fdfd5b8b1106141012bdee2db2d27ae4c)]:
- thirdweb@5.105.47
## 0.2.46
### Patch Changes
- Updated dependencies [[`224c9d0`](https://github.com/thirdweb-dev/js/commit/224c9d034f274c3e6cf510d3508856fc36501c63)]:
- thirdweb@5.105.46
## 0.2.45
### Patch Changes
+1 -1
View File
@@ -57,5 +57,5 @@
"type": "module",
"types": "./dist/types/exports/thirdweb.d.ts",
"typings": "./dist/types/exports/thirdweb.d.ts",
"version": "0.2.45"
"version": "0.2.47"
}
+12
View File
@@ -1,5 +1,17 @@
# thirdweb
## 5.105.47
### Patch Changes
- [#8048](https://github.com/thirdweb-dev/js/pull/8048) [`97e5080`](https://github.com/thirdweb-dev/js/commit/97e5080fdfd5b8b1106141012bdee2db2d27ae4c) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix fiat payments with no wallets connected
## 5.105.46
### Patch Changes
- [#8046](https://github.com/thirdweb-dev/js/pull/8046) [`224c9d0`](https://github.com/thirdweb-dev/js/commit/224c9d034f274c3e6cf510d3508856fc36501c63) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Improve WalletConnect chain switching reliability
## 5.105.45
### Patch Changes
+3 -3
View File
@@ -25,8 +25,8 @@
"@tanstack/react-query": "5.81.5",
"@thirdweb-dev/engine": "workspace:*",
"@thirdweb-dev/insight": "workspace:*",
"@walletconnect/sign-client": "2.20.1",
"@walletconnect/universal-provider": "2.21.4",
"@walletconnect/sign-client": "2.21.8",
"@walletconnect/universal-provider": "2.21.8",
"abitype": "1.0.8",
"cross-spawn": "7.0.6",
"fuse.js": "7.1.0",
@@ -417,5 +417,5 @@
}
},
"typings": "./dist/types/exports/thirdweb.d.ts",
"version": "5.105.45"
"version": "5.105.47"
}
@@ -93,7 +93,7 @@ describe.runIf(process.env.TW_SECRET_KEY)("erc721.getNFT", () => {
"name": "Doodle #1",
"uri": "ipfs://QmPMc4tcBsMqLRuCQtPmPe84bpSjrC3Ky7t3JWuHXYB4aS/1",
},
"owner": "0x620b70123fB810F6C653DA7644b5dD0b6312e4D8",
"owner": null,
"tokenAddress": "0x8a90cab2b38dba80c64b7734e58ee1db38b8992e",
"tokenURI": "ipfs://QmPMc4tcBsMqLRuCQtPmPe84bpSjrC3Ky7t3JWuHXYB4aS/1",
"type": "ERC721",
@@ -154,6 +154,11 @@ export function useSendTransactionCore(args: {
await switchChain(tx.chain);
// in smart wallet case, account may change after chain switch
_account = wallet.getAccount();
// ensure that the account has switched to the correct chain
if (wallet.getChain()?.id !== tx.chain.id) {
throw new Error(`Could not switch to chain ${tx.chain.id}`);
}
}
const account = _account;
@@ -38,7 +38,7 @@ interface StepExecutorOptions {
/** Prepared quote returned by Bridge.prepare */
request: BridgePrepareRequest;
/** Wallet instance providing getAccount() & sendTransaction */
wallet: Wallet;
wallet?: Wallet;
/** Window adapter for opening on-ramp URLs (web / RN) */
windowAdapter: WindowAdapter;
/** Thirdweb client for API calls */
@@ -408,6 +408,14 @@ export function useStepExecutor(
abortControllerRef.current = abortController;
try {
if (flatTxs.length > 0 && !wallet) {
throw new ApiError({
code: "INVALID_INPUT",
message: "No wallet provided to execute transactions",
statusCode: 400,
});
}
// Execute onramp first if configured and not already completed
if (preparedQuote.type === "onramp" && onrampStatus === "pending") {
await executeOnramp(
@@ -417,89 +425,98 @@ export function useStepExecutor(
);
}
// Then execute transactions
const account = wallet.getAccount();
if (!account) {
throw new ApiError({
code: "INVALID_INPUT",
message: "Wallet not connected",
statusCode: 400,
});
}
// Start from where we left off, or from the beginning
const startIndex = currentTxIndex ?? 0;
for (let i = startIndex; i < flatTxs.length; i++) {
if (abortController.signal.aborted) {
break;
if (flatTxs.length > 0) {
// Then execute transactions
if (!wallet) {
throw new ApiError({
code: "INVALID_INPUT",
message: "No wallet provided to execute transactions",
statusCode: 400,
});
}
const account = wallet.getAccount();
if (!account) {
throw new ApiError({
code: "INVALID_INPUT",
message: "Wallet not connected",
statusCode: 400,
});
}
const currentTx = flatTxs[i];
if (!currentTx) {
continue; // Skip invalid index
}
// Start from where we left off, or from the beginning
const startIndex = currentTxIndex ?? 0;
setCurrentTxIndex(i);
const currentStepData = preparedQuote.steps[currentTx._stepIndex];
if (!currentStepData) {
throw new Error(`Invalid step index: ${currentTx._stepIndex}`);
}
// switch chain if needed
if (currentTx.chainId !== wallet.getChain()?.id) {
await wallet.switchChain(getCachedChain(currentTx.chainId));
}
// Check if we can batch transactions
const canBatch =
account.sendBatchTransaction !== undefined && i < flatTxs.length - 1; // Not the last transaction
if (canBatch) {
// Find consecutive transactions on the same chain
const batchTxs: FlattenedTx[] = [currentTx];
let j = i + 1;
while (j < flatTxs.length) {
const nextTx = flatTxs[j];
if (!nextTx || nextTx.chainId !== currentTx.chainId) {
break;
}
batchTxs.push(nextTx);
j++;
for (let i = startIndex; i < flatTxs.length; i++) {
if (abortController.signal.aborted) {
break;
}
// Execute batch if we have multiple transactions
if (batchTxs.length > 1) {
await executeBatch(
batchTxs,
account,
completedStatusResults,
abortController.signal,
);
const currentTx = flatTxs[i];
if (!currentTx) {
continue; // Skip invalid index
}
// Mark all batched transactions as completed
for (const tx of batchTxs) {
setCompletedTxs((prev) => new Set(prev).add(tx._index));
setCurrentTxIndex(i);
const currentStepData = preparedQuote.steps[currentTx._stepIndex];
if (!currentStepData) {
throw new Error(`Invalid step index: ${currentTx._stepIndex}`);
}
// switch chain if needed
if (currentTx.chainId !== wallet.getChain()?.id) {
await wallet.switchChain(getCachedChain(currentTx.chainId));
}
// Check if we can batch transactions
const canBatch =
account.sendBatchTransaction !== undefined &&
i < flatTxs.length - 1; // Not the last transaction
if (canBatch) {
// Find consecutive transactions on the same chain
const batchTxs: FlattenedTx[] = [currentTx];
let j = i + 1;
while (j < flatTxs.length) {
const nextTx = flatTxs[j];
if (!nextTx || nextTx.chainId !== currentTx.chainId) {
break;
}
batchTxs.push(nextTx);
j++;
}
// Skip ahead
i = j - 1;
continue;
// Execute batch if we have multiple transactions
if (batchTxs.length > 1) {
await executeBatch(
batchTxs,
account,
completedStatusResults,
abortController.signal,
);
// Mark all batched transactions as completed
for (const tx of batchTxs) {
setCompletedTxs((prev) => new Set(prev).add(tx._index));
}
// Skip ahead
i = j - 1;
continue;
}
}
// Execute single transaction
await executeSingleTx(
currentTx,
account,
completedStatusResults,
abortController.signal,
);
// Mark transaction as completed
setCompletedTxs((prev) => new Set(prev).add(currentTx._index));
}
// Execute single transaction
await executeSingleTx(
currentTx,
account,
completedStatusResults,
abortController.signal,
);
// Mark transaction as completed
setCompletedTxs((prev) => new Set(prev).add(currentTx._index));
}
// All done - check if we actually completed everything
if (!abortController.signal.aborted) {
setCurrentTxIndex(undefined);
@@ -29,7 +29,7 @@ export type PaymentMethod =
}
| {
type: "fiat";
payerWallet: Wallet;
payerWallet?: Wallet;
currency: string;
onramp: "stripe" | "coinbase" | "transak";
};
@@ -369,8 +369,7 @@ export function BridgeOrchestrator({
{state.value === "execute" &&
state.context.quote &&
state.context.request &&
state.context.selectedPaymentMethod?.payerWallet && (
state.context.request && (
<StepRunner
autoStart={true}
client={client}
@@ -193,6 +193,11 @@ export type BuyWidgetProps = {
* Custom label for the main action button.
*/
buttonLabel?: string;
/**
* The receiver address for the purchased funds.
*/
receiverAddress?: Address;
};
// Enhanced UIOptions to handle unsupported token state
@@ -455,7 +460,7 @@ export function BuyWidget(props: BuyWidgetProps) {
paymentMethods={props.paymentMethods}
presetOptions={props.presetOptions}
purchaseData={props.purchaseData}
receiverAddress={undefined}
receiverAddress={props.receiverAddress}
uiOptions={bridgeDataQuery.data.data}
showThirdwebBranding={props.showThirdwebBranding}
/>
@@ -133,6 +133,7 @@ export function QuoteLoader({
toChainId: destinationToken.chainId,
toToken: destinationToken.address,
});
return true;
},
queryKey: ["loading_quote", paymentMethod.type],
});
@@ -30,7 +30,7 @@ interface StepRunnerProps {
/**
* Wallet instance for executing transactions
*/
wallet: Wallet;
wallet?: Wallet;
/**
* Thirdweb client for API calls
@@ -101,6 +101,7 @@ export function PaymentDetails({
: preparedQuote.intent.destinationTokenAddress,
});
}
return true;
},
queryKey: ["payment_details", preparedQuote.type],
});
@@ -239,7 +240,7 @@ export function PaymentDetails({
receiver={preparedQuote.intent.receiver}
sender={
preparedQuote.intent.sender ||
paymentMethod.payerWallet.getAccount()?.address
paymentMethod.payerWallet?.getAccount()?.address
}
toAmount={displayData.destinationAmount}
toToken={displayData.destinationToken}
@@ -196,15 +196,17 @@ export function PaymentSelection({
const handleOnrampProviderSelected = (
provider: "coinbase" | "stripe" | "transak",
) => {
if (!payerWallet) {
onError(new Error("No wallet available for fiat payment"));
const recipientAddress =
receiverAddress || payerWallet?.getAccount()?.address;
if (!recipientAddress) {
onError(new Error("No recipient address available for fiat payment"));
return;
}
const fiatPaymentMethod: PaymentMethod = {
currency: "USD",
currency: currency || "USD",
onramp: provider,
payerWallet, // Default to USD for now
payerWallet,
type: "fiat",
};
handlePaymentMethodSelected(fiatPaymentMethod);
@@ -307,7 +309,9 @@ export function PaymentSelection({
country={country}
client={client}
onProviderSelected={handleOnrampProviderSelected}
toAddress={receiverAddress || ""}
toAddress={
receiverAddress || payerWallet?.getAccount()?.address || ""
}
toAmount={destinationAmount}
toChainId={destinationToken.chainId}
toTokenAddress={destinationToken.address}
@@ -36,6 +36,7 @@ export function FiatValue(
props.chain.id,
getTokenAddress(props.token),
deferredTokenAmount,
props.currency,
],
});
@@ -483,6 +483,8 @@ export function createWallet<const ID extends WalletId>(
id,
subscribe: emitter.subscribe,
switchChain: async (c) => {
// TODO: this should actually throw an error if the chain switch fails
// but our useSwitchActiveWalletChain hook currently doesn't handle this
try {
await handleSwitchChain(c);
chain = c;
@@ -1,6 +1,6 @@
import { signLoginPayload } from "../../../../auth/core/sign-login-payload.js";
import type { LoginPayload } from "../../../../auth/core/types.js";
import type { Chain } from "../../../../chains/types.js";
import { getCachedChain } from "../../../../chains/utils.js";
import type { ThirdwebClient } from "../../../../client/client.js";
import { getClientFetch } from "../../../../utils/fetch.js";
import { stringify } from "../../../../utils/json.js";
@@ -14,14 +14,14 @@ import type { AuthStoredTokenWithCookieReturnType } from "./types.js";
*/
export async function siweAuthenticate(args: {
wallet: Wallet;
chain: Chain;
client: ThirdwebClient;
ecosystem?: Ecosystem;
}): Promise<AuthStoredTokenWithCookieReturnType> {
const { wallet, chain, client, ecosystem } = args;
const { wallet, client, ecosystem } = args;
const siweChain = getCachedChain(1); // always use mainnet for SIWE for wide wallet compatibility
// only connect if the wallet doesn't already have an account
const account =
wallet.getAccount() || (await wallet.connect({ chain, client }));
wallet.getAccount() || (await wallet.connect({ chain: siweChain, client }));
const clientFetch = getClientFetch(client, ecosystem);
const payload = await (async () => {
@@ -31,7 +31,7 @@ export async function siweAuthenticate(args: {
ecosystem: args.ecosystem,
});
const res = await clientFetch(
`${path}&address=${account.address}&chainId=${chain.id}`,
`${path}&address=${account.address}&chainId=${siweChain.id}`,
);
if (!res.ok) throw new Error("Failed to generate SIWE login payload");
@@ -183,7 +183,6 @@ export class InAppNativeConnector implements InAppConnector {
"../core/authentication/siwe.js"
);
return siweAuthenticate({
chain: params.chain,
client: this.client,
ecosystem: params.ecosystem,
wallet: params.wallet,
@@ -104,7 +104,6 @@ describe("InAppWebConnector.connect", () => {
});
expect(siweAuthenticate).toHaveBeenCalledWith({
chain: ethereum,
client: TEST_CLIENT,
ecosystem: undefined,
wallet: mockWallet,
@@ -365,7 +365,6 @@ export class InAppWebConnector implements InAppConnector {
}
case "wallet": {
return siweAuthenticate({
chain: args.chain,
client: this.client,
ecosystem: this.ecosystem,
wallet: args.wallet,
@@ -132,7 +132,7 @@ export async function connectWC(
...(wcOptions?.pairingTopic
? { pairingTopic: wcOptions?.pairingTopic }
: {}),
namespaces: {
optionalNamespaces: {
[NAMESPACE]: {
chains: chainsToRequest,
events: ["chainChanged", "accountsChanged"],
@@ -157,14 +157,8 @@ export async function connectWC(
);
const currentChainId = chainsToRequest[0]?.split(":")[1] || 1;
const providerChainId = normalizeChainId(currentChainId);
const accounts: string[] = await provider.request(
{
method: "eth_requestAccounts",
params: [],
},
`eip155:${providerChainId}`,
);
const address = accounts[0];
const account = firstAccountOn(provider.session, `eip155:1`); // grab the address from mainnet
const address = account;
if (!address) {
throw new Error("No accounts found on provider.");
}
@@ -202,6 +196,109 @@ export async function connectWC(
);
}
async function ensureTargetChain(
provider: Awaited<ReturnType<typeof initProvider>>,
chain: Chain,
walletInfo: WalletInfo,
) {
if (!provider.session) {
throw new Error("No session found on provider.");
}
const TARGET_CAIP = `eip155:${chain.id}`;
const TARGET_HEX = numberToHex(chain.id);
// Fast path: already enabled
if (hasChainEnabled(provider.session, TARGET_CAIP)) {
provider.setDefaultChain(TARGET_CAIP);
return;
}
// 1) Try switch
try {
await requestAndOpenWallet({
provider,
payload: {
method: "wallet_switchEthereumChain",
params: [{ chainId: TARGET_HEX }],
},
chain: TARGET_CAIP, // route to target
walletInfo,
});
provider.setDefaultChain(TARGET_CAIP);
return;
} catch (err: any) {
const code = err?.code ?? err?.data?.originalError?.code;
// 4001 user rejected; stop
if (code === 4001) throw new Error("User rejected chain switch");
// fall through on 4902 or unknown -> try add
}
// 2) Add the chain via any chain we already have
const routeChain = anyRoutableChain(provider.session);
if (!routeChain)
throw new Error("No routable chain to send wallet_addEthereumChain");
try {
await requestAndOpenWallet({
provider,
payload: {
method: "wallet_addEthereumChain",
params: [
{
chainId: TARGET_HEX,
chainName: chain.name,
nativeCurrency: chain.nativeCurrency,
rpcUrls: [chain.rpc],
blockExplorerUrls: [chain.blockExplorers?.[0]?.url ?? ""],
},
],
},
chain: routeChain, // route via known-good chain, not the target
walletInfo,
});
} catch (err: any) {
const code = err?.code ?? err?.data?.originalError?.code;
if (code === 4001) throw new Error("User rejected add chain");
throw new Error(`Add chain failed: ${err?.message || String(err)}`);
}
// 3) Re-try switch after add
await requestAndOpenWallet({
provider,
payload: {
method: "wallet_switchEthereumChain",
params: [{ chainId: TARGET_HEX }],
},
chain: TARGET_CAIP,
walletInfo,
});
provider.setDefaultChain(TARGET_CAIP);
// 4) Verify enablement
if (!hasChainEnabled(provider.session, TARGET_CAIP)) {
throw new Error("Target chain still not enabled by wallet");
}
}
type WCSession = Awaited<ReturnType<typeof UniversalProvider.init>>["session"];
function getNS(session: WCSession) {
return session?.namespaces?.eip155;
}
function hasChainEnabled(session: WCSession, caip: string) {
const ns = getNS(session);
return !!ns?.accounts?.some((a) => a.startsWith(`${caip}:`));
}
function firstAccountOn(session: WCSession, caip: string): string | null {
const ns = getNS(session);
const hit = ns?.accounts?.find((a) => a.startsWith(`${caip}:`));
return hit ? (hit.split(":")[2] ?? null) : null;
}
function anyRoutableChain(session: WCSession): string | null {
const ns = getNS(session);
return ns?.accounts?.[0]?.split(":")?.slice(0, 2)?.join(":") ?? null; // e.g. "eip155:1"
}
/**
* Auto connect to already connected wallet connect session.
* @internal
@@ -545,14 +642,17 @@ function onConnect(
account,
chain,
disconnect,
(newChain) => switchChainWC(provider, newChain),
(newChain) => switchChainWC(provider, newChain, walletInfo),
];
}
async function switchChainWC(provider: WCProvider, chain: Chain) {
const chainId = chain.id;
async function switchChainWC(
provider: WCProvider,
chain: Chain,
walletInfo: WalletInfo,
) {
try {
provider.setDefaultChain(`eip155:${chainId}`);
await ensureTargetChain(provider, chain, walletInfo);
} catch (error) {
const message =
typeof error === "string" ? error : (error as ProviderRpcError)?.message;
@@ -605,7 +705,10 @@ function getChainsToRequest(options: {
chainIds.push(chain.id);
}
if (!options.chain && optionalChains.length === 0) {
// always include mainnet
// many wallets only support a handful of chains, but mainnet is always supported
// we will add additional chains in switchChain if needed
if (!chainIds.includes(1)) {
rpcMap[1] = getCachedChain(1).rpc;
chainIds.push(1);
}
+4
View File
@@ -1,5 +1,9 @@
# @thirdweb-dev/wagmi-adapter
## 0.2.144
## 0.2.143
## 0.2.142
## 0.2.141
+1 -1
View File
@@ -55,5 +55,5 @@
"type": "module",
"types": "./dist/types/exports/thirdweb.d.ts",
"typings": "./dist/types/exports/thirdweb.d.ts",
"version": "0.2.142"
"version": "0.2.144"
}
+74 -236
View File
@@ -518,7 +518,7 @@ importers:
version: 9.0.15([email protected](@testing-library/[email protected])([email protected])([email protected])([email protected]))
'@storybook/nextjs':
specifier: 9.0.15
version: 9.0.15([email protected](@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@testing-library/[email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])
version: 9.0.15([email protected](@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@testing-library/[email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])
'@types/node':
specifier: 22.14.1
version: 22.14.1
@@ -1331,11 +1331,11 @@ importers:
specifier: workspace:*
version: link:../insight
'@walletconnect/sign-client':
specifier: 2.20.1
version: 2.20.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
specifier: 2.21.8
version: 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@walletconnect/universal-provider':
specifier: 2.21.4
version: 2.21.4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
specifier: 2.21.8
version: 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
abitype:
specifier: 1.0.8
version: 1.0.8([email protected])([email protected])
@@ -1607,7 +1607,7 @@ importers:
version: 9.0.15([email protected](@testing-library/[email protected])([email protected])([email protected])([email protected]))
'@storybook/nextjs':
specifier: 9.0.15
version: 9.0.15([email protected](@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@testing-library/[email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])
version: 9.0.15([email protected](@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@testing-library/[email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])
'@types/react':
specifier: 19.1.8
version: 19.1.8
@@ -7515,10 +7515,6 @@ packages:
resolution: {integrity: sha512-iu0mgLj51AXcKpdNj8+4EdNNBd/mkNjLEhZn6UMc/r7BM9WbmpPMEydA39WeRLbdLO4kbpmq4wTbiskI1rg+HA==}
engines: {node: '>=18'}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-DxybNfznr7aE/U9tJqvpEorUW2f/6kR0S1Zk78NqKam1Ex+BQFDM5j2Az3WayfFDZz3adkxkLAszfdorvPxDlw==}
engines: {node: '>=18'}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-o6R7Ua4myxR8aRUAJ1z3gT9nM+jd2B2mfamu6arzy1Cc6vi10fIwFWb6vg3bC8xJ6o9H3n/cN5TOW3aA9Y1XVw==}
engines: {node: '>=18'}
@@ -7527,14 +7523,14 @@ packages:
resolution: {integrity: sha512-Tp4MHJYcdWD846PH//2r+Mu4wz1/ZU/fr9av1UWFiaYQ2t2TPLDiZxjLw54AAEpMqlEHemwCgiRiAmjR1NDdTQ==}
engines: {node: '>=18'}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-XtwPUCj3bCNX/2yjYGlQyvcsn32wkzixCjyWOD4pdKFVk7opZPAdF4xr85rmo6nJ7AiBYxjV1IH0bemTPEdE6Q==}
engines: {node: '>=18'}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-CxGbio1TdCkou/TYn8X6Ih1mUX3UtFTk+t618/cIrT3VX5IjQW09n9I/pVafr7bQbBtm9/ATr7ugUEMrLu5snA==}
engines: {node: '>=18'}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-MD1SY7KAeHWvufiBK8C1MwP9/pxxI7SnKi/rHYfjco2Xvke+M+Bbm2OzvuSN7dYZvwLTkZCiJmBccTNVPCpSUQ==}
engines: {node: '>=18'}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==}
@@ -7609,42 +7605,36 @@ packages:
'@walletconnect/[email protected]':
resolution: {integrity: sha512-a/K5PRIFPCjfHq5xx3WYKHAAF8Ft2I1LtxloyibqiQOoUtNLfKgFB1r8sdMvXM7/PADNPe4iAw4uSE6PrARrfg==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-QXzIAHbyZZ52+97Bp/+/SBkN3hX0pam8l4lnA4P7g+aFPrVZUrMwZPIf+FV7UbEswqqwo3xmFI41TKgj8w8B9w==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-z7h+PeLa5Au2R591d/8ZlziE0stJvdzP9jNFzFolf2RG/OiXulgFKum8PrIyXy+Rg2q95U9nRVUF9fWcn78yBA==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-QaXzmPsMnKGV6tc4UcdnQVNOz4zyXgarvdIQibJ4L3EmLat73r5ZVl4c0cCOcoaV7rgM9Wbphgu5E/7jNcd3Zg==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-v1OJ9IQCZAqaDEUYGFnGLe2fSp8DN9cv7j8tUYm5ngiFK7h6LjP4Ew3gGCca4AHWzMFkHuIRNQ+6Ypep1K/B7g==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-IAs/IqmE1HVL9EsvqkNRU4NeAYe//h9NwqKi7ToKYZv4jhcC3BBemUD1r8iQJSTHMhO41EKn1G9/DiBln3ZiwQ==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-lTcUbMjQ0YUZ5wzCLhpBeS9OkWYgLLly6BddEp2+pm4QxiwCCU2Nao0nBJXgzKbZYQOgrEGqtdm/7ze67gjzRA==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-/LZWhkVCUN+fcTgQUxArxhn2R8DF+LSd/6Wh9FnpjeK/Sdupx1EPS8okWG6WPAqq2f404PRoNAfQytQ82Xdl3g==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-HM0YZxT+wNqskoZkuju5owbKTlqUXNKfGlJk/zh9pWaVWBR2QamvQ+47Cx09OoGPRQjQH0JmgRiUV4bOwWNeHg==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-ll+9upzqt95ZBWcfkOszXZkfnpbJJ2CmxMfGgE5GmhdxxxCcO5bGhXkI+x8OpiS555RJ/v/sXJYMSOLkmu4fFw==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-UeefNadqP6IyfwWC1Yi7ux+ljbP2R66PLfDrDm8izmvlPmYlqRerJWJvYO4t0Vvr9wrG4Ko7E0c4M7FaPKT/sQ==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-6O61esDSW8FZNdFezgB4bX2S35HM6tCwBEjGHNB8JeoKCfpXG33hw2raU/SBgBL/jmM57QRW4M1aFH7v1u9z7g==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-kpTXbenKeMdaz6mgMN/jKaHHbu6mdY3kyyrddzE/mthOd2KLACVrZr7hrTf+Fg2coPVen5d1KKyQjyECEdzOCw==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-xuLIPrLxe6viMu8Uk28Nf0sgyMy+4oT0mroOjBe5Vqyft8GTiwUBKZXmrGU9uDzZsYVn1FXLO9CkuNHXda3ODA==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-LkKg+EjcSUpPUhhvRANgkjPL38wJPIWumAYD8OK/g4OFuJ4W3lS/XTCKthABQfFqmiNbNbVllmywiyE44KdpQg==}
@@ -7654,30 +7644,27 @@ packages:
'@walletconnect/[email protected]':
resolution: {integrity: sha512-Wjx9G8gUHVMnYfxtasC9poGm8QMiPCpXpbbLFT+iPoQskDDly8BwueWnqKs4Mx2SdIAWAwuXeZ5ojk5qQOxJJg==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-ZSYU5H7Zi/nEy3L21kw5l3ovMagrbXDRKBG8vjPpGQAkflQocRj6d0SesFOCBEdJS16nt+6dKI2f5blpOGzyTQ==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-SMXGGXyj78c8Ru2f665ZFZU24phn0yZyCP5Ej7goxVQxABwqWKM/odj3j/IxZv+hxA8yU13yxaubgVefnereqw==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-Nc1Z6VXnya152yucNDPnlTkrhG289tCUfcjiWqDmwNYzFSfdT5oJQHlnffQXlvoks90kn5Ru8Rnwag2CH1YOVQ==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-VU5CcUF4sZDg8a2/ov29OJzT3KfLuZqJUM0GemW30dlipI5fkpb0VPenZK7TcdLPXc1LN+Q+7eyTqHRoAu/BIA==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-u/uyJkVyxLLUbHbpMv7MmuOkGfElG08l6P2kMTAfN7nAVyTgpb8g6kWLMNqfmYXVz+h+finf5FSV4DgL2vOvPQ==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-VPZvTcrNQCkbGOjFRbC24mm/pzbRMUq2DSQoiHlhh0X1U7ZhuIrzVtAoKsrzu6rqjz0EEtGxCr3K1TGRqDG4NA==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-LuSyBXvRLiDqIu4uMFei5eJ/WPhkIkdW58fmDlRnryatIuBPCho3dlrNSbOjVSdsID+OvxjOlpPLi+5h4oTbaA==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-RSPSxPvGMuvfGhd5au1cf9cmHB/KVVLFotJR9ltisjFABGtH2215U5oaVp+a7W18QX37aemejRkvacqOELVySA==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-HtMraGJ9qXo55l4wGSM1aZvyz0XVv460iWhlRGAyRl9Yz8RQeKyXavDhwBfcTFha/6kwLxPExqQ+MURtKeVVXw==}
'@walletconnect/[email protected]':
resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==}
@@ -23002,7 +22989,7 @@ snapshots:
'@scure/[email protected]':
dependencies:
'@noble/curves': 1.9.2
'@noble/curves': 1.9.6
'@noble/hashes': 1.8.0
'@scure/base': 1.2.6
@@ -24184,7 +24171,7 @@ snapshots:
- webpack-hot-middleware
- webpack-plugin-serve
'@storybook/[email protected]([email protected](@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@testing-library/[email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])':
'@storybook/[email protected]([email protected](@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@testing-library/[email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@babel/core': 7.28.0
'@babel/plugin-syntax-bigint': 7.8.3(@babel/[email protected])
@@ -25586,7 +25573,7 @@ snapshots:
sirv: 3.0.1
tinyglobby: 0.2.14
tinyrainbow: 2.0.0
vitest: 3.2.4(@types/[email protected])(@types/node@22.14.1)(@vitest/[email protected])(happy-dom@18.0.1)([email protected])([email protected])(msw@2.10.2(@types/node@22.14.1)([email protected]))([email protected])([email protected])([email protected])
vitest: 3.2.4(@types/[email protected])(@types/node@24.0.10)(@vitest/[email protected])(happy-dom@17.4.4)([email protected])([email protected])(msw@2.7.5(@types/node@24.0.10)([email protected]))([email protected])([email protected])([email protected])
'@vitest/[email protected]':
dependencies:
@@ -25830,49 +25817,6 @@ snapshots:
- utf-8-validate
- zod
'@walletconnect/[email protected](@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
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([email protected])([email protected])
'@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@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.20.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/utils': 2.20.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@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/[email protected]([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@walletconnect/heartbeat': 1.2.2
@@ -25959,7 +25903,7 @@ snapshots:
- utf-8-validate
- zod
'@walletconnect/[email protected].4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
'@walletconnect/[email protected].5([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@walletconnect/heartbeat': 1.2.2
'@walletconnect/jsonrpc-provider': 1.0.14
@@ -25972,8 +25916,8 @@ snapshots:
'@walletconnect/relay-auth': 1.1.0
'@walletconnect/safe-json': 1.0.2
'@walletconnect/time': 1.0.2
'@walletconnect/types': 2.21.4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/utils': 2.21.4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@walletconnect/types': 2.21.5([email protected])([email protected])
'@walletconnect/utils': 2.21.5([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@walletconnect/window-getters': 1.0.1
es-toolkit: 1.39.3
events: 3.3.0
@@ -26002,7 +25946,7 @@ snapshots:
- utf-8-validate
- zod
'@walletconnect/[email protected].5([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
'@walletconnect/[email protected].8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@walletconnect/heartbeat': 1.2.2
'@walletconnect/jsonrpc-provider': 1.0.14
@@ -26015,8 +25959,8 @@ snapshots:
'@walletconnect/relay-auth': 1.1.0
'@walletconnect/safe-json': 1.0.2
'@walletconnect/time': 1.0.2
'@walletconnect/types': 2.21.5([email protected])([email protected])
'@walletconnect/utils': 2.21.5([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@walletconnect/types': 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/utils': 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@walletconnect/window-getters': 1.0.1
es-toolkit: 1.39.3
events: 3.3.0
@@ -26295,41 +26239,6 @@ snapshots:
- utf-8-validate
- zod
'@walletconnect/[email protected](@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@walletconnect/core': 2.20.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@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(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/utils': 2.20.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
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
- typescript
- uploadthing
- utf-8-validate
- zod
'@walletconnect/[email protected]([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@walletconnect/core': 2.21.0([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
@@ -26400,41 +26309,6 @@ snapshots:
- utf-8-validate
- zod
'@walletconnect/[email protected](@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@walletconnect/core': 2.21.4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@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.4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/utils': 2.21.4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
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
- typescript
- uploadthing
- utf-8-validate
- zod
'@walletconnect/[email protected]([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@walletconnect/core': 2.21.5([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
@@ -26470,17 +26344,16 @@ snapshots:
- utf-8-validate
- zod
'@walletconnect/[email protected]':
dependencies:
tslib: 1.14.1
'@walletconnect/[email protected]([email protected])([email protected])':
'@walletconnect/[email protected](@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@walletconnect/core': 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@walletconnect/events': 1.0.1
'@walletconnect/heartbeat': 1.2.2
'@walletconnect/jsonrpc-types': 1.0.4
'@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/jsonrpc-utils': 1.0.8
'@walletconnect/logger': 2.1.2
'@walletconnect/time': 1.0.2
'@walletconnect/types': 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/utils': 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
events: 3.3.0
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -26498,11 +26371,19 @@ snapshots:
- '@vercel/blob'
- '@vercel/kv'
- aws4fetch
- bufferutil
- db0
- ioredis
- typescript
- uploadthing
- utf-8-validate
- zod
'@walletconnect/t[email protected](@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])':
'@walletconnect/t[email protected]':
dependencies:
tslib: 1.14.1
'@walletconnect/[email protected]([email protected])([email protected])':
dependencies:
'@walletconnect/events': 1.0.1
'@walletconnect/heartbeat': 1.2.2
@@ -26586,7 +26467,7 @@ snapshots:
- ioredis
- uploadthing
'@walletconnect/[email protected].4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])':
'@walletconnect/[email protected].5([email protected])([email protected])':
dependencies:
'@walletconnect/events': 1.0.1
'@walletconnect/heartbeat': 1.2.2
@@ -26614,7 +26495,7 @@ snapshots:
- ioredis
- uploadthing
'@walletconnect/[email protected].5([email protected])([email protected])':
'@walletconnect/[email protected].8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])':
dependencies:
'@walletconnect/events': 1.0.1
'@walletconnect/heartbeat': 1.2.2
@@ -26759,45 +26640,6 @@ snapshots:
- utf-8-validate
- zod
'@walletconnect/[email protected](@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@walletconnect/events': 1.0.1
'@walletconnect/jsonrpc-http-connection': 1.0.8([email protected])
'@walletconnect/jsonrpc-provider': 1.0.14
'@walletconnect/jsonrpc-types': 1.0.4
'@walletconnect/jsonrpc-utils': 1.0.8
'@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/logger': 2.1.2
'@walletconnect/sign-client': 2.21.4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@walletconnect/types': 2.21.4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/utils': 2.21.4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
es-toolkit: 1.39.3
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/[email protected]([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@walletconnect/events': 1.0.1
@@ -26837,25 +26679,20 @@ snapshots:
- utf-8-validate
- zod
'@walletconnect/u[email protected]([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
'@walletconnect/u[email protected](@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@noble/ciphers': 1.2.1
'@noble/curves': 1.8.1
'@noble/hashes': 1.7.1
'@walletconnect/events': 1.0.1
'@walletconnect/jsonrpc-http-connection': 1.0.8([email protected])
'@walletconnect/jsonrpc-provider': 1.0.14
'@walletconnect/jsonrpc-types': 1.0.4
'@walletconnect/jsonrpc-utils': 1.0.8
'@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@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([email protected])([email protected])
'@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([email protected])([email protected])([email protected])([email protected])
'@walletconnect/logger': 2.1.2
'@walletconnect/sign-client': 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
'@walletconnect/types': 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/utils': 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
es-toolkit: 1.39.3
events: 3.3.0
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -26874,13 +26711,14 @@ snapshots:
- aws4fetch
- bufferutil
- db0
- encoding
- ioredis
- typescript
- uploadthing
- utf-8-validate
- zod
'@walletconnect/utils@2.20.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
'@walletconnect/utils@2.19.2([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@noble/ciphers': 1.2.1
'@noble/curves': 1.8.1
@@ -26891,7 +26729,7 @@ snapshots:
'@walletconnect/relay-auth': 1.1.0
'@walletconnect/safe-json': 1.0.2
'@walletconnect/time': 1.0.2
'@walletconnect/types': 2.20.1(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/types': 2.19.2([email protected])([email protected])
'@walletconnect/window-getters': 1.0.1
'@walletconnect/window-metadata': 1.0.1
bs58: 6.0.0
@@ -27009,7 +26847,7 @@ snapshots:
- utf-8-validate
- zod
'@walletconnect/[email protected].4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
'@walletconnect/[email protected].5([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@msgpack/msgpack': 3.1.2
'@noble/ciphers': 1.3.0
@@ -27022,7 +26860,7 @@ snapshots:
'@walletconnect/relay-auth': 1.1.0
'@walletconnect/safe-json': 1.0.2
'@walletconnect/time': 1.0.2
'@walletconnect/types': 2.21.4(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/types': 2.21.5([email protected])([email protected])
'@walletconnect/window-getters': 1.0.1
'@walletconnect/window-metadata': 1.0.1
blakejs: 1.2.1
@@ -27055,7 +26893,7 @@ snapshots:
- utf-8-validate
- zod
'@walletconnect/[email protected].5([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
'@walletconnect/[email protected].8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@msgpack/msgpack': 3.1.2
'@noble/ciphers': 1.3.0
@@ -27068,7 +26906,7 @@ snapshots:
'@walletconnect/relay-auth': 1.1.0
'@walletconnect/safe-json': 1.0.2
'@walletconnect/time': 1.0.2
'@walletconnect/types': 2.21.5([email protected])([email protected])
'@walletconnect/types': 2.21.8(@react-native-async-storage/[email protected]([email protected](@babel/[email protected])(@babel/[email protected](@babel/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
'@walletconnect/window-getters': 1.0.1
'@walletconnect/window-metadata': 1.0.1
blakejs: 1.2.1
@@ -29435,8 +29273,8 @@ snapshots:
'@typescript-eslint/parser': 7.14.1([email protected])([email protected])
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1([email protected])([email protected])
eslint-plugin-import: 2.32.0(@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected])
eslint-import-resolver-typescript: 3.10.1([email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]))([email protected])
eslint-plugin-import: 2.32.0(@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]([email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]))([email protected]))([email protected])
eslint-plugin-jsx-a11y: 6.10.2([email protected])
eslint-plugin-react: 7.37.5([email protected])
eslint-plugin-react-hooks: 5.2.0([email protected])
@@ -29455,7 +29293,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
[email protected]([email protected])([email protected]):
[email protected]([email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]))([email protected]):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.1([email protected])
@@ -29466,7 +29304,7 @@ snapshots:
tinyglobby: 0.2.14
unrs-resolver: 1.10.1
optionalDependencies:
eslint-plugin-import: 2.32.0(@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected])
eslint-plugin-import: 2.32.0(@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]([email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]))([email protected]))([email protected])
transitivePeerDependencies:
- supports-color
@@ -29491,18 +29329,18 @@ snapshots:
- bluebird
- supports-color
[email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected]([email protected])([email protected]))([email protected]):
[email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected]([email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]))([email protected]))([email protected]):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 7.14.1([email protected])([email protected])
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1([email protected])([email protected])
eslint-import-resolver-typescript: 3.10.1([email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]))([email protected])
transitivePeerDependencies:
- supports-color
[email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected]):
[email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]([email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]))([email protected]))([email protected]):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -29513,7 +29351,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.1(@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected]([email protected])([email protected]))([email protected])
eslint-module-utils: 2.12.1(@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected]([email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected]))([email protected]))([email protected])
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3