Compare commits

...
Author SHA1 Message Date
Joaquim VergesGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
40fa323294 Version Packages (#6073)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-01-28 11:02:56 +13:00
Joaquim VergesandGitHub 2cebb420e6 [SDK] fix: Show link profiles for ecosystem smart wallets (#6072) 2025-01-28 10:59:05 +13:00
Joaquim VergesandGitHub e89ddb24f2 [SDK] fix: Update ecosystem name and admin wallet handling (#6071) 2025-01-28 10:54:27 +13:00
Joaquim VergesGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
86f205e2aa Version Packages (#6069)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-01-28 10:14:31 +13:00
Joaquim VergesandGitHub 6c277ae676 [SDK] fix: Respect chain param in in-app wallet connection (#6068) 2025-01-28 09:57:07 +13:00
MananTank 153651df35 [TOOL-3241] Fix previous account shown after logging out in onboarding flow (#6061) 2025-01-27 19:49:51 +00:00
MananTank 8ba460b6fc [NEB-77] Nebula: Various UI updates (#6060) 2025-01-27 18:18:13 +00:00
MananTank 1e61a9edfc [TOOL-3238] Fix Engine backend wallet balances not updating on chain change (#6059) 2025-01-27 17:00:48 +00:00
MananTank d03e687aa9 [TOOL-3231] Show View Project Link after creating a project in Modal (#6055)
<!-- start pr-codex -->

## PR-Codex overview
This PR introduces the `teamSlug` prop across multiple components to enhance API key management by associating it with specific teams. This allows for better project handling and user navigation within the dashboard.

### Detailed summary
- Added `teamSlug` prop to `CreateAPIKeyModal` and related components.
- Updated `embed-setup.tsx` to handle `teamSlug` as `undefined`.
- Integrated `teamSlug` in `TeamProjectsPage` and `AccountHeader`.
- Modified `CreateAPIKeyDialog` to include `teamSlug` in props.
- Enhanced `APIKeyDetails` to fetch projects based on `teamSlug`.
- Implemented conditional rendering for "View Project" button based on `teamSlug`.

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

<!-- end pr-codex -->
2025-01-27 09:52:19 +00:00
Joaquim VergesandGitHub e1c0dbe19e [SDK] chore: Increase CJS bundle size limit to 130kb (#6058) 2025-01-27 20:42:56 +13:00
Joaquim VergesGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
3e7df081d7 Version Packages (#6048)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-01-27 20:41:53 +13:00
Joaquim VergesandGitHub b6f189c220 [SDK] update dependencies (#6057) 2025-01-27 16:48:24 +13:00
Phillip HoandGitHub fb4d0a26f1 [service-utils] Replace client_id with project_id in usage_v2 (#6050) 2025-01-24 17:02:15 +08:00
Phillip HoandGitHub bc345371ba [service-utils] usage_v2 accepts a project_id field (#6049) 2025-01-24 16:44:26 +08:00
Phillip HoandGitHub 7a8e4e5f86 [service-utils] Export UsageV2 helpers (#6047) 2025-01-24 15:55:41 +08:00
74 changed files with 739 additions and 488 deletions
+3 -3
View File
@@ -68,7 +68,7 @@
"ioredis": "^5.4.1",
"ipaddr.js": "^2.2.0",
"lucide-react": "0.468.0",
"next": "15.1.3",
"next": "15.1.4",
"next-plausible": "^3.12.4",
"next-themes": "^0.4.4",
"nextjs-toploader": "^1.6.12",
@@ -104,8 +104,8 @@
"devDependencies": {
"@chakra-ui/cli": "^2.4.1",
"@chromatic-com/storybook": "3.2.2",
"@next/bundle-analyzer": "15.1.0",
"@next/eslint-plugin-next": "15.1.3",
"@next/bundle-analyzer": "15.1.4",
"@next/eslint-plugin-next": "15.1.4",
"@playwright/test": "1.49.1",
"@storybook/addon-essentials": "8.4.7",
"@storybook/addon-interactions": "8.4.7",
@@ -16,6 +16,8 @@ type Option = { label: string; value: string };
export function MultiNetworkSelector(props: {
selectedChainIds: number[];
onChange: (chainIds: number[]) => void;
disableChainId?: boolean;
className?: string;
}) {
const { allChains, idToChain } = useAllChainsData();
@@ -53,16 +55,24 @@ export function MultiNetworkSelector(props: {
return (
<div className="flex justify-between gap-4">
<span className="flex grow gap-2 truncate text-left">
<ChainIcon
className="size-5"
ipfsSrc={chain.icon?.url}
loading="lazy"
/>
{cleanChainName(chain.name)}
</span>
<Badge variant="outline" className="gap-2">
<span className="text-muted-foreground">Chain ID</span>
{chain.chainId}
</Badge>
{!props.disableChainId && (
<Badge variant="outline" className="gap-2">
<span className="text-muted-foreground">Chain ID</span>
{chain.chainId}
</Badge>
)}
</div>
);
},
[idToChain],
[idToChain, props.disableChainId],
);
return (
@@ -79,6 +89,7 @@ export function MultiNetworkSelector(props: {
disabled={allChains.length === 0}
overrideSearchFn={searchFn}
renderOption={renderOption}
className={props.className}
/>
);
}
@@ -143,7 +154,7 @@ export function SingleNetworkSelector(props: {
ipfsSrc={chain.icon?.url}
loading="lazy"
/>
{chain.name}
{cleanChainName(chain.name)}
</span>
{!props.disableChainId && (
@@ -168,6 +179,7 @@ export function SingleNetworkSelector(props: {
onValueChange={(chainId) => {
props.onChange(Number(chainId));
}}
closeOnSelect={true}
placeholder={isLoadingChains ? "Loading Chains..." : "Select Chain"}
overrideSearchFn={searchFn}
renderOption={renderOption}
@@ -33,6 +33,7 @@ interface SelectWithSearchProps
popoverContentClassName?: string;
side?: "left" | "right" | "top" | "bottom";
align?: "center" | "start" | "end";
closeOnSelect?: boolean;
}
export const SelectWithSearch = React.forwardRef<
@@ -50,6 +51,7 @@ export const SelectWithSearch = React.forwardRef<
overrideSearchFn,
popoverContentClassName,
searchPlaceholder,
closeOnSelect,
...props
},
ref,
@@ -177,7 +179,12 @@ export const SelectWithSearch = React.forwardRef<
key={option.value}
role="option"
aria-selected={isSelected}
onClick={() => onValueChange(option.value)}
onClick={() => {
onValueChange(option.value);
if (closeOnSelect) {
setIsPopoverOpen(false);
}
}}
variant="ghost"
className="flex w-full cursor-pointer justify-start gap-3 rounded-sm px-3 py-2 text-left"
ref={
@@ -10,7 +10,7 @@ import {
import type { ResultItem } from "app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/metrics/components/StatusCodes";
import type { EngineBackendWalletType } from "lib/engine";
import { useState } from "react";
import { useActiveAccount, useActiveWalletChain } from "thirdweb/react";
import { useActiveAccount } from "thirdweb/react";
import invariant from "tiny-invariant";
import type { EngineStatus } from "../../../app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/overview/components/transactions-table";
import { engineKeys } from "../cache-keys";
@@ -469,12 +469,12 @@ export function useEngineBackendWalletBalance(params: {
instanceUrl: string;
address: string;
authToken: string;
chainId: number;
}) {
const { instanceUrl, address, authToken } = params;
const chainId = useActiveWalletChain()?.id;
const { instanceUrl, address, authToken, chainId } = params;
return useQuery({
queryKey: engineKeys.backendWalletBalance(address, chainId || 1),
queryKey: engineKeys.backendWalletBalance(address, chainId),
queryFn: async () => {
invariant(chainId, "chainId is required");
@@ -4,6 +4,7 @@ import {
toTokens,
toUnits,
} from "thirdweb";
import { getContract } from "thirdweb/contract";
import type { OverrideEntry } from "thirdweb/dist/types/utils/extensions/drops/types";
import type { Prettify } from "thirdweb/dist/types/utils/type-utils";
import { getContractMetadata } from "thirdweb/extensions/common";
@@ -71,7 +72,10 @@ export async function getClaimPhasesInLegacyFormat(
conditions.map(async (condition) => {
const [currencyMetadata, metadata, contractMetadata] = await Promise.all([
await ERC20Ext.getCurrencyMetadata({
contract: { ...options.contract, address: condition.currency },
contract: getContract({
...options.contract,
address: condition.currency,
}),
}).then((m) => ({
...m,
displayValue: toTokens(condition.pricePerToken, m.decimals),
@@ -323,6 +323,7 @@ export const EmbedSetup: React.FC<EmbedSetupProps> = ({
apiKeys.refetch();
}}
enableNebulaServiceByDefault={false}
teamSlug={undefined}
/>
<Alert variant="warning">
@@ -4,13 +4,13 @@ import { ScrollShadow } from "@/components/ui/ScrollShadow/ScrollShadow";
import { Alert, AlertTitle } from "@/components/ui/alert";
import type { Account as TWAccount } from "@3rdweb-sdk/react/hooks/useApi";
import { CircleSlash } from "lucide-react";
import type { ContractOptions } from "thirdweb";
import type { ThirdwebContract } from "thirdweb/contract";
import type { Account } from "thirdweb/wallets";
import { ModuleCard } from "./module-card";
import { useAllModuleContractInfo } from "./moduleContractInfo";
export const InstalledModulesTable = (props: {
contract: ContractOptions;
contract: ThirdwebContract;
installedModules: {
data?: string[];
isPending: boolean;
@@ -15,8 +15,9 @@ import { FormProvider, type UseFormReturn, useForm } from "react-hook-form";
import { toast } from "sonner";
import {
type Chain,
type ContractOptions,
type ThirdwebClient,
type ThirdwebContract,
getContract,
sendTransaction,
waitForReceipt,
} from "thirdweb";
@@ -47,7 +48,7 @@ type FormData = {
};
type InstallModuleFormProps = {
contract: ContractOptions;
contract: ThirdwebContract;
refetchModules: () => void;
account: Account;
installedModules: {
@@ -180,11 +181,13 @@ export const InstallModuleForm = (props: InstallModuleFormProps) => {
return Promise.all(
moduleAddress.map(async (address) => {
const result = await resolveImplementation({
client,
address,
chain: contract.chain,
});
const result = await resolveImplementation(
getContract({
client,
address,
chain: contract.chain,
}),
);
if (!result) {
throw new Error("Failed to fetch bytecode for module");
@@ -23,7 +23,7 @@ import { Suspense, useEffect, useState } from "react";
import { ErrorBoundary, type FallbackProps } from "react-error-boundary";
import { toast } from "sonner";
import {
type ContractOptions,
type ThirdwebContract,
getContract,
sendTransaction,
waitForReceipt,
@@ -35,7 +35,7 @@ import { useModuleContractInfo } from "./moduleContractInfo";
type ModuleCardProps = {
moduleAddress: string;
contract: ContractOptions;
contract: ThirdwebContract;
onRemoveModule: () => void;
ownerAccount: Account | undefined;
allModuleContractInfo: {
@@ -70,6 +70,11 @@ export function AccountHeader(props: {
// refresh projects
router.refresh();
}}
teamSlug={
createProjectDialogState.isOpen
? createProjectDialogState.team.slug
: undefined
}
enableNebulaServiceByDefault={
createProjectDialogState.isOpen &&
createProjectDialogState.team.enabledScopes.includes("nebula")
+33 -22
View File
@@ -9,7 +9,7 @@ import { useDashboardRouter } from "@/lib/DashboardRouter";
import type { Account } from "@3rdweb-sdk/react/hooks/useApi";
import { useTheme } from "next-themes";
import Link from "next/link";
import { Suspense, lazy, useState } from "react";
import { Suspense, lazy, useEffect, useState } from "react";
import { ConnectEmbed, useActiveWalletConnectionStatus } from "thirdweb/react";
import { createWallet, inAppWallet } from "thirdweb/wallets";
import { ClientOnly } from "../../components/ClientOnly/ClientOnly";
@@ -154,27 +154,6 @@ function PageContent(props: {
router.replace(props.redirectPath);
}
if (connectionStatus === "connecting") {
return <LoadingCard />;
}
if (connectionStatus !== "connected" || screen.id === "login") {
return <CustomConnectEmbed onLogin={onLogin} />;
}
if (screen.id === "onboarding") {
return (
<Suspense fallback={<LoadingCard />}>
<LazyOnboardingUI
account={screen.account}
onComplete={onComplete}
redirectPath={props.redirectPath}
redirectToCheckout={redirectToCheckout}
/>
</Suspense>
);
}
async function onLogin() {
const account = await getRawAccountAction();
@@ -193,6 +172,38 @@ function PageContent(props: {
}
}
// eslint-disable-next-line no-restricted-syntax
useEffect(() => {
// if suddenly disconnected
if (connectionStatus !== "connected" && screen.id !== "login") {
setScreen({ id: "login" });
}
}, [connectionStatus, screen.id]);
if (connectionStatus === "connecting") {
return <LoadingCard />;
}
if (connectionStatus !== "connected" || screen.id === "login") {
return <CustomConnectEmbed onLogin={onLogin} />;
}
if (screen.id === "onboarding") {
return (
<Suspense fallback={<LoadingCard />}>
<LazyOnboardingUI
account={screen.account}
onComplete={onComplete}
redirectPath={props.redirectPath}
redirectToCheckout={redirectToCheckout}
onLogout={() => {
setScreen({ id: "login" });
}}
/>
</Suspense>
);
}
return <LoadingCard />;
}
@@ -14,12 +14,14 @@ type OnboardingGeneralProps = {
account: Account;
onSave: (email: string) => void;
onDuplicate: (email: string) => void;
onLogout: () => void;
};
export const OnboardingGeneral: React.FC<OnboardingGeneralProps> = ({
account,
onSave,
onDuplicate,
onLogout,
}) => {
const [existing, setExisting] = useState(false);
const activeWallet = useActiveWallet();
@@ -27,6 +29,7 @@ export const OnboardingGeneral: React.FC<OnboardingGeneralProps> = ({
async function handleLogout() {
await doLogout();
onLogout();
if (activeWallet) {
disconnect(activeWallet);
}
@@ -21,6 +21,7 @@ type OnboardingScreen =
function OnboardingUI(props: {
account: Account;
onComplete: () => void;
onLogout: () => void;
// path to redirect from stripe
redirectPath: string;
redirectToCheckout: RedirectBillingCheckoutAction;
@@ -68,6 +69,7 @@ function OnboardingUI(props: {
{screen.id === "onboarding" && (
<OnboardingGeneral
account={account}
onLogout={props.onLogout}
onSave={(email) => {
setUpdatedEmail(email);
setScreen({
@@ -181,6 +181,7 @@ function SessionCard(props: {
<Link
className="before:absolute before:inset-0"
href={`/chat/${props.session.id}`}
prefetch={false}
>
{props.session.title || "Untitled"}
</Link>
@@ -20,7 +20,7 @@ import type { ExecuteConfig, SessionInfo } from "../api/types";
import { newChatPageUrlStore, newSessionsStore } from "../stores";
import { ChatBar } from "./ChatBar";
import { type ChatMessage, Chats } from "./Chats";
import ContextFiltersButton from "./ContextFilters";
import ContextFiltersButton, { ContextFiltersForm } from "./ContextFilters";
import { EmptyStateChatPageContent } from "./EmptyStateChatPageContent";
export function ChatPageContent(props: {
@@ -362,69 +362,92 @@ export function ChatPageContent(props: {
const showEmptyState = !userHasSubmittedMessage && messages.length === 0;
const handleUpdateContextFilters = async (
values: ContextFilters | undefined,
) => {
// if session is not yet created, don't need to update sessions - starting a chat will create a session with the context filters
if (sessionId) {
await updateSession({
authToken: props.authToken,
config,
sessionId,
contextFilters: values,
});
}
};
return (
<div className="flex grow flex-col overflow-hidden">
<WalletDisconnectedDialog
open={showConnectModal}
onOpenChange={setShowConnectModal}
/>
<header className="flex justify-start border-b bg-background p-4">
<header className="flex justify-between border-b bg-background p-4 xl:hidden">
<ContextFiltersButton
contextFilters={contextFilters}
setContextFilters={setContextFilters}
updateContextFilters={async (values) => {
// if session is not yet created, don't need to update sessions - starting a chat will create a session with the context filters
if (sessionId) {
await updateSession({
authToken: props.authToken,
config,
sessionId,
contextFilters: values,
});
}
}}
updateContextFilters={handleUpdateContextFilters}
/>
</header>
<div className="relative flex grow flex-col overflow-hidden rounded-lg pb-6">
{showEmptyState ? (
<div className="fade-in-0 container flex max-w-[800px] grow animate-in flex-col justify-center">
<EmptyStateChatPageContent sendMessage={handleSendMessage} />
</div>
) : (
<div className="fade-in-0 relative z-[0] flex max-h-full flex-1 animate-in flex-col overflow-hidden">
<Chats
messages={messages}
isChatStreaming={isChatStreaming}
authToken={props.authToken}
sessionId={sessionId}
className="min-w-0 pt-6 pb-32"
twAccount={props.account}
client={client}
enableAutoScroll={enableAutoScroll}
setEnableAutoScroll={setEnableAutoScroll}
/>
<div className="container max-w-[800px]">
<ChatBar
sendMessage={handleSendMessage}
isChatStreaming={isChatStreaming}
abortChatStream={() => {
chatAbortController?.abort();
setChatAbortController(undefined);
setIsChatStreaming(false);
// if last message is presence, remove it
if (messages[messages.length - 1]?.type === "presence") {
setMessages((prev) => prev.slice(0, -1));
}
}}
/>
<div className="flex grow overflow-hidden">
<div className="relative flex grow flex-col overflow-hidden rounded-lg pb-6">
{showEmptyState ? (
<div className="fade-in-0 container flex max-w-[800px] grow animate-in flex-col justify-center">
<EmptyStateChatPageContent sendMessage={handleSendMessage} />
</div>
</div>
)}
) : (
<div className="fade-in-0 relative z-[0] flex max-h-full flex-1 animate-in flex-col overflow-hidden">
<Chats
messages={messages}
isChatStreaming={isChatStreaming}
authToken={props.authToken}
sessionId={sessionId}
className="min-w-0 pt-6 pb-32"
twAccount={props.account}
client={client}
enableAutoScroll={enableAutoScroll}
setEnableAutoScroll={setEnableAutoScroll}
/>
<p className="mt-4 text-center text-muted-foreground text-xs opacity-75 lg:text-sm">
Nebula may make mistakes. Please use with discretion
</p>
<div className="container max-w-[800px]">
<ChatBar
sendMessage={handleSendMessage}
isChatStreaming={isChatStreaming}
abortChatStream={() => {
chatAbortController?.abort();
setChatAbortController(undefined);
setIsChatStreaming(false);
// if last message is presence, remove it
if (messages[messages.length - 1]?.type === "presence") {
setMessages((prev) => prev.slice(0, -1));
}
}}
/>
</div>
</div>
)}
<p className="mt-4 text-center text-muted-foreground text-xs opacity-75 lg:text-sm">
Nebula may make mistakes. Please use with discretion
</p>
</div>
<aside className="hidden w-[360px] flex-col border-l bg-card pt-4 xl:flex">
<div className="px-4">
<h3 className="font-semibold text-lg tracking-tight">Context</h3>
<p className="mb-5 text-muted-foreground text-sm">
Provide context to Nebula for your prompts
</p>
</div>
<ContextFiltersForm
contextFilters={contextFilters}
setContextFilters={setContextFilters}
modal={undefined}
updateContextFilters={handleUpdateContextFilters}
formBodyClassName="px-4"
formActionContainerClassName="px-4 border-t-0 pt-0 bg-transparent"
/>
</aside>
</div>
</div>
);
@@ -4,6 +4,8 @@ import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import type { Account } from "@3rdweb-sdk/react/hooks/useApi";
import {
FileCode2Icon,
MessageSquareShareIcon,
MessagesSquareIcon,
SquareDashedBottomCodeIcon,
TextIcon,
@@ -29,8 +31,11 @@ export function ChatSidebar(props: {
return (
<div className="flex h-full flex-col p-2">
<div className="flex items-center justify-start gap-3 p-2 lg:justify-between">
<Link href="/">
<NebulaIcon className="size-8 text-foreground" />
<Link href="/" className="flex items-center gap-2">
<NebulaIcon className="size-8 text-foreground" aria-label="Nebula" />
<span className="font-semibold text-lg tracking-tight">
Playground
</span>
</Link>
<Badge variant="secondary" className="gap-1 py-1">
@@ -48,6 +53,13 @@ export function ChatSidebar(props: {
<div className="h-3" />
<SidebarIconLink
href="https://portal.thirdweb.com/nebula/api-reference"
icon={FileCode2Icon}
label="API Reference"
target="_blank"
/>
<SidebarIconLink
href="/chat/history"
icon={MessagesSquareIcon}
@@ -79,7 +91,14 @@ export function ChatSidebar(props: {
</ScrollShadow>
)}
<div className="mb-3 border-b border-dashed pt-2 pb-3">
<div className="mb-3 border-y border-dashed py-3">
<SidebarIconLink
href="https://docs.google.com/forms/d/e/1FAIpQLSeM3fJRyywihRZUF1fiTNKEpJ_AzAcohRwXPpLr_3zxQ6W-tg/viewform?usp=sharing"
icon={MessageSquareShareIcon}
label="Take our quick survey!"
target="_blank"
/>
<SidebarIconLink
href="https://portal.thirdweb.com/changelog"
icon={TextIcon}
@@ -116,6 +135,7 @@ function SidebarIconLink(props: {
href={props.href}
target={props.target}
className="!justify-start !px-3 w-full gap-2.5 rounded-lg text-left"
prefetch={false}
>
<props.icon className="size-4" />
{props.label}
@@ -8,6 +8,7 @@ import {
Dialog,
DialogClose,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
@@ -15,15 +16,14 @@ import {
import {
Form,
FormControl,
FormDescription,
FormField,
FormItem,
FormLabel,
FormMessage,
} from "@/components/ui/form";
import { AutoResizeTextarea } from "@/components/ui/textarea";
import { cn } from "@/lib/utils";
import { zodResolver } from "@hookform/resolvers/zod";
import { DialogDescription } from "@radix-ui/react-dialog";
import { useMutation } from "@tanstack/react-query";
import { SlidersHorizontalIcon } from "lucide-react";
import { useState } from "react";
@@ -39,9 +39,6 @@ export default function ContextFiltersButton(props: {
updateContextFilters: (filters: ContextFilters | undefined) => Promise<void>;
}) {
const [isOpen, setIsOpen] = useState(false);
const updateMutation = useMutation({
mutationFn: props.updateContextFilters,
});
const chainIds = props.contextFilters?.chainIds;
const contractAddresses = props.contextFilters?.contractAddresses;
@@ -85,21 +82,22 @@ export default function ContextFiltersButton(props: {
</div>
</Button>
</DialogTrigger>
<DialogContent className="p-0">
<ContextFilterDialogContent
contextFilters={props.contextFilters}
isPending={updateMutation.isPending}
updateFilters={async (data) => {
const promise = updateMutation.mutateAsync(data);
toast.promise(promise, {
success: "Context filters updated",
error: "Failed to update context filters",
});
<DialogContent className="overflow-hidden p-0">
<DialogHeader className="px-6 pt-6 pb-1">
<DialogTitle className="font-semibold text-xl">
Context Filters
</DialogTitle>
<DialogDescription className="text-muted-foreground">
Provide context to Nebula for your prompts
</DialogDescription>
</DialogHeader>
promise.then(() => {
props.setContextFilters(data);
setIsOpen(false);
});
<ContextFiltersForm
contextFilters={props.contextFilters}
updateContextFilters={props.updateContextFilters}
setContextFilters={props.setContextFilters}
modal={{
close: () => setIsOpen(false),
}}
/>
</DialogContent>
@@ -138,11 +136,22 @@ const formSchema = z.object({
walletAddresses: commaSeparateListOfAddresses,
});
function ContextFilterDialogContent(props: {
export function ContextFiltersForm(props: {
contextFilters: ContextFilters | undefined;
updateFilters: (filters: ContextFilters | undefined) => void;
isPending: boolean;
updateContextFilters: (filters: ContextFilters | undefined) => Promise<void>;
setContextFilters: (filters: ContextFilters | undefined) => void;
formBodyClassName?: string;
formActionContainerClassName?: string;
modal:
| {
close: () => void;
}
| undefined;
}) {
const updateMutation = useMutation({
mutationFn: props.updateContextFilters,
});
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
values: {
@@ -172,26 +181,37 @@ function ContextFilterDialogContent(props: {
.split(",")
.filter((v) => v.trim());
props.updateFilters({
const data = {
chainIds: chainIdsArray,
contractAddresses: contractAddressesArray,
walletAddresses: walletAddressesArray,
};
const promise = updateMutation.mutateAsync(data);
toast.promise(promise, {
success: "Context filters updated",
error: "Failed to update context filters",
});
promise.then(() => {
props.setContextFilters(data);
props.modal?.close?.();
});
}
return (
<Form {...form}>
<DialogHeader className="px-6 pt-6 pb-1">
<DialogTitle className="font-semibold text-xl">
Context Filters
</DialogTitle>
<DialogDescription className="text-muted-foreground">
Provide context information to Nebula for your prompts
</DialogDescription>
</DialogHeader>
<form onSubmit={form.handleSubmit(onSubmit)}>
<div className="flex flex-col gap-5 px-6">
<form
onSubmit={form.handleSubmit(onSubmit)}
className={cn("flex w-full grow flex-col")}
>
<div
className={cn(
"flex flex-col gap-5 px-6 pb-6",
props.formBodyClassName,
)}
>
<FormField
control={form.control}
name="chainIds"
@@ -200,6 +220,8 @@ function ContextFilterDialogContent(props: {
<FormLabel>Chain IDs</FormLabel>
<FormControl>
<MultiNetworkSelector
disableChainId
className="bg-background"
selectedChainIds={form
.watch()
.chainIds.split(",")
@@ -226,12 +248,9 @@ function ContextFilterDialogContent(props: {
<AutoResizeTextarea
{...field}
placeholder="0x123..., 0x456..."
className="min-h-[32px] resize-none"
className="!leading-relaxed min-h-[52px] resize-none md:text-xs"
/>
</FormControl>
<FormDescription>
Comma separated list of contract addresses
</FormDescription>
<FormMessage />
</FormItem>
)}
@@ -247,25 +266,36 @@ function ContextFilterDialogContent(props: {
<AutoResizeTextarea
{...field}
placeholder="0x123..., 0x456..."
className="min-h-[32px] resize-none"
className="!leading-relaxed min-h-[52px] resize-none md:text-xs"
/>
</FormControl>
<FormDescription>
Comma separated list of wallet addresses
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
</div>
<div className="mt-10 flex justify-end gap-3 border-t bg-card p-6">
<DialogClose asChild>
<Button variant="outline">Cancel</Button>
</DialogClose>
<Button className="min-w-28 gap-2" type="submit">
{props.isPending && <Spinner className="size-4" />}
Update
<div
className={cn(
"flex justify-end gap-3 border-t bg-card p-6",
props.formActionContainerClassName,
)}
>
{props.modal && (
<DialogClose asChild>
<Button variant="outline" size="sm">
Cancel
</Button>
</DialogClose>
)}
<Button
className="min-w-24 gap-2"
type="submit"
size="sm"
disabled={updateMutation.isPending}
>
{updateMutation.isPending && <Spinner className="size-4" />}
Update Context
</Button>
</div>
</form>
@@ -10,7 +10,7 @@ export function EmptyStateChatPageContent(props: {
sendMessage: (message: string) => void;
}) {
return (
<div className="py-16">
<div className="py-10 lg:py-16">
<div className="relative py-10">
<FancyBorders />
<div className="flex justify-center">
@@ -5,6 +5,7 @@ import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { Checkbox, CheckboxWithLabel } from "@/components/ui/checkbox";
import { FormItem } from "@/components/ui/form";
import { Skeleton } from "@/components/ui/skeleton";
import {
type BackendWallet,
useEngineBackendWalletBalance,
@@ -34,11 +35,9 @@ import { type ColumnDef, createColumnHelper } from "@tanstack/react-table";
import { ChainIcon } from "components/icons/ChainIcon";
import { TWTable } from "components/shared/TWTable";
import { useTrack } from "hooks/analytics/useTrack";
import { useAllChainsData } from "hooks/chains/allChains";
import { EngineBackendWalletOptions } from "lib/engine";
import {
useActiveChainAsDashboardChain,
useV5DashboardChain,
} from "lib/v5-adapter";
import { useV5DashboardChain } from "lib/v5-adapter";
import {
DownloadIcon,
PencilIcon,
@@ -52,7 +51,6 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { getAddress } from "thirdweb";
import { shortenAddress } from "thirdweb/utils";
import invariant from "tiny-invariant";
import { FormHelperText, FormLabel, LinkButton, Text } from "tw-components";
import { prettyPrintCurrency } from "./utils";
@@ -89,21 +87,21 @@ const BackendWalletBalanceCell: React.FC<BackendWalletBalanceCellProps> = ({
instanceUrl: instanceUrl,
address,
authToken,
chainId,
});
const chain = useV5DashboardChain(chainId);
if (!chain || !backendWalletBalance) {
return;
if (!backendWalletBalance) {
return <Skeleton className="h-5 w-32 rounded-lg" />;
}
const balanceDisplay = prettyPrintCurrency({
amount: backendWalletBalance.displayValue,
symbol: backendWalletBalance.symbol,
symbol: backendWalletBalance.symbol || chain.nativeCurrency?.symbol,
});
const balanceComponent = (
<Text fontWeight={backendWalletBalance.value === "0" ? "light" : "bold"}>
{balanceDisplay}
</Text>
<div className="text-muted-foreground">{balanceDisplay}</div>
);
const explorer = chain.blockExplorers?.[0];
@@ -250,6 +248,7 @@ export const BackendWalletsTable: React.FC<BackendWalletsTableProps> = ({
disclosure={sendDisclosure}
instanceUrl={instanceUrl}
authToken={authToken}
chainId={chainId}
/>
)}
{selectedBackendWallet && deleteDisclosure.isOpen && (
@@ -425,24 +424,28 @@ const SendFundsModal = ({
disclosure,
instanceUrl,
authToken,
chainId,
}: {
fromWallet: BackendWallet;
backendWallets: BackendWallet[];
disclosure: UseDisclosureReturn;
instanceUrl: string;
authToken: string;
chainId: number;
}) => {
const chain = useActiveChainAsDashboardChain();
const form = useForm<SendFundsInput>();
const sendTokens = useEngineSendTokens({
instanceUrl,
authToken,
});
const { idToChain } = useAllChainsData();
const { data: backendWalletBalance } = useEngineBackendWalletBalance({
instanceUrl,
address: fromWallet.address,
authToken,
chainId: chainId,
});
const chain = idToChain.get(chainId);
const toWalletDisclosure = useDisclosure();
if (!backendWalletBalance) {
@@ -450,11 +453,9 @@ const SendFundsModal = ({
}
const onSubmit = async (data: SendFundsInput) => {
invariant(chain, "chain is required");
const promise = sendTokens.mutateAsync(
{
chainId: chain.chainId,
chainId: chainId,
fromAddress: fromWallet.address,
toAddress: data.toAddress,
amount: data.amount,
@@ -3,9 +3,9 @@ export const prettyPrintCurrency = ({
symbol,
}: {
amount?: string | number;
symbol: string;
symbol?: string;
}): string => {
const amountNumber =
typeof amount === "string" ? Number.parseFloat(amount) : (amount ?? 0);
return `${amountNumber.toFixed(6)} ${symbol}`;
return `${amountNumber.toFixed(6)} ${symbol || ""}`;
};
@@ -170,6 +170,7 @@ export function TeamProjectsPage(props: {
<LazyCreateAPIKeyDialog
open={isCreateProjectDialogOpen}
onOpenChange={setIsCreateProjectDialogOpen}
teamSlug={props.team.slug}
onCreateAndComplete={() => {
// refresh projects
router.refresh();
@@ -65,6 +65,11 @@ export function TeamHeaderLoggedIn(props: {
<LazyCreateAPIKeyDialog
open={createProjectDialogState.isOpen}
teamSlug={
createProjectDialogState.isOpen
? createProjectDialogState.team.slug
: undefined
}
onOpenChange={() =>
setCreateProjectDialogState({
isOpen: false,
@@ -25,7 +25,7 @@ import { CircleAlertIcon, ExternalLinkIcon, InfoIcon } from "lucide-react";
import Link from "next/link";
import { useCallback, useMemo } from "react";
import { FormProvider, type UseFormReturn, useForm } from "react-hook-form";
import { ZERO_ADDRESS } from "thirdweb";
import { ZERO_ADDRESS, getContract } from "thirdweb";
import type { FetchDeployMetadataResult } from "thirdweb/contract";
import {
deployContractfromDeployMetadata,
@@ -567,11 +567,13 @@ export const CustomContractForm: React.FC<CustomContractFormProps> = ({
const contractAddr = await deployMutation.mutateAsync(formData);
// send verification request - no need to await
verifyContract({
address: contractAddr,
chain: walletChain,
client: thirdwebClient,
});
verifyContract(
getContract({
address: contractAddr,
chain: walletChain,
client: thirdwebClient,
}),
);
trackEvent({
category: "custom-contract",
@@ -53,6 +53,7 @@ function Story(props: {
createKeyMutation={mutation}
prefill={props.prefill}
enableNebulaServiceByDefault={false}
teamSlug="foo"
/>
<Button
@@ -1,3 +1,5 @@
import { apiServerProxy } from "@/actions/proxies";
import type { Project } from "@/api/projects";
import { CopyTextButton } from "@/components/ui/CopyTextButton";
import { DynamicHeight } from "@/components/ui/DynamicHeight";
import { Spinner } from "@/components/ui/Spinner/Spinner";
@@ -23,6 +25,7 @@ import {
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { Textarea } from "@/components/ui/textarea";
import { useDashboardRouter } from "@/lib/DashboardRouter";
import {
type ApiKey,
type CreateKeyInput,
@@ -30,10 +33,10 @@ import {
} from "@3rdweb-sdk/react/hooks/useApi";
import { zodResolver } from "@hookform/resolvers/zod";
import { DialogDescription } from "@radix-ui/react-dialog";
import type { UseMutationResult } from "@tanstack/react-query";
import { type UseMutationResult, useQuery } from "@tanstack/react-query";
import { SERVICES } from "@thirdweb-dev/service-utils";
import { useTrack } from "hooks/analytics/useTrack";
import { ArrowLeftIcon } from "lucide-react";
import { ArrowLeftIcon, ExternalLinkIcon } from "lucide-react";
import { useState } from "react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
@@ -54,6 +57,7 @@ export type CreateAPIKeyDialogProps = {
onCreateAndComplete?: () => void;
prefill?: CreateAPIKeyPrefillOptions;
enableNebulaServiceByDefault: boolean;
teamSlug: string | undefined;
};
const CreateAPIKeyDialog = (props: CreateAPIKeyDialogProps) => {
@@ -78,6 +82,7 @@ export const CreateAPIKeyDialogUI = (props: {
>;
prefill?: CreateAPIKeyPrefillOptions;
enableNebulaServiceByDefault: boolean;
teamSlug: string | undefined;
}) => {
const [screen, setScreen] = useState<
{ id: "create" } | { id: "api-details"; key: ApiKey }
@@ -97,7 +102,7 @@ export const CreateAPIKeyDialogUI = (props: {
}}
>
<DialogContent
className="z-[10001] p-0"
className="z-[10001] overflow-hidden p-0"
dialogOverlayClassName="z-[10000]"
dialogCloseClassName={screen.id === "api-details" ? "hidden" : ""}
>
@@ -116,6 +121,7 @@ export const CreateAPIKeyDialogUI = (props: {
{screen.id === "api-details" && (
<APIKeyDetails
apiKey={screen.key}
teamSlug={props.teamSlug}
onComplete={() => {
onOpenChange(false);
setScreen({ id: "create" });
@@ -402,9 +408,35 @@ function DomainsAlert(props: {
function APIKeyDetails(props: {
apiKey: ApiKey;
onComplete: () => void;
teamSlug: string | undefined;
}) {
const { apiKey } = props;
const [secretStored, setSecretStored] = useState(false);
const router = useDashboardRouter();
// get the project.slug for the apiKey to render "View Project" button
const projectQuery = useQuery({
queryKey: ["project", props.teamSlug, apiKey.id],
queryFn: async () => {
const res = await apiServerProxy<{
result: Project[];
}>({
method: "GET",
pathname: `/v1/teams/${props.teamSlug}/projects`,
});
if (!res.ok) {
throw new Error(res.error);
}
const projects = res.data.result;
const project = projects.find((p) => p.publishableKey === apiKey.key);
return project || null;
},
enabled: !!props.teamSlug,
});
const projectSlug = projectQuery.data?.slug;
return (
<div>
@@ -474,10 +506,31 @@ function APIKeyDetails(props: {
type="button"
onClick={props.onComplete}
disabled={!secretStored}
variant="outline"
className="min-w-28 gap-2"
>
Complete
{props.teamSlug ? "Close" : "Complete"}
</Button>
{props.teamSlug && (
<Button
onClick={() => {
if (!projectSlug) {
return;
}
router.push(`/team/${props.teamSlug}/${projectSlug}`);
}}
disabled={!secretStored || !projectSlug}
className="min-w-28 gap-2"
>
View Project
{projectQuery.isPending ? (
<Spinner className="size-4" />
) : (
<ExternalLinkIcon className="size-4" />
)}
</Button>
)}
</DialogFooter>
</div>
);
+3 -3
View File
@@ -13,8 +13,8 @@
"fix": "eslint ./src --fix"
},
"dependencies": {
"@abstract-foundation/agw-client": "^1.0.1",
"@abstract-foundation/agw-react": "^1.0.1",
"@abstract-foundation/agw-client": "^1.3.0",
"@abstract-foundation/agw-react": "^1.4.1",
"@radix-ui/react-accordion": "^1.2.2",
"@radix-ui/react-checkbox": "^1.1.3",
"@radix-ui/react-dialog": "1.1.4",
@@ -34,7 +34,7 @@
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"lucide-react": "0.468.0",
"next": "15.1.3",
"next": "15.1.4",
"next-themes": "^0.4.4",
"prettier": "3.3.3",
"react": "19.0.0",
@@ -11,7 +11,7 @@ const getEcosystem = () => {
return "ecosystem.catlovers";
}
// prod ecosystem
return "ecosystem.new-age";
return "ecosystem.thirdweb-engs";
};
export function EcosystemConnectEmbed(
+3 -3
View File
@@ -21,7 +21,7 @@
"@dirtycajunrice/klee": "^1.0.6",
"@mdx-js/loader": "^2.3.0",
"@mdx-js/react": "^2.3.0",
"@next/mdx": "15.1.0",
"@next/mdx": "15.1.4",
"@radix-ui/react-dialog": "1.1.4",
"@radix-ui/react-dropdown-menu": "^2.1.3",
"@radix-ui/react-select": "^2.1.3",
@@ -35,7 +35,7 @@
"flexsearch": "^0.7.43",
"github-slugger": "^2.0.0",
"lucide-react": "0.468.0",
"next": "15.1.3",
"next": "15.1.4",
"nextjs-toploader": "^1.6.12",
"node-html-parser": "^6.1.13",
"posthog-js": "1.67.1",
@@ -53,7 +53,7 @@
"typedoc-better-json": "0.9.4"
},
"devDependencies": {
"@next/eslint-plugin-next": "15.1.3",
"@next/eslint-plugin-next": "15.1.4",
"@types/flexsearch": "^0.7.6",
"@types/mdx": "^2.0.13",
"@types/node": "22.10.2",
+2 -2
View File
@@ -21,7 +21,7 @@
"clsx": "^2.1.1",
"cmdk": "^1.0.4",
"lucide-react": "0.468.0",
"next": "15.1.3",
"next": "15.1.4",
"next-themes": "^0.4.4",
"react": "19.0.0",
"react-dom": "19.0.0",
@@ -35,7 +35,7 @@
"zod": "3.24.1"
},
"devDependencies": {
"@next/eslint-plugin-next": "15.1.3",
"@next/eslint-plugin-next": "15.1.4",
"@types/node": "22.10.2",
"@types/react": "19.0.2",
"@types/react-dom": "19.0.3",
+8
View File
@@ -1,5 +1,13 @@
# @thirdweb-dev/service-utils
## 0.7.1
### Patch Changes
- [#6047](https://github.com/thirdweb-dev/js/pull/6047) [`7a8e4e5`](https://github.com/thirdweb-dev/js/commit/7a8e4e5f861070858b4716ac95ba5bc60c284924) Thanks [@arcoraven](https://github.com/arcoraven)! - Export usageV2 util functions
- [#6050](https://github.com/thirdweb-dev/js/pull/6050) [`fb4d0a2`](https://github.com/thirdweb-dev/js/commit/fb4d0a26f162a098878a1a63a61fef6033bcd5e9) Thanks [@arcoraven](https://github.com/arcoraven)! - [service-utils] replace client_id with project_id in usage_v2
## 0.7.0
### Minor Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/service-utils",
"version": "0.7.0",
"version": "0.7.1",
"type": "module",
"main": "dist/cjs/index.js",
"module": "dist/esm/index.js",
@@ -11,6 +11,8 @@ import type { AuthorizationResult } from "../core/authorize/types.js";
import type { CoreAuthInput } from "../core/types.js";
export * from "./usage.js";
export * from "./usageV2.js";
export * from "../core/usageV2.js";
export * from "../core/services.js";
export * from "../core/rateLimit/index.js";
+2 -2
View File
@@ -21,9 +21,9 @@ export interface UsageV2Event {
*/
team_id: string;
/**
* The client ID, if available.
* The project ID, if available.
*/
client_id?: string;
project_id?: string;
/**
* The SDK name, if available.
*/
+4
View File
@@ -12,9 +12,13 @@ import type {
} from "../core/authorize/index.js";
import type { AuthorizationResult } from "../core/authorize/types.js";
import type { CoreAuthInput } from "../core/types.js";
export * from "./usageV2.js";
export * from "../core/usage.js";
export * from "../core/usageV2.js";
export * from "../core/rateLimit/index.js";
export * from "../core/services.js";
type NodeServiceConfig = CoreServiceConfig;
export type AuthInput = CoreAuthInput & {
+1 -1
View File
@@ -90,7 +90,7 @@ export class UsageV2Producer {
team_id: event.team_id.startsWith("team_")
? event.team_id.slice(5)
: event.team_id,
client_id: event.client_id,
project_id: event.project_id,
sdk_name: event.sdk_name,
sdk_platform: event.sdk_platform,
sdk_version: event.sdk_version,
+2 -2
View File
@@ -8,7 +8,7 @@
{
"name": "thirdweb (cjs)",
"path": "./dist/cjs/exports/thirdweb.js",
"limit": "120 kB"
"limit": "130 kB"
},
{
"name": "thirdweb (minimal + tree-shaking)",
@@ -19,7 +19,7 @@
{
"name": "thirdweb/chains (tree-shaking)",
"path": "./dist/esm/exports/chains.js",
"limit": "600 B",
"limit": "650 B",
"import": "{ ethereum }"
},
{
+18
View File
@@ -1,5 +1,23 @@
# thirdweb
## 5.86.5
### Patch Changes
- [#6072](https://github.com/thirdweb-dev/js/pull/6072) [`2cebb42`](https://github.com/thirdweb-dev/js/commit/2cebb420e6a381cf41a48e17762f6c655ebe7d8c) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix showing link profiles for ecosystem smart wallets
## 5.86.4
### Patch Changes
- [#6068](https://github.com/thirdweb-dev/js/pull/6068) [`6c277ae`](https://github.com/thirdweb-dev/js/commit/6c277ae6764dbf1a9218fbd5d278ffb5e3dbde1f) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Respect passed in chain when connecting to inapp wallet with wallet strategy
## 5.86.3
### Patch Changes
- [#6057](https://github.com/thirdweb-dev/js/pull/6057) [`b6f189c`](https://github.com/thirdweb-dev/js/commit/b6f189c22023154ca3d1db92721b5e2e50b83e94) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Updated dependencies
## 5.86.2
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "thirdweb",
"version": "5.86.2",
"version": "5.86.5",
"repository": {
"type": "git",
"url": "git+https://github.com/thirdweb-dev/js.git#main"
@@ -228,7 +228,7 @@
"mipd": "0.0.7",
"ox": "0.4.2",
"uqr": "0.1.2",
"viem": "2.21.55"
"viem": "2.22.15"
},
"peerDependencies": {
"@aws-sdk/client-lambda": "^3",
+3 -2
View File
@@ -19,6 +19,7 @@ import { getRpcClient } from "../rpc/rpc.js";
import { estimateGas } from "../transaction/actions/estimate-gas.js";
import { sendTransaction } from "../transaction/actions/send-transaction.js";
import { prepareTransaction } from "../transaction/prepare-transaction.js";
import { getAddress } from "../utils/address.js";
import type { Account } from "../wallets/interfaces/wallet.js";
/**
@@ -201,7 +202,7 @@ export async function toViemContract<const TAbi extends Abi>(options: {
thirdwebContract: ThirdwebContract<TAbi>;
}): Promise<GetContractReturnType<TAbi>> {
return {
address: options.thirdwebContract.address,
address: getAddress(options.thirdwebContract.address),
abi: await resolveContractAbi(options.thirdwebContract),
};
}
@@ -310,7 +311,7 @@ function toViemWalletClient(options: ToViemWalletClientOptions): WalletClient {
return createWalletClient({
transport,
account: account.address,
account: getAddress(account.address),
chain: viemChain,
key: "thirdweb-wallet",
});
+4 -2
View File
@@ -9,6 +9,7 @@ import { type ThirdwebContract, getContract } from "../contract/contract.js";
import { isValidSignature } from "../extensions/erc1271/__generated__/isValidSignature/read/isValidSignature.js";
import { eth_call } from "../rpc/actions/eth_call.js";
import { getRpcClient } from "../rpc/rpc.js";
import type { Address } from "../utils/address.js";
import { isZkSyncChain } from "../utils/any-evm/zksync/isZkSyncChain.js";
import { isContractDeployed } from "../utils/bytecode/is-contract-deployed.js";
import { fromBytes } from "../utils/encoding/from-bytes.js";
@@ -27,7 +28,8 @@ export type VerifyHashParams = {
};
};
const ZKSYNC_VALIDATOR_ADDRESS = "0xfB688330379976DA81eB64Fe4BF50d7401763B9C";
const ZKSYNC_VALIDATOR_ADDRESS: Address =
"0xfB688330379976DA81eB64Fe4BF50d7401763B9C";
/**
* @description Verify that an address created the provided signature for a given hash using [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492). This function is interoperable with all wallet types, including EOAs.
@@ -120,7 +122,7 @@ export async function verifyHash({
})();
let verificationData: {
to?: string;
to?: Address;
data: Hex;
};
@@ -0,0 +1,16 @@
import { defineChain } from "../utils.js";
/**
* @chain
*/
export const abstract = /* @__PURE__ */ defineChain({
id: 2741,
name: "Abstract",
nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
blockExplorers: [
{
name: "Abstract Block Explorer",
url: "https://explorer.abs.xyz",
},
],
});
@@ -1,10 +1,9 @@
import type { Abi } from "abitype";
import { eth_getCode } from "../../rpc/actions/eth_getCode.js";
import { getRpcClient } from "../../rpc/rpc.js";
import type { Hex } from "../../utils/encoding/hex.js";
import type { ThirdwebContract } from "../contract.js";
const BYTECODE_CACHE = new WeakMap<ThirdwebContract<Abi>, Promise<Hex>>();
const BYTECODE_CACHE = new WeakMap<ThirdwebContract, Promise<Hex>>();
/**
* Retrieves the bytecode of a contract.
@@ -17,9 +16,7 @@ const BYTECODE_CACHE = new WeakMap<ThirdwebContract<Abi>, Promise<Hex>>();
* ```
* @contract
*/
export function getBytecode<abi extends Abi>(
contract: ThirdwebContract<abi>,
): Promise<Hex> {
export function getBytecode(contract: ThirdwebContract): Promise<Hex> {
if (BYTECODE_CACHE.has(contract)) {
return BYTECODE_CACHE.get(contract) as Promise<Hex>;
}
@@ -1,7 +1,7 @@
import { type Abi, formatAbi, parseAbi } from "abitype";
import { download } from "../../storage/download.js";
import { getClientFetch } from "../../utils/fetch.js";
import type { ThirdwebContract } from "../contract.js";
import { type ThirdwebContract, getContract } from "../contract.js";
const ABI_RESOLUTION_CACHE = new WeakMap<ThirdwebContract<Abi>, Promise<Abi>>();
@@ -419,10 +419,10 @@ async function getAbisForPlugins(
): Promise<Abi[]> {
return Promise.all(
options.plugins.map((pluginAddress) => {
const newContract = {
const newContract = getContract({
...options.contract,
address: pluginAddress,
};
});
// if we have a method passed in that tells us how to resove the sub-api, use that
if (options.resolveSubAbi) {
return options.resolveSubAbi(newContract);
+1 -1
View File
@@ -21,7 +21,7 @@ export type ContractOptions<
*/
export type ThirdwebContract<
abi extends Abi = [],
address extends string = string,
address extends string = `0x${string}`,
> = Readonly<ContractOptions<abi, address>>;
/**
@@ -50,11 +50,13 @@ export async function zkDeployContractDeterministic(
create2FactoryAddress,
salt: options.salt,
});
const deployed = await isContractDeployed({
address: predictedAddress,
chain: options.chain,
client: options.client,
});
const deployed = await isContractDeployed(
getContract({
address: predictedAddress,
chain: options.chain,
client: options.client,
}),
);
if (!deployed) {
// check if bytecodehash is known
const knownCodesStorageContract = getContract({
@@ -8,7 +8,7 @@ import { isContractDeployed } from "../../../utils/bytecode/is-contract-deployed
import { resolvePromisedValue } from "../../../utils/promise/resolve-promised-value.js";
import { randomBytesHex } from "../../../utils/random.js";
import type { ClientAndChainAndAccount } from "../../../utils/types.js";
import type { ThirdwebContract } from "../../contract.js";
import { type ThirdwebContract, getContract } from "../../contract.js";
import { zkDeployContractDeterministic } from "./zkDeployDeterministic.js";
/**
@@ -28,11 +28,13 @@ export async function zkDeployProxy(
if (!implementationAddress) {
throw new Error("initializeTransaction must have a 'to' field set");
}
const deployed = await isContractDeployed({
address: implementationAddress,
chain: options.chain,
client: options.client,
});
const deployed = await isContractDeployed(
getContract({
address: implementationAddress,
chain: options.chain,
client: options.client,
}),
);
if (!deployed) {
throw new Error(
`Implementation contract at ${implementationAddress} is not deployed`,
@@ -20,6 +20,7 @@ import {
eth_getLogs,
} from "../../rpc/actions/eth_getLogs.js";
import { getRpcClient } from "../../rpc/rpc.js";
import { getAddress } from "../../utils/address.js";
import type { Prettify } from "../../utils/type-utils.js";
import { type PreparedEvent, prepareEvent } from "../prepare-event.js";
import { isAbiEvent } from "../utils.js";
@@ -168,11 +169,11 @@ export async function getContractEvents<
? // if we have events passed in then we use those
events.map((e) => ({
...restParams,
address: contract?.address,
address: getAddress(contract.address),
topics: e.topics,
}))
: // otherwise we want "all" events (aka not pass any topics at all)
[{ ...restParams, address: contract?.address }];
[{ ...restParams, address: getAddress(contract.address) }];
const logs = await Promise.all(
logsParams.map((ethLogParams) => eth_getLogs(rpcRequest, ethLogParams)),
+1
View File
@@ -72,6 +72,7 @@ export { frameTestnet } from "../chains/chain-definitions/frame-testnet.js";
export { hokumTestnet } from "../chains/chain-definitions/hokum-testnet.js";
export { godWokenTestnetV1 } from "../chains/chain-definitions/god-woken-testnet-v1.js";
export { abstractTestnet } from "../chains/chain-definitions/abstract-testnet.js";
export { abstract } from "../chains/chain-definitions/abstract.js";
export { assetChainTestnet } from "../chains/chain-definitions/assetchain-testnet.js";
export { celoAlfajoresTestnet } from "../chains/chain-definitions/celo-alfajores-testnet.js";
export { fraxtalTestnet } from "../chains/chain-definitions/fraxtal-testnet.js";
@@ -1,3 +1,4 @@
import { getContract } from "../../../contract/contract.js";
import type { BaseTransactionOptions } from "../../../transaction/types.js";
import { isContractDeployed } from "../../../utils/bytecode/is-contract-deployed.js";
import * as PredictAddress from "../__generated__/IAccountFactory/read/getAddress.js";
@@ -15,10 +16,10 @@ export {
* ```ts
* import { isAccountDeployed } from 'thirdweb/extensions/erc4337';
*
* const transaction = addAdmin({
* const isDeployed = await isAccountDeployed({
* contract,
* account,
* adminAddress: '0x...'
* adminSigner: '0x...'
* });
*
* await isAccountDeployed({ contract, adminSigner });
@@ -29,8 +30,10 @@ export async function isAccountDeployed(
options: BaseTransactionOptions<PredictAddress.GetAddressParams>,
): Promise<boolean> {
const predictedAddress = await PredictAddress.getAddress(options);
return isContractDeployed({
...options.contract,
address: predictedAddress,
});
return isContractDeployed(
getContract({
...options.contract,
address: predictedAddress,
}),
);
}
@@ -1,5 +1,6 @@
import { encodePacked } from "viem/utils";
import type { ThirdwebContract } from "../../../../contract/contract.js";
import { getAddress } from "../../../../utils/address.js";
import { keccak256 } from "../../../../utils/hashing/keccak256.js";
/**
@@ -15,7 +16,7 @@ export const hashDelayedRevealPassword = async (
return keccak256(
encodePacked(
["string", "uint256", "uint256", "address"],
[password, chainId, batchTokenIndex, contractAddress],
[password, chainId, batchTokenIndex, getAddress(contractAddress)],
),
);
};
@@ -11,7 +11,6 @@ export function useAdminWallet() {
const activeWallet = useActiveWallet();
const connectedWallets = useConnectedWallets();
const adminAccount = activeWallet?.getAdminAccount?.();
if (!adminAccount) {
// If the active wallet doesn't have an admin account, return the active wallet
return activeWallet;
@@ -1,7 +1,6 @@
"use client";
import { hexToNumber } from "@noble/curves/abstract/utils";
import { useId, useMemo } from "react";
import type { Address } from "viem";
const COLOR_OPTIONS = [
["#fca5a5", "#b91c1c"],
@@ -26,7 +25,7 @@ const COLOR_OPTIONS = [
* @component
*/
export type BlobbieProps = {
address: Address;
address: string;
style?: Omit<React.CSSProperties, "backgroundImage">;
className?: string;
size?: number;
@@ -28,7 +28,8 @@ export function ManageWalletScreen(props: {
client: ThirdwebClient;
manageWallet?: ConnectButton_detailsModalOptions["manageWallet"];
}) {
const activeWallet = useAdminWallet();
const adminWallet = useAdminWallet();
const activeWallet = useActiveWallet();
return (
<Container
@@ -92,9 +93,9 @@ export function ManageWalletScreen(props: {
</MenuButton>
{/* Private Key Export (if enabled) */}
{activeWallet &&
isInAppWallet(activeWallet) &&
!activeWallet.getConfig()?.hidePrivateKeyExport && (
{adminWallet &&
isInAppWallet(adminWallet) &&
!adminWallet.getConfig()?.hidePrivateKeyExport && (
<MenuButton
onClick={() => {
props.setScreen("private-key");
@@ -5,9 +5,8 @@ import { WalletProvider } from "./provider.js";
describe("WalletIcon", () => {
it("should fetch wallet image", async () => {
expect(await fetchWalletImage({ id: "io.metamask" })).toMatchInlineSnapshot(
`"data:image/webp;base64,UklGRuwGAABXRUJQVlA4IOAGAABwIQCdASqAAIAAPm0ylkekIqIhJRM72IANiWIAyqy1Dp/H+eFYv8NxdNKeeg+36Lvzn/wN975hf2w9Y/0Z/6z0a+pI9AD9Vetr8ry8NP1WRg8G/sPM3wJlt8FdNg0WVXrKZlHf/7BcL9ZlCeVp+JF3E1CbwOreB/90YH2PUR9BNzlivRmwiI5jOr6WJ/6RWb6/tZp9UbMeCRrLy+9YP/9AVZ2SFUruL/yoPkhhgYPVhVAyyvDGz6Mws+v8VQ/EqyPSTb1iD4FsNruUD7fVhplslH9Dh2EW3xy9tEeSAgV+QvEpsOf2HAqlW6VT1f2x+lkeGRKeohCDPYvoIBFLKwb4SzsF5l02NiyGaPN5/ODNR9n2EQAA/vsmBY+Q2dsG6yhgBhrmNE7GEK9pn+TE53EQ0+z+NL8/FkVgnO6FJpMGUcFQB9eOfECvyN9rfQD1Wq9X7u4/Bo7ur3bAkxWHl7CY5PlokCXuX4KvTRxdvUS23oUE2yqTSig0oRbBXdOGBXxgy6lUtFznnz+6QWb0rBEPhRqb3zKbmSL0gT4bPNaZew3h07g88/udLRjKmf0ellIolDALYrkbcJ08Y5rQ6E0xGiBrZykNg/xwYdd26p2ipY/vyeAOmddHVnBEbQglFALFMWiqCfov6s3IHwJHyP8s/h/am/pvn1gCbhTrbKI0rIuJXN2sljBDesRrvc9wpJ65o9AligVcUt3mTIDAqYysfF2QJwm3GxApi5svDwSajevWXF4z4IWOhVNDdQNKpl0+R0HUoK5n1cpWHRDrx31Hfh1SY5l/hqMOstkei+rznVXW+Ffl16KssbyiUCXQOwW4F6N00fiShJety//jfyqXXJNiY4n1xf77cqf1Z3Kq/Dnj5DKbwQ2XczShuDEsphJyn6FjFSP1e70n7d6aNp13xF9IfSa08mHGlS/jAguPwUJKwm4tly2eq+sBYDbDEkLHFKA75Y4cMSqK6+9OfNllq385/NTeOdCOGGrXAaoytxd2m1VE5dEh9lExaPxwfWhxTRD8ByR5GWe/3WMXlm6+oArrYTPKYAANBM4wAY7MPqaQzcV9rqtD+m0u22u4rdNKn1NMgoAWrlILvjQ3qqt27p32L2wf546/nQuDwGrFg+npvAMTX52Xl0SlpACvq8NqcdCKe/EWl5PfcBnKnO6JuQIEXlNWf6VLiv0VqKdwLAd96LPbBnZgbX5uX5p3GEb18QUcOFu9kMWg67HjQvmefds+kBxGh3rO/W/jFB/q67+kEKrutCcknGtEECtPBN5TIsVdn4dS/IH3DYC4HsgD09hGplPhFL99N/MXiZYbXFPYfl9H1ybPma4yljEjieZZdcHU+rncZxDm5ZgWuSTvgrgWuwzf6pHdQQVrFxhG+5PVW/IThXF50K1/g/xrcQHXOF8WvZ2Zxg9oQSPR0ArfJ8dAungVGomI9E3EIvGw9VdfiyUR0pCe+4q40mLqMoRdRplXACBrvUk1HTbqlsNYN0ElDxBW3q9Is/YDcJRWOJ3JtSxfN4yr7KY2vmgiJq04ta+fv8jDzXq35feu2ur2lYrfzHd02NaJo7W2pUyvoxCLpSM1cxr1E40s3u2ONRfn+r0r1/BpZJe0bgTwEb4I02KQak7Pl4yS1ZHwOn36HVfTrVpSc9zgG1yNOPQ4kCB6GSIZVxArMdQPKstj20YXj/i0Ra3SO7fx/14WvSIIIyNYsXbJXg8PL8fQfv9QjORNqjukfZbgusqnM8geR0pQhDfeZR1ZwdUQfx9a4Z0/fBR2Rg5zq05CcnuygEL6SZsWFBHSOeaUT3ycQQp2rHbHlnYT/GOaoUYR5wtGBahqXy0xBlaisNqZa6GEoHxzNKiMt2sGrcS079jZa5kDaGtSrW41e1HoLpuxwxiUKntwnjEaogJri9FgAxC6wazG6U56P6C/zJWsilWgi6jCsfORkpXQM91vYMgRL3+HiFzD93LPP13w/x8Hhty4jtCowlCzf0MqrScu+oDOCoMbdXV9j0OCfAZYXHdf9R1hgLmFjBk0kOl8O8HZucC6eUve6XVrJ/92ne39q3XC8uJ86jEyTYpzJOSzAbLiP8jSgLetO3pxmTa43aS527rhvZ8JL5yAffh+31QM7yH5z7OCSLeVOGJlwXqhF7scYXy5kaJdg93oEYrUhpHMTh3KV9Ex0Qf4/M7ucWrOpBR6AjyIGlvU92DbSj/ggL5w4N4wHUCOflgeum/BI6G33QdKXXJiebFiJIjyiYk4NPu4R2LxJkK7hMBIka6NtNFZCkGHgF/Dlwx36B0nZFYvHt1ciHu2IKWOpl9AdQeQo0jWiBOpElR7LhlhAHUTnP2S2VxoQCAAAA=="`,
);
const image = await fetchWalletImage({ id: "io.metamask" });
expect(image).toContain("data:image/");
});
it("should throw error if WalletId is not supported", async () => {
@@ -1,4 +1,3 @@
import type { Address } from "abitype";
import {
type BlockNumber,
type BlockTag,
@@ -9,6 +8,7 @@ import {
type RpcLog,
formatLog,
} from "viem";
import { type Address, getAddress } from "../../utils/address.js";
import { numberToHex } from "../../utils/encoding/hex.js";
export type GetLogsBlockParams =
@@ -75,7 +75,7 @@ export async function eth_getLogs(
// in the case we have a blockHash
if (params.blockHash) {
const param: {
address?: string | string[];
address?: Address | Address[];
topics: LogTopic[];
blockHash: `0x${string}`;
} = {
@@ -83,7 +83,7 @@ export async function eth_getLogs(
blockHash: params.blockHash,
};
if (params.address) {
param.address = params.address;
param.address = getAddress(params.address);
}
logs = await request({
method: "eth_getLogs",
@@ -93,7 +93,7 @@ export async function eth_getLogs(
// otherwise
else {
const param: {
address?: string | string[];
address?: Address | Address[];
topics?: LogTopic[];
} & (
| {
@@ -1,4 +1,5 @@
import type { BlockTag, EIP1193RequestFn, EIP1474Methods, Hex } from "viem";
import { getAddress } from "../../utils/address.js";
type GetStorageAtParams = {
address: string;
@@ -28,6 +29,10 @@ export async function eth_getStorageAt(
): Promise<Hex> {
return await request({
method: "eth_getStorageAt",
params: [params.address, params.position, params.blockTag ?? "latest"],
params: [
getAddress(params.address),
params.position,
params.blockTag ?? "latest",
],
});
}
@@ -1,6 +1,7 @@
import * as ox__Hex from "ox/Hex";
import { formatTransactionRequest } from "viem";
import { roundUpGas } from "../../gas/op-gas-fee-reducer.js";
import { getAddress } from "../../utils/address.js";
import { resolvePromisedValue } from "../../utils/promise/resolve-promised-value.js";
import type { Prettify } from "../../utils/type-utils.js";
import type { Account } from "../../wallets/interfaces/wallet.js";
@@ -117,9 +118,9 @@ export async function estimateGas(
let gas = await eth_estimateGas(
rpcRequest,
formatTransactionRequest({
to: toAddress,
to: toAddress ? getAddress(toAddress) : undefined,
data: encodedData,
from: fromAddress,
from: fromAddress ? getAddress(fromAddress) : undefined,
value,
// TODO: Remove this casting when we migrate this file to Ox
authorizationList: authorizationList?.map((auth) => ({
@@ -127,7 +128,7 @@ export async function estimateGas(
r: ox__Hex.fromNumber(auth.r),
s: ox__Hex.fromNumber(auth.s),
nonce: Number(auth.nonce),
contractAddress: auth.address,
contractAddress: getAddress(auth.address),
})),
}),
);
@@ -2,6 +2,7 @@ import type { Address } from "abitype";
import { encodeAbiParameters } from "viem";
import { ZERO_ADDRESS } from "../../../../constants/addresses.js";
import { getContract } from "../../../../contract/contract.js";
import { getAddress } from "../../../../utils/address.js";
import { isHex } from "../../../../utils/encoding/helpers/is-hex.js";
import { keccak256 } from "../../../../utils/hashing/keccak256.js";
import { stringify } from "../../../../utils/json.js";
@@ -95,9 +96,9 @@ export async function prepareBiconomyTransaction({
{ type: "bytes32" },
],
[
request.from,
request.to,
request.token,
getAddress(request.from),
getAddress(request.to),
getAddress(request.token),
request.txGas,
request.tokenGasPrice,
request.batchId,
@@ -3,6 +3,7 @@ import { decodeAbiParameters, formatTransactionRequest } from "viem";
import { eth_call } from "../../rpc/actions/eth_call.js";
import { getRpcClient } from "../../rpc/rpc.js";
import type { PreparedMethod } from "../../utils/abi/prepare-method.js";
import { getAddress } from "../../utils/address.js";
import { resolvePromisedValue } from "../../utils/promise/resolve-promised-value.js";
import type { Prettify } from "../../utils/type-utils.js";
import type { Account } from "../../wallets/interfaces/wallet.js";
@@ -61,8 +62,8 @@ export async function simulateTransaction<
const serializedTx = formatTransactionRequest({
data,
from,
to,
from: from ? getAddress(from) : undefined,
to: to ? getAddress(to) : undefined,
value,
accessList,
});
@@ -91,7 +91,10 @@ export async function toSerializableTransaction(
? await import("../../rpc/actions/eth_getTransactionCount.js").then(
({ eth_getTransactionCount }) =>
eth_getTransactionCount(rpcRequest, {
address: typeof from === "string" ? from : from?.address,
address:
typeof from === "string"
? getAddress(from)
: getAddress(from.address),
blockTag: "pending",
}),
)
@@ -24,6 +24,7 @@ import {
type PreparedMethod,
prepareMethod,
} from "../utils/abi/prepare-method.js";
import { getAddress } from "../utils/address.js";
import type { Hex } from "../utils/encoding/hex.js";
export type ReadContractResult<outputs extends readonly AbiParameter[]> = // if the outputs are 0 length, return never, invalid case
@@ -214,7 +215,7 @@ export async function readContract<
const result = await eth_call(rpcRequest, {
data: encodedData,
to: contract.address,
from: options.from,
from: options.from ? getAddress(options.from) : undefined,
});
// use the prepared method to decode the result
const decoded = decodeAbiParameters(resolvedPreparedMethod[2], result);
@@ -1,4 +1,5 @@
import { type Hex, encodePacked } from "viem";
import { getAddress } from "../address.js";
import { ensureBytecodePrefix } from "../bytecode/prefix.js";
import { keccak256 } from "../hashing/keccak256.js";
import { getSaltHash } from "./get-salt-hash.js";
@@ -46,7 +47,7 @@ export function computeDeploymentAddress(
["bytes1", "address", "bytes32", "bytes32"],
[
"0xff",
options.create2FactoryAddress,
getAddress(options.create2FactoryAddress),
saltHash,
keccak256(encodePacked(["bytes"], [initBytecode])),
],
@@ -1,5 +1,5 @@
import { getBytecode } from "../../contract/actions/get-bytecode.js";
import type { ThirdwebContract } from "../../contract/contract.js";
import { type ThirdwebContract, getContract } from "../../contract/contract.js";
import { eth_getStorageAt } from "../../rpc/actions/eth_getStorageAt.js";
import { getRpcClient } from "../../rpc/rpc.js";
import { readContract } from "../../transaction/read-contract.js";
@@ -37,10 +37,12 @@ export async function resolveImplementation(
if (minimalProxyImplementationAddress) {
return {
address: minimalProxyImplementationAddress,
bytecode: await getBytecode({
...contract,
address: minimalProxyImplementationAddress,
}),
bytecode: await getBytecode(
getContract({
...contract,
address: minimalProxyImplementationAddress,
}),
),
};
}
@@ -50,7 +52,10 @@ export async function resolveImplementation(
// In case of a BeaconProxy, it is setup as BeaconProxy --> Beacon --> Implementation
// Hence we replace the proxy address with Beacon address, and continue further resolving below
// biome-ignore lint/style/noParameterAssign: we purposefully mutate the contract object here
contract = { ...contract, address: beacon };
contract = getContract({
...contract,
address: beacon,
});
implementationAddress = await getImplementationFromContractCall(contract);
} else {
@@ -1,4 +1,5 @@
import { encodePacked } from "viem";
import { getAddress } from "../../address.js";
import { keccak256 } from "../../hashing/keccak256.js";
import type { SnapshotEntryERC1155 } from "./types.js";
@@ -9,7 +10,7 @@ export async function hashEntryERC1155(options: {
encodePacked(
["address", "uint256", "uint256"],
[
options.entry.recipient,
getAddress(options.entry.recipient),
BigInt(options.entry.tokenId),
BigInt(options.entry.amount),
],
@@ -1,4 +1,5 @@
import { encodePacked } from "viem";
import { getAddress } from "../../address.js";
import { keccak256 } from "../../hashing/keccak256.js";
import { toUnits } from "../../units.js";
import type { SnapshotEntryERC20 } from "./types.js";
@@ -13,7 +14,7 @@ export async function hashEntryERC20(options: {
encodePacked(
["address", "uint256"],
[
options.entry.recipient,
getAddress(options.entry.recipient),
convertQuantity({
quantity: options.entry.amount.toString(),
tokenDecimals: decimals,
@@ -1,4 +1,5 @@
import { encodePacked } from "viem";
import { getAddress } from "../../address.js";
import { keccak256 } from "../../hashing/keccak256.js";
import type { SnapshotEntryERC721 } from "./types.js";
@@ -6,7 +7,7 @@ export async function hashEntryERC721(options: { entry: SnapshotEntryERC721 }) {
return keccak256(
encodePacked(
["address", "uint256"],
[options.entry.recipient, BigInt(options.entry.tokenId)],
[getAddress(options.entry.recipient), BigInt(options.entry.tokenId)],
),
);
}
@@ -5,6 +5,7 @@ import {
ZERO_ADDRESS,
isNativeTokenAddress,
} from "../../../constants/addresses.js";
import { getAddress } from "../../address.js";
import { keccak256 } from "../../hashing/keccak256.js";
import { convertQuantity } from "./convert-quantity.js";
import type { OverrideEntry } from "./types.js";
@@ -39,7 +40,7 @@ export async function hashEntry(options: {
encodePacked(
["address", "uint256", "uint256", "address"],
[
options.entry.address,
getAddress(options.entry.address),
convertQuantity({
quantity: options.entry.maxClaimable || "unlimited",
tokenDecimals: options.tokenDecimals,
@@ -48,7 +49,7 @@ export async function hashEntry(options: {
quantity: options.entry.price || "unlimited",
tokenDecimals: currencyDecimals,
}),
currencyAddress,
getAddress(currencyAddress),
],
),
);
@@ -1,3 +1,4 @@
import { getAddress } from "../../utils/address.js";
import type { Prettify } from "../../utils/type-utils.js";
import { isCoinbaseSDKWallet } from "../coinbase/coinbase-web.js";
import { isInAppWallet } from "../in-app/core/wallet/index.js";
@@ -80,7 +81,7 @@ export async function getCapabilities<const ID extends WalletId = WalletId>({
try {
return await provider.request({
method: "wallet_getCapabilities",
params: [account.address],
params: [getAddress(account.address)],
});
} catch (error: unknown) {
if (/unsupport|not support|not available/i.test((error as Error).message)) {
@@ -18,11 +18,11 @@ export async function siweAuthenticate(args: {
client: ThirdwebClient;
ecosystem?: Ecosystem;
}): Promise<AuthStoredTokenWithCookieReturnType> {
const { wallet, chain } = args;
const { wallet, chain, client, ecosystem } = args;
// only connect if the wallet doesn't already have an account
const account =
wallet.getAccount() || (await wallet.connect({ client: args.client }));
const clientFetch = getClientFetch(args.client, args.ecosystem);
wallet.getAccount() || (await wallet.connect({ client, chain }));
const clientFetch = getClientFetch(client, ecosystem);
const payload = await (async () => {
const path = getLoginUrl({
@@ -154,7 +154,7 @@ export class EnclaveWallet implements IWebWallet {
"../../../../rpc/actions/eth_getTransactionCount.js"
).then(({ eth_getTransactionCount }) =>
eth_getTransactionCount(rpcRequest, {
address: this.address,
address: getAddress(this.address),
blockTag: "pending",
}),
),
@@ -234,7 +234,7 @@ function createAccount({
return await provider.request({
method: "personal_sign",
params: [messageToSign, account.address],
params: [messageToSign, getAddress(account.address)],
});
},
async signTypedData(typedData) {
@@ -264,7 +264,7 @@ function createAccount({
return await provider.request({
method: "eth_signTypedData_v4",
params: [account.address, stringifiedData],
params: [getAddress(account.address), stringifiedData],
});
},
async watchAsset(asset) {
+6
View File
@@ -1,5 +1,11 @@
# @thirdweb-dev/wagmi-adapter
## 0.2.5
## 0.2.4
## 0.2.3
## 0.2.2
## 0.2.1
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/wagmi-adapter",
"version": "0.2.2",
"version": "0.2.5",
"repository": {
"type": "git",
"url": "git+https://github.com/thirdweb-dev/js.git#main"
+196 -215
View File
@@ -135,7 +135,7 @@ importers:
version: 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
'@sentry/nextjs':
specifier: 8.45.1
version: 8.45.1(@opentelemetry/[email protected](@opentelemetry/[email protected]))(@opentelemetry/[email protected](@opentelemetry/[email protected]))(@opentelemetry/[email protected](@opentelemetry/[email protected]))([email protected])([email protected].3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected])([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))
version: 8.45.1(@opentelemetry/[email protected](@opentelemetry/[email protected]))(@opentelemetry/[email protected](@opentelemetry/[email protected]))(@opentelemetry/[email protected](@opentelemetry/[email protected]))([email protected])([email protected].4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected])([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))
'@shazow/whatsabi':
specifier: ^0.18.0
version: 0.18.0(@noble/[email protected])([email protected])([email protected])
@@ -200,17 +200,17 @@ importers:
specifier: 0.468.0
version: 0.468.0([email protected])
next:
specifier: 15.1.3
version: 15.1.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
specifier: 15.1.4
version: 15.1.4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
next-plausible:
specifier: ^3.12.4
version: 3.12.4([email protected].3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
version: 3.12.4([email protected].4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
next-themes:
specifier: ^0.4.4
version: 0.4.4([email protected]([email protected]))([email protected])
nextjs-toploader:
specifier: ^1.6.12
version: 1.6.12([email protected].3(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
version: 1.6.12([email protected].4(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
openapi-types:
specifier: ^12.1.3
version: 12.1.3
@@ -303,11 +303,11 @@ importers:
specifier: 3.2.2
version: 3.2.2([email protected])([email protected]([email protected])([email protected])([email protected]))
'@next/bundle-analyzer':
specifier: 15.1.0
version: 15.1.0([email protected])([email protected])
specifier: 15.1.4
version: 15.1.4([email protected])([email protected])
'@next/eslint-plugin-next':
specifier: 15.1.3
version: 15.1.3
specifier: 15.1.4
version: 15.1.4
'@playwright/test':
specifier: 1.49.1
version: 1.49.1
@@ -331,7 +331,7 @@ importers:
version: 8.4.7([email protected]([email protected]))([email protected])([email protected]([email protected])([email protected])([email protected]))
'@storybook/nextjs':
specifier: 8.4.7
version: 8.4.7(@swc/[email protected](@swc/[email protected]))([email protected])([email protected].3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))
version: 8.4.7(@swc/[email protected](@swc/[email protected]))([email protected])([email protected].4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))
'@storybook/react':
specifier: 8.5.0
version: 8.5.0(@storybook/[email protected]([email protected]([email protected])([email protected])([email protected])))([email protected]([email protected]))([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])
@@ -397,7 +397,7 @@ importers:
version: 5.41.0(@types/[email protected])([email protected])
next-sitemap:
specifier: ^4.2.3
version: 4.2.3([email protected].3(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))
version: 4.2.3([email protected].4(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))
postcss:
specifier: 8.4.49
version: 8.4.49
@@ -414,11 +414,11 @@ importers:
apps/playground-web:
dependencies:
'@abstract-foundation/agw-client':
specifier: ^1.0.1
version: 1.0.1([email protected].7([email protected])([email protected]))([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected]))
specifier: ^1.3.0
version: 1.3.0([email protected].8([email protected])([email protected]))([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected]))
'@abstract-foundation/agw-react':
specifier: ^1.0.1
version: 1.0.1(tbp7y4vdr4g6hzh7wwqlc5erca)
specifier: ^1.4.1
version: 1.4.1(ps632aoqsqso3jaq3xeoigleqq)
'@radix-ui/react-accordion':
specifier: ^1.2.2
version: 1.2.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
@@ -477,8 +477,8 @@ importers:
specifier: 0.468.0
version: 0.468.0([email protected])
next:
specifier: 15.1.3
version: 15.1.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
specifier: 15.1.4
version: 15.1.4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
next-themes:
specifier: ^0.4.4
version: 0.4.4([email protected]([email protected]))([email protected])
@@ -556,8 +556,8 @@ importers:
specifier: ^2.3.0
version: 2.3.0([email protected])
'@next/mdx':
specifier: 15.1.0
version: 15.1.0(@mdx-js/[email protected]([email protected](@swc/[email protected](@swc/[email protected]))))(@mdx-js/[email protected]([email protected]))
specifier: 15.1.4
version: 15.1.4(@mdx-js/[email protected]([email protected](@swc/[email protected](@swc/[email protected]))))(@mdx-js/[email protected]([email protected]))
'@radix-ui/react-dialog':
specifier: 1.1.4
version: 1.1.4(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
@@ -598,11 +598,11 @@ importers:
specifier: 0.468.0
version: 0.468.0([email protected])
next:
specifier: 15.1.3
version: 15.1.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
specifier: 15.1.4
version: 15.1.4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
nextjs-toploader:
specifier: ^1.6.12
version: 1.6.12([email protected].3(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
version: 1.6.12([email protected].4(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
node-html-parser:
specifier: ^6.1.13
version: 6.1.13
@@ -647,8 +647,8 @@ importers:
version: 0.9.4([email protected])
devDependencies:
'@next/eslint-plugin-next':
specifier: 15.1.3
version: 15.1.3
specifier: 15.1.4
version: 15.1.4
'@types/flexsearch':
specifier: ^0.7.6
version: 0.7.6
@@ -699,7 +699,7 @@ importers:
version: 5.41.0(@types/[email protected])([email protected])
next-sitemap:
specifier: ^4.2.3
version: 4.2.3([email protected].3(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))
version: 4.2.3([email protected].4(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))
postcss:
specifier: 8.4.49
version: 8.4.49
@@ -749,8 +749,8 @@ importers:
specifier: 0.468.0
version: 0.468.0([email protected])
next:
specifier: 15.1.3
version: 15.1.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
specifier: 15.1.4
version: 15.1.4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
next-themes:
specifier: ^0.4.4
version: 0.4.4([email protected]([email protected]))([email protected])
@@ -786,8 +786,8 @@ importers:
version: 3.24.1
devDependencies:
'@next/eslint-plugin-next':
specifier: 15.1.3
version: 15.1.3
specifier: 15.1.4
version: 15.1.4
'@types/node':
specifier: 22.10.2
version: 22.10.2
@@ -980,8 +980,8 @@ importers:
specifier: 0.1.2
version: 0.1.2
viem:
specifier: 2.21.55
version: 2.21.55([email protected])([email protected])([email protected])([email protected])
specifier: 2.22.15
version: 2.22.15([email protected])([email protected])([email protected])([email protected])
devDependencies:
'@aws-sdk/client-kms':
specifier: 3.592.0
@@ -1145,7 +1145,7 @@ importers:
devDependencies:
'@wagmi/core':
specifier: 2.16.0
version: 2.16.0(@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]1.55([email protected])([email protected])([email protected])([email protected]))
version: 2.16.0(@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]2.15([email protected])([email protected])([email protected])([email protected]))
rimraf:
specifier: 6.0.1
version: 6.0.1
@@ -1163,28 +1163,28 @@ packages:
graphql:
optional: true
'@abstract-foundation/agw-client@1.0.1':
resolution: {integrity: sha512-ZJEC2siysQz9FdnWs6xFDY9vuIV+5E01nUFgv/Kvw2mRmf148T7H99SoelN2o8qCmv1r3z2iWQCLCLTa5f3FtQ==}
'@abstract-foundation/agw-client@1.3.0':
resolution: {integrity: sha512-rpo51uNQu8wpyWYUTGcyZY8Mt3tfZQKN0Sh0phPkeD2oIqZB4Ll3CNebwhvNi/AejyI6ZC+KWv6l4DVwZMwUDA==}
peerDependencies:
abitype: ^1.0.0
typescript: '>=5.0.4'
viem: ^2.21.26
viem: ^2.22.14
peerDependenciesMeta:
typescript:
optional: true
'@abstract-foundation/agw-react@1.0.1':
resolution: {integrity: sha512-VlBoUo2xY99aaZYejEs419gCAbDAbP9ftSCa+NSXpMZV2TRYc7g/U8kucx9ugehtAAsnikgVc3LeNlgOe6FHnQ==}
'@abstract-foundation/agw-react@1.4.1':
resolution: {integrity: sha512-SNtenb4h5EFgtf77+6o7Z52UubMfzQegDtOEFt7GYaEd/SOMmhk6VE6swv8YbyPq3WgkaWo9x7eObkldlum3bQ==}
peerDependencies:
'@privy-io/cross-app-connect': ^0.1.2
'@privy-io/react-auth': ^1.97.0
'@privy-io/cross-app-connect': ^0.1.5
'@privy-io/react-auth': ^2.0.5
'@rainbow-me/rainbowkit': '*'
'@tanstack/react-query': ^5
react: '>=18'
secp256k1: '>=5.0.1'
thirdweb: ^5.68.0
typescript: '>=5.0.4'
viem: ^2.21.26
viem: ^2.22.14
wagmi: ^2
peerDependenciesMeta:
'@rainbow-me/rainbowkit':
@@ -3649,23 +3649,20 @@ packages:
'@types/react': '*'
react: '*'
'@next/[email protected].0':
resolution: {integrity: sha512-uEyuNZZgAbSWgiUbtihTA8y6QgEzc4b8Fpslmc4SXAjj67Ax5mlcv1HLlez+5dIGwO+vJ9PgCoI8ngWtBh/g1Q==}
'@next/[email protected].4':
resolution: {integrity: sha512-W8X96jOW0U5VjLVAkFr1P37kH2f/Ma9zzwgX2o3Omft92pI0XHpFG8Xa9YUT3NlhRJCe4ZKznr1VxhSrFNA+BA==}
'@next/[email protected]':
resolution: {integrity: sha512-YmiG58BqyZ2FjrF2+5uZExL2BrLr8RTQzLXNDJ8pJr0O+rPlOeDPXp1p1/4OrR3avDidzZo3D8QO2cuDv1KCkw==}
'@next/[email protected].3':
resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==}
'@next/[email protected]':
resolution: {integrity: sha512-oeP1vnc5Cq9UoOb8SYHAEPbCXMzOgG70l+Zfd+Ie00R25FOm+CCVNrcIubJvB1tvBgakXE37MmqSycksXVPRqg==}
'@next/[email protected].4':
resolution: {integrity: sha512-2fZ5YZjedi5AGaeoaC0B20zGntEHRhi2SdWcu61i48BllODcAmmtj8n7YarSPt4DaTsJaBFdxQAVEVzgmx2Zpw==}
'@next/[email protected]':
resolution: {integrity: sha512-HwlEXwCK3sr6zmVGEvWBjW9tBFs1Oe6hTmTLoFQtpm4As5HCdu8jfSE0XJOp7uhfEGLniIx8yrGxEWwNnY0fmQ==}
'@next/[email protected].0':
resolution: {integrity: sha512-1USYedy2yRmPdIvQC1b2MBVwiJYrcZnCSHHZZETEuV1rAxjjXedbHmo43kwAv6DL3f9AgDHnl1/s1cqI7xhXdA==}
'@next/[email protected].4':
resolution: {integrity: sha512-GsmKCWPDW6Qas4/yL+zj7RLGrDsVu89F42/S9pVcPTvYmXNK1PqRT6H7outQy6Ox/AGB8As1lxPvk4dJmDIm7w==}
peerDependencies:
'@mdx-js/loader': '>=0.15.0'
'@mdx-js/react': '>=0.15.0'
@@ -3675,50 +3672,50 @@ packages:
'@mdx-js/react':
optional: true
'@next/[email protected].3':
resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==}
'@next/[email protected].4':
resolution: {integrity: sha512-wBEMBs+np+R5ozN1F8Y8d/Dycns2COhRnkxRc+rvnbXke5uZBHkUGFgWxfTXn5rx7OLijuUhyfB+gC/ap58dDw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@next/[email protected].3':
resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==}
'@next/[email protected].4':
resolution: {integrity: sha512-7sgf5rM7Z81V9w48F02Zz6DgEJulavC0jadab4ZsJ+K2sxMNK0/BtF8J8J3CxnsJN3DGcIdC260wEKssKTukUw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
'@next/[email protected].3':
resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==}
'@next/[email protected].4':
resolution: {integrity: sha512-JaZlIMNaJenfd55kjaLWMfok+vWBlcRxqnRoZrhFQrhM1uAehP3R0+Aoe+bZOogqlZvAz53nY/k3ZyuKDtT2zQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/[email protected].3':
resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==}
'@next/[email protected].4':
resolution: {integrity: sha512-7EBBjNoyTO2ipMDgCiORpwwOf5tIueFntKjcN3NK+GAQD7OzFJe84p7a2eQUeWdpzZvhVXuAtIen8QcH71ZCOQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/[email protected].3':
resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==}
'@next/[email protected].4':
resolution: {integrity: sha512-9TGEgOycqZFuADyFqwmK/9g6S0FYZ3tphR4ebcmCwhL8Y12FW8pIBKJvSwV+UBjMkokstGNH+9F8F031JZKpHw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/[email protected].3':
resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==}
'@next/[email protected].4':
resolution: {integrity: sha512-0578bLRVDJOh+LdIoKvgNDz77+Bd85c5JrFgnlbI1SM3WmEQvsjxTA8ATu9Z9FCiIS/AliVAW2DV/BDwpXbtiQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/[email protected].3':
resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==}
'@next/[email protected].4':
resolution: {integrity: sha512-JgFCiV4libQavwII+kncMCl30st0JVxpPOtzWcAI2jtum4HjYaclobKhj+JsRu5tFqMtA5CJIa0MvYyuu9xjjQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
'@next/[email protected].3':
resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==}
'@next/[email protected].4':
resolution: {integrity: sha512-xxsJy9wzq7FR5SqPCUqdgSXiNXrMuidgckBa8nH9HtjjxsilgcN6VgXF6tZ3uEWuVEadotQJI8/9EQ6guTC4Yw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -3740,10 +3737,6 @@ packages:
resolution: {integrity: sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==}
engines: {node: ^14.21.3 || >=16}
'@noble/[email protected]':
resolution: {integrity: sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==}
engines: {node: ^14.21.3 || >=16}
'@noble/[email protected]':
resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==}
engines: {node: ^14.21.3 || >=16}
@@ -3764,10 +3757,6 @@ packages:
resolution: {integrity: sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==}
engines: {node: ^14.21.3 || >=16}
'@noble/[email protected]':
resolution: {integrity: sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==}
engines: {node: ^14.21.3 || >=16}
'@noble/[email protected]':
resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==}
engines: {node: ^14.21.3 || >=16}
@@ -4155,8 +4144,8 @@ packages:
resolution: {integrity: sha512-YepVxiylommw2jBuUpdqm90Ebnx6H/HZODDFEpi2/G7lOWMN3GemFHllYC8sKzLIwbPuBqAo5ImvyootOXMCEA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
'@privy-io/[email protected].3':
resolution: {integrity: sha512-crCswhF8OPmynpI0o3iSsJFMTQvO7gUK+TUYVCnxdp2oQhknn4y7v/0c2qTlXIEco1Vdsx9oruhkCWLsrM9vfg==}
'@privy-io/[email protected].5':
resolution: {integrity: sha512-fSq75VXFOZVtSA9gX22FpGuaJP8BFeWQ3oLoOQ4JW1cr3fEhGaEyg7+gfO07JR8FSxgBDSg498zushXihEO7mQ==}
peerDependencies:
'@rainbow-me/rainbowkit': ^2.1.5
'@wagmi/core': ^2.13.4
@@ -4985,30 +4974,27 @@ packages:
'@scure/[email protected]':
resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==}
'@scure/[email protected]':
resolution: {integrity: sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==}
'@scure/[email protected]':
resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==}
'@scure/[email protected]':
resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==}
'@scure/[email protected]':
resolution: {integrity: sha512-82q1QfklrUUdXJzjuRU7iG7D7XiFx5PHYVS0+oeNKhyDLT7WPqs6pBcM2W5ZdwOwKCwoE1Vy1se+DHjcXwCYnA==}
'@scure/[email protected]':
resolution: {integrity: sha512-jSO+5Ud1E588Y+LFo8TaB8JVPNAZw/lGGao+1SepHDeTs2dFLurdNIAgUuDlwezqEjRjElkCJajVrtrZaBxvaQ==}
'@scure/[email protected]':
resolution: {integrity: sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==}
'@scure/[email protected]':
resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==}
'@scure/[email protected]':
resolution: {integrity: sha512-Dop+ASYhnrwm9+HA/HwXg7j2ZqM6yk2fyLWb5znexjctFY3+E+eU8cIWI0Pql0Qx4hPZCijlGq4OL71g+Uz30A==}
'@scure/[email protected]':
resolution: {integrity: sha512-GnlufVSP9UdAo/H2Patfv22VTtpNTyfi+I3qCKpvuB5l1KWzEYx+l2TNpBy9Ksh4xTs3Rn06tBlpWCi/1Vz8gw==}
'@scure/[email protected]':
resolution: {integrity: sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==}
'@segment/[email protected]':
resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==}
@@ -6741,6 +6727,17 @@ packages:
zod:
optional: true
[email protected]:
resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==}
peerDependencies:
typescript: '>=5.0.4'
zod: ^3 >=3.22.0
peerDependenciesMeta:
typescript:
optional: true
zod:
optional: true
[email protected]:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
@@ -11297,8 +11294,8 @@ packages:
[email protected]:
resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
[email protected].3:
resolution: {integrity: sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==}
[email protected].4:
resolution: {integrity: sha512-mTaq9dwaSuwwOrcu3ebjDYObekkxRnXpuVL21zotM8qE2W0HBOdVIdg2Li9QjMEZrj73LN96LcWcz62V19FjAg==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
@@ -11694,14 +11691,6 @@ packages:
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
engines: {node: '>= 0.4'}
[email protected]:
resolution: {integrity: sha512-ak/8K0Rtphg9vnRJlbOdaX9R7cmxD2MiSthjWGaQdMk3D7hrAlDoM+6Lxn7hN52Za3vrXfZ7enfke/5WjolDww==}
peerDependencies:
typescript: '>=5.4.0'
peerDependenciesMeta:
typescript:
optional: true
[email protected]:
resolution: {integrity: sha512-QWCyFfVk5hFOhg13SGqRKih5B7EBucrf+Z1dfmN9jJQ8MZdrRx9mbD78JQL5ogSzDT7fcHgyMCaXd/3AWn6xHQ==}
peerDependencies:
@@ -11718,6 +11707,14 @@ packages:
typescript:
optional: true
[email protected]:
resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==}
peerDependencies:
typescript: '>=5.4.0'
peerDependenciesMeta:
typescript:
optional: true
[email protected]:
resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
engines: {node: '>=12.20'}
@@ -14437,8 +14434,8 @@ packages:
[email protected]:
resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==}
[email protected]1.55:
resolution: {integrity: sha512-PgXew7C11cAuEtOSgRyQx2kJxEOPUwIwZA9dMglRByqJuFVA7wSGZZOOo/93iylAA8E15bEdqy9xulU3oKZ70Q==}
[email protected]2.15:
resolution: {integrity: sha512-7m5T/Emaj/C59jsRxYfZvMvckRRC4+rV+MVufKelxPS5DMhVR4z3Bk6CG8z+eQkpLVearqKBiPvvreLI0AesgA==}
peerDependencies:
typescript: '>=5.0.4'
peerDependenciesMeta:
@@ -14648,9 +14645,6 @@ packages:
resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==}
engines: {node: '>=8.0.0'}
[email protected]:
resolution: {integrity: sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA==}
[email protected]:
resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==}
@@ -15024,23 +15018,23 @@ snapshots:
optionalDependencies:
graphql: 16.10.0
'@abstract-foundation/agw-client@1.0.1([email protected].7([email protected])([email protected]))([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected]))':
'@abstract-foundation/agw-client@1.3.0([email protected].8([email protected])([email protected]))([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected]))':
dependencies:
abitype: 1.0.7([email protected])([email protected])
viem: 2.21.55([email protected])([email protected])([email protected])([email protected])
abitype: 1.0.8([email protected])([email protected])
viem: 2.22.15([email protected])([email protected])([email protected])([email protected])
optionalDependencies:
typescript: 5.7.2
'@abstract-foundation/agw-react@1.0.1(tbp7y4vdr4g6hzh7wwqlc5erca)':
'@abstract-foundation/agw-react@1.4.1(ps632aoqsqso3jaq3xeoigleqq)':
dependencies:
'@abstract-foundation/agw-client': 1.0.1([email protected].7([email protected])([email protected]))([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected]))
'@privy-io/cross-app-connect': 0.1.3(@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]1.55([email protected])([email protected])([email protected])([email protected])))([email protected]1.55([email protected])([email protected])([email protected])([email protected]))
'@privy-io/react-auth': 1.99.1(@abstract-foundation/agw-client@1.0.1([email protected].7([email protected])([email protected]))([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected])))(@solana/[email protected]([email protected])([email protected])([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]))([email protected])([email protected])
'@abstract-foundation/agw-client': 1.3.0([email protected].8([email protected])([email protected]))([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected]))
'@privy-io/cross-app-connect': 0.1.5(@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]2.15([email protected])([email protected])([email protected])([email protected])))([email protected]2.15([email protected])([email protected])([email protected])([email protected]))
'@privy-io/react-auth': 1.99.1(@abstract-foundation/agw-client@1.3.0([email protected].8([email protected])([email protected]))([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected])))(@solana/[email protected]([email protected])([email protected])([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]))([email protected])([email protected])
'@tanstack/react-query': 5.62.16([email protected])
react: 19.0.0
secp256k1: 5.0.1
viem: 2.21.55([email protected])([email protected])([email protected])([email protected])
wagmi: 2.14.8(@tanstack/[email protected])(@tanstack/[email protected]([email protected]))(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected]))([email protected])
viem: 2.22.15([email protected])([email protected])([email protected])([email protected])
wagmi: 2.14.8(@tanstack/[email protected])(@tanstack/[email protected]([email protected]))(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected]))([email protected])
optionalDependencies:
thirdweb: link:packages/thirdweb
typescript: 5.7.2
@@ -18694,7 +18688,7 @@ snapshots:
'@types/react': 19.0.2
react: 19.0.0
'@next/[email protected].0([email protected])([email protected])':
'@next/[email protected].4([email protected])([email protected])':
dependencies:
webpack-bundle-analyzer: 4.10.1([email protected])([email protected])
transitivePeerDependencies:
@@ -18703,45 +18697,41 @@ snapshots:
'@next/[email protected]': {}
'@next/[email protected].3': {}
'@next/[email protected]':
dependencies:
fast-glob: 3.3.1
'@next/[email protected].4': {}
'@next/[email protected]':
dependencies:
fast-glob: 3.3.1
'@next/[email protected].0(@mdx-js/[email protected]([email protected](@swc/[email protected](@swc/[email protected]))))(@mdx-js/[email protected]([email protected]))':
'@next/[email protected].4(@mdx-js/[email protected]([email protected](@swc/[email protected](@swc/[email protected]))))(@mdx-js/[email protected]([email protected]))':
dependencies:
source-map: 0.7.4
optionalDependencies:
'@mdx-js/loader': 2.3.0([email protected](@swc/[email protected](@swc/[email protected])))
'@mdx-js/react': 2.3.0([email protected])
'@next/[email protected].3':
'@next/[email protected].4':
optional: true
'@next/[email protected].3':
'@next/[email protected].4':
optional: true
'@next/[email protected].3':
'@next/[email protected].4':
optional: true
'@next/[email protected].3':
'@next/[email protected].4':
optional: true
'@next/[email protected].3':
'@next/[email protected].4':
optional: true
'@next/[email protected].3':
'@next/[email protected].4':
optional: true
'@next/[email protected].3':
'@next/[email protected].4':
optional: true
'@next/[email protected].3':
'@next/[email protected].4':
optional: true
'@noble/[email protected]': {}
@@ -18760,10 +18750,6 @@ snapshots:
dependencies:
'@noble/hashes': 1.6.0
'@noble/[email protected]':
dependencies:
'@noble/hashes': 1.7.0
'@noble/[email protected]':
dependencies:
'@noble/hashes': 1.7.1
@@ -18776,8 +18762,6 @@ snapshots:
'@noble/[email protected]': {}
'@noble/[email protected]': {}
'@noble/[email protected]': {}
'@nodelib/[email protected]':
@@ -19348,16 +19332,16 @@ snapshots:
dependencies:
zod: 3.24.1
'@privy-io/[email protected].3(@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]1.55([email protected])([email protected])([email protected])([email protected])))([email protected]1.55([email protected])([email protected])([email protected])([email protected]))':
'@privy-io/[email protected].5(@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]2.15([email protected])([email protected])([email protected])([email protected])))([email protected]2.15([email protected])([email protected])([email protected])([email protected]))':
dependencies:
'@noble/curves': 1.7.0
'@noble/hashes': 1.3.2
'@scure/base': 1.1.9
viem: 2.21.55([email protected])([email protected])([email protected])([email protected])
viem: 2.22.15([email protected])([email protected])([email protected])([email protected])
optionalDependencies:
'@wagmi/core': 2.16.3(@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]1.55([email protected])([email protected])([email protected])([email protected]))
'@wagmi/core': 2.16.3(@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]2.15([email protected])([email protected])([email protected])([email protected]))
'@privy-io/[email protected]([email protected])([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected]))':
'@privy-io/[email protected]([email protected])([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected]))':
dependencies:
'@ethersproject/abstract-signer': 5.7.0
'@ethersproject/bignumber': 5.7.0
@@ -19375,7 +19359,7 @@ snapshots:
set-cookie-parser: 2.7.1
uuid: 9.0.1
optionalDependencies:
viem: 2.21.55([email protected])([email protected])([email protected])([email protected])
viem: 2.22.15([email protected])([email protected])([email protected])([email protected])
transitivePeerDependencies:
- bufferutil
- utf-8-validate
@@ -19391,7 +19375,7 @@ snapshots:
- bufferutil
- utf-8-validate
'@privy-io/[email protected](@abstract-foundation/agw-client@1.0.1([email protected].7([email protected])([email protected]))([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected])))(@solana/[email protected]([email protected])([email protected])([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]))([email protected])([email protected])':
'@privy-io/[email protected](@abstract-foundation/agw-client@1.3.0([email protected].8([email protected])([email protected]))([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected])))(@solana/[email protected]([email protected])([email protected])([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]))([email protected])([email protected])':
dependencies:
'@coinbase/wallet-sdk': 4.0.3
'@ethersproject/abstract-signer': 5.7.0
@@ -19409,7 +19393,7 @@ snapshots:
'@heroicons/react': 2.2.0([email protected])
'@marsidev/react-turnstile': 0.4.1([email protected]([email protected]))([email protected])
'@metamask/eth-sig-util': 6.0.2
'@privy-io/js-sdk-core': 0.37.1([email protected])([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected]))
'@privy-io/js-sdk-core': 0.37.1([email protected])([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected]))
'@simplewebauthn/browser': 9.0.1
'@solana/wallet-adapter-base': 0.9.23(@solana/[email protected]([email protected])([email protected])([email protected]))
'@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/[email protected]([email protected])([email protected])([email protected]))([email protected])
@@ -19438,12 +19422,12 @@ snapshots:
stylis: 4.3.5
tinycolor2: 1.6.0
uuid: 9.0.1
viem: 2.21.55([email protected])([email protected])([email protected])([email protected])
viem: 2.22.15([email protected])([email protected])([email protected])([email protected])
web3-core: 1.10.4([email protected])
web3-core-helpers: 1.10.3
zustand: 5.0.3(@types/[email protected])([email protected])([email protected]([email protected]))
optionalDependencies:
'@abstract-foundation/agw-client': 1.0.1([email protected].7([email protected])([email protected]))([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected]))
'@abstract-foundation/agw-client': 1.3.0([email protected].8([email protected])([email protected]))([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected]))
'@solana/web3.js': 1.98.0([email protected])([email protected])([email protected])
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -20374,7 +20358,7 @@ snapshots:
'@safe-global/[email protected]([email protected])([email protected])([email protected])([email protected])':
dependencies:
'@safe-global/safe-gateway-typescript-sdk': 3.22.7
viem: 2.21.55([email protected])([email protected])([email protected])([email protected])
viem: 2.22.15([email protected])([email protected])([email protected])([email protected])
transitivePeerDependencies:
- bufferutil
- typescript
@@ -20387,8 +20371,6 @@ snapshots:
'@scure/[email protected]': {}
'@scure/[email protected]': {}
'@scure/[email protected]': {}
'@scure/[email protected]':
@@ -20397,32 +20379,32 @@ snapshots:
'@noble/hashes': 1.4.0
'@scure/base': 1.1.9
'@scure/[email protected]':
dependencies:
'@noble/curves': 1.7.0
'@noble/hashes': 1.6.1
'@scure/base': 1.2.1
'@scure/[email protected]':
dependencies:
'@noble/curves': 1.8.0
'@noble/hashes': 1.7.0
'@scure/base': 1.2.1
'@noble/curves': 1.8.1
'@noble/hashes': 1.7.1
'@scure/base': 1.2.4
'@scure/[email protected]':
dependencies:
'@noble/curves': 1.8.1
'@noble/hashes': 1.7.1
'@scure/base': 1.2.4
'@scure/[email protected]':
dependencies:
'@noble/hashes': 1.4.0
'@scure/base': 1.1.9
'@scure/[email protected]':
dependencies:
'@noble/hashes': 1.6.1
'@scure/base': 1.2.1
'@scure/[email protected]':
dependencies:
'@noble/hashes': 1.7.0
'@scure/base': 1.2.1
'@noble/hashes': 1.7.1
'@scure/base': 1.2.4
'@scure/[email protected]':
dependencies:
'@noble/hashes': 1.7.1
'@scure/base': 1.2.4
'@segment/[email protected]':
dependencies:
@@ -20513,7 +20495,7 @@ snapshots:
'@sentry/[email protected]': {}
'@sentry/[email protected](@opentelemetry/[email protected](@opentelemetry/[email protected]))(@opentelemetry/[email protected](@opentelemetry/[email protected]))(@opentelemetry/[email protected](@opentelemetry/[email protected]))([email protected])([email protected].3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected])([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))':
'@sentry/[email protected](@opentelemetry/[email protected](@opentelemetry/[email protected]))(@opentelemetry/[email protected](@opentelemetry/[email protected]))(@opentelemetry/[email protected](@opentelemetry/[email protected]))([email protected])([email protected].4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected])([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/semantic-conventions': 1.28.0
@@ -20526,7 +20508,7 @@ snapshots:
'@sentry/vercel-edge': 8.45.1
'@sentry/webpack-plugin': 2.22.7([email protected])([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))
chalk: 3.0.0
next: 15.1.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
next: 15.1.4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
resolve: 1.22.8
rollup: 3.29.5
stacktrace-parser: 0.1.10
@@ -21429,7 +21411,7 @@ snapshots:
dependencies:
storybook: 8.4.7([email protected])([email protected])([email protected])
'@storybook/[email protected](@swc/[email protected](@swc/[email protected]))([email protected])([email protected].3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))':
'@storybook/[email protected](@swc/[email protected](@swc/[email protected]))([email protected])([email protected].4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))':
dependencies:
'@babel/core': 7.26.0
'@babel/plugin-syntax-bigint': 7.8.3(@babel/[email protected])
@@ -21456,7 +21438,7 @@ snapshots:
find-up: 5.0.0
image-size: 1.2.0
loader-utils: 3.3.1
next: 15.1.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
next: 15.1.4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
node-polyfill-webpack-plugin: 2.0.1([email protected](@swc/[email protected](@swc/[email protected]))([email protected]))
pnp-webpack-plugin: 1.7.0([email protected])
postcss: 8.4.49
@@ -22717,16 +22699,16 @@ snapshots:
loupe: 3.1.2
tinyrainbow: 1.2.0
'@wagmi/[email protected](@types/[email protected])(@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]1.55([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected]))([email protected])':
'@wagmi/[email protected](@types/[email protected])(@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]2.15([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected]))([email protected])':
dependencies:
'@coinbase/wallet-sdk': 4.2.3
'@metamask/sdk': 0.31.5([email protected])([email protected])([email protected])
'@safe-global/safe-apps-provider': 0.18.5([email protected])([email protected])([email protected])([email protected])
'@safe-global/safe-apps-sdk': 9.1.0([email protected])([email protected])([email protected])([email protected])
'@wagmi/core': 2.16.3(@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]1.55([email protected])([email protected])([email protected])([email protected]))
'@wagmi/core': 2.16.3(@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]2.15([email protected])([email protected])([email protected])([email protected]))
'@walletconnect/ethereum-provider': 2.17.0(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
cbw-sdk: '@coinbase/[email protected]'
viem: 2.21.55([email protected])([email protected])([email protected])([email protected])
viem: 2.22.15([email protected])([email protected])([email protected])([email protected])
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
@@ -22756,11 +22738,11 @@ snapshots:
- utf-8-validate
- zod
'@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]1.55([email protected])([email protected])([email protected])([email protected]))':
'@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]2.15([email protected])([email protected])([email protected])([email protected]))':
dependencies:
eventemitter3: 5.0.1
mipd: 0.0.7([email protected])
viem: 2.21.55([email protected])([email protected])([email protected])([email protected])
viem: 2.22.15([email protected])([email protected])([email protected])([email protected])
zustand: 5.0.0(@types/[email protected])([email protected])([email protected]([email protected]))
optionalDependencies:
'@tanstack/query-core': 5.62.16
@@ -22771,11 +22753,11 @@ snapshots:
- react
- use-sync-external-store
'@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]1.55([email protected])([email protected])([email protected])([email protected]))':
'@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]2.15([email protected])([email protected])([email protected])([email protected]))':
dependencies:
eventemitter3: 5.0.1
mipd: 0.0.7([email protected])
viem: 2.21.55([email protected])([email protected])([email protected])([email protected])
viem: 2.22.15([email protected])([email protected])([email protected])([email protected])
zustand: 5.0.0(@types/[email protected])([email protected])([email protected]([email protected]))
optionalDependencies:
'@tanstack/query-core': 5.62.16
@@ -23492,6 +23474,11 @@ snapshots:
typescript: 5.7.2
zod: 3.24.1
[email protected]([email protected])([email protected]):
optionalDependencies:
typescript: 5.7.2
zod: 3.24.1
[email protected]:
dependencies:
event-target-shim: 5.0.1
@@ -29398,19 +29385,19 @@ snapshots:
[email protected]: {}
[email protected]([email protected].3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected]):
[email protected]([email protected].4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected]):
dependencies:
next: 15.1.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
next: 15.1.4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
react: 19.0.0
react-dom: 19.0.0([email protected])
[email protected]([email protected].3(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])):
[email protected]([email protected].4(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])):
dependencies:
'@corex/deepmerge': 4.0.43
'@next/env': 13.5.8
fast-glob: 3.3.3
minimist: 1.2.8
next: 15.1.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
next: 15.1.4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
[email protected]([email protected]([email protected]))([email protected]):
dependencies:
@@ -29419,9 +29406,9 @@ snapshots:
[email protected]: {}
[email protected].3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]):
[email protected].4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]):
dependencies:
'@next/env': 15.1.3
'@next/env': 15.1.4
'@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
busboy: 1.6.0
@@ -29431,14 +29418,14 @@ snapshots:
react-dom: 19.0.0([email protected])
styled-jsx: 5.1.6(@babel/[email protected])([email protected])
optionalDependencies:
'@next/swc-darwin-arm64': 15.1.3
'@next/swc-darwin-x64': 15.1.3
'@next/swc-linux-arm64-gnu': 15.1.3
'@next/swc-linux-arm64-musl': 15.1.3
'@next/swc-linux-x64-gnu': 15.1.3
'@next/swc-linux-x64-musl': 15.1.3
'@next/swc-win32-arm64-msvc': 15.1.3
'@next/swc-win32-x64-msvc': 15.1.3
'@next/swc-darwin-arm64': 15.1.4
'@next/swc-darwin-x64': 15.1.4
'@next/swc-linux-arm64-gnu': 15.1.4
'@next/swc-linux-arm64-musl': 15.1.4
'@next/swc-linux-x64-gnu': 15.1.4
'@next/swc-linux-x64-musl': 15.1.4
'@next/swc-win32-arm64-msvc': 15.1.4
'@next/swc-win32-x64-msvc': 15.1.4
'@opentelemetry/api': 1.9.0
'@playwright/test': 1.49.1
sharp: 0.33.5
@@ -29446,9 +29433,9 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
[email protected]([email protected].3(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected]):
[email protected]([email protected].4(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected]):
dependencies:
next: 15.1.3(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
next: 15.1.4(@babel/[email protected])(@opentelemetry/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
nprogress: 0.2.0
prop-types: 15.8.1
react: 19.0.0
@@ -29790,20 +29777,6 @@ snapshots:
object-keys: 1.1.1
safe-push-apply: 1.0.0
[email protected]([email protected])([email protected]):
dependencies:
'@adraffy/ens-normalize': 1.11.0
'@noble/curves': 1.7.0
'@noble/hashes': 1.6.1
'@scure/bip32': 1.6.0
'@scure/bip39': 1.5.0
abitype: 1.0.7([email protected])([email protected])
eventemitter3: 5.0.1
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- zod
[email protected]([email protected])([email protected]):
dependencies:
'@adraffy/ens-normalize': 1.11.0
@@ -29832,6 +29805,20 @@ snapshots:
transitivePeerDependencies:
- zod
[email protected]([email protected])([email protected]):
dependencies:
'@adraffy/ens-normalize': 1.11.0
'@noble/curves': 1.7.0
'@noble/hashes': 1.6.1
'@scure/bip32': 1.6.2
'@scure/bip39': 1.5.4
abitype: 1.0.7([email protected])([email protected])
eventemitter3: 5.0.1
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- zod
[email protected]: {}
[email protected]:
@@ -33054,16 +33041,15 @@ snapshots:
d3-time: 3.1.0
d3-timer: 3.0.1
[email protected]1.55([email protected])([email protected])([email protected])([email protected]):
[email protected]2.15([email protected])([email protected])([email protected])([email protected]):
dependencies:
'@noble/curves': 1.7.0
'@noble/hashes': 1.6.1
'@scure/bip32': 1.6.0
'@scure/bip39': 1.5.0
abitype: 1.0.7([email protected])([email protected])
'@noble/curves': 1.8.1
'@noble/hashes': 1.7.1
'@scure/bip32': 1.6.2
'@scure/bip39': 1.5.4
abitype: 1.0.8([email protected])([email protected])
isows: 1.0.6([email protected]([email protected])([email protected]))
ox: 0.1.2([email protected])([email protected])
webauthn-p256: 0.0.10
ox: 0.6.7([email protected])([email protected])
ws: 8.18.0([email protected])([email protected])
optionalDependencies:
typescript: 5.7.2
@@ -33226,14 +33212,14 @@ snapshots:
[email protected]: {}
[email protected](@tanstack/[email protected])(@tanstack/[email protected]([email protected]))(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected]))([email protected]):
[email protected](@tanstack/[email protected])(@tanstack/[email protected]([email protected]))(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected]))([email protected]):
dependencies:
'@tanstack/react-query': 5.62.16([email protected])
'@wagmi/connectors': 5.7.4(@types/[email protected])(@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]1.55([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]1.55([email protected])([email protected])([email protected])([email protected]))([email protected])
'@wagmi/core': 2.16.3(@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]1.55([email protected])([email protected])([email protected])([email protected]))
'@wagmi/connectors': 5.7.4(@types/[email protected])(@wagmi/[email protected](@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]2.15([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]2.15([email protected])([email protected])([email protected])([email protected]))([email protected])
'@wagmi/core': 2.16.3(@tanstack/[email protected])(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]2.15([email protected])([email protected])([email protected])([email protected]))
react: 19.0.0
use-sync-external-store: 1.4.0([email protected])
viem: 2.21.55([email protected])([email protected])([email protected])([email protected])
viem: 2.22.15([email protected])([email protected])([email protected])([email protected])
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
@@ -33391,11 +33377,6 @@ snapshots:
randombytes: 2.1.0
utf8: 3.0.0
[email protected]:
dependencies:
'@noble/curves': 1.7.0
'@noble/hashes': 1.6.1
[email protected]: {}
[email protected]: {}