diff --git a/apps/app/Models/Balance.ts b/apps/app/Models/Balance.ts index 04f2e8be..5a850ffa 100644 --- a/apps/app/Models/Balance.ts +++ b/apps/app/Models/Balance.ts @@ -1,5 +1,5 @@ import { ExtendedNetwork, ExtendedToken } from "./Network" -import { Wallet } from "./WalletProvider" +import type { Wallet } from "@layerswap/widget-types" import { NodeErrorCategory } from "@/lib/balances/nodeErrorClassifier" export type GasProps = { @@ -35,4 +35,4 @@ export type TokenBalance = { export type NetworkBalance = { balances?: TokenBalance[] | null, -} \ No newline at end of file +} diff --git a/apps/app/Models/WalletProvider.ts b/apps/app/Models/WalletProvider.ts deleted file mode 100644 index 15065c7d..00000000 --- a/apps/app/Models/WalletProvider.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { WalletAccount } from 'starknet'; -import { StarknetWindowObject } from 'starknetkit'; - -export type InternalConnector = { - name: string, - id: string, - icon?: string | undefined, - order?: number, - type?: 'injected' | 'walletConnect' | 'other' | string, - isMultiChain?: boolean, - providerName: string, - installUrl?: string, - isMobileSupported?: boolean, - hasBrowserExtension?: boolean, - extensionNotFound: boolean, - isLoadable?: boolean -} - -export type Wallet = { - id: string; - internalId?: string; - displayName?: string; - // TODO: might be unused and unnecessary check - isActive: boolean; - address: string | `0x${string}`; - addresses: string[]; - providerName: string - icon: (props: any) => React.JSX.Element; - //TODO: this is name of the connector, should be changed to connectorId - metadata?: { - starknetAccount?: WalletAccount, - wallet?: StarknetWindowObject, - l1Address?: string, - deepLink?: string - } - chainId?: string | number, - isLoading?: boolean, - disconnect?: () => Promise | undefined | void; - connect?: () => Promise; - isNotAvailable?: boolean; - //TODO: refactor - withdrawalSupportedNetworks?: string[], - asSourceSupportedNetworks?: string[], - autofillSupportedNetworks?: string[], - networkIcon?: string, -} - -export type RequestAdditionalConnectorsParams = { - page?: number, - pageSize?: number, - query?: string, -} - -export type RequestAdditionalConnectorsResult = { - connectors: InternalConnector[], - nextPage: number | null, - totalCount: number, -} - -export type WalletProvider = { - hideFromList?: boolean, - connectWallet: (props?: { connector?: InternalConnector }) => Promise | undefined, - disconnectWallets?: () => Promise | undefined | void, - switchAccount?: (connector: Wallet, address: string) => Promise, - switchChain?: (connector: Wallet, chainId: string | number) => Promise - isNotAvailableCondition?: (connector: string, network: string, purpose?: "withdrawal" | "autofill" | "asSource") => boolean, - availableConnectors?: InternalConnector[], - additionalConnectors?: InternalConnector[], - connectedWallets: Wallet[] | undefined, - activeWallet: Wallet | undefined, - autofillSupportedNetworks?: string[], - withdrawalSupportedNetworks: string[], - asSourceSupportedNetworks?: string[], - name: string, - id: string, - providerIcon?: string, - unsupportedPlatforms?: string[], - ready: boolean, - requestAdditionalConnectors?: (params?: RequestAdditionalConnectorsParams) => Promise, -} - - -export type SelectAccountProps = { - walletId: string; - address: string; - providerName: string; -} \ No newline at end of file diff --git a/apps/app/components/Common/ImageWithFallback.tsx b/apps/app/components/Common/ImageWithFallback.tsx deleted file mode 100644 index 58536b70..00000000 --- a/apps/app/components/Common/ImageWithFallback.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import Image, { ImageProps } from "next/image"; -import React, { forwardRef, useCallback, useEffect, useState } from "react"; -import LogoPlaceholder from "../Icons/LogoPlaceholder"; - -export const ImageWithFallback = forwardRef(({ src, ...props }, ref) => { - const [imgSrc, setImgSrc] = useState(src); - const [hasError, setHasError] = useState(false); - - useEffect(() => { - setImgSrc(src); - setHasError(false); - }, [src]) - - const handleError = useCallback(() => { - setHasError(true); - }, [setHasError]); - - if (hasError) { - return ; - } - - return {props.alt; -}); \ No newline at end of file diff --git a/apps/app/components/Faucet/FaucetNetworkSelector.tsx b/apps/app/components/Faucet/FaucetNetworkSelector.tsx index d4345863..0c9612a8 100644 --- a/apps/app/components/Faucet/FaucetNetworkSelector.tsx +++ b/apps/app/components/Faucet/FaucetNetworkSelector.tsx @@ -1,7 +1,7 @@ import { FC } from "react" import { ExtendedNetwork } from "@/Models/Network" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/shadcn/select" -import { ImageWithFallback } from "@/components/Common/ImageWithFallback" +import { ImageWithFallback } from "@layerswap/ui-kit/components" type Props = { networks: ExtendedNetwork[] diff --git a/apps/app/components/Faucet/FaucetWalletPicker.tsx b/apps/app/components/Faucet/FaucetWalletPicker.tsx index 7c4d8952..a217a464 100644 --- a/apps/app/components/Faucet/FaucetWalletPicker.tsx +++ b/apps/app/components/Faucet/FaucetWalletPicker.tsx @@ -2,11 +2,12 @@ import { FC, useRef, useState } from "react" import { Check } from "lucide-react" import clsx from "clsx" import { ExtendedNetwork } from "@/Models/Network" -import { Wallet } from "@/Models/WalletProvider" +import type { Wallet } from "@layerswap/widget-types"; import { Address } from "@/lib/address" import { Popover, PopoverAnchor, PopoverContent } from "@/components/shadcn/popover" import MobileTooltip from "@/components/Modal/mobileTooltip" import { AddressInputField } from "@/components/Input/Address/AddressPicker/ManualAddressInput" +import WalletIconView from "@/components/Wallet/WalletIconView" type Props = { network: ExtendedNetwork | null @@ -83,7 +84,7 @@ const FaucetWalletPicker: FC = ({ network, wallets, value, onChange, disa isSelected ? "bg-secondary-300" : "bg-secondary-500 hover:bg-secondary-300", )} > - +
{wallet?.icon ? ( - + ) : addressProviderIcon ? (
) -} \ No newline at end of file +} diff --git a/apps/app/components/Icons/CircularLoader.tsx b/apps/app/components/Icons/CircularLoader.tsx deleted file mode 100644 index 3c154781..00000000 --- a/apps/app/components/Icons/CircularLoader.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { SVGProps } from "react" - -const CircularLoader = (props: SVGProps) => { - return - - - -} - -export default CircularLoader \ No newline at end of file diff --git a/apps/app/components/Icons/CopyIcon.tsx b/apps/app/components/Icons/CopyIcon.tsx deleted file mode 100644 index 5fbed5e7..00000000 --- a/apps/app/components/Icons/CopyIcon.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; - -const CopyIcon = (props) => ( - - - - -); - -export default CopyIcon; \ No newline at end of file diff --git a/apps/app/components/Icons/FilledX.tsx b/apps/app/components/Icons/FilledX.tsx deleted file mode 100644 index 57dcc95b..00000000 --- a/apps/app/components/Icons/FilledX.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { SVGProps } from "react" - -const FilledX = (props: SVGProps) => { - return - - -} - -export default FilledX \ No newline at end of file diff --git a/apps/app/components/Icons/LogoPlaceholder.tsx b/apps/app/components/Icons/LogoPlaceholder.tsx deleted file mode 100644 index fc52ca76..00000000 --- a/apps/app/components/Icons/LogoPlaceholder.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React, { SVGProps } from 'react'; - -const LogoPlaceholder = ({ className, ...props }: SVGProps) => ( - - - - -); - -export default LogoPlaceholder; \ No newline at end of file diff --git a/apps/app/components/Icons/SearchIcon.tsx b/apps/app/components/Icons/SearchIcon.tsx deleted file mode 100644 index 90cf382b..00000000 --- a/apps/app/components/Icons/SearchIcon.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { SVGProps } from "react"; - -const SearchIcon = (props: SVGProps) => - - - -export default SearchIcon; \ No newline at end of file diff --git a/apps/app/components/Icons/SvgWithImg.tsx b/apps/app/components/Icons/SvgWithImg.tsx deleted file mode 100644 index dbda75b5..00000000 --- a/apps/app/components/Icons/SvgWithImg.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { SVGProps } from "react" - -const SVGWithImg = (props: SVGProps & { image_url: string }) => { - return ( - - - - ) -} - -export default SVGWithImg \ No newline at end of file diff --git a/apps/app/components/Icons/WalletIcon.tsx b/apps/app/components/Icons/WalletIcon.tsx deleted file mode 100644 index 524aab13..00000000 --- a/apps/app/components/Icons/WalletIcon.tsx +++ /dev/null @@ -1,7 +0,0 @@ -const WalletIcon = ({ strokeWidth = 2, ...props }: any) => ( - - - -); - -export default WalletIcon; \ No newline at end of file diff --git a/apps/app/components/Icons/Wallets/BitKeep.tsx b/apps/app/components/Icons/Wallets/BitKeep.tsx deleted file mode 100644 index 910f0b2d..00000000 --- a/apps/app/components/Icons/Wallets/BitKeep.tsx +++ /dev/null @@ -1,19 +0,0 @@ -const BitKeep = (props) => - - - - - - -export default BitKeep; \ No newline at end of file diff --git a/apps/app/components/Icons/Wallets/Bitget.tsx b/apps/app/components/Icons/Wallets/Bitget.tsx deleted file mode 100644 index b12cecf3..00000000 --- a/apps/app/components/Icons/Wallets/Bitget.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { SVGProps } from "react"; - -const BitGetIcon = (props: SVGProps) => { - return ( - - - - - - - - - - - - - - ) -} - -export default BitGetIcon \ No newline at end of file diff --git a/apps/app/components/Icons/Wallets/BrowserWallet.tsx b/apps/app/components/Icons/Wallets/BrowserWallet.tsx deleted file mode 100644 index b8f3ed86..00000000 --- a/apps/app/components/Icons/Wallets/BrowserWallet.tsx +++ /dev/null @@ -1,7 +0,0 @@ -const BrowserWallet = (props) => - - - - - -export default BrowserWallet; \ No newline at end of file diff --git a/apps/app/components/Icons/Wallets/Controller.tsx b/apps/app/components/Icons/Wallets/Controller.tsx deleted file mode 100644 index cda70368..00000000 --- a/apps/app/components/Icons/Wallets/Controller.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { SVGProps } from "react"; - -const Controller = (props: SVGProps) => - - - - -export default Controller \ No newline at end of file diff --git a/apps/app/components/Icons/Wallets/Keplr.tsx b/apps/app/components/Icons/Wallets/Keplr.tsx deleted file mode 100644 index bdf7454e..00000000 --- a/apps/app/components/Icons/Wallets/Keplr.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { SVGProps } from "react"; - -const Keplr = (props: SVGProps) => - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -export default Keplr \ No newline at end of file diff --git a/apps/app/components/Icons/Wallets/Solflare.tsx b/apps/app/components/Icons/Wallets/Solflare.tsx deleted file mode 100644 index 8be25211..00000000 --- a/apps/app/components/Icons/Wallets/Solflare.tsx +++ /dev/null @@ -1,25 +0,0 @@ -const Solflare = (props) => { - return ( - - - - - - - - - - ); -}; - -export default Solflare; diff --git a/apps/app/components/Icons/Wallets/Xverse.tsx b/apps/app/components/Icons/Wallets/Xverse.tsx deleted file mode 100644 index e915435b..00000000 --- a/apps/app/components/Icons/Wallets/Xverse.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { SVGProps } from "react"; - -const Xverse = (props: SVGProps) => - - - - - -export default Xverse \ No newline at end of file diff --git a/apps/app/components/Input/Address/AddressPicker/AddressBook.tsx b/apps/app/components/Input/Address/AddressPicker/AddressBook.tsx index e96d115a..7800e8dd 100644 --- a/apps/app/components/Input/Address/AddressPicker/AddressBook.tsx +++ b/apps/app/components/Input/Address/AddressPicker/AddressBook.tsx @@ -6,7 +6,7 @@ import { Network } from "@/Models/Network"; import { FC } from "react"; import AddressWithIcon from "./AddressWithIcon"; import { Partner } from "@/Models/Partner"; -import { Wallet } from "@/Models/WalletProvider"; +import type { Wallet } from "@layerswap/widget-types"; import { BookOpen } from "lucide-react"; type AddressBookProps = { @@ -63,4 +63,4 @@ const sortingByDate = (a: AddressItem, b: AddressItem) => { - (b.date ? Math.abs(((new Date()).getTime() - new Date(b.date).getTime())) : 0) } -export default AddressBook; \ No newline at end of file +export default AddressBook; diff --git a/apps/app/components/Input/Address/AddressPicker/AddressButton.tsx b/apps/app/components/Input/Address/AddressPicker/AddressButton.tsx index 46ee3cb6..019bbaac 100644 --- a/apps/app/components/Input/Address/AddressPicker/AddressButton.tsx +++ b/apps/app/components/Input/Address/AddressPicker/AddressButton.tsx @@ -2,8 +2,7 @@ import { FC } from "react" import { AddressItem } from "."; import { Partner } from "@/Models/Partner"; import { Network } from "@/Models/Network"; -import { Wallet } from "@/Models/WalletProvider"; - +import type { Wallet } from "@layerswap/widget-types"; type AddressButtonProps = { openAddressModal: () => void; destination_address?: string; @@ -20,4 +19,4 @@ const AddressButton: FC = ({ openAddressModal, children, des } -export default AddressButton \ No newline at end of file +export default AddressButton diff --git a/apps/app/components/Input/Address/AddressPicker/AddressWithIcon.tsx b/apps/app/components/Input/Address/AddressPicker/AddressWithIcon.tsx index 80364bf3..d763a3d9 100644 --- a/apps/app/components/Input/Address/AddressPicker/AddressWithIcon.tsx +++ b/apps/app/components/Input/Address/AddressPicker/AddressWithIcon.tsx @@ -1,15 +1,16 @@ import { FC, MouseEventHandler, ReactNode, SVGProps, useCallback, useMemo, useState } from "react" import { AddressGroup, AddressItem } from "."; import AddressIcon from "@/components/AddressIcon"; +import WalletIconView from "@/components/Wallet/WalletIconView"; import { Address, getExplorerUrl } from "@/lib/address"; -import { History, Copy, Check, ChevronDown, WalletIcon, Pencil, Link2, SquareArrowOutUpRight, Unplug, Info } from "lucide-react"; +import { History, Copy, Check, ChevronDown, Pencil, Link2, SquareArrowOutUpRight, Unplug, Info } from "lucide-react"; import { Partner } from "@/Models/Partner"; import { Network } from "@/Models/Network"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/shadcn/popover"; import useCopyClipboard from "@/hooks/useCopyClipboard"; import Link from "next/link"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/shadcn/tooltip"; -import { ImageWithFallback } from "@/components/Common/ImageWithFallback"; +import { ImageWithFallback } from "@layerswap/ui-kit/components"; import clsx from "clsx"; import shortenString from "@/components/utils/ShortenString"; @@ -46,7 +47,7 @@ const AddressWithIcon: FC = ({ addressItem, partner, network, balance }) { group: AddressGroup.ConnectedWallet, text:

{addressItem.wallet?.displayName || 'Connected wallet'}

, - icon: addressItem.wallet?.icon || WalletIcon + icon: undefined }, { group: AddressGroup.FromQuery, @@ -94,7 +95,9 @@ const AddressWithIcon: FC = ({ addressItem, partner, network, balance })
- {itemDescription?.icon && ( + {addressItem.group === AddressGroup.ConnectedWallet ? ( + + ) : itemDescription?.icon && ( )} {itemDescription?.text} @@ -133,7 +136,7 @@ type ExtendedAddressProps = { showDetails?: boolean; title?: string; description?: string; - logo?: string | ((e: SVGProps) => ReactNode); + logo?: string; children?: ReactNode shouldShowChevron?: boolean isNativeToken?: boolean; @@ -240,23 +243,21 @@ export const ExtendedAddress: FC = ({ address, network, pr {showDetails && (title || description) && (
- {Logo ? - - typeof Logo == 'string' ? ( - - ) : ( - - ) : ( - - )} + {Logo ? ( + + ) : !isForCurrency ? ( + + ) : ( + + )}
{title &&

{title}

} {description &&

{description}

} @@ -352,4 +353,4 @@ const ActionButton: FC = ({ title, Icon, onClick, href, iconC ) } -export default AddressWithIcon \ No newline at end of file +export default AddressWithIcon diff --git a/apps/app/components/Input/Address/AddressPicker/ConnectedWallets/ConnectWalletButton.tsx b/apps/app/components/Input/Address/AddressPicker/ConnectedWallets/ConnectWalletButton.tsx index a1cb28eb..f4e6dda1 100644 --- a/apps/app/components/Input/Address/AddressPicker/ConnectedWallets/ConnectWalletButton.tsx +++ b/apps/app/components/Input/Address/AddressPicker/ConnectedWallets/ConnectWalletButton.tsx @@ -1,12 +1,14 @@ import { RefreshCw } from "lucide-react"; import { ResolveConnectorIcon } from "../../../../Icons/ConnectorIcons"; import { FC, useState } from "react"; -import { Wallet, WalletProvider } from "../../../../../Models/WalletProvider"; +import type { Wallet } from "@layerswap/widget-types"; +import { WalletConnectionProvider } from "@layerswap/wallet-core/types"; +import { useProvidersConnectReady } from "@layerswap/wallet-core"; import { useConnectModal } from "../../../../WalletModal"; import { captureEvent } from "@/lib/faro"; interface Props extends React.ButtonHTMLAttributes { - provider?: WalletProvider, + provider?: WalletConnectionProvider, onConnect?: (wallet: Wallet) => void, descriptionText?: string } @@ -14,10 +16,10 @@ interface Props extends React.ButtonHTMLAttributes { const ConnectWalletButton: FC = ({ provider, onConnect, descriptionText, ...rest }) => { const [isLoading, setIsLoading] = useState(false) const { connect } = useConnectModal() - const isProviderReady = provider?.ready ?? true + const isProvidersReady = useProvidersConnectReady() const handleConnect = async () => { - if (!isProviderReady) return + if (!isProvidersReady) return captureEvent("connect_wallet_clicked", { location: "address_picker" }) setIsLoading(true) const result = await connect(provider) @@ -29,8 +31,8 @@ const ConnectWalletButton: FC = ({ provider, onConnect, descriptionText, {...rest} type="button" onClick={handleConnect} - disabled={!isProviderReady || rest.disabled} - className={`focus-ring-primary-bold py-5 px-6 bg-secondary-500 hover:bg-secondary-400 transition-colors duration-200 rounded-xl ${(isLoading || !isProviderReady) ? 'cursor-progress opacity-80' : ''} disabled:opacity-50 disabled:cursor-not-allowed ${rest.className ?? ''}`} + disabled={!isProvidersReady || rest.disabled} + className={`focus-ring-primary-bold py-5 px-6 bg-secondary-500 hover:bg-secondary-400 transition-colors duration-200 rounded-xl ${(isLoading || !isProvidersReady) ? 'cursor-progress opacity-80' : ''} disabled:opacity-50 disabled:cursor-not-allowed ${rest.className ?? ''}`} >
= ({ provider, onConnect, descriptionText,

{descriptionText ?? 'Connect your wallet to browse and select from your addresses'}

{ - !isProviderReady ? + !isProvidersReady ?
Initializing... diff --git a/apps/app/components/Input/Address/AddressPicker/ConnectedWallets/index.tsx b/apps/app/components/Input/Address/AddressPicker/ConnectedWallets/index.tsx index c3587764..33844abd 100644 --- a/apps/app/components/Input/Address/AddressPicker/ConnectedWallets/index.tsx +++ b/apps/app/components/Input/Address/AddressPicker/ConnectedWallets/index.tsx @@ -1,15 +1,17 @@ import { ChevronDown, Plus, RefreshCw } from "lucide-react"; +import { WalletIcon } from "@layerswap/ui-kit/components"; import { Network } from "@/Models/Network"; import { FC, useState } from "react"; import ResizablePanel from "@/components/ResizablePanel"; -import { SelectAccountProps, Wallet, WalletProvider } from "@/Models/WalletProvider"; -import WalletIcon from "@/components/Icons/WalletIcon"; +import type { Wallet } from "@layerswap/widget-types"; +import { SelectAccountProps, WalletConnectionProvider } from "@layerswap/wallet-core/types"; import { WalletItem } from "@/components/Wallet/WalletsList"; import { useConnectModal } from "@/components/WalletModal"; +import WalletIconView from "@/components/Wallet/WalletIconView"; type Props = { - provider: WalletProvider, + provider: WalletConnectionProvider, notCompatibleWallets: Wallet[], onClick: (props: SelectAccountProps) => void, onConnect?: (wallet: Wallet) => void, @@ -92,7 +94,7 @@ const ConnectedWallets: FC = ({ provider, notCompatibleWallets, onClick,
{notCompatibleWallets?.map((wallet) => (
- +
))} = ({ provider, notCompatibleWallets, onClick, : null } -export default ConnectedWallets; \ No newline at end of file +export default ConnectedWallets; diff --git a/apps/app/components/Input/Address/AddressPicker/ManualAddressInput.tsx b/apps/app/components/Input/Address/AddressPicker/ManualAddressInput.tsx index 859b17cc..0c61d1c8 100644 --- a/apps/app/components/Input/Address/AddressPicker/ManualAddressInput.tsx +++ b/apps/app/components/Input/Address/AddressPicker/ManualAddressInput.tsx @@ -4,7 +4,7 @@ import { Input } from "@/components/shadcn/input" import { Partner } from "@/Models/Partner" import { SwapFormValues } from "@/components/DTOs/SwapFormValues" import { FormikHelpers } from "formik" -import FilledX from "@/components/Icons/FilledX" +import { FilledX } from "@layerswap/ui-kit/components" import AddressWithIcon from "./AddressWithIcon" import { AddressGroup, AddressItem } from "." import { Address } from "@/lib/address" diff --git a/apps/app/components/Input/Address/AddressPicker/index.tsx b/apps/app/components/Input/Address/AddressPicker/index.tsx index 3a3e52f3..24234b8d 100644 --- a/apps/app/components/Input/Address/AddressPicker/index.tsx +++ b/apps/app/components/Input/Address/AddressPicker/index.tsx @@ -11,7 +11,7 @@ import AddressBook from "./AddressBook"; import AddressButton from "./AddressButton"; import { useQueryState } from "@/context/query"; import ConnectedWallets from "./ConnectedWallets"; -import { Wallet } from "@/Models/WalletProvider"; +import type { Wallet } from "@layerswap/widget-types"; import { useSelectedAccount, useSelectSwapAccount } from "@/context/swapAccounts"; import ConnectWalletButton from "./ConnectedWallets/ConnectWalletButton"; import { useAddressesStore } from "@/stores/addressesStore"; @@ -309,4 +309,4 @@ const getUniqueAddresses = (addresses: AddressItem[], destination: Network) => { return Array.from(normalizedMap.values()); } -export default AddressPicker \ No newline at end of file +export default AddressPicker diff --git a/apps/app/components/Input/DestinationWalletPicker.tsx b/apps/app/components/Input/DestinationWalletPicker.tsx index a23b4053..399bfaa0 100644 --- a/apps/app/components/Input/DestinationWalletPicker.tsx +++ b/apps/app/components/Input/DestinationWalletPicker.tsx @@ -2,10 +2,11 @@ import { ChevronDown, PlusIcon } from "lucide-react"; import { AddressGroup, AddressItem, AddressTriggerProps } from "./Address/AddressPicker"; import { Partner } from "@/Models/Partner"; import AddressIcon from "../AddressIcon"; -import { Wallet } from "@/Models/WalletProvider"; -import { ImageWithFallback } from "@/components/Common/ImageWithFallback"; +import type { Wallet } from "@layerswap/widget-types"; +import { ImageWithFallback } from "@layerswap/ui-kit/components"; import clsx from 'clsx'; import { Address } from "@/lib/address"; +import WalletIconView from "@/components/Wallet/WalletIconView"; import { captureEvent } from "@/lib/faro"; const DestinationWalletPicker = (props: AddressTriggerProps) => { @@ -71,11 +72,11 @@ const ResolvedIcon = (props: AdderssIconprops) => { /> } else if (addressItem.group === AddressGroup.ConnectedWallet && wallet) { - return + return } else { return } } -export default DestinationWalletPicker \ No newline at end of file +export default DestinationWalletPicker diff --git a/apps/app/components/Input/RoutePicker/Content.tsx b/apps/app/components/Input/RoutePicker/Content.tsx index 832b2929..1d1489b4 100644 --- a/apps/app/components/Input/RoutePicker/Content.tsx +++ b/apps/app/components/Input/RoutePicker/Content.tsx @@ -8,6 +8,7 @@ import { Network, Token } from "@/Models/Network"; import RouteSearch from "./RouteSearch"; import NavigatableList from "@/components/NavigatableList"; import useWallet from "@/hooks/useWallet"; +import { useProvidersConnectReady } from "@layerswap/wallet-core"; import ConnectWalletButton from "@/components/Input/Address/AddressPicker/ConnectedWallets/ConnectWalletButton"; type ContentProps = { @@ -48,8 +49,8 @@ const Items: FC = ({ searchQuery, setSearchQuery, rowElements, selec const parentRef = useRef(null) const [openValues, setOpenValues] = useState(selectedNetwork ? [selectedNetwork] : []) const scrollTimeoutRef = useRef(null) - const { wallets, providers } = useWallet() - const isProvidersReady = providers.every(p => p.ready) + const { wallets } = useWallet() + const isProvidersReady = useProvidersConnectReady() const isSingleNetwork = useMemo(() => { if (!searchQuery) return false; diff --git a/apps/app/components/Input/RoutePicker/PickerWalletConnect.tsx b/apps/app/components/Input/RoutePicker/PickerWalletConnect.tsx index 049799c6..c5dad732 100644 --- a/apps/app/components/Input/RoutePicker/PickerWalletConnect.tsx +++ b/apps/app/components/Input/RoutePicker/PickerWalletConnect.tsx @@ -3,16 +3,18 @@ import { AccountIdentity, useSelectSwapAccount, useSwapAccounts } from "@/contex import { SwapDirection, SwapFormValues } from "@/components/DTOs/SwapFormValues"; import { WalletsIcons } from "@/components/Wallet/ConnectedWallets"; import { ChevronDown } from "lucide-react"; +import { WalletIcon } from "@layerswap/ui-kit/components"; import { Address } from "@/lib/address"; -import WalletIcon from "@/components/Icons/WalletIcon"; import ConnectButton from "@/components/buttons/connectButton"; import VaulDrawer from "@/components/Modal/vaulModal"; import { WalletItem } from "@/components/Wallet/WalletsList"; import { ConnectNewWalletButton } from "@/components/Wallet/ConnectNewWalletButton"; -import { SelectAccountProps, Wallet } from "@/Models/WalletProvider"; +import type { Wallet } from "@layerswap/widget-types"; +import { SelectAccountProps } from "@layerswap/wallet-core/types"; import { Network } from "@/Models/Network"; import { useFormikContext } from "formik"; import { useConnectModal } from "@/components/WalletModal"; +import WalletIconView from "@/components/Wallet/WalletIconView"; const PickerWalletConnect: FC<{ direction: SwapDirection }> = ({ direction }) => { const [openModal, setOpenModal] = useState(false); @@ -83,7 +85,7 @@ const AccountsPickerButton: FC<{ accounts: (Wallet | AccountIdentity)[], onOpenM > {accounts.length === 1 ? (
- + {firstWallet.address && (

{new Address(firstWallet.address, null, firstWallet.providerName).toShortString()}

)} diff --git a/apps/app/components/Input/RoutePicker/Routes.tsx b/apps/app/components/Input/RoutePicker/Routes.tsx index 73a54761..b2b3c3c4 100644 --- a/apps/app/components/Input/RoutePicker/Routes.tsx +++ b/apps/app/components/Input/RoutePicker/Routes.tsx @@ -3,7 +3,7 @@ import { SwapDirection } from "@/components/DTOs/SwapFormValues"; import { truncateDecimals } from "@/components/utils/RoundDecimals"; import { SelectItem } from "@/components/Select/Selector/SelectItem"; import { ChevronDown } from "lucide-react"; -import { ImageWithFallback } from "@/components/Common/ImageWithFallback"; +import { ImageWithFallback } from "@layerswap/ui-kit/components"; import { useBalance } from "@/lib/balances/useBalance"; import { useSwapAccounts } from "@/context/swapAccounts"; import { memo, useMemo } from "react"; diff --git a/apps/app/components/Input/RoutePicker/TokenTitleDetails.tsx b/apps/app/components/Input/RoutePicker/TokenTitleDetails.tsx index 4cf59048..c7206428 100644 --- a/apps/app/components/Input/RoutePicker/TokenTitleDetails.tsx +++ b/apps/app/components/Input/RoutePicker/TokenTitleDetails.tsx @@ -4,7 +4,7 @@ import { ExtendedAddress } from "../Address/AddressPicker/AddressWithIcon"; import { useState } from "react"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/shadcn/popover"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/shadcn/tooltip"; -import { ImageWithFallback } from "@/components/Common/ImageWithFallback"; +import { ImageWithFallback } from "@layerswap/ui-kit/components"; import { resolveTokenLogoUrl } from "@/components/utils/resolveTokenLogoUrl"; type TokenInfoIconProps = { diff --git a/apps/app/components/Input/Search.tsx b/apps/app/components/Input/Search.tsx index 91fda3e3..e8589b4d 100644 --- a/apps/app/components/Input/Search.tsx +++ b/apps/app/components/Input/Search.tsx @@ -1,8 +1,7 @@ import useWindowDimensions from "@/hooks/useWindowDimensions"; import { Input } from "@/components/shadcn/input"; import { DetailedHTMLProps, InputHTMLAttributes, useEffect, useRef, useState } from "react"; -import FilledX from "@/components/Icons/FilledX"; -import SearchIcon from "@/components/Icons/SearchIcon"; +import { FilledX, SearchIcon } from "@layerswap/ui-kit/components"; import clsx from "clsx"; import { AnimatePresence, motion } from "framer-motion"; diff --git a/apps/app/components/Input/SourceWalletPicker.tsx b/apps/app/components/Input/SourceWalletPicker.tsx index 60ac9370..c229915a 100644 --- a/apps/app/components/Input/SourceWalletPicker.tsx +++ b/apps/app/components/Input/SourceWalletPicker.tsx @@ -1,16 +1,19 @@ import { useFormikContext } from "formik"; import { SwapFormValues } from "../DTOs/SwapFormValues"; -import { Dispatch, FC, SetStateAction, useCallback, useState } from "react"; +import { FC, useCallback, useState } from "react"; import useWallet from "@/hooks/useWallet"; +import { useProvidersConnectReady } from "@layerswap/wallet-core"; import { Address } from "@/lib/address"; import { ChevronDown } from "lucide-react"; +import { WalletIcon } from "@layerswap/ui-kit/components"; import VaulDrawer from "../Modal/vaulModal"; -import { SelectAccountProps, Wallet } from "@/Models/WalletProvider"; -import WalletIcon from "@/components/Icons/WalletIcon"; +import type { Wallet } from "@layerswap/widget-types"; +import { SelectAccountProps } from "@layerswap/wallet-core/types"; import SubmitButton from "@/components/buttons/submitButton"; import { useConnectModal } from "../WalletModal"; import WalletsList from "@/components/Wallet/WalletsList"; import { useSelectedAccount, useSelectSwapAccount } from "@/context/swapAccounts"; +import WalletIconView from "@/components/Wallet/WalletIconView"; import { captureEvent } from "@/lib/faro"; const SourceWalletPicker: FC = () => { @@ -58,7 +61,7 @@ const SourceWalletPicker: FC = () => { - - ) -} - -export default Connector \ No newline at end of file diff --git a/apps/app/components/WalletModal/ConnectorsList.tsx b/apps/app/components/WalletModal/ConnectorsList.tsx deleted file mode 100644 index 2122aca7..00000000 --- a/apps/app/components/WalletModal/ConnectorsList.tsx +++ /dev/null @@ -1,524 +0,0 @@ -import { FC, useCallback, useEffect, useRef, useState } from "react"; -import useWallet from "../../hooks/useWallet"; -import { useConnectModal, WalletModalConnector } from "."; -import { InternalConnector, Wallet, WalletProvider } from "../../Models/WalletProvider"; -import clsx from "clsx"; -import Connector from "./Connector"; -import { usePersistedState } from "../../hooks/usePersistedState"; -import { useConnectors } from "../../hooks/useConnectors"; -import { SearchComponent } from "../Input/Search"; -import CircularLoader from "../Icons/CircularLoader"; -import { MultichainConnectorPicker } from "./MultichainConnectorPicker"; -import { ProviderPicker } from "./ProviderPicker"; -import { InstalledExtensionNotFound } from "./InstalledExtensionNotFound"; -import { WalletQrCode } from "./WalletQrCode"; -import { LoadingConnect } from "./LoadingConnect"; -import AztecEmojiVerification from "./AztecEmojiVerification"; -import { useAztecWalletContext } from "../WalletProviders/AztecWalletProvider"; -import { isMobile } from "@/lib/wallets/utils/isMobile"; - -type ProviderPaginationState = { - loaded: boolean; - nextPage: number | null; - totalCount: number; - pageSize: number; - isLoading: boolean; -} - -type RequestCapableWalletProvider = WalletProvider & { - requestAdditionalConnectors: NonNullable; -} - -const DEFAULT_BROWSE_PAGE_SIZE = 40 -const SEARCH_PAGE_SIZE = 100 - -const upsertPaginationState = ( - previous: Record, - providerNames: string[], - pageSize: number -) => { - const next = { ...previous } - - for (const providerName of providerNames) { - next[providerName] = { - loaded: previous[providerName]?.loaded ?? false, - nextPage: previous[providerName]?.nextPage ?? null, - totalCount: previous[providerName]?.totalCount ?? 0, - pageSize: previous[providerName]?.pageSize ?? pageSize, - isLoading: true, - } - } - - return next -} - -/** - * Settle pagination state after a load-more round, carrying the previous total and page - * size forward when the provider doesn't report them. The initial-load paths deliberately - * reset those instead, so they build their state inline rather than calling this. - */ -const applyLoadMoreResults = ( - previous: Record, - results: { providerName: string; result?: { nextPage?: number | null; totalCount?: number } }[], - pageSize: number -) => { - const next = { ...previous } - - for (const { providerName, result } of results) { - next[providerName] = { - loaded: true, - nextPage: result?.nextPage ?? null, - totalCount: result?.totalCount ?? previous[providerName]?.totalCount ?? 0, - pageSize: previous[providerName]?.pageSize ?? pageSize, - isLoading: false, - } - } - - return next -} - -const withProviderName = (providerName: string, connectors: InternalConnector[]) => { - return connectors.map(connector => ({ ...connector, providerName })) -} - -const clearSearchResultsIfNeeded = (previous: InternalConnector[]) => { - return previous.length === 0 ? previous : [] -} - -const clearPaginationIfNeeded = (previous: Record) => { - return Object.keys(previous).length === 0 ? previous : {} -} - -const canRequestAdditionalConnectors = (provider: WalletProvider): provider is RequestCapableWalletProvider => { - return typeof provider.requestAdditionalConnectors === "function" -} - -const ConnectorsList: FC<{ onFinish: (result: Wallet | undefined) => void }> = ({ onFinish }) => { - const { providers } = useWallet(); - const { setSelectedConnector, selectedProvider, setSelectedProvider, selectedConnector, selectedMultiChainConnector, setSelectedMultiChainConnector } = useConnectModal() - const { pendingVerification } = useAztecWalletContext() - let [recentConnectors, setRecentConnectors] = usePersistedState<({ providerName?: string, connectorName?: string }[])>([], 'recentConnectors', 'localStorage'); - const [connectionError, setConnectionError] = useState(undefined); - const [searchValue, setSearchValue] = useState(undefined) - const [isScrolling, setIsScrolling] = useState(false); - const [searchResults, setSearchResults] = useState([]); - const [browsePaginationByProvider, setBrowsePaginationByProvider] = useState>({}); - const [searchPaginationByProvider, setSearchPaginationByProvider] = useState>({}); - const scrollTimeout = useRef(null); - const searchDebounceRef = useRef(null); - const searchRequestSequenceRef = useRef(0); - const isMobilePlatfrom = isMobile(); - const loadMoreTriggerRef = useRef(null); - - const filteredProviders = providers.filter(p => !p.hideFromList) - const [selectedProviderNames, setSelectedProviderNames] = useState([]) - - const resolvedSelectedProvider = selectedProvider && !selectedProvider.isSelectedFromFilter - ? filteredProviders.find(p => p.name === selectedProvider.name) || selectedProvider - : selectedProvider; - const featuredProviders = selectedProviderNames.length > 0 ? filteredProviders.filter(p => selectedProviderNames.includes(p.name)) : (resolvedSelectedProvider ? [resolvedSelectedProvider] : filteredProviders) - const requestCapableFeaturedProviderNamesKey = featuredProviders - .filter(canRequestAdditionalConnectors) - .map(provider => provider.name) - .join("|") - - const featuredProvidersRef = useRef(featuredProviders) - const browsePaginationRef = useRef(browsePaginationByProvider) - const searchPaginationRef = useRef(searchPaginationByProvider) - const currentSearchValue = searchValue?.trim() ?? "" - const currentSearchValueRef = useRef(currentSearchValue) - const isSearching = currentSearchValue.length >= 2 - - const isSearchingRef = useRef(isSearching) - featuredProvidersRef.current = featuredProviders - browsePaginationRef.current = browsePaginationByProvider - searchPaginationRef.current = searchPaginationByProvider - currentSearchValueRef.current = currentSearchValue - isSearchingRef.current = isSearching - - const handleScroll = () => { - setIsScrolling(true); - - if (scrollTimeout.current) clearTimeout(scrollTimeout.current); - - scrollTimeout.current = setTimeout(() => { - setIsScrolling(false); - }, 1000); - }; - - useEffect(() => { - return () => clearTimeout(scrollTimeout.current as any); - }, []); - - // If the user leaves the connecting step (back button clears selectedConnector) - // while an Aztec emoji verification is still open, tear down the secure channel. - useEffect(() => { - if (!selectedConnector && pendingVerification) { - pendingVerification.cancel() - } - }, [selectedConnector, pendingVerification]); - - const connect = async (connector: WalletModalConnector, provider: WalletProvider) => { - try { - setConnectionError(undefined) - if (connector?.isMultiChain) { - setSelectedMultiChainConnector(connector) - return; - } - setSelectedConnector(connector) - if (connector?.hasBrowserExtension !== false && connector.extensionNotFound && !connector?.showQrCode && !isMobilePlatfrom) return - if (!provider.ready) { - setConnectionError("Wallet provider is still initializing. Please wait a moment and try again.") - return - } - - const result = provider?.connectWallet && await provider.connectWallet({ connector }) - - if (result && connector && provider) { - setRecentConnectors((prev) => { - const next = [{ providerName: provider.name, connectorName: connector.name }]; - const counts = new Map(); - counts.set(provider.name, 1); - - (prev || []).forEach(item => { - if ( - item.providerName && - item.connectorName && - !(item.providerName === provider.name && item.connectorName === connector.name) - ) { - const count = counts.get(item.providerName) ?? 0; - if (count < 3) { - next.push({ providerName: item.providerName, connectorName: item.connectorName }); - counts.set(item.providerName, count + 1); - } - } - }); - return next; - }) - onFinish(result) - setSelectedConnector(undefined) - setSelectedMultiChainConnector(undefined) - } else { - setConnectionError("Connection didn't complete. Please try again.") - } - } catch (e) { - console.log(e) - const message = (e?.message || e?.details || '').toLowerCase() - if (e?.name === 'WalletWindowClosedError' || message.includes('rejected') || message.includes('denied')) { - setConnectionError("You've declined the wallet connection request") - } else { - setConnectionError(e.message || e.details || 'Something went wrong') - } - } - } - - const handleSelectProvider = (providerNames: string[]) => { - setSelectedProviderNames(providerNames) - if (providerNames.length === 0) { - setSelectedProvider(undefined) - } else { - const provider = filteredProviders.find(p => p.name === providerNames[0]) - if (provider) { - setSelectedProvider({ ...provider, isSelectedFromFilter: true }) - } - } - } - - useEffect(() => { - if (isSearching) return - - let cancelled = false - const providersToLoad = featuredProvidersRef.current.filter(provider => - provider.requestAdditionalConnectors - && !browsePaginationRef.current[provider.name]?.loaded - && !browsePaginationRef.current[provider.name]?.isLoading - ) - - if (providersToLoad.length === 0) return - - setBrowsePaginationByProvider(previous => upsertPaginationState(previous, providersToLoad.map(provider => provider.name), DEFAULT_BROWSE_PAGE_SIZE)) - - Promise.all(providersToLoad.map(async (provider) => { - try { - const result = await provider.requestAdditionalConnectors?.({ page: 1, pageSize: DEFAULT_BROWSE_PAGE_SIZE }) - return { providerName: provider.name, result } - } catch { - return { providerName: provider.name, result: undefined } - } - })).then(results => { - if (cancelled) return - - setBrowsePaginationByProvider(previous => { - const next = { ...previous } - - for (const { providerName, result } of results) { - next[providerName] = { - loaded: true, - nextPage: result?.nextPage ?? null, - totalCount: result?.totalCount ?? 0, - pageSize: previous[providerName]?.pageSize ?? DEFAULT_BROWSE_PAGE_SIZE, - isLoading: false, - } - } - - return next - }) - }) - - return () => { - cancelled = true - } - }, [isSearching, requestCapableFeaturedProviderNamesKey]) - - useEffect(() => { - if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current) - - if (!isSearching) { - searchRequestSequenceRef.current += 1 - setSearchResults(clearSearchResultsIfNeeded) - setSearchPaginationByProvider(clearPaginationIfNeeded) - return - } - - const requestId = searchRequestSequenceRef.current + 1 - searchRequestSequenceRef.current = requestId - const searchableProviders = featuredProvidersRef.current.filter(canRequestAdditionalConnectors) - - if (searchableProviders.length === 0) { - setSearchResults(clearSearchResultsIfNeeded) - setSearchPaginationByProvider(clearPaginationIfNeeded) - return - } - - setSearchPaginationByProvider(previous => upsertPaginationState(previous, searchableProviders.map(provider => provider.name), SEARCH_PAGE_SIZE)) - - searchDebounceRef.current = setTimeout(async () => { - const query = currentSearchValueRef.current - const results = await Promise.all(searchableProviders.map(async (provider) => { - try { - const result = await provider.requestAdditionalConnectors({ page: 1, pageSize: SEARCH_PAGE_SIZE, query }) - return { providerName: provider.name, result } - } catch { - return { providerName: provider.name, result: undefined } - } - })) - - if (requestId !== searchRequestSequenceRef.current || query !== currentSearchValueRef.current) { - return - } - - setSearchResults(results.flatMap(({ providerName, result }) => withProviderName(providerName, result?.connectors ?? []))) - setSearchPaginationByProvider(previous => { - const next = { ...previous } - - for (const { providerName, result } of results) { - next[providerName] = { - loaded: true, - nextPage: result?.nextPage ?? null, - totalCount: result?.totalCount ?? 0, - pageSize: SEARCH_PAGE_SIZE, - isLoading: false, - } - } - - return next - }) - }, 300) - - return () => { - if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current) - } - }, [currentSearchValue, isSearching, requestCapableFeaturedProviderNamesKey]) - - const { - featuredConnectors, - additionalConnectors, - initialConnectors, - } = useConnectors({ - featuredProviders, - filteredProviders, - searchValue, - recentConnectors, - searchResults: isSearching ? searchResults : [], - }); - - const activePaginationByProvider = isSearching ? searchPaginationByProvider : browsePaginationByProvider - const anyProviderHasMore = featuredProviders.some(provider => activePaginationByProvider[provider.name]?.nextPage != null) - const anyProviderLoadingMore = featuredProviders.some(provider => activePaginationByProvider[provider.name]?.isLoading) - - const loadMoreInFlightRef = useRef(false) - - const loadMore = useCallback(async () => { - if (loadMoreInFlightRef.current) return - loadMoreInFlightRef.current = true - try { - if (isSearchingRef.current) { - const query = currentSearchValueRef.current - const requestId = searchRequestSequenceRef.current - const providersToLoad = featuredProvidersRef.current.filter(provider => { - const state = searchPaginationRef.current[provider.name] - return provider.requestAdditionalConnectors && state?.nextPage != null && !state.isLoading - }) - - if (providersToLoad.length === 0) return - - setSearchPaginationByProvider(previous => upsertPaginationState(previous, providersToLoad.map(provider => provider.name), SEARCH_PAGE_SIZE)) - - const results = await Promise.all(providersToLoad.map(async (provider) => { - const state = searchPaginationRef.current[provider.name] - try { - const result = await provider.requestAdditionalConnectors?.({ - page: state?.nextPage ?? 1, - pageSize: state?.pageSize ?? SEARCH_PAGE_SIZE, - query, - }) - return { providerName: provider.name, result } - } catch { - return { providerName: provider.name, result: undefined } - } - })) - - if (requestId !== searchRequestSequenceRef.current || query !== currentSearchValueRef.current) { - return - } - - setSearchResults(previous => [ - ...previous, - ...results.flatMap(({ providerName, result }) => withProviderName(providerName, result?.connectors ?? [])) - ]) - setSearchPaginationByProvider(previous => applyLoadMoreResults(previous, results, SEARCH_PAGE_SIZE)) - - return - } - - const providersToLoad = featuredProvidersRef.current.filter(provider => { - const state = browsePaginationRef.current[provider.name] - return provider.requestAdditionalConnectors && state?.nextPage != null && !state.isLoading - }) - - if (providersToLoad.length === 0) return - - setBrowsePaginationByProvider(previous => upsertPaginationState(previous, providersToLoad.map(provider => provider.name), DEFAULT_BROWSE_PAGE_SIZE)) - - const results = await Promise.all(providersToLoad.map(async (provider) => { - const state = browsePaginationRef.current[provider.name] - try { - const result = await provider.requestAdditionalConnectors?.({ - page: state?.nextPage ?? 1, - pageSize: state?.pageSize ?? DEFAULT_BROWSE_PAGE_SIZE, - }) - return { providerName: provider.name, result } - } catch { - return { providerName: provider.name, result: undefined } - } - })) - - setBrowsePaginationByProvider(previous => applyLoadMoreResults(previous, results, DEFAULT_BROWSE_PAGE_SIZE)) - } finally { - loadMoreInFlightRef.current = false - } - }, []) - - useEffect(() => { - if (!loadMoreTriggerRef.current) return; - const observer = new IntersectionObserver((entries) => { - if (entries[0].isIntersecting && anyProviderHasMore && !anyProviderLoadingMore) { - void loadMore() - } - }, { threshold: 0.1, rootMargin: '100px' }); - observer.observe(loadMoreTriggerRef.current); - return () => observer.disconnect(); - }, [anyProviderHasMore, anyProviderLoadingMore, loadMore, selectedConnector, selectedMultiChainConnector]); - - if (selectedConnector?.extensionNotFound && !selectedConnector?.showQrCode && !isMobilePlatfrom) { - const provider = featuredProviders.find(p => p.name === selectedConnector?.providerName) - if (!provider) return null - return { connect(connector, provider) }} /> - } - if (selectedConnector?.qr?.state && (!selectedConnector?.hasBrowserExtension || selectedConnector?.showQrCode)) { - return - } - - if (selectedConnector) { - const provider = featuredProviders.find(p => p.name === selectedConnector?.providerName) - // Aztec (Azguard) surfaces an emoji-verification step mid-connection — - // render it inline here instead of as a separate overlay. - if (pendingVerification) { - return { pendingVerification.cancel(); setSelectedConnector(undefined) }} - /> - } - return { (selectedConnector && provider) && connect(selectedConnector, provider) }} - selectedConnector={selectedConnector} - connectionError={connectionError} - /> - } - - if (selectedMultiChainConnector) { - return - } - - return ( - <> -
-
- - { - (!selectedProvider || selectedProvider?.isSelectedFromFilter) && - - } -
-
-
- { - initialConnectors.map(item => { - const provider = featuredProviders.find(p => p.name === item.providerName) - const isRecent = recentConnectors?.some(v => v.connectorName === item.name) - return ( - provider && connect(item, provider)} - connectingConnector={selectedConnector} - isRecent={isRecent} - isProviderReady={provider?.ready} - /> - ) - }) - } -
- {(anyProviderHasMore || anyProviderLoadingMore) && ( -
- -
- )} -
-
- - ) -} - - -export default ConnectorsList \ No newline at end of file diff --git a/apps/app/components/WalletModal/InstalledExtensionNotFound.tsx b/apps/app/components/WalletModal/InstalledExtensionNotFound.tsx deleted file mode 100644 index 76d6b2cd..00000000 --- a/apps/app/components/WalletModal/InstalledExtensionNotFound.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { FC } from "react"; -import { WalletModalConnector } from "."; -import { Download, ScanLine } from "lucide-react"; -import { resolveWalletConnectorIcon } from "../../lib/wallets/utils/resolveWalletIcon"; -import TrainLogoSymbol from "../Icons/TrainLogoSymbol"; - -export const InstalledExtensionNotFound: FC<{ - selectedConnector: WalletModalConnector | undefined, - onConnect: (connector: WalletModalConnector) => void -}> = ({ selectedConnector, onConnect }) => { - const ConnectorIcon = resolveWalletConnectorIcon({ connector: selectedConnector?.name, iconUrl: selectedConnector?.icon }); - return
-
-
-
-
- -
-
-
- -
-
-
-

{selectedConnector?.name} not detected

-

- Install the extension or connect with your phone -

-
-
-
-
- {selectedConnector && selectedConnector.hasBrowserExtension && ( - - )} - {selectedConnector?.installUrl && ( - - )} -
-
-} \ No newline at end of file diff --git a/apps/app/components/WalletModal/LoadingConnect.tsx b/apps/app/components/WalletModal/LoadingConnect.tsx deleted file mode 100644 index baf62c3e..00000000 --- a/apps/app/components/WalletModal/LoadingConnect.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { FC } from "react"; -import { WalletModalConnector } from "."; -import { Link2Off, RotateCw } from "lucide-react"; -import { resolveWalletConnectorIcon } from "../../lib/wallets/utils/resolveWalletIcon"; -import TrainLogoSymbol from "../Icons/TrainLogoSymbol"; -import { isMobile } from "@/lib/wallets/utils/isMobile"; - -export const LoadingConnect: FC<{ onRetry: () => void, selectedConnector: WalletModalConnector, connectionError: string | undefined }> = ({ onRetry, selectedConnector, connectionError }) => { - const ConnectorIcon = resolveWalletConnectorIcon({ connector: selectedConnector?.name, iconUrl: selectedConnector.icon }); - const isMobilePlatform = isMobile(); - - return ( -
- { - selectedConnector && -
-
-
-
- -
- { - connectionError ? - - : -
- } -
- -
-
-
- {connectionError ? ( - <> -

Connection failed

-

{connectionError}

- - ) : ( - <> -

{isMobilePlatform ? 'Approve connection in your wallet' : 'Approve connection in your wallet pop-up'}

-

{isMobilePlatform ? "Don't see the request? Check your wallet app." : "Don't see a pop-up? Check your browser windows."}

- - )} -
-
-
- } - { - connectionError && - - } -
- ) -} \ No newline at end of file diff --git a/apps/app/components/WalletModal/MultichainConnectorPicker.tsx b/apps/app/components/WalletModal/MultichainConnectorPicker.tsx deleted file mode 100644 index 2806a3f3..00000000 --- a/apps/app/components/WalletModal/MultichainConnectorPicker.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { FC } from "react"; -import { WalletModalConnector } from "."; -import { InternalConnector, WalletProvider } from "../../Models/WalletProvider"; -import { resolveWalletConnectorIcon } from "../../lib/wallets/utils/resolveWalletIcon"; -import { ImageWithFallback } from "../Common/ImageWithFallback"; - -type MultichainConnectorModalProps = { - selectedConnector: WalletModalConnector, - allConnectors: InternalConnector[], - providers: WalletProvider[], - connect: (connector: InternalConnector, provider: WalletProvider) => Promise -} - -export const MultichainConnectorPicker: FC = ({ selectedConnector, allConnectors, providers, connect }) => { - const Icon = resolveWalletConnectorIcon({ connector: selectedConnector.id, iconUrl: selectedConnector.icon }) - return ( -
-
-
-
- -
-

- {selectedConnector.name} supports multiple network types. Please select the one you'd like to use. -

-
-
- -
- { - Array.from( - allConnectors - .filter(c => c?.name === selectedConnector.name) - .reduce((map, connector) => { - if (!connector?.providerName) return map; - if (!map.has(connector.providerName)) { - map.set(connector.providerName, connector); - } - return map; - }, new Map()) - .values() - ).map((connector, index) => { - const provider = providers.find(p => p.name === connector?.providerName) - return ( - - ) - }) - } -
-
- ) -} diff --git a/apps/app/components/WalletModal/ProviderPicker.tsx b/apps/app/components/WalletModal/ProviderPicker.tsx deleted file mode 100644 index 3afd4876..00000000 --- a/apps/app/components/WalletModal/ProviderPicker.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { FC, useMemo, useState } from "react"; -import { WalletProvider } from "../../Models/WalletProvider"; -import clsx from "clsx"; -import { Popover, PopoverContent, PopoverTrigger } from "../shadcn/popover"; -import { Checkbox } from "../shadcn/checkbox"; -import MenuIcon from "@/components/Icons/MenuIcon"; - -export const ProviderPicker: FC<{ providers: WalletProvider[], selectedProviderNames: string[], setSelectedProviderNames: (providerNames: string[]) => void }> = ({ providers, selectedProviderNames, setSelectedProviderNames }) => { - const values = useMemo(() => providers.map(p => p.name).sort(), [providers]) - const [open, setOpen] = useState(false) - - const onSelect = (item: string) => { - if (selectedProviderNames.includes(item)) { - const next = selectedProviderNames.filter(p => p !== item) - setSelectedProviderNames(next) - } else { - setSelectedProviderNames([...selectedProviderNames, item]) - } - } - - const handleClear = () => { - setSelectedProviderNames([]) - setOpen(false) - } - - return ( - setOpen(!open)}> - 0, - })} - > - - {selectedProviderNames.length > 0 && ( -
- {selectedProviderNames.length} -
- )} -
- - { - values.map((item, index) => ( -
onSelect(item)} className="px-2 py-1 text-left flex items-center w-full gap-2.5 hover:bg-secondary-600 rounded-lg transition-colors duration-200 text-secondary-text cursor-pointer"> - e.stopPropagation()} - onCheckedChange={() => onSelect(item)} - /> - -
- )) - } - {selectedProviderNames.length > 0 && ( - - )} -
-
- ) -} \ No newline at end of file diff --git a/apps/app/components/WalletModal/WalletQrCode.tsx b/apps/app/components/WalletModal/WalletQrCode.tsx deleted file mode 100644 index b609cc42..00000000 --- a/apps/app/components/WalletModal/WalletQrCode.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { FC } from "react"; -import { WalletModalConnector } from "."; -import { resolveWalletConnectorIcon } from "../../lib/wallets/utils/resolveWalletIcon"; -import { QRCodeSVG } from "qrcode.react"; -import CopyButton from "../buttons/copyButton"; - -export const WalletQrCode: FC<{ selectedConnector: WalletModalConnector }> = ({ selectedConnector }) => { - const ConnectorIcon = resolveWalletConnectorIcon({ connector: selectedConnector?.name, iconUrl: selectedConnector.icon }); - - return
-
-
- -

{selectedConnector?.name}

-
-
- { - selectedConnector?.qr?.state == 'fetched' ? - - : -
-
- -
- } -
-

Scan with your phone to connect

-
-
- Copy link -
-
-} \ No newline at end of file diff --git a/apps/app/components/WalletModal/index.tsx b/apps/app/components/WalletModal/index.tsx index f4515f77..ff133a0a 100644 --- a/apps/app/components/WalletModal/index.tsx +++ b/apps/app/components/WalletModal/index.tsx @@ -1,137 +1,97 @@ -import { Context, createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react' -import { InternalConnector, Wallet, WalletProvider } from '../../Models/WalletProvider'; +import { createContext, type Dispatch, type ReactNode, type SetStateAction, useCallback, useContext, useEffect, useMemo, useState } from "react"; +import { connectModalStore } from "@layerswap/wallet-core"; +import * as UiKit from "@layerswap/ui-kit/components"; +import type { ModalWalletProvider } from "@layerswap/ui-kit/components"; +import type { WalletConnectionProvider, WalletModalConnector } from "@layerswap/wallet-core/types"; +import type { Wallet } from "@layerswap/widget-types"; -export type WalletModalConnector = InternalConnector & { - qr?: ({ - state: 'loading', - value: undefined, - deepLink?: undefined - } | { - state: 'fetched', - value: string, - deepLink?: string - }); - showQrCode?: boolean -} +type ConnectDisplayMode = 'drawer' | 'dialog' -export type ModalWalletProvider = WalletProvider & { - isSelectedFromFilter?: boolean; +type ConnectOptions = { + displayMode?: ConnectDisplayMode; } -export type ConnectDisplayMode = 'drawer' | 'dialog' - -type SharedType = { provider?: WalletProvider, connectCallback: (value: Wallet | undefined) => void, displayMode?: ConnectDisplayMode } - type ConnectModalContextType = { - connect: ({ provider, connectCallback, displayMode }: SharedType) => void; + connect: (provider?: WalletConnectionProvider, options?: ConnectOptions) => Promise; cancel: () => void; selectedProvider: ModalWalletProvider | undefined; - setSelectedProvider: (value: ModalWalletProvider | undefined) => void; - isWalletModalOpen?: boolean; + setSelectedProvider: (provider: ModalWalletProvider | undefined) => void; + isWalletModalOpen: boolean; selectedConnector: WalletModalConnector | undefined; - setSelectedConnector: (value: WalletModalConnector | undefined) => void; - selectedMultiChainConnector: InternalConnector | undefined; - setSelectedMultiChainConnector: (value: InternalConnector | undefined) => void; + setSelectedConnector: Dispatch>; + selectedMultiChainConnector: WalletModalConnector | undefined; + setSelectedMultiChainConnector: (connector: WalletModalConnector | undefined) => void; goBack: () => void; - onFinish: (connectedWallet?: Wallet | undefined) => void; - setOpen: (value: boolean) => void; + onFinish: (wallet?: Wallet) => void; + setOpen: (open: boolean) => void; open: boolean; displayMode: ConnectDisplayMode; }; const ConnectModalContext = createContext(null); -export function WalletModalProvider({ children }) { - const [connectConfig, setConnectConfig] = useState(undefined); +export function WalletModalProvider({ children }: { children: ReactNode }) { + return ( + + {children} + + ); +} - const [selectedProvider, setSelectedProvider] = useState(undefined); - const [selectedConnector, setSelectedConnector] = useState(undefined); - const [selectedMultiChainConnector, setSelectedMultiChainConnector] = useState(undefined) +function WalletModalShell({ children }: { children: ReactNode }) { + const { selectedProvider, setSelectedProvider, selectedConnector, setSelectedConnector, + selectedMultiChainConnector, setSelectedMultiChainConnector, start, cancel: cancelFlow, finish, goBack, } = UiKit.useConnectModal(); const [open, setOpen] = useState(false); const [isWalletModalOpen, setIsWalletModalOpen] = useState(false); - const [displayMode, setDisplayMode] = useState('drawer'); + const [displayMode, setDisplayMode] = useState("drawer"); - const connect = useCallback(async ({ provider, connectCallback, displayMode: mode = 'drawer' }: SharedType) => { + const connect = useCallback(async ( + provider?: WalletConnectionProvider, + options: ConnectOptions = {}, + ) => { const hasConnectorPicker = !!provider?.availableConnectors?.length || !!provider?.additionalConnectors?.length - || !!provider?.requestAdditionalConnectors + || !!provider?.requestAdditionalConnectors; - if (!hasConnectorPicker) { - await provider?.connectWallet() - } - setSelectedProvider(provider); - setDisplayMode(mode) - setOpen(true) - setConnectConfig({ provider, connectCallback }); - return; - }, []) + if (!hasConnectorPicker) await provider?.connectWallet(); + + setDisplayMode(options.displayMode ?? "drawer"); + setOpen(true); + return start(provider); + }, [start]); const cancel = useCallback(() => { - setConnectConfig(prev => { - prev?.connectCallback(undefined); - return undefined; - }); + cancelFlow(); setOpen(false); - }, []) + }, [cancelFlow]); - const onFinish = useCallback((connectedWallet?: Wallet | undefined) => { - setConnectConfig(prev => { - prev?.connectCallback(connectedWallet); - return undefined; - }); + const onFinish = useCallback((wallet?: Wallet) => { + finish(wallet); setOpen(false); - }, []) - - const goBack = useCallback(() => { - if (selectedConnector) { - setSelectedConnector(undefined) - setSelectedMultiChainConnector(undefined) - return; - } else if (selectedMultiChainConnector) { - setSelectedMultiChainConnector(undefined) - return; - } - }, [selectedConnector, selectedMultiChainConnector]) + }, [finish]); useEffect(() => { if (!open && (selectedConnector || selectedMultiChainConnector)) { - setSelectedConnector(undefined) - setSelectedMultiChainConnector(undefined) - setSelectedProvider(undefined) + setSelectedConnector(undefined); + setSelectedMultiChainConnector(undefined); + setSelectedProvider(undefined); } - setIsWalletModalOpen(open) - }, [open]) + setIsWalletModalOpen(open); + connectModalStore._syncOpen(open); + }, [open]); - const contextValue = useMemo(() => ({ + const value = useMemo(() => ({ connect, cancel, selectedProvider, setSelectedProvider, - selectedConnector, setSelectedConnector, - selectedMultiChainConnector, setSelectedMultiChainConnector, - isWalletModalOpen, goBack, onFinish, setOpen, open, displayMode - }), [connect, cancel, selectedProvider, selectedConnector, - selectedMultiChainConnector, isWalletModalOpen, goBack, onFinish, open, displayMode]) + selectedConnector, setSelectedConnector, selectedMultiChainConnector, setSelectedMultiChainConnector, + goBack, onFinish, setOpen, open, isWalletModalOpen, displayMode, + }), [cancel, connect, displayMode, goBack, isWalletModalOpen, onFinish, open, + selectedConnector, selectedMultiChainConnector, selectedProvider,]) - return ( - - {children} - - ) + return {children}; } -export const useConnectModal = () => { - - const context = useContext(ConnectModalContext as Context); - - if (!context) { - throw new Error('useConnectModal must be used within a ConnectModalProvider'); - } - - const connect = useCallback( - (provider?: WalletProvider, options?: { displayMode?: ConnectDisplayMode }): Promise => - new Promise((res) => { - context.connect({ provider, connectCallback: res, displayMode: options?.displayMode }); - }), - [context.connect] - ); - - return useMemo(() => ({ ...context, connect }), [context, connect]); -}; \ No newline at end of file +export function useConnectModal() { + const context = useContext(ConnectModalContext); + if (!context) throw new Error("useConnectModal must be used within a ConnectModalProvider") + return context; +} diff --git a/apps/app/components/WalletModal/utils.ts b/apps/app/components/WalletModal/utils.ts deleted file mode 100644 index 66118a79..00000000 --- a/apps/app/components/WalletModal/utils.ts +++ /dev/null @@ -1,55 +0,0 @@ -export function removeDuplicatesWithKey(arr: any[], key: string) { - const countMap = {}; - const providerMap = {}; - - // First pass: Count occurrences of each unique key and track unique providers. - arr.forEach(item => { - const identifier = item[key]; - countMap[identifier] = (countMap[identifier] || 0) + 1; - - // Track unique provider names for this connector - if (!providerMap[identifier]) { - providerMap[identifier] = new Set(); - } - if (item.providerName) { - providerMap[identifier].add(item.providerName); - } - }); - - // Second pass: Create a new array with one instance of each object. - const unique: any[] = []; - const seen = new Set(); - - arr.forEach(item => { - const identifier = item[key]; - if (!seen.has(identifier)) { - seen.add(identifier); - // Only mark as multichain if there are duplicates across different providers - const uniqueProviders = providerMap[identifier]?.size || 0; - unique.push({ - ...item, - isMultiChain: countMap[identifier] > 1 && uniqueProviders > 1 - }); - } - }); - return unique; -} - -export function sortRecentConnectors(a: { name: string, type?: string }, b: { name: string, type?: string }, recentConnectors: { connectorName?: string }[]) { - function getIndex(c: { name: string }) { - const idx = recentConnectors?.findIndex(v => v.connectorName === c.name); - return idx === -1 ? Infinity : idx; - } - const indexA = getIndex(a); - const indexB = getIndex(b); - if (indexA !== indexB) { - return indexA - indexB; - } - // Return 0 for non-recents so the stable sort preserves upstream registry - // order. Sorting by `type.localeCompare` here groups wallets by type - // alphabetically, which means a new `other`-type wallet arriving on page 2 - // gets inserted before all already-rendered `walletConnect`-type wallets, - // visibly pushing them down. Upstream ordering (installed → featured → - // registry) is already what we want. - return 0; -} \ No newline at end of file diff --git a/apps/app/components/WalletProviders/FuelProvider.tsx b/apps/app/components/WalletProviders/FuelProvider.tsx deleted file mode 100644 index 145384ff..00000000 --- a/apps/app/components/WalletProviders/FuelProvider.tsx +++ /dev/null @@ -1,53 +0,0 @@ - -'use client'; - -import { BakoRequestAPI } from '../../lib/wallets/fuel/lib/connectors/bako-safe/Bako'; -import { FuelProvider, type NetworkConfig } from '@fuels/react'; -import { useSettingsState } from '@/context/settings'; -import { useRpcConfigStore } from '@/stores/rpcConfigStore'; -import { useMemo } from 'react'; -import { BakoSafeConnector } from '@/lib/wallets/fuel/lib/connectors/bako-safe'; -import { FuelWalletConnector } from '@/lib/wallets/fuel/lib/connectors/fuel-wallet'; -import { FueletWalletConnector } from '@/lib/wallets/fuel/lib/connectors/fuelet-wallet'; -import { NetworkTypes } from '@/Models/Network'; - -const HOST_URL = 'https://api.bako.global'; - -const FuelProviderWrapper = ({ - children -}: { children: React.ReactNode }) => { - - const { networks } = useSettingsState() - const getEffectiveRpcUrls = useRpcConfigStore(s => s.getEffectiveRpcUrls) - - const fuelConfig = useMemo(() => ({ - connectors: [ - new FuelWalletConnector(), - new BakoSafeConnector({ - api: new BakoRequestAPI(HOST_URL) - }), - new FueletWalletConnector(), - ] - }), []) - - const fuelNetworks = useMemo(() => networks - .filter(network => network.networkType === NetworkTypes.Fuel) - .map((network) => ({ - chainId: Number(network.chainId), - url: getEffectiveRpcUrls(network)[0] - })), [networks, getEffectiveRpcUrls]) - - return ( - - {children} - - ); -}; - - -export default FuelProviderWrapper; diff --git a/apps/app/components/WalletProviders/LayerswapRegistry.tsx b/apps/app/components/WalletProviders/LayerswapRegistry.tsx new file mode 100644 index 00000000..7ebf65b3 --- /dev/null +++ b/apps/app/components/WalletProviders/LayerswapRegistry.tsx @@ -0,0 +1,37 @@ +"use client"; + +import { type FC, type ReactNode, useMemo } from "react"; +import { useConfig } from "wagmi"; +import { DescriptorHydrationBoundary, WalletProvidersRegistryProvider } from "@layerswap/wallet-core"; +import { type WalletProvider, type WalletProviderDescriptor, type WalletWrapper } from "@layerswap/wallet-core/types"; +import { AppSettings as LayerswapAppSettings } from "@layerswap/utils"; +import { useSettingsState } from "@/context/settings"; +import { walletNetworkAdapter } from "@/lib/wallets/layerswap/networkAdapter"; +import { getLayerswapProviders } from "@/lib/wallets/layerswap/getLayerswapProviders"; + +type Provider = WalletProvider | WalletProviderDescriptor | WalletWrapper; + +const Registry = WalletProvidersRegistryProvider as FC<{ + networks: ReturnType["networks"]; + networkAdapter: typeof walletNetworkAdapter; + walletProviders: Provider[]; + children?: ReactNode; +}>; + +const LayerswapRegistry: FC<{ children: ReactNode }> = ({ children }) => { + const { networks } = useSettingsState(); + const wagmiConfig = useConfig(); + const walletProviders = useMemo(() => getLayerswapProviders({ networks, wagmiConfig }), [networks, wagmiConfig]); + + if (typeof window !== "undefined") { + LayerswapAppSettings.ApiVersion = process.env.NEXT_PUBLIC_API_VERSION === "sandbox" ? "testnet" : "mainnet"; + } + + return ( + + {resolvedProviders => {children}} + + ); +}; + +export default LayerswapRegistry; diff --git a/apps/app/components/WalletProviders/SolanaProvider.tsx b/apps/app/components/WalletProviders/SolanaProvider.tsx deleted file mode 100644 index 0754d261..00000000 --- a/apps/app/components/WalletProviders/SolanaProvider.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { clusterApiUrl } from "@solana/web3.js"; -import { - ConnectionProvider, - WalletProvider, -} from "@solana/wallet-adapter-react"; -import AppSettings from "../../lib/AppSettings"; -import { useSettingsState } from "../../context/settings"; -import { useRpcConfigStore } from "../../stores/rpcConfigStore"; -import { - NightlyWalletAdapter, - PhantomWalletAdapter, - SolflareWalletAdapter, - BitgetWalletAdapter, - TrustWalletAdapter, - LedgerWalletAdapter -} from "@solana/wallet-adapter-wallets"; -import { ReactNode, useMemo } from "react"; -import { WalletAdapterNetwork } from "@solana/wallet-adapter-base"; -import { WALLETCONNECT_PROJECT_ID, WALLETCONNECT_METADATA } from "@/lib/walletConnect/config"; -import { SolanaWalletConnectAdapter } from "@/lib/wallets/solana/connectors/SolanaWalletConnectAdapter"; - -function SolanaProvider({ children }: { children: ReactNode }) { - const settings = useSettingsState(); - const { getEffectiveRpcUrl } = useRpcConfigStore(); - const solNetwork = AppSettings.ApiVersion === 'sandbox' ? WalletAdapterNetwork.Devnet : WalletAdapterNetwork.Mainnet; - - // Find Solana network in settings - const solanaNetwork = settings?.networks?.find( - n => n.networkType === "solana" - ); - - // Use custom RPC if configured, otherwise use default - const endpoint = useMemo(() => { - if (solanaNetwork) { - return getEffectiveRpcUrl(solanaNetwork); - } - return clusterApiUrl(solNetwork); - }, [solNetwork, solanaNetwork, getEffectiveRpcUrl]); - - const adapters = [ - new PhantomWalletAdapter(), - new NightlyWalletAdapter(), - new SolflareWalletAdapter(), - new BitgetWalletAdapter(), - new TrustWalletAdapter(), - new LedgerWalletAdapter(), - new SolanaWalletConnectAdapter({ - network: solNetwork, - options: { - projectId: WALLETCONNECT_PROJECT_ID, - metadata: WALLETCONNECT_METADATA, - } - }) - ] - - - return ( - - - {children} - - - ); -} - -export default SolanaProvider; \ No newline at end of file diff --git a/apps/app/components/WalletProviders/StarknetProvider.tsx b/apps/app/components/WalletProviders/StarknetProvider.tsx deleted file mode 100644 index a78535d0..00000000 --- a/apps/app/components/WalletProviders/StarknetProvider.tsx +++ /dev/null @@ -1,227 +0,0 @@ -import { FC, ReactNode, useEffect, useState } from "react"; -import { mainnet, sepolia } from "@starknet-react/chains" -import { Connector, ConnectorNotConnectedError, UserNotConnectedError, StarknetConfig, publicProvider, useConnect, useDisconnect } from '@starknet-react/core'; -import { useSettingsState } from "../../context/settings"; -import { useStarknetStore } from "../../stores/starknetWalletStore"; -import KnownInternalNames from "../../lib/knownIds"; -import useStarknet, { resolveStarknetWallet, starknetNames } from "../../lib/wallets/starknet/useStarknet"; -import { RpcMessage, RequestFnCall, RpcTypeToMessageMap } from "@starknet-io/types-js"; -import { useRpcConfigStore } from "@/stores/rpcConfigStore"; - -let getInjectedWalletById: ((id: string) => unknown) | undefined; -class DiscoveryConnector extends Connector { - #wallet; - #store; - - constructor(wallet, store) { - super(); - this.#wallet = wallet; - this.#store = store; - } - - get id() { - return `${this.#wallet.id}-mobile`; - } - - get icon() { - return { - dark: this.#wallet.icon, - light: this.#wallet.icon - }; - } - - get name() { - return `${this.#wallet.name} (mobile)`; - } - - available() { - return true; - } - - connect(): any { - window.open(this.#wallet.downloads[this.#store], "_blank"); - return undefined - } - - get wallet() { - throw new ConnectorNotConnectedError() - } - - disconnect(): any { - throw new UserNotConnectedError() - } - - account(): any { - throw new ConnectorNotConnectedError() - } - ready(): Promise { - throw new Error("Method not implemented."); - } - chainId(): Promise { - throw new Error("Method not implemented."); - } - request(call: RequestFnCall): Promise { - throw new Error("Method not implemented."); - } - -} - -const StarknetProvider: FC<{ children: ReactNode }> = ({ children }) => { - const [connectors, setConnectors] = useState([]) - - const resolveConnectors = async () => { - // @ts-ignore - const injectedModule = await import("starknetkit/injected"); - // @ts-ignore - const webWalletModule = await import("starknetkit/webwallet"); - // @ts-ignore - const controllerModule = await import("starknetkit/controller"); - - const InjectedConnector = (injectedModule as any).InjectedConnector; - const WebWalletConnector = (webWalletModule as any).WebWalletConnector; - const ControllerConnector = (controllerModule as any).ControllerConnector; - getInjectedWalletById = InjectedConnector?.getInjectedWallet; - - const isSafari = - typeof window !== "undefined" - ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent) - : false - const isAndroid = navigator.userAgent.match(/Android/i); - const isIOS = navigator.userAgent.match(/iPhone|iPad|iPod/i); - - const defaultConnectors: any[] = [] - - if (!isSafari) { - defaultConnectors.push( - new InjectedConnector({ options: { id: "argentX" } }), - ) - defaultConnectors.push( - new InjectedConnector({ options: { id: "keplr" } }), - ) - defaultConnectors.push( - new InjectedConnector({ options: { id: "braavos" } }), - ) - defaultConnectors.push( - new InjectedConnector({ options: { id: "xverse" } }), - ) - } - - if ((isAndroid || isIOS) && !defaultConnectors.some(c => c.id === "braavos")) { - const starknet = (await import('get-starknet-core')).default - - const discoverWallets = (await starknet.getDiscoveryWallets()).filter(w => { - return (isAndroid && w.downloads["android"]) || (isIOS && w.downloads["ios"]); - }) - if (discoverWallets.length) defaultConnectors.push(...discoverWallets.map(w => new DiscoveryConnector(w, isAndroid ? "android" : "ios"))) - } - - defaultConnectors.push( - new ControllerConnector(), - ) - - defaultConnectors.push(new WebWalletConnector()) - - return defaultConnectors - } - - useEffect(() => { - let cancelled = false; - resolveConnectors().then((result) => { - if (!cancelled) setConnectors(result) - }).catch(() => { - if (!cancelled) setConnectors([]) - }); - return () => { cancelled = true }; - }, []) - - const chains = [mainnet, sepolia] - - return ( - - - {children} - - ) -} - -export default StarknetProvider; - -const StarknetWalletInitializer = () => { - const { connectors } = useConnect(); - const { disconnectAsync } = useDisconnect(); - const { networks } = useSettingsState(); - const starknetAccounts = useStarknetStore((state) => state.starknetAccounts) || {}; - const addWallet = useStarknetStore((state) => state.connectWallet); - const removeAccount = useStarknetStore((state) => state.removeAccount); - const { getEffectiveRpcUrl } = useRpcConfigStore() - - const { withdrawalSupportedNetworks, autofillSupportedNetworks, asSourceSupportedNetworks } = useStarknet(); - const [connectorsReady, setConnectorsReady] = useState(false) - const network = networks?.find(network => starknetNames.some(name => name === network.caip2Id)) - const nodeUrl = network ? getEffectiveRpcUrl(network) : undefined - - useEffect(() => { - if (connectors.length === 0 || connectorsReady || Object.keys(starknetAccounts).length == 0) return; - - const checkConnectorsReady = () => { - const hasWallet = connectors.some(connector => { - try { - const wallet = getInjectedWalletById?.(connector.id); - return wallet !== null && wallet !== undefined; - } catch { - return false; - } - }); - - if (hasWallet) { - setConnectorsReady(true); - } - }; - checkConnectorsReady(); - - const interval = setInterval(checkConnectorsReady, 500); - - return () => clearInterval(interval); - }, [connectors, connectorsReady, starknetAccounts]) - - useEffect(() => { - const initializeWallet = async () => { - const starknetNetwork = networks.find( - (n) => - n.caip2Id === KnownInternalNames.Networks.StarkNetMainnet || - n.caip2Id === KnownInternalNames.Networks.StarkNetSepolia - ); - - for (const connector of connectors) { - const address = starknetAccounts[connector.id]; - if (address) { - const wallet = await resolveStarknetWallet({ - name: "Starknet", - connector, - network: starknetNetwork, - disconnectWallets: () => disconnectAsync().then(() => removeAccount(address)), - withdrawalSupportedNetworks, - autofillSupportedNetworks, - asSourceSupportedNetworks, - address, - nodeUrl - }); - - if (wallet?.address) { - addWallet(wallet); - } - } - } - }; - - if (Object.keys(starknetAccounts).length && connectorsReady) { - initializeWallet(); - } - }, [connectors, networks, connectorsReady]); - - return <>; -} diff --git a/apps/app/components/WalletProviders/TronProvider.tsx b/apps/app/components/WalletProviders/TronProvider.tsx deleted file mode 100644 index fec2ea8e..00000000 --- a/apps/app/components/WalletProviders/TronProvider.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { useEffect, useState } from 'react'; -import { WalletProvider } from '@tronweb3/tronwallet-adapter-react-hooks'; - -export default function TronProvider({ children }: { children: React.ReactNode }) { - const [adapters, setAdapters] = useState([]); - - useEffect(() => { - let cancelled = false; - - const loadAdapters = async () => { - if (typeof window === 'undefined') return; - - const [ - metamaskModule, - tronLinkModule, - okxModule, - bitkeepModule, - bybitModule, - gateModule - ] = await Promise.all([ - import('@tronweb3/tronwallet-adapter-metamask-tron'), - import('@tronweb3/tronwallet-adapter-tronlink'), - import('@tronweb3/tronwallet-adapter-okxwallet'), - import('@tronweb3/tronwallet-adapter-bitkeep'), - import('@tronweb3/tronwallet-adapter-bybit'), - import('@tronweb3/tronwallet-adapter-gatewallet'), - ]); - - if (cancelled) return; - - const { MetaMaskAdapter } = metamaskModule; - const { TronLinkAdapter } = tronLinkModule; - const { OkxWalletAdapter } = okxModule; - const { BitKeepAdapter } = bitkeepModule; - const { BybitWalletAdapter } = bybitModule; - const { GateWalletAdapter } = gateModule; - - setAdapters([ - new MetaMaskAdapter(), - new TronLinkAdapter(), - new OkxWalletAdapter(), - new BitKeepAdapter(), - new BybitWalletAdapter(), - new GateWalletAdapter(), - ]); - }; - - loadAdapters().catch(() => { - // Keep provider mounted even if adapter loading fails. - setAdapters([]); - }); - - return () => { - cancelled = true; - }; - }, []); - - return ( - - {children} - - ); -} diff --git a/apps/app/components/WalletProviders/Wagmi.tsx b/apps/app/components/WalletProviders/Wagmi.tsx index 14b69e53..85dab873 100644 --- a/apps/app/components/WalletProviders/Wagmi.tsx +++ b/apps/app/components/WalletProviders/Wagmi.tsx @@ -1,17 +1,16 @@ -import { useSettingsState } from "../../context/settings"; -import resolveChain from "../../lib/resolveChain"; +import { useSettingsState } from "@/context/settings"; +import resolveChain from "@/lib/resolveChain"; import React, { useMemo } from "react"; import { WagmiProvider, createConfig, Config } from 'wagmi' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { Chain, http, fallback, Transport } from 'viem'; import { ActiveEvmAccountProvider } from "./ActiveEvmAccount"; import { useRpcConfigStore } from "@/stores/rpcConfigStore"; -import { getNativeToken, NetworkTypes } from "../../Models/Network"; +import { getNativeToken, NetworkTypes } from "@/Models/Network"; import { coinbaseWallet, metaMask, walletConnect } from "@wagmi/connectors"; -import { walletConnect as customWalletConnect } from "../../lib/wallets/evm/connectors/walletConnect"; -import { isMobile } from "../../lib/wallets/utils/isMobile"; -import { WALLETCONNECT_METADATA, WALLETCONNECT_PROJECT_ID } from "@/lib/walletConnect/config"; -import { HIDDEN_WALLETCONNECT_ID } from "@/lib/wallets/evm/constants"; +import { createHiddenWalletConnectConnector } from "@layerswap/wallet-evm"; +import { isMobile } from "@layerswap/utils"; +import { WALLET_CONNECT_CONFIGS } from "@/lib/wallets/layerswap/getLayerswapProviders"; import { browserInjected } from "@/lib/wallets/evm/connectors/browserInjected"; type Props = { @@ -19,28 +18,10 @@ type Props = { } const queryClient = new QueryClient() -const walletConnectConnector = walletConnect({ projectId: WALLETCONNECT_PROJECT_ID, showQrModal: isMobile(), customStoragePrefix: 'walletConnect' }) -const hiddenWalletConnectConnector = customWalletConnect({ - id: HIDDEN_WALLETCONNECT_ID, - name: 'Hidden WalletConnect', - rdns: '', - type: 'other', - mobile: { native: '', universal: '' }, - icon: '', - projectId: WALLETCONNECT_PROJECT_ID, - showQrModal: false, -}) -const metaMaskConnector = metaMask({ - dappMetadata: { - name: WALLETCONNECT_METADATA.name, - url: WALLETCONNECT_METADATA.url, - iconUrl: WALLETCONNECT_METADATA.icons[0] - } -}) -const coinbaseWalletConnector = coinbaseWallet({ - appName: WALLETCONNECT_METADATA.name, - appLogoUrl: WALLETCONNECT_METADATA.icons[0], -}) +const walletConnectConnector = walletConnect({ projectId: WALLET_CONNECT_CONFIGS.projectId, showQrModal: isMobile(), customStoragePrefix: 'walletConnect' }) +const hiddenWalletConnectConnector = createHiddenWalletConnectConnector({ projectId: WALLET_CONNECT_CONFIGS.projectId }) +const metaMaskConnector = metaMask({ dappMetadata: { name: WALLET_CONNECT_CONFIGS.name, url: WALLET_CONNECT_CONFIGS.url, iconUrl: WALLET_CONNECT_CONFIGS.icons[0] } }) +const coinbaseWalletConnector = coinbaseWallet({ appName: WALLET_CONNECT_CONFIGS.name, appLogoUrl: WALLET_CONNECT_CONFIGS.icons[0] }) const browserInjectedConnector = browserInjected() const defaultConnectors = [ metaMaskConnector, diff --git a/apps/app/components/WalletProviders/index.tsx b/apps/app/components/WalletProviders/index.tsx index 5c343fc4..23ecffff 100644 --- a/apps/app/components/WalletProviders/index.tsx +++ b/apps/app/components/WalletProviders/index.tsx @@ -1,36 +1,27 @@ import { FC } from "react" -import SolanaProvider from "./SolanaProvider" import Wagmi from "./Wagmi"; -import StarknetProvider from "./StarknetProvider"; import { WalletModalProvider } from "../WalletModal"; -import { WalletProvidersProvider } from "../../context/walletHookProviders"; -import { AztecWalletProvider } from "./AztecWalletProvider"; +import { WalletProvidersProvider } from "@/context/walletHookProviders"; +// import { AztecWalletProvider } from "./AztecWalletProvider"; import { WalletBridges } from "../WalletBridges"; -import TronProvider from "./TronProvider"; import ConnectWalletDrawer from "../WalletModal/ConnectWalletDrawer"; -import FuelProvider from "./FuelProvider"; +import LayerswapRegistry from "./LayerswapRegistry"; const WalletsProviders: FC<{ children: JSX.Element | JSX.Element[] }> = ({ children }) => { return ( - - - - - - - - - - - {children} - - - - - - - - + + + {/* */} + + + + + {children} + + + {/* */} + + ) } diff --git a/apps/app/components/buttons/copyButton.tsx b/apps/app/components/buttons/copyButton.tsx index c6de1d5e..8bf3e7e7 100644 --- a/apps/app/components/buttons/copyButton.tsx +++ b/apps/app/components/buttons/copyButton.tsx @@ -3,7 +3,7 @@ import { classNames } from '../utils/classNames' import useCopyClipboard from '../../hooks/useCopyClipboard' import React, { FC, useState } from 'react' import { Tooltip, TooltipContent, TooltipTrigger } from '../shadcn/tooltip' -import CopyIcon from '@/components/Icons/CopyIcon' +import { CopyIcon } from '@layerswap/ui-kit/components' interface CopyButtonProps { className?: string diff --git a/apps/app/context/swapAccounts.tsx b/apps/app/context/swapAccounts.tsx index eed6bdfe..837eb427 100644 --- a/apps/app/context/swapAccounts.tsx +++ b/apps/app/context/swapAccounts.tsx @@ -2,8 +2,8 @@ import { Context, createContext, useCallback, useContext, useMemo, useState } fr import { useQueryState } from '@/context/query' import { SwapDirection } from '@/components/DTOs/SwapFormValues'; import useWallet from '@/hooks/useWallet'; -import { Wallet, WalletProvider } from '@/Models/WalletProvider'; -import AddressIcon from '@/components/AddressIcon'; +import type { Wallet } from "@layerswap/widget-types"; +import { WalletConnectionProvider } from "@layerswap/wallet-core/types"; import { Address } from '@/lib/address'; import { getKey, useBalanceStore } from '@/stores/balanceStore'; @@ -33,8 +33,8 @@ type BaseAccountIdentity = { export type AccountIdentity = BaseAccountIdentity & { displayName: string, addresses: string[], - provider: WalletProvider; - icon: (props: any) => React.JSX.Element; + provider: WalletConnectionProvider; + icon?: string; } @@ -187,8 +187,8 @@ export function useSelectSwapAccount(direction: SwapDirection) { } function hasWallet( - p: WalletProvider -): p is WalletProvider & { activeWallet: { address: string; id: string } } { + p: WalletConnectionProvider +): p is WalletConnectionProvider & { activeWallet: { address: string; id: string } } { return Boolean(p.activeWallet); } @@ -203,7 +203,7 @@ function upsertByProvider(accounts: BaseAccountIdentity[], account: BaseAccountI return [...accounts, account]; } -function ResolveWalletSwapAccount(provider: WalletProvider, wallet: Wallet, address: string): AccountIdentityWithSupportedNetworks { +function ResolveWalletSwapAccount(provider: WalletConnectionProvider, wallet: Wallet, address: string): AccountIdentityWithSupportedNetworks { return { address, provider, @@ -214,11 +214,11 @@ function ResolveWalletSwapAccount(provider: WalletProvider, wallet: Wallet, addr walletAsSourceSupportedNetworks: wallet.asSourceSupportedNetworks, displayName: wallet.displayName || provider.name, addresses: wallet.addresses || [address], - icon: wallet.icon || ((props) => ), + icon: wallet.icon, } } -function ResolveManualSwapAccount(provider: WalletProvider, address: string): AccountIdentity { +function ResolveManualSwapAccount(provider: WalletConnectionProvider, address: string): AccountIdentity { return { address, provider, @@ -226,8 +226,5 @@ function ResolveManualSwapAccount(provider: WalletProvider, address: string): Ac id: 'manually_added', displayName: "Manual", addresses: [address], - icon: (props: any) => ( - - ), }; -} \ No newline at end of file +} diff --git a/apps/app/context/walletHookProviders.tsx b/apps/app/context/walletHookProviders.tsx index f89b68b1..ad15255c 100644 --- a/apps/app/context/walletHookProviders.tsx +++ b/apps/app/context/walletHookProviders.tsx @@ -1,42 +1,33 @@ import React, { createContext, useContext, useMemo } from "react"; -import { WalletProvider } from "../Models/WalletProvider"; +import { WalletConnectionProvider } from "@layerswap/wallet-core/types"; import { useSettingsState } from "./settings"; -import useEVM from "../lib/wallets/evm/useEVM"; -import useStarknet from "../lib/wallets/starknet/useStarknet"; -import useSVM from "../lib/wallets/solana/useSVM"; -import useAztec from "../lib/wallets/aztec/useAztec"; -import { isMobile } from "@/lib/wallets/utils/isMobile"; -import useTron from "@/lib/wallets/tron/useTron"; -import useFuel from "@/lib/wallets/fuel/useFuel"; +// import useAztec from "@/lib/wallets/aztec/useAztec"; +import { isMobile } from "@layerswap/utils"; +import { useWalletProviderSnapshots } from "@layerswap/wallet-core"; -const WalletProvidersContext = createContext([]); +const WalletProvidersContext = createContext([]); export const WalletProvidersProvider: React.FC = ({ children }) => { const { networks } = useSettingsState(); const isMobilePlatform = isMobile(); - const evm = useEVM(); - const starknet = useStarknet(); - const svm = useSVM(); - const aztec = useAztec() - const tron = useTron() - const fuel = useFuel() + const snapshots = useWalletProviderSnapshots(); + // const aztec = useAztec(); const providers = useMemo(() => { - const allProviders: WalletProvider[] = [ - evm, starknet, svm, aztec, tron, fuel + const allProviders: WalletConnectionProvider[] = [ + ...snapshots, + // aztec, ]; - const filteredProviders = allProviders.filter(provider => isMobilePlatform ? !provider.unsupportedPlatforms?.includes('mobile') : !provider.unsupportedPlatforms?.includes('desktop')); - return filteredProviders - .filter(provider => - networks.some(net => - provider.autofillSupportedNetworks?.includes(net.caip2Id) || - provider.withdrawalSupportedNetworks?.includes(net.caip2Id) || - provider.asSourceSupportedNetworks?.includes(net.caip2Id) - ) - ); - }, [networks, evm, starknet, svm, aztec, tron, fuel, isMobilePlatform]); + return allProviders + .filter(provider => isMobilePlatform ? !provider.unsupportedPlatforms?.includes('mobile') : !provider.unsupportedPlatforms?.includes('desktop')) + .filter(provider => networks.some(network => + provider.autofillSupportedNetworks?.includes(network.caip2Id) || + provider.withdrawalSupportedNetworks?.includes(network.caip2Id) || + provider.asSourceSupportedNetworks?.includes(network.caip2Id) + )); + }, [networks, snapshots, isMobilePlatform]); return ( diff --git a/apps/app/hooks/useConnectors.ts b/apps/app/hooks/useConnectors.ts deleted file mode 100644 index 95542871..00000000 --- a/apps/app/hooks/useConnectors.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { useMemo } from "react"; -import { InternalConnector, WalletProvider } from "../Models/WalletProvider"; -import { removeDuplicatesWithKey } from "../components/WalletModal/utils"; - -type UseConnectorsParams = { - searchValue?: string; - recentConnectors: { providerName?: string; connectorName?: string }[]; - featuredProviders: WalletProvider[]; - filteredProviders: WalletProvider[]; - searchResults?: InternalConnector[]; -}; - -/** Flatten one connector list off each provider, name-filtered and stamped with the provider. */ -function pickConnectors( - providers: WalletProvider[], - key: 'availableConnectors' | 'additionalConnectors', - searchValue?: string, -): InternalConnector[] { - return providers - .filter(g => g[key] && g[key]?.length > 0) - .map((provider) => - provider[key] - ?.filter(v => searchValue ? v.name.toLowerCase().includes(searchValue.toLowerCase()) : true) - .map((connector) => ({ ...connector, providerName: provider.name })) - ) - .flat() as InternalConnector[]; -} - -export function useConnectors({ - featuredProviders, - filteredProviders, - searchValue, - recentConnectors, - searchResults, -}: UseConnectorsParams) { - - const featuredConnectors = useMemo( - () => pickConnectors(featuredProviders, 'availableConnectors', searchValue), - [featuredProviders, searchValue] - ); - - const additionalConnectors = useMemo( - () => pickConnectors(featuredProviders, 'additionalConnectors', searchValue), - [featuredProviders, searchValue] - ); - - - const initialConnectors: InternalConnector[] = useMemo(() => { - const recentNames = new Set(recentConnectors?.map(r => r.connectorName?.toLowerCase()).filter(Boolean)) - const isRecent = (c: InternalConnector) => recentNames.has(c.name.toLowerCase()) - const isInstalled = (c: InternalConnector) => c.type === 'injected' && !c.isLoadable - - // Only the provider's initial connector set should be prioritized. - const recent = featuredConnectors.filter(c => isRecent(c)) - const installed = featuredConnectors.filter(c => !isRecent(c) && isInstalled(c)) - const rest = featuredConnectors.filter(c => !isRecent(c) && !isInstalled(c)) - const orderedConnectors = [...recent, ...installed, ...rest, ...additionalConnectors] as InternalConnector[] - - if (searchResults?.length) { - const existingNames = new Set(orderedConnectors.map(c => c.name.toLowerCase())) - const newResults = searchResults.filter(c => !existingNames.has(c.name.toLowerCase())) - orderedConnectors.push(...newResults) - } - - return removeDuplicatesWithKey(orderedConnectors, 'name'); - }, [featuredConnectors, additionalConnectors, recentConnectors, searchResults]); - - return { - featuredConnectors, - additionalConnectors, - initialConnectors, - featuredProviders, - filteredProviders, - }; -} \ No newline at end of file diff --git a/apps/app/hooks/useWallet.ts b/apps/app/hooks/useWallet.ts index 3bf514bb..0c9c87e8 100644 --- a/apps/app/hooks/useWallet.ts +++ b/apps/app/hooks/useWallet.ts @@ -1,5 +1,6 @@ import { Network } from "../Models/Network" -import { Wallet, WalletProvider } from "../Models/WalletProvider"; +import type { Wallet } from "@layerswap/widget-types"; +import { WalletConnectionProvider } from "@layerswap/wallet-core/types"; import { useCallback, useMemo } from "react"; import { useWalletProviders } from "../context/walletHookProviders"; @@ -20,7 +21,7 @@ export default function useWallet(network?: Network | undefined | null, purpose? connectedWallets = w ? [...connectedWallets, ...w] : [...connectedWallets]; }); return connectedWallets; - }, [walletProviders, network]); + }, [walletProviders, network, purpose]); const unAvailableWallets = useMemo(() => { return wallets.filter(wallet => wallet.isNotAvailable) @@ -32,7 +33,7 @@ export default function useWallet(network?: Network | undefined | null, purpose? const getProvider = useCallback((network: Network, purpose: WalletPurpose) => { return network && resolveProvider(network, walletProviders, purpose) - }, [walletProviders, purpose]); + }, [walletProviders]); const res = useMemo(() => ({ wallets: availableWallets, @@ -40,15 +41,17 @@ export default function useWallet(network?: Network | undefined | null, purpose? provider, providers: walletProviders, getProvider - }), [wallets, provider, walletProviders, getProvider]) + }), [availableWallets, unAvailableWallets, provider, walletProviders, getProvider]) return res } -const resolveProvider = (network: Network | undefined, walletProviders: WalletProvider[], purpose?: WalletPurpose) => { +const resolvedProviderCache = new WeakMap>() + +const resolveProvider = (network: Network | undefined, walletProviders: WalletConnectionProvider[], purpose?: WalletPurpose) => { if (!purpose || !network?.caip2Id) return - let provider: WalletProvider | undefined = undefined + let provider: WalletConnectionProvider | undefined = undefined switch (purpose) { case "withdrawal": provider = walletProviders.find(provider => provider.withdrawalSupportedNetworks?.includes(network.caip2Id)) @@ -62,6 +65,11 @@ const resolveProvider = (network: Network | undefined, walletProviders: WalletPr } if (provider?.isNotAvailableCondition && purpose) { + const cacheKey = `${network.caip2Id}|${purpose}` + const cachedByKey = resolvedProviderCache.get(provider) + const cached = cachedByKey?.get(cacheKey) + if (cached) return cached + const availableConnectors = provider.availableConnectors?.filter(connector => (provider.isNotAvailableCondition && network?.caip2Id) ? !provider.isNotAvailableCondition(connector.id, network?.caip2Id, purpose) : true) const additionalConnectors = provider.additionalConnectors?.filter(connector => (provider.isNotAvailableCondition && network?.caip2Id) ? !provider.isNotAvailableCondition(connector.id, network?.caip2Id, purpose) : true) const requestAdditionalConnectors = provider.requestAdditionalConnectors @@ -80,26 +88,30 @@ const resolveProvider = (network: Network | undefined, walletProviders: WalletPr const resolvedProvider = { ...provider, connectedWallets: provider.connectedWallets?.map(wallet => { + const connectorId = wallet.internalId ?? wallet.id return { ...wallet, - isNotAvailable: (provider.isNotAvailableCondition && network?.caip2Id && wallet.internalId) ? provider.isNotAvailableCondition(wallet.internalId, network?.caip2Id, purpose) : false, + isNotAvailable: (provider.isNotAvailableCondition && network?.caip2Id && connectorId) ? provider.isNotAvailableCondition(connectorId, network?.caip2Id, purpose) : false, } }), activeWallet: provider.activeWallet ? { ...provider.activeWallet, - isNotAvailable: (network?.caip2Id) ? provider.isNotAvailableCondition(provider.activeWallet.id, network?.caip2Id, purpose) : false, + isNotAvailable: (network?.caip2Id) ? provider.isNotAvailableCondition(provider.activeWallet.internalId ?? provider.activeWallet.id, network?.caip2Id, purpose) : false, } : undefined, availableConnectors: availableConnectors, additionalConnectors, requestAdditionalConnectors, } + const byKey = cachedByKey ?? new Map() + byKey.set(cacheKey, resolvedProvider) + if (!cachedByKey) resolvedProviderCache.set(provider, byKey) return resolvedProvider } return provider } -const resolveWallet = (wallet: Wallet, network: Network | undefined | null, provider: WalletProvider, purpose?: WalletPurpose) => { +const resolveWallet = (wallet: Wallet, network: Network | undefined | null, provider: WalletConnectionProvider, purpose?: WalletPurpose) => { if (provider.isNotAvailableCondition && network?.caip2Id && wallet.internalId && !purpose) { return { diff --git a/apps/app/lib/gases/providers/solanaGasProvider.ts b/apps/app/lib/gases/providers/solanaGasProvider.ts index 00d9fa82..4e69298f 100644 --- a/apps/app/lib/gases/providers/solanaGasProvider.ts +++ b/apps/app/lib/gases/providers/solanaGasProvider.ts @@ -55,8 +55,8 @@ async function estimateSolanaGas(params: { rpcUrl: params.rpcUrl, signer: { publicKey: params.address, - sendTransaction: async () => { - throw new Error('Gas estimation signer cannot submit transactions') + signTransaction: async () => { + throw new Error('Gas estimation signer cannot sign transactions') }, }, }) diff --git a/apps/app/lib/walletConnect/api.ts b/apps/app/lib/walletConnect/api.ts deleted file mode 100644 index b686a403..00000000 --- a/apps/app/lib/walletConnect/api.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { WALLETCONNECT_PROJECT_ID } from "./config" - -const BASE = 'https://api.web3modal.org' - -export type Web3ModalWallet = { - id: string - name: string - image_id: string - order: number - mobile_link: string | null - desktop_link: string | null - link_mode: string | null - rdns: string | null - chrome_store: string | null - injected: { namespace: string; injected_id: string }[] | null - chains: string[] -} - -export type GetWalletsResponse = { - count: number - data: Web3ModalWallet[] - nextPage: number | null - previousPage: number | null -} - -export type FetchWalletsParams = { - page?: number - entries?: number - chains?: string - search?: string -} - -const EVM_CHAINS = [ - 'eip155:1', 'eip155:10', 'eip155:56', 'eip155:137', - 'eip155:43114', 'eip155:42161', 'eip155:324', 'eip155:8453', -].join(',') - -const SOLANA_CHAINS = [ - 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', - 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', -].join(',') - -export function chainsForNamespace(namespace: string): string { - if (namespace === 'eip155') return EVM_CHAINS - if (namespace === 'solana') return SOLANA_CHAINS - return '' -} - -const DANGEROUS_URL_PROTOCOLS = ['javascript:', 'data:', 'vbscript:', 'file:'] - -function isValidHttpUrl(urlStr: string): boolean { - try { - const url = new URL(urlStr) - return ['https:', 'http:'].includes(url.protocol) - } catch { - return false - } -} - -// mobile_link / desktop_link may be a custom wallet scheme (e.g. `binancewallet://`, -// `backpack://`) when the wallet registers as a native-only link_mode. Allow any -// parseable URL except known-dangerous protocols. -function isValidWalletLink(urlStr: string): boolean { - try { - const url = new URL(urlStr) - return !DANGEROUS_URL_PROTOCOLS.includes(url.protocol.toLowerCase()) - } catch { - return false - } -} - -function isValidImageId(id: string): boolean { - return /^[a-zA-Z0-9_-]{1,100}$/.test(id) -} - -export function walletImageUrl(imageId: string): string { - return `https://explorer-api.walletconnect.com/v3/logo/md/${imageId}?projectId=${WALLETCONNECT_PROJECT_ID}` -} - -// Web3Modal explorer API reference: https://docs.reown.com/cloud/explorer -// The `st` / `sv` (source type / source version) params are internal AppKit -// telemetry routing keys required for the API to return results. -export async function fetchWallets(params: FetchWalletsParams): Promise { - const url = new URL(`${BASE}/getWallets`) - url.searchParams.set('projectId', WALLETCONNECT_PROJECT_ID) - url.searchParams.set('st', 'appkit') - url.searchParams.set('sv', 'react-viem') - url.searchParams.set('page', String(params.page ?? 1)) - url.searchParams.set('entries', String(params.entries ?? 40)) - if (params.chains) url.searchParams.set('chains', params.chains) - if (params.search) url.searchParams.set('search', params.search) - - const res = await fetch(url.toString()) - if (!res.ok) throw new Error(`getWallets failed: ${res.status}`) - const data: GetWalletsResponse = await res.json() - - if (!Array.isArray(data?.data)) { - throw new Error('Invalid response: missing data array') - } - for (const wallet of data.data) { - if (typeof wallet.id !== 'string' || typeof wallet.name !== 'string') { - throw new Error('Invalid wallet entry: missing id or name') - } - // Sanitize URLs: strip dangerous schemes and reject malformed URLs - if (wallet.mobile_link && !isValidWalletLink(wallet.mobile_link)) wallet.mobile_link = null - if (wallet.desktop_link && !isValidWalletLink(wallet.desktop_link)) wallet.desktop_link = null - if (wallet.chrome_store && !isValidHttpUrl(wallet.chrome_store)) wallet.chrome_store = null - if (typeof wallet.image_id !== 'string' || !isValidImageId(wallet.image_id)) wallet.image_id = '' - } - - return data -} diff --git a/apps/app/lib/walletConnect/buildDeepLink.ts b/apps/app/lib/walletConnect/buildDeepLink.ts deleted file mode 100644 index 8fbe37b8..00000000 --- a/apps/app/lib/walletConnect/buildDeepLink.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { isIOS, isMobile } from "../wallets/utils/isMobile" -import type { WalletConnectMobile } from "./types" - -const addWc = (url: string): string => { - if (url.endsWith("/wc") || url.endsWith("://wc")) return url - if (url.endsWith("://")) return url + "wc" - if (url.endsWith("/")) return url + "wc" - return url + "/wc" -} - -type BuildDeepLinkInput = { - id: string - mobile: WalletConnectMobile -} - -/** - * Chain-agnostic mobile deep-link builder for a given WC wallet + raw WC URI. - * - Off-mobile: returns the raw URI (used by the QR copy-link button). - * - Mobile: builds a wallet-specific deep link. Returning the bare `wc:` URI - * on Android lets the OS route to whichever WC-capable app is the default - * handler (which is why "pick Backpack, Rainbow opens" happens), so we - * always target the selected wallet explicitly when we can. - * - Slug-specific overrides match rainbowkit's well-known quirks. - */ -export function buildDeepLink({ id, mobile }: BuildDeepLinkInput, uri: string): string { - if (!isMobile()) return uri - - switch (id) { - case "bitkeep": - case "bitget-wallet": - return `bitkeep://wc?uri=${encodeURIComponent(uri)}` - case "metamask": - // MetaMask's native scheme is broken on iOS v6.5.0+, so prefer the universal link - // https://github.com/MetaMask/metamask-mobile/issues/6457 - return `https://metamask.app.link/wc?uri=${encodeURIComponent(uri)}` - case "okx-wallet": - return `okex://main/wc?uri=${encodeURIComponent(uri)}` - case "rainbow": - return isIOS() - ? `rainbow://wc?uri=${encodeURIComponent(uri)}&connector=rainbowkit` - : `https://rnbwapp.com/wc?uri=${encodeURIComponent(uri)}&connector=rainbowkit` - default: { - if (mobile?.native) return `${addWc(mobile.native)}?uri=${encodeURIComponent(uri)}` - if (mobile?.universal) return `${addWc(mobile.universal)}?uri=${encodeURIComponent(uri)}` - return uri - } - } -} diff --git a/apps/app/lib/walletConnect/config.ts b/apps/app/lib/walletConnect/config.ts deleted file mode 100644 index 133e4985..00000000 --- a/apps/app/lib/walletConnect/config.ts +++ /dev/null @@ -1,13 +0,0 @@ -// This is a public, client-side-only project ID for WalletConnect wallet discovery. - -import AppSettings from "../AppSettings" - -// It has no authentication or authorization capability and is safe to expose in bundles. -export const WALLETCONNECT_PROJECT_ID = AppSettings.WalletConnectProjectId - -export const WALLETCONNECT_METADATA = { - name: 'Train Protocol', - description: 'Train Protocol App', - url: 'https://train.tech/', - icons: ['https://app.train.tech/symbol.png'], -} diff --git a/apps/app/lib/walletConnect/createRegistryConnector.ts b/apps/app/lib/walletConnect/createRegistryConnector.ts deleted file mode 100644 index 36fbbe8f..00000000 --- a/apps/app/lib/walletConnect/createRegistryConnector.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { InternalConnector } from "@/Models/WalletProvider" -import { WC_REGISTRY_MARKER, type RegistryAttachedConnector, type WalletConnectWalletBase } from "./types" - -export type RegistryConnector = RegistryAttachedConnector - -export const createRegistryConnector = ( - wallet: WalletConnectWalletBase, - isMobilePlatform: boolean, - providerName: string, -): RegistryConnector => ({ - id: wallet.id, - name: wallet.name, - icon: wallet.icon, - type: 'walletConnect', - order: wallet.order, - isMobileSupported: wallet.isMobileSupported, - hasBrowserExtension: wallet.hasBrowserExtension, - installUrl: wallet.installUrl, - extensionNotFound: wallet.hasBrowserExtension ? !isMobilePlatform : false, - providerName, - [WC_REGISTRY_MARKER]: wallet, -}) diff --git a/apps/app/lib/walletConnect/dynamicMetadata.ts b/apps/app/lib/walletConnect/dynamicMetadata.ts deleted file mode 100644 index bacd12bc..00000000 --- a/apps/app/lib/walletConnect/dynamicMetadata.ts +++ /dev/null @@ -1,108 +0,0 @@ -import type { DynamicWcMetadata } from "./types" - -const STORAGE_KEY = 'ls_walletconnect_dynamic_metadata' - -type Store = Record> - -// In-memory store for metadata captured BEFORE the wallet address is known -// (e.g. between user click and the WC session completing). Keyed by namespace. -const pendingStore = new Map() - -// Cache the parsed localStorage payload so repeated reads from render paths -// (useMemo in useEVM / useSVM) don't hit localStorage synchronously every time. -let _storeCache: Store | null = null - -const readStore = (): Store => { - if (_storeCache !== null) return _storeCache - if (typeof window === 'undefined') return {} - ensureStorageListener() - try { - const stored = localStorage.getItem(STORAGE_KEY) - _storeCache = stored ? JSON.parse(stored) : {} - } catch { - _storeCache = {} - } - return _storeCache as Store -} - -const writeStore = (store: Store): void => { - if (typeof window === 'undefined') return - try { - localStorage.setItem(STORAGE_KEY, JSON.stringify(store)) - _storeCache = store - } catch { - // ignore quota / serialization errors - } -} - -// Cross-tab invalidation: another tab writing to our key must bust this tab's cache. -// Lazily registered on first read/write so we never touch `window` at import time (SSR-safe). -let _storageListenerRegistered = false -const ensureStorageListener = () => { - if (_storageListenerRegistered || typeof window === 'undefined') return - _storageListenerRegistered = true - window.addEventListener('storage', (e) => { - if (e.key === STORAGE_KEY || e.key === null) _storeCache = null - }) -} - -const normalizeAddress = (namespace: string, address: string): string => { - // EVM addresses are case-insensitive; Solana base58 keys are case-sensitive. - return namespace === 'eip155' ? address.toLowerCase() : address -} - -export const getDynamicWcMetadata = (namespace: string, address: string): DynamicWcMetadata | null => { - const store = readStore() - const key = normalizeAddress(namespace, address) - return store[namespace]?.[key] ?? null -} - -export const setDynamicWcMetadata = ( - namespace: string, - address: string, - meta: DynamicWcMetadata, -): void => { - const store = readStore() - const key = normalizeAddress(namespace, address) - const ns = store[namespace] ?? {} - ns[key] = meta - store[namespace] = ns - writeStore(store) -} - -export const setPendingDynamicWcMetadata = (namespace: string, meta: DynamicWcMetadata | null): void => { - if (meta === null) { - pendingStore.delete(namespace) - } else { - pendingStore.set(namespace, meta) - } -} - -export const getPendingDynamicWcMetadata = (namespace: string): DynamicWcMetadata | null => { - return pendingStore.get(namespace) ?? null -} - -export const clearPendingDynamicWcMetadata = (namespace: string): void => { - pendingStore.delete(namespace) -} - -/** - * Convenience helper used by both EVM and Solana connect flows to set/clear - * pending metadata from a registry entry in a single call. - */ -export const setPendingMetadataForRegistry = ( - namespace: string, - registry: { name: string; icon?: string; id: string } | undefined -): DynamicWcMetadata | undefined => { - if (!registry) { - clearPendingDynamicWcMetadata(namespace) - return undefined - } - const meta: DynamicWcMetadata = { - name: registry.name, - icon: registry.icon || '', - id: registry.id, - } - setPendingDynamicWcMetadata(namespace, meta) - return meta -} diff --git a/apps/app/lib/walletConnect/mapConnectError.ts b/apps/app/lib/walletConnect/mapConnectError.ts deleted file mode 100644 index 25700c03..00000000 --- a/apps/app/lib/walletConnect/mapConnectError.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Normalizes errors thrown by the chain-specific WC connect flows into a - * single `Error` with a consistent message. Used by both EVM (wagmi) and - * Solana (`@solana/wallet-adapter-react`) connect paths. - */ -export function mapConnectError(e: unknown): Error { - if (e instanceof Error && e.name === 'ConnectorAlreadyConnectedError') { - return new Error('Wallet is already connected') - } - if (e instanceof Error) { - return new Error(e.message || e.name || 'WalletConnect error') - } - return new Error(typeof e === 'string' ? e : 'WalletConnect error') -} diff --git a/apps/app/lib/walletConnect/mapWallet.ts b/apps/app/lib/walletConnect/mapWallet.ts deleted file mode 100644 index 4d7547f3..00000000 --- a/apps/app/lib/walletConnect/mapWallet.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { resolveWalletConnectorIndex } from "../wallets/utils/resolveWalletIcon" -import type { Web3ModalWallet } from "./api" -import { walletImageUrl } from "./api" -import type { WalletConnectWalletBase } from "./types" - -function slugify(name: string): string { - return name - .toLowerCase() - .replace(/\s+/g, '-') - .replace(/[^a-z0-9-]/g, '') - .replace(/-+/g, '-') - .replace(/^-|-$/g, '') -} - -// Wallets whose slugified name doesn't match what buildDeepLink expects -const SLUG_OVERRIDES: Record = { - 'bitget-wallet': 'bitkeep', -} - -export function mapWallet(wallet: Web3ModalWallet): WalletConnectWalletBase { - let id = slugify(wallet.name) - if (SLUG_OVERRIDES[id]) id = SLUG_OVERRIDES[id] - - const hasBrowserExtension = wallet.injected != null && wallet.injected.length > 0 - const installUrl = hasBrowserExtension ? (wallet.chrome_store ?? undefined) : undefined - const isMobileSupported = !!wallet.mobile_link - - const knownOrder = resolveWalletConnectorIndex(id) - - return { - id, - name: wallet.name, - icon: walletImageUrl(wallet.image_id), - rdns: wallet.rdns || undefined, - mobile: { - native: wallet.link_mode === 'native' ? (wallet.mobile_link || null) : null, - universal: wallet.link_mode !== 'native' ? (wallet.mobile_link || null) : null, - }, - desktop: wallet.desktop_link - ? { native: null, universal: wallet.desktop_link } - : undefined, - chains: Array.isArray(wallet.chains) ? wallet.chains : [], - hasBrowserExtension, - installUrl, - isMobileSupported, - order: knownOrder >= 0 ? knownOrder : wallet.order, - } -} diff --git a/apps/app/lib/walletConnect/registry.ts b/apps/app/lib/walletConnect/registry.ts deleted file mode 100644 index dd782808..00000000 --- a/apps/app/lib/walletConnect/registry.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { fetchWallets, chainsForNamespace } from "./api" -import { mapWallet } from "./mapWallet" -import type { WalletConnectWalletBase } from "./types" - -// Slugified names of wallets to exclude (duplicates / unwanted entries). -const SLUGS_TO_FILTER = ['okx-wallet-1', 'ready'] - -const SOLANA_MAINNET_CAIP = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' -const SOLANA_DEPRECATED_MAINNET_CAIP = 'solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ' -const SOLANA_DEVNET_CAIP = 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1' -const SOLANA_DEPRECATED_DEVNET_CAIP = 'solana:8E9rvCKLFQia2Y35HXjjpWzj8weVo44K' - -const isSandbox = process.env.NEXT_PUBLIC_API_VERSION === 'sandbox' - -export const SOLANA_CAIP_IDS = isSandbox - ? [SOLANA_DEVNET_CAIP, SOLANA_DEPRECATED_DEVNET_CAIP] - : [SOLANA_MAINNET_CAIP, SOLANA_DEPRECATED_MAINNET_CAIP] - -export type ResolveOptions = { - namespace?: string - chainIds?: string[] - page?: number - entries?: number - search?: string -} - -export type ResolveResult = { - wallets: WalletConnectWalletBase[] - totalCount: number - nextPage: number | null -} - -export async function resolveWalletConnectWallets(opts: ResolveOptions = {}): Promise { - const chains = opts.chainIds?.join(',') - || (opts.namespace ? chainsForNamespace(opts.namespace) : undefined) - - const response = await fetchWallets({ - page: opts.page ?? 1, - entries: opts.entries ?? 40, - chains: chains || undefined, - search: opts.search, - }) - - const wallets = response.data - .map(mapWallet) - .filter(w => !SLUGS_TO_FILTER.includes(w.id)) - - return { - wallets, - totalCount: response.count, - nextPage: response.nextPage, - } -} diff --git a/apps/app/lib/walletConnect/subscribeDisplayUri.ts b/apps/app/lib/walletConnect/subscribeDisplayUri.ts deleted file mode 100644 index 673416e4..00000000 --- a/apps/app/lib/walletConnect/subscribeDisplayUri.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { QrCodeState } from "./types" - -export type DisplayUriListener = (uri: string) => void - -/** - * Minimal contract for anything that emits a WalletConnect `display_uri`. - * The Solana adapter implements this natively; for EVM we adapt wagmi's - * one-shot `provider.once('display_uri', ...)` into the same shape. - */ -export type DisplayUriSource = { - onDisplayUri(listener: DisplayUriListener): () => void -} - -export type SubscribeDisplayUriParams = { - source: DisplayUriSource - /** Converts the raw `wc:` URI into a wallet-specific deep link (mobile). */ - resolveURI?: (uri: string) => string | undefined - /** On mobile with a resolvable deep-link, the helper navigates away instead of emitting `onQr`. */ - isMobilePlatform: boolean - /** Called with each QR state transition (`loading` is emitted by the caller, not here). */ - onQr: (state: QrCodeState) => void -} - -/** - * Bridges a `display_uri` event source to the shared QR state shape, with - * mobile deep-link fallback. Returns an unsubscribe function. - * - * The caller is expected to have already emitted `{ state: 'loading' }` before - * invoking this helper. - */ -export function subscribeDisplayUri(params: SubscribeDisplayUriParams): () => void { - const { source, resolveURI, isMobilePlatform, onQr } = params - - return source.onDisplayUri((uri: string) => { - const deepLink = resolveURI ? resolveURI(uri) : undefined - - if (isMobilePlatform && deepLink) { - try { - const url = new URL(deepLink) - if (url.protocol === 'javascript:' || url.protocol === 'data:') { - console.warn('Blocked navigation to untrusted URL scheme') - onQr({ state: 'fetched', value: uri, deepLink }) - return - } - } catch { - console.warn('Blocked navigation to malformed URL') - onQr({ state: 'fetched', value: uri, deepLink }) - return - } - window.location.href = deepLink - return - } - - onQr({ state: 'fetched', value: uri, deepLink }) - }) -} diff --git a/apps/app/lib/walletConnect/types.ts b/apps/app/lib/walletConnect/types.ts deleted file mode 100644 index 2fd83482..00000000 --- a/apps/app/lib/walletConnect/types.ts +++ /dev/null @@ -1,61 +0,0 @@ -export type WalletConnectMobile = { - native?: string | null - universal?: string | null -} - -export type WalletConnectDesktop = { - native?: string | null - universal?: string | null -} - -/** - * Raw WalletConnect wallet shape resolved from the Web3Modal getWallets API. - * Chain-agnostic — each chain decorates this with chain-specific fields - * (e.g. wagmi's projectId/showQrModal/customStoragePrefix for EVM). - */ -export type WalletConnectWalletBase = { - id: string - name: string - icon: string - rdns?: string - mobile: WalletConnectMobile - desktop?: WalletConnectDesktop - chains: string[] - hasBrowserExtension: boolean - installUrl?: string - isMobileSupported: boolean - order: number - updatedAt?: string -} - -export type DynamicWcMetadata = { - name: string - icon: string - id: string -} - -/** - * Shared QR-modal state used by both EVM and Solana flows. - * `loading` — waiting for the `display_uri` event from the WC provider. - * `fetched` — URI received; `value` is the raw `wc:` URI (for the QR image), - * `deepLink` is the wallet-specific mobile deep-link (for copy/redirect). - */ -export type QrCodeState = - | { state: 'loading'; value: undefined; deepLink?: undefined } - | { state: 'fetched'; value: string; deepLink?: string } - -/** - * Marker attached to UI connector tiles that originated from the WalletConnect - * wallet registry (i.e. not a locally-installed adapter/connector). Both chains - * use this to decide whether to route a connect through the QR / deep-link path. - */ -export const WC_REGISTRY_MARKER = Symbol('wcRegistry') - -export type RegistryAttachedConnector = T & { - [WC_REGISTRY_MARKER]?: WalletConnectWalletBase -} - -export const getRegistryEntry = (c: unknown): WalletConnectWalletBase | undefined => { - if (!c || typeof c !== 'object') return undefined - return (c as Record)[WC_REGISTRY_MARKER] -} diff --git a/apps/app/lib/walletConnect/useAdditionalConnectors.ts b/apps/app/lib/walletConnect/useAdditionalConnectors.ts deleted file mode 100644 index 1565eab4..00000000 --- a/apps/app/lib/walletConnect/useAdditionalConnectors.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { useCallback, useMemo, useState } from 'react' -import type { RequestAdditionalConnectorsParams } from '@/Models/WalletProvider' -import { resolveWalletConnectWallets } from './registry' -import type { WalletConnectWalletBase } from './types' - -type PageCacheEntry = { - page: number - pageSize: number - result: { - wallets: WalletConnectWalletBase[] - totalCount: number - nextPage: number | null - } -} - -type NamespaceCache = Map> -type WalletConnectRequestResult = { - connectors: WalletConnectWalletBase[] - nextPage: number | null - totalCount: number -} - -const cacheByNamespace = new Map() -const inFlightByKey = new Map>() - -const DEFAULT_PAGE_SIZE = 40 -const MAX_CACHED_PAGES_PER_QUERY = 20 -const MAX_CACHED_QUERIES_PER_NAMESPACE = 50 - -const normalizeQuery = (query?: string) => query?.trim() ?? '' - -const getNamespaceCache = (namespace: string): NamespaceCache => { - if (!cacheByNamespace.has(namespace)) { - cacheByNamespace.set(namespace, new Map()) - } - - return cacheByNamespace.get(namespace)! -} - -const getQueryCache = (namespace: string, query: string) => { - const namespaceCache = getNamespaceCache(namespace) - if (!namespaceCache.has(query)) { - if (namespaceCache.size >= MAX_CACHED_QUERIES_PER_NAMESPACE) { - // Evict the oldest non-browse entry (Map iteration is insertion order). - // The browse key ('') backs the default list and stays cached to avoid - // a blank wallet list when the user clears their search. - for (const existingKey of namespaceCache.keys()) { - if (existingKey !== '') { - namespaceCache.delete(existingKey) - break - } - } - } - namespaceCache.set(query, new Map()) - } - - return namespaceCache.get(query)! -} - -const getPageKey = (page: number, pageSize: number) => `${page}:${pageSize}` - -const listCachedPages = (namespace: string, query: string): PageCacheEntry[] => { - return Array.from(getQueryCache(namespace, query).values()) - .sort((left, right) => left.page - right.page) -} - -const mergeRecents = (recents: WalletConnectWalletBase[], connectors: WalletConnectWalletBase[]) => { - if (recents.length === 0) return connectors - - const recentIds = new Set(recents.map(connector => connector.id.toLowerCase())) - return [...recents, ...connectors.filter(connector => !recentIds.has(connector.id.toLowerCase()))] -} - -async function fetchAdditionalConnectorsPage(namespace: string, params: Required) { - const query = normalizeQuery(params.query) - const pageKey = getPageKey(params.page, params.pageSize) - const queryCache = getQueryCache(namespace, query) - const cached = queryCache.get(pageKey) - - if (cached) { - return cached.result - } - - const inFlightKey = `${namespace}:${query}:${pageKey}` - const existingRequest = inFlightByKey.get(inFlightKey) - - if (existingRequest) { - return existingRequest - } - - const request = (async () => { - const result = await resolveWalletConnectWallets({ - namespace, - page: params.page, - entries: params.pageSize, - search: query || undefined, - }) - - if (queryCache.size >= MAX_CACHED_PAGES_PER_QUERY) { - const oldestKey = queryCache.keys().next().value - if (oldestKey) queryCache.delete(oldestKey) - } - - queryCache.set(pageKey, { - page: params.page, - pageSize: params.pageSize, - result, - }) - - return result - })() - - inFlightByKey.set(inFlightKey, request) - - try { - return await request - } finally { - inFlightByKey.delete(inFlightKey) - } -} - -export function useAdditionalConnectors(namespace: string) { - const [recents, setRecents] = useState([]) - const [browseVersion, setBrowseVersion] = useState(0) - - const requestAdditionalConnectors = useCallback(async (params: RequestAdditionalConnectorsParams = {}): Promise => { - const normalizedParams = { - page: params.page ?? 1, - pageSize: params.pageSize ?? DEFAULT_PAGE_SIZE, - query: normalizeQuery(params.query), - } - - const result = await fetchAdditionalConnectorsPage(namespace, normalizedParams) - - if (!normalizedParams.query) { - setBrowseVersion(version => version + 1) - } - - return { - connectors: result.wallets, - nextPage: result.nextPage, - totalCount: result.totalCount, - } - }, [namespace]) - - const addRecentConnector = useCallback((connector: WalletConnectWalletBase) => { - setRecents(previous => { - const deduped = previous.filter(item => item.id.toLowerCase() !== connector.id.toLowerCase()) - return [connector, ...deduped] - }) - }, []) - - const cachedBrowsePages = useMemo(() => listCachedPages(namespace, ''), [namespace, browseVersion]) - - const browseConnectors = useMemo(() => { - const connectors = cachedBrowsePages.flatMap(page => page.result.wallets) - return mergeRecents(recents, connectors) - }, [cachedBrowsePages, recents]) - - const browseMetadata = useMemo(() => { - const lastPage = cachedBrowsePages[cachedBrowsePages.length - 1] - return { - loaded: cachedBrowsePages.length > 0, - nextPage: lastPage?.result.nextPage ?? null, - totalCount: lastPage?.result.totalCount ?? 0, - } - }, [cachedBrowsePages]) - - return { - browseConnectors, - browseMetadata, - requestAdditionalConnectors, - addRecentConnector, - } -} diff --git a/apps/app/lib/wallets/aztec/KnownAztecConnectors.tsx b/apps/app/lib/wallets/aztec/KnownAztecConnectors.tsx index 0228e3e2..70bf5ae4 100644 --- a/apps/app/lib/wallets/aztec/KnownAztecConnectors.tsx +++ b/apps/app/lib/wallets/aztec/KnownAztecConnectors.tsx @@ -1,20 +1,10 @@ -import Azguard from "@/components/Icons/Wallets/Azguard" +import { azguardIconBase64 } from "./azguardIcon" const KnownAztecConnectors = [ { id: 'azguard-wallet', name: 'Azguard', - icon: Azguard - }, - { - id: 'azguard wallet', - name: 'Azguard', - icon: Azguard - }, - { - id: 'azguard', - name: 'Azguard', - icon: Azguard + icon: azguardIconBase64 }, ] diff --git a/apps/app/lib/wallets/aztec/azguardIcon.ts b/apps/app/lib/wallets/aztec/azguardIcon.ts new file mode 100644 index 00000000..5594719d --- /dev/null +++ b/apps/app/lib/wallets/aztec/azguardIcon.ts @@ -0,0 +1,2 @@ +export const azguardIconBase64 = + 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzOCIgaGVpZ2h0PSIzOCIgdmlld0JveD0iMCAwIDM4IDM4IiBmaWxsPSJub25lIj48cmVjdCB3aWR0aD0iMzgiIGhlaWdodD0iMzgiIGZpbGw9ImJsYWNrIi8+PHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjMwIiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IndoaXRlIi8+PHBhdGggZD0iTTMzLjM5MiAxNC43MDU5TDIzLjk1NDggMTguNDQ1MkwzNCAxOS43MDYxQzMzLjk4OCAxOS45NjQ2IDMzLjk2OTUgMjAuMjIxNCAzMy45NDQ1IDIwLjQ3NjJMMjMuNzM4MSAyMC41SDIzLjUwNDVMMzEuMDEzNiAyOC4wMDA2QzI4LjI3MzkgMzEuNjQzNiAyMy45MTIxIDM0IDE4Ljk5OTUgMzRWMjAuNVYxNkwxNC40OTQ0IDIwLjVIMTQuMjYwN0g0LjA1NjY5QzQuMDMxMzUgMjAuMjQ1IDQuMDEyNCAxOS45ODgzIDQgMTkuNzI5NkwxNC4wNDQxIDE4LjQ0NTJMNC42MDY5IDE0LjcwNTlDNC42ODA1NCAxNC40NTkzIDQuNzYwMzcgMTQuMjE1MyA0Ljg0NjE5IDEzLjk3NDJMMTQuNjg0NCAxNi40ODAzTDcuNTkzODQgOS4yNDIzQzcuNzYxNCA5LjA0NzA0IDcuOTMzOTEgOC44NTYxNSA4LjExMTE4IDguNjY5NzlMMTYuMDcwNyAxNC45NDQ5TDEyLjU0NCA1LjQ1Mjg0QzEyLjc3NTggNS4zNDI0IDEzLjAxMSA1LjIzNzc0IDEzLjI0OTIgNS4xMzkwM0wxNy45NjM1IDE0LjEwNDZMMTguNjEzMSA0LjAwNDg3QzE4Ljc0MTUgNC4wMDE2MyAxOC44NzAzIDQgMTguOTk5NSA0QzE5LjEyODYgNCAxOS4yNTc0IDQuMDAxNjMgMTkuMzg1OCA0LjAwNDg3TDIwLjAzNTQgMTQuMTA0NkwyNC43NDk4IDUuMTM5MDJDMjQuOTg3OSA1LjIzNzc0IDI1LjIyMyA1LjM0MjQgMjUuNDU0OSA1LjQ1MjgzTDIxLjkyODEgMTQuOTQ0OUwyOS44ODc3IDguNjY5NzlDMzAuMDY1IDguODU2MTQgMzAuMjM3NSA5LjA0NzA0IDMwLjQwNSA5LjI0MjI5TDIzLjMxNDUgMTYuNDgwM0wzMy4xNTI4IDEzLjk3NDJDMzMuMjM4NSAxNC4yMTUzIDMzLjMxODQgMTQuNDU5MyAzMy4zOTIgMTQuNzA1OVoiIGZpbGw9ImJsYWNrIi8+PC9zdmc+' diff --git a/apps/app/lib/wallets/aztec/useAztec.ts b/apps/app/lib/wallets/aztec/useAztec.ts index 47e50365..a443ca5e 100644 --- a/apps/app/lib/wallets/aztec/useAztec.ts +++ b/apps/app/lib/wallets/aztec/useAztec.ts @@ -1,7 +1,8 @@ import KnownInternalNames from "../../knownIds"; import { useSettingsState } from "@/context/settings"; -import { InternalConnector, Wallet, WalletProvider } from "@/Models/WalletProvider"; -import { resolveWalletConnectorIcon } from "../utils/resolveWalletIcon"; +import type { InternalConnector, Wallet } from "@layerswap/widget-types"; +import { WalletConnectionProvider } from "@layerswap/wallet-core/types"; +import { normalizeIconSrc } from "@layerswap/wallet-core"; import { extractAztecAddress } from "./utils"; import { useCallback, useMemo } from "react"; import { useAztecWalletContext } from "@/components/WalletProviders/AztecWalletProvider"; @@ -17,7 +18,7 @@ const commonSupportedNetworks = [ const name = 'Aztec' const id = 'aztec' -export default function useAztec(): WalletProvider { +export default function useAztec(): WalletConnectionProvider { const { networks } = useSettingsState() const { connect, disconnect } = useAztecWalletContext(); @@ -48,7 +49,7 @@ export default function useAztec(): WalletProvider { address, providerName: name, isActive: true, - icon: resolveWalletConnectorIcon({ connector: wallet.id, address }), + icon: wallet.icon, disconnect: () => disconnectWallets(), withdrawalSupportedNetworks: commonSupportedNetworks, asSourceSupportedNetworks: commonSupportedNetworks, @@ -90,7 +91,7 @@ export default function useAztec(): WalletProvider { address: primaryAddress, providerName: name, isActive: true, - icon: resolveWalletConnectorIcon({ connector: providerId, address: primaryAddress }), + icon: normalizeIconSrc(params?.connector?.icon), disconnect: () => disconnectWallets(), withdrawalSupportedNetworks: commonSupportedNetworks, asSourceSupportedNetworks: commonSupportedNetworks, @@ -116,6 +117,7 @@ export default function useAztec(): WalletProvider { return [{ id: azguard.id, name: azguard.name, + icon: azguard.icon, providerName: name, extensionNotFound: false, hasBrowserExtension: true, @@ -127,7 +129,7 @@ export default function useAztec(): WalletProvider { setActiveAddress(address); }, [setActiveAddress]); - const provider: WalletProvider = { + const provider: WalletConnectionProvider = { connectWallet, disconnectWallets, switchAccount, diff --git a/apps/app/lib/wallets/evm/KnownEVMConnectors.tsx b/apps/app/lib/wallets/evm/KnownEVMConnectors.tsx deleted file mode 100644 index 2c325906..00000000 --- a/apps/app/lib/wallets/evm/KnownEVMConnectors.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import MetaMaskIcon from "../../../components/Icons/Wallets/MetaMask" -import WalletConnectIcon from "../../../components/Icons/Wallets/WalletConnect" -import BitKeep from "../../../components/Icons/Wallets/BitKeep" -import RainbowIcon from "../../../components/Icons/Wallets/Rainbow" -import CoinbaseIcon from "../../../components/Icons/Wallets/Coinbase" -import Phantom from "../../../components/Icons/Wallets/Phantom" -import { Connector } from "wagmi" -import Argent from "../../../components/Icons/Wallets/Argent" -import BitGetIcon from "../../../components/Icons/Wallets/Bitget" -import BrowserWallet from "../../../components/Icons/Wallets/BrowserWallet" - -const KnownEVMConnectors = [ - { - id: 'metamask', - icon: MetaMaskIcon, - }, - { - id: 'io.metamask', - icon: MetaMaskIcon - }, - { - id: 'metamasksdk', - icon: MetaMaskIcon - }, - { - id: 'walletconnect', - icon: WalletConnectIcon - }, - { - id: 'rainbow', - icon: RainbowIcon - }, - { - id: 'app.rainbow', - icon: RainbowIcon - }, - { - id: 'bitkeep', - icon: BitKeep - }, - { - id: 'bitget', - icon: BitGetIcon - }, - { - id: 'coinbasewalletsdk', - icon: CoinbaseIcon - }, - { - id: 'phantom', - icon: Phantom - }, - { - id: 'app.phantom', - icon: Phantom - }, - { - id: 'argent', - icon: Argent - }, - { - id: 'injected', - icon: BrowserWallet - } -] - -export const evmConnectorNameResolver = (connector: Connector) => { - - const connectorById = KnownEVMConnectors.find(c => c.id === connector.id.toLowerCase()) - const connectorByName = KnownEVMConnectors.find(c => c.id === connector.name.toLowerCase()) - - if (connectorById) return connectorById.id - else if (connectorByName) return connectorByName.id - - return connector.id -} - -export default KnownEVMConnectors \ No newline at end of file diff --git a/apps/app/lib/wallets/evm/connectors/explicitInjectedProviderDetected.ts b/apps/app/lib/wallets/evm/connectors/explicitInjectedProviderDetected.ts deleted file mode 100644 index 4d99457f..00000000 --- a/apps/app/lib/wallets/evm/connectors/explicitInjectedProviderDetected.ts +++ /dev/null @@ -1,84 +0,0 @@ - -export function explicitInjectedProviderDetected() { - const _window = - typeof window !== 'undefined' ? (window as WindowProvider) : undefined; - if (typeof _window === 'undefined' || typeof _window.ethereum === 'undefined') - return false; - return !!_window.ethereum; -} - -export type Evaluate = { [key in keyof type]: type[key] } & unknown; - -export type WalletProvider = Evaluate< - EIP1193Provider & { - [key in WalletProviderFlags]?: true | undefined; - } & { - providers?: any[] | undefined; - /** Only exists in MetaMask as of 2022/04/03 */ - _events?: { connect?: (() => void) | undefined } | undefined; - /** Only exists in MetaMask as of 2022/04/03 */ - _state?: - | { - accounts?: string[]; - initialized?: boolean; - isConnected?: boolean; - isPermanentlyDisconnected?: boolean; - isUnlocked?: boolean; - } - | undefined; - } ->; - -export type WindowProvider = { - coinbaseWalletExtension?: WalletProvider | undefined; - ethereum?: WalletProvider | undefined; - phantom?: { ethereum: WalletProvider } | undefined; - providers?: any[] | undefined; // Adjust the type as needed -}; - -export type WalletProviderFlags = - | 'isApexWallet' - | 'isAvalanche' - | 'isBackpack' - | 'isBifrost' - | 'isBitKeep' - | 'isBitski' - | 'isBlockWallet' - | 'isBraveWallet' - | 'isCoinbaseWallet' - | 'isDawn' - | 'isEnkrypt' - | 'isExodus' - | 'isFrame' - | 'isFrontier' - | 'isGamestop' - | 'isHyperPay' - | 'isImToken' - | 'isKuCoinWallet' - | 'isMathWallet' - | 'isMetaMask' - | 'isNestWallet' - | 'isOkxWallet' - | 'isOKExWallet' - | 'isOneInchAndroidWallet' - | 'isOneInchIOSWallet' - | 'isOpera' - | 'isPhantom' - | 'isPortal' - | 'isRabby' - | 'isRainbow' - | 'isStatus' - | 'isTally' - | 'isTokenPocket' - | 'isTokenary' - | 'isTrust' - | 'isTrustWallet' - | 'isXDEFI' - | 'isZerion' - | 'isTalisman' - | 'isZeal' - | 'isCoin98' - | 'isMEWwallet' - | 'isSafeheron' - | 'isSafePal' - | '__seif'; diff --git a/apps/app/lib/wallets/evm/connectors/types.ts b/apps/app/lib/wallets/evm/connectors/types.ts deleted file mode 100644 index fd05eaed..00000000 --- a/apps/app/lib/wallets/evm/connectors/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Connector } from "wagmi" - -export type LSConnector = Connector & { - resolveURI?: (uri: string) => string - order?: number, - isAvailable?: boolean, - deepLink?: string, -} \ No newline at end of file diff --git a/apps/app/lib/wallets/evm/connectors/useSyncProviders/EthereumProviderTypes.d.ts b/apps/app/lib/wallets/evm/connectors/useSyncProviders/EthereumProviderTypes.d.ts deleted file mode 100644 index 67e882fe..00000000 --- a/apps/app/lib/wallets/evm/connectors/useSyncProviders/EthereumProviderTypes.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -// EthereumProviderTypes.d.ts - -// Interface for provider information following EIP-6963. -interface EIP6963ProviderInfo { - rdns: string; // Reverse-DNS wallet identifier per EIP-6963 (e.g. io.metamask, org.tronlink.www) - uuid: string; // Globally unique ID to differentiate between provider sessions for the lifetime of the page - name: string; // Human-readable name of the wallet - icon: string; // URL to the wallet's icon - } - - // Interface for Ethereum providers based on the EIP-1193 standard. - interface EIP1193Provider { - isStatus?: boolean; // Optional: Indicates the status of the provider - host?: string; // Optional: Host URL of the Ethereum node - path?: string; // Optional: Path to a specific endpoint or service on the host - sendAsync?: (request: { method: string, params?: Array }, callback: (error: Error | null, response: unknown) => void) => void; // For sending asynchronous requests - send?: (request: { method: string, params?: Array }, callback: (error: Error | null, response: unknown) => void) => void; // For sending synchronous requests - request: (request: { method: string, params?: Array }) => Promise; // Standard method for sending requests per EIP-1193 - } - - // Interface detailing the structure of provider information and its Ethereum provider. - interface EIP6963ProviderDetail { - info: EIP6963ProviderInfo; // The provider's info - provider: EIP1193Provider; // The EIP-1193 compatible provider - } - - // Type representing the event structure for announcing a provider based on EIP-6963. - type EIP6963AnnounceProviderEvent = { - detail: { - info: EIP6963ProviderInfo; // The provider's info - provider: EIP1193Provider; // The EIP-1193 compatible provider - } - } \ No newline at end of file diff --git a/apps/app/lib/wallets/evm/connectors/useSyncProviders/index.ts b/apps/app/lib/wallets/evm/connectors/useSyncProviders/index.ts deleted file mode 100644 index b9db3eff..00000000 --- a/apps/app/lib/wallets/evm/connectors/useSyncProviders/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { useSyncExternalStore } from "react"; -import { store } from "./store"; - -export const useSyncProviders = ()=> useSyncExternalStore(store.subscribe, store.value, store.value) \ No newline at end of file diff --git a/apps/app/lib/wallets/evm/connectors/useSyncProviders/store.ts b/apps/app/lib/wallets/evm/connectors/useSyncProviders/store.ts deleted file mode 100644 index 0e27627f..00000000 --- a/apps/app/lib/wallets/evm/connectors/useSyncProviders/store.ts +++ /dev/null @@ -1,30 +0,0 @@ -declare global { - interface WindowEventMap { - "eip6963:announceProvider": CustomEvent; - } -} - -let providers: EIP6963ProviderDetail[] = []; - -export const store = { - value: () => providers, - - subscribe: (callback: (providers: EIP6963ProviderDetail[]) => void) => { - - function onAnnouncement(event: EIP6963AnnounceProviderEvent) { - // Prevent adding a provider if it already exists in the list based on its uuid. - if (providers.some(p => p.info.uuid === event.detail.info.uuid)) return; - - // Add the new provider to the list and call the provided callback function. - providers = [...providers, event.detail]; - callback([...providers, event.detail]); - } - - window.addEventListener("eip6963:announceProvider", onAnnouncement as unknown as EventListener); - window.dispatchEvent(new Event("eip6963:requestProvider")); - - return () => { - window.removeEventListener("eip6963:announceProvider", onAnnouncement as unknown as EventListener); - } - } -} \ No newline at end of file diff --git a/apps/app/lib/wallets/evm/connectors/walletConnect.ts b/apps/app/lib/wallets/evm/connectors/walletConnect.ts deleted file mode 100644 index 5991b216..00000000 --- a/apps/app/lib/wallets/evm/connectors/walletConnect.ts +++ /dev/null @@ -1,497 +0,0 @@ -import { buildDeepLink } from '@/lib/walletConnect/buildDeepLink' -import { - ChainNotConfiguredError, - type Connector, - ProviderNotFoundError, - createConnector, - extractRpcUrls, -} from '@wagmi/core' -import type { Compute, ExactPartial, Omit } from '@wagmi/core/internal' -import type { EthereumProvider } from '@walletconnect/ethereum-provider' -import { - type AddEthereumChainParameter, - type Address, - type ProviderConnectInfo, - type ProviderRpcError, - type RpcError, - SwitchChainError, - UserRejectedRequestError, - getAddress, - numberToHex, -} from 'viem' - -type WalletConnectConnector = Connector & { - onDisplayUri(uri: string): void - onSessionDelete(data: { topic: string }): void -} - -type EthereumProviderOptions = Parameters<(typeof EthereumProvider)['init']>[0] - -export type WalletConnectParameters = Compute< - { - /** - * If a new chain is added to a previously existing configured connector `chains`, this flag - * will determine if that chain should be considered as stale. A stale chain is a chain that - * WalletConnect has yet to establish a relationship with (e.g. the user has not approved or - * rejected the chain). - * - * This flag mainly affects the behavior when a wallet does not support dynamic chain authorization - * with WalletConnect v2. - * - * If `true` (default), the new chain will be treated as a stale chain. If the user - * has yet to establish a relationship (approved/rejected) with this chain in their WalletConnect - * session, the connector will disconnect upon the dapp auto-connecting, and the user will have to - * reconnect to the dapp (revalidate the chain) in order to approve the newly added chain. - * This is the default behavior to avoid an unexpected error upon switching chains which may - * be a confusing user experience (e.g. the user will not know they have to reconnect - * unless the dapp handles these types of errors). - * - * If `false`, the new chain will be treated as a potentially valid chain. This means that if the user - * has yet to establish a relationship with the chain in their WalletConnect session, wagmi will successfully - * auto-connect the user. This comes with the trade-off that the connector will throw an error - * when attempting to switch to the unapproved chain if the wallet does not support dynamic session updates. - * This may be useful in cases where a dapp constantly - * modifies their configured chains, and they do not want to disconnect the user upon - * auto-connecting. If the user decides to switch to the unapproved chain, it is important that the - * dapp handles this error and prompts the user to reconnect to the dapp in order to approve - * the newly added chain. - * - * @default true - */ - isNewChainsStale?: boolean - } & Omit< - EthereumProviderOptions, - | 'chains' - | 'events' - | 'optionalChains' - | 'optionalEvents' - | 'optionalMethods' - | 'methods' - | 'rpcMap' - | 'showQrModal' - > & - ExactPartial> -> - -type Params = { - id: string, - name: string, - rdns: string, - type: string, - mobile: { - native: string, - universal: string, - }, - icon: string, -} & WalletConnectParameters -walletConnect.type = 'metamask' -export function walletConnect(parameters: Params) { - const isNewChainsStale = parameters.isNewChainsStale ?? true - const { id, name, rdns, type, mobile, icon } = parameters - - type Provider = Awaited> - type Properties = { - connect(parameters?: { - chainId?: number | undefined - isReconnecting?: boolean | undefined - pairingTopic?: string | undefined - }): Promise<{ - accounts: readonly Address[] - chainId: number - }> - getNamespaceChainsIds(): number[] - getRequestedChainsIds(): Promise - isChainsStale(): Promise - onConnect(connectInfo: ProviderConnectInfo): void - onDisplayUri(uri: string): void - onSessionDelete(data: { topic: string }): void - setRequestedChainsIds(chains: number[]): void - requestedChainsStorageKey: `${string}.requestedChains` - } - type StorageItem = { - [_ in Properties['requestedChainsStorageKey']]: number[] - } - - let provider_: Provider | undefined - let providerPromise: Promise - const NAMESPACE = 'eip155' - - let accountsChanged: WalletConnectConnector['onAccountsChanged'] | undefined - let chainChanged: WalletConnectConnector['onChainChanged'] | undefined - let connect: WalletConnectConnector['onConnect'] | undefined - let displayUri: WalletConnectConnector['onDisplayUri'] | undefined - let sessionDelete: WalletConnectConnector['onSessionDelete'] | undefined - let disconnect: WalletConnectConnector['onDisconnect'] | undefined - - return createConnector((config) => ({ - id: id, - name: name, - rdns: rdns, - type: type, - deepLink: mobile.native || mobile.universal, - icon: icon, - resolveURI: (uri: string) => getResolveUri(id, uri, mobile), - async setup() { - const provider = await this.getProvider().catch(() => null) - if (!provider) return - if (!connect) { - connect = this.onConnect.bind(this) - provider.on('connect', connect) - } - if (!sessionDelete) { - sessionDelete = this.onSessionDelete.bind(this) - provider.on('session_delete', sessionDelete) - } - }, - async connect({ chainId, ...rest } = {} as any) { - try { - const provider = await this.getProvider() - if (!provider) throw new ProviderNotFoundError() - if (!displayUri) { - displayUri = this.onDisplayUri - provider.on('display_uri', displayUri) - } - - let targetChainId = chainId - if (!targetChainId) { - const state = (await config.storage?.getItem('state')) ?? {} - const isChainSupported = config.chains.some( - (x) => x.id === state.chainId, - ) - if (isChainSupported) targetChainId = state.chainId - else targetChainId = config.chains[0]?.id - } - if (!targetChainId) throw new Error('No chains found on connector.') - - const isChainsStale = await this.isChainsStale() - // If there is an active session with stale chains, disconnect current session. - if (provider.session && isChainsStale) await provider.disconnect() - - // If there isn't an active session or chains are stale, connect. - if (!provider.session || isChainsStale) { - const optionalChains = config.chains - .filter((chain) => chain.id !== targetChainId) - .map((optionalChain) => optionalChain.id) - await provider.connect({ - optionalChains: [targetChainId, ...optionalChains], - ...('pairingTopic' in rest - ? { pairingTopic: rest.pairingTopic } - : {}), - }) - - this.setRequestedChainsIds(config.chains.map((x) => x.id)) - } - - // If session exists and chains are authorized, enable provider for required chain - const accounts = (await provider.enable()).map((x: string) => getAddress(x)) - const currentChainId = await this.getChainId() - - if (displayUri) { - provider.removeListener('display_uri', displayUri) - displayUri = undefined - } - if (connect) { - provider.removeListener('connect', connect) - connect = undefined - } - if (!accountsChanged) { - accountsChanged = this.onAccountsChanged.bind(this) - provider.on('accountsChanged', accountsChanged) - } - if (!chainChanged) { - chainChanged = this.onChainChanged.bind(this) - provider.on('chainChanged', chainChanged) - } - if (!disconnect) { - disconnect = this.onDisconnect.bind(this) - provider.on('disconnect', disconnect) - } - if (!sessionDelete) { - sessionDelete = this.onSessionDelete.bind(this) - provider.on('session_delete', sessionDelete) - } - - return { accounts, chainId: currentChainId } - } catch (error) { - if ( - /(user rejected|connection request reset)/i.test( - (error as ProviderRpcError)?.message, - ) - ) { - throw new UserRejectedRequestError(error as Error) - } - throw error - } - }, - async disconnect() { - const provider = await this.getProvider() - try { - await provider?.disconnect() - } catch (error) { - if (!/No matching key/i.test((error as Error).message)) throw error - } finally { - if (chainChanged) { - provider?.removeListener('chainChanged', chainChanged) - chainChanged = undefined - } - if (disconnect) { - provider?.removeListener('disconnect', disconnect) - disconnect = undefined - } - if (!connect) { - connect = this.onConnect.bind(this) - provider?.on('connect', connect) - } - if (accountsChanged) { - provider?.removeListener('accountsChanged', accountsChanged) - accountsChanged = undefined - } - if (sessionDelete) { - provider?.removeListener('session_delete', sessionDelete) - sessionDelete = undefined - } - - this.setRequestedChainsIds([]) - } - }, - async getAccounts() { - const provider = await this.getProvider() - return provider.accounts.map((x: string) => getAddress(x)) - }, - async getProvider({ chainId } = {}) { - if (typeof window === 'undefined') return undefined as unknown as Provider - async function initProvider() { - const optionalChains = config.chains.map((x) => x.id) as [number] - if (!optionalChains.length) return - const { EthereumProvider } = await import( - '@walletconnect/ethereum-provider' - ) - return await EthereumProvider.init({ - ...parameters, - disableProviderPing: true, - optionalChains, - projectId: parameters.projectId, - rpcMap: Object.fromEntries( - config.chains.map((chain) => { - const [url] = extractRpcUrls({ - chain, - transports: config.transports, - }) - return [chain.id, url] - }), - ), - showQrModal: parameters.showQrModal ?? true, - }) - } - - if (!provider_) { - if (!providerPromise) providerPromise = initProvider() - provider_ = await providerPromise - provider_?.events.setMaxListeners(Number.POSITIVE_INFINITY) - } - if (chainId) await this.switchChain?.({ chainId }) - return provider_! - }, - async getChainId() { - const provider = await this.getProvider() - return provider.chainId - }, - async isAuthorized() { - try { - const [accounts, provider] = await Promise.all([ - this.getAccounts(), - this.getProvider(), - ]) - - // If an account does not exist on the session, then the connector is unauthorized. - if (!accounts.length) return false - - // If the chains are stale on the session, then the connector is unauthorized. - const isChainsStale = await this.isChainsStale() - if (isChainsStale && provider.session) { - await provider.disconnect().catch(() => { }) - return false - } - return true - } catch { - return false - } - }, - async switchChain({ addEthereumChainParameter, chainId }) { - const provider = await this.getProvider() - if (!provider) throw new ProviderNotFoundError() - - const chain = config.chains.find((x) => x.id === chainId) - if (!chain) throw new SwitchChainError(new ChainNotConfiguredError()) - - try { - await Promise.all([ - new Promise((resolve) => { - const listener = ({ - chainId: currentChainId, - }: { chainId?: number | undefined }) => { - if (currentChainId === chainId) { - config.emitter.off('change', listener) - resolve() - } - } - config.emitter.on('change', listener) - }), - provider.request({ - method: 'wallet_switchEthereumChain', - params: [{ chainId: numberToHex(chainId) }], - }), - ]) - - const requestedChains = await this.getRequestedChainsIds() - this.setRequestedChainsIds([...requestedChains, chainId]) - - return chain - } catch (err) { - const error = err as RpcError - - if (/(user rejected)/i.test(error.message)) - throw new UserRejectedRequestError(error) - - // Indicates chain is not added to provider - try { - let blockExplorerUrls: string[] | undefined - if (addEthereumChainParameter?.blockExplorerUrls) - blockExplorerUrls = addEthereumChainParameter.blockExplorerUrls - else - blockExplorerUrls = chain.blockExplorers?.default.url - ? [chain.blockExplorers?.default.url] - : [] - - let rpcUrls: readonly string[] - if (addEthereumChainParameter?.rpcUrls?.length) - rpcUrls = addEthereumChainParameter.rpcUrls - else rpcUrls = [...chain.rpcUrls.default.http] - - const addEthereumChain = { - blockExplorerUrls, - chainId: numberToHex(chainId), - chainName: addEthereumChainParameter?.chainName ?? chain.name, - iconUrls: addEthereumChainParameter?.iconUrls, - nativeCurrency: - addEthereumChainParameter?.nativeCurrency ?? chain.nativeCurrency, - rpcUrls, - } satisfies AddEthereumChainParameter - - await provider.request({ - method: 'wallet_addEthereumChain', - params: [addEthereumChain], - }) - - const requestedChains = await this.getRequestedChainsIds() - this.setRequestedChainsIds([...requestedChains, chainId]) - return chain - } catch (error) { - throw new UserRejectedRequestError(error as Error) - } - } - }, - onAccountsChanged(accounts) { - if (accounts.length === 0) this.onDisconnect() - else - config.emitter.emit('change', { - accounts: accounts.map((x) => getAddress(x)), - }) - }, - onChainChanged(chain) { - const chainId = Number(chain) - config.emitter.emit('change', { chainId }) - }, - async onConnect(connectInfo) { - const chainId = Number(connectInfo.chainId) - const accounts = await this.getAccounts() - config.emitter.emit('connect', { accounts, chainId }) - }, - async onDisconnect(_error) { - this.setRequestedChainsIds([]) - config.emitter.emit('disconnect') - - const provider = await this.getProvider() - if (accountsChanged) { - provider.removeListener('accountsChanged', accountsChanged) - accountsChanged = undefined - } - if (chainChanged) { - provider.removeListener('chainChanged', chainChanged) - chainChanged = undefined - } - if (disconnect) { - provider.removeListener('disconnect', disconnect) - disconnect = undefined - } - if (sessionDelete) { - provider.removeListener('session_delete', sessionDelete) - sessionDelete = undefined - } - if (!connect) { - connect = this.onConnect.bind(this) - provider.on('connect', connect) - } - }, - onDisplayUri(uri) { - config.emitter.emit('message', { type: 'display_uri', data: uri }) - }, - onSessionDelete() { - this.onDisconnect() - }, - getNamespaceChainsIds() { - if (!provider_) return [] - const chainIds = provider_.session?.namespaces[NAMESPACE]?.accounts?.map( - (account) => Number.parseInt(account.split(':')[1] || ''), - ) - return chainIds ?? [] - }, - async getRequestedChainsIds() { - return ( - (await config.storage?.getItem(this.requestedChainsStorageKey)) ?? [] - ) - }, - /** - * Checks if the target chains match the chains that were - * initially requested by the connector for the WalletConnect session. - * If there is a mismatch, this means that the chains on the connector - * are considered stale, and need to be revalidated at a later point (via - * connection). - * - * There may be a scenario where a dapp adds a chain to the - * connector later on, however, this chain will not have been approved or rejected - * by the wallet. In this case, the chain is considered stale. - */ - async isChainsStale() { - if (!isNewChainsStale) return false - - const connectorChains = config.chains.map((x) => x.id) - const namespaceChains = this.getNamespaceChainsIds() - if ( - namespaceChains.length && - !namespaceChains.some((id: number) => connectorChains.includes(id)) - ) - return false - - const requestedChains = await this.getRequestedChainsIds() - return !connectorChains.every((id) => requestedChains.includes(id)) - }, - async setRequestedChainsIds(chains) { - await config.storage?.setItem(this.requestedChainsStorageKey, chains) - }, - get requestedChainsStorageKey() { - return `${this.id}.requestedChains` as Properties['requestedChainsStorageKey'] - }, - })) -} - -function getResolveUri( - id: string, - uri: string, - mobile: { - native: string, - universal: string, - }, -): string { - return buildDeepLink({ id, mobile }, uri) -} \ No newline at end of file diff --git a/apps/app/lib/wallets/evm/constants.ts b/apps/app/lib/wallets/evm/constants.ts deleted file mode 100644 index fbc9e4a7..00000000 --- a/apps/app/lib/wallets/evm/constants.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const featuredWalletsIds = [ - 'metamask', - 'argent', - 'rainbow', - 'bitkeep', - 'okx-wallet', -] - -export const HIDDEN_WALLETCONNECT_ID = 'hiddenWalletConnect' \ No newline at end of file diff --git a/apps/app/lib/wallets/evm/useEVM.ts b/apps/app/lib/wallets/evm/useEVM.ts deleted file mode 100644 index 92679bd3..00000000 --- a/apps/app/lib/wallets/evm/useEVM.ts +++ /dev/null @@ -1,566 +0,0 @@ -import { useConfig, useConnect, useConnectors, useDisconnect, useSwitchAccount, Connector } from "wagmi" -import { Network, NetworkTypes } from "@/Models/Network" -import { useSettingsState } from "@/context/settings" -import KnownInternalNames from "../../knownIds" -import { resolveWalletConnectorIcon, resolveWalletConnectorIndex } from "../utils/resolveWalletIcon" -import { evmConnectorNameResolver } from "./KnownEVMConnectors" -import { useCallback, useEffect, useMemo } from "react" -import { CreateConnectorFn, getAccount, getConnections } from '@wagmi/core' -import { isMobile } from "../utils/isMobile" -import convertSvgComponentToBase64 from "@/components/utils/convertSvgComponentToBase64" -import { - InternalConnector, - RequestAdditionalConnectorsParams, - RequestAdditionalConnectorsResult, - Wallet, - WalletProvider, -} from "@/Models/WalletProvider" -import { useConnectModal, WalletModalConnector } from "@/components/WalletModal" -import sleep from "../utils/sleep" -import { HIDDEN_WALLETCONNECT_ID, featuredWalletsIds } from "@/lib/wallets/evm/constants" -import { useActiveEvmAccount } from "@/components/WalletProviders/ActiveEvmAccount" -import { - getDynamicWcMetadata, - setDynamicWcMetadata, - getPendingDynamicWcMetadata, - clearPendingDynamicWcMetadata, - setPendingMetadataForRegistry, -} from "@/lib/walletConnect/dynamicMetadata" -import { - DynamicWcMetadata, - getRegistryEntry, - type WalletConnectWalletBase, -} from "@/lib/walletConnect/types" -import { buildDeepLink } from "@/lib/walletConnect/buildDeepLink" -import { subscribeDisplayUri, type DisplayUriSource } from "@/lib/walletConnect/subscribeDisplayUri" -import { mapConnectError } from "@/lib/walletConnect/mapConnectError" -import { useAdditionalConnectors } from "@/lib/walletConnect/useAdditionalConnectors" -import { createRegistryConnector, type RegistryConnector } from "@/lib/walletConnect/createRegistryConnector" -import { LSConnector } from "./connectors/types" -import { explicitInjectedProviderDetected } from "./connectors/explicitInjectedProviderDetected" - -const name = 'EVM' -const id = 'eip155' - -const ethereumNames = [KnownInternalNames.Networks.EthereumMainnet, KnownInternalNames.Networks.EthereumSepolia] - -export default function useEVM(): WalletProvider { - const { networks } = useSettingsState() - const isMobilePlatform = useMemo(() => isMobile(), []); - - const asSourceSupportedNetworks = useMemo(() => [ - ...networks.filter(network => network.networkType === NetworkTypes.EVM).map(l => l.caip2Id), - ], [networks]) - - const withdrawalSupportedNetworks = useMemo(() => [ - ...asSourceSupportedNetworks, - ], [asSourceSupportedNetworks]) - - const autofillSupportedNetworks = useMemo(() => [ - ...asSourceSupportedNetworks, - ], [asSourceSupportedNetworks]) - - const isNotAvailableCondition = useCallback((connectorId: string | undefined, network: string | undefined, purpose?: "withdrawal" | "autofill" | "asSource") => { - if (!network) return false - if (!connectorId) return true - - if (!purpose) { - return resolveSupportedNetworks([network], connectorId).length === 0 - } - - const supportedNetworksByPurpose = resolveSupportedNetworks( - purpose === "withdrawal" ? withdrawalSupportedNetworks : - purpose === "autofill" ? autofillSupportedNetworks : - asSourceSupportedNetworks, - connectorId - ) - - return supportedNetworksByPurpose.length === 0 || !supportedNetworksByPurpose.includes(network) - }, [withdrawalSupportedNetworks, autofillSupportedNetworks, asSourceSupportedNetworks]) - - const { disconnectAsync } = useDisconnect() - const { switchAccountAsync } = useSwitchAccount() - const { activeConnection, setActiveAddress } = useActiveEvmAccount() - const allConnectors = useConnectors() - const config = useConfig() - const { connectAsync } = useConnect(); - - const { setSelectedConnector, isWalletModalOpen } = useConnectModal() - const { - browseConnectors: walletConnectConnectors, - browseMetadata: walletConnectBrowseMetadata, - requestAdditionalConnectors: requestRegistryConnectors, - addRecentConnector: addWalletConnectWallet, - } = useAdditionalConnectors(id) - - useEffect(() => { - if (isWalletModalOpen && !walletConnectBrowseMetadata.loaded) { - requestRegistryConnectors({ page: 1, pageSize: 40 }).catch((error) => console.warn('Failed to load WalletConnect wallets registry', error)) - } - }, [isWalletModalOpen, walletConnectBrowseMetadata.loaded, requestRegistryConnectors]) - - const disconnectWallet = useCallback(async (connectorName: string) => { - - try { - const connections = getConnections(config) - const connector = connections.find(c => c.connector.name.toLowerCase() === connectorName.toLowerCase())?.connector - await disconnectAsync({ - connector: connector - }) - } - catch (e) { - console.log(e) - } - }, [config, disconnectAsync]) - - const disconnectWallets = useCallback(() => { - try { - const connections = getConnections(config) - connections.forEach(async (connection) => { - disconnectWallet(connection.connector.name) - }) - } - catch (e) { - console.log(e) - } - }, [config, disconnectWallet]) - - const configuredConnectors: InternalConnector[] = useMemo(() => { - const activeBrowserWallet = explicitInjectedProviderDetected() && allConnectors.filter(c => c.id !== "com.immutable.passport" && c.type === "injected").length === 1 - const filterConnectors = wallet => ( - (wallet.id === "injected" ? activeBrowserWallet : true) && - wallet.id !== HIDDEN_WALLETCONNECT_ID - ) - - return dedupePreferInjected(allConnectors.filter(filterConnectors)) - .map(w => { - const walletConnectWallet = walletConnectConnectors.find(w2 => w2.name.toLowerCase().includes(w.name.toLowerCase()) || w2.id.toLowerCase() === w.id.toLowerCase()) - const isWalletConnectSupported = w.type === "walletConnect" || w.name === "WalletConnect" - const type = ((w.type == 'injected' && w.id !== 'com.immutable.passport') || w.id === "metaMaskSDK" || isWalletConnectSupported) ? w.type : "other" - return { - ...w, - order: resolveWalletConnectorIndex(w.id), - type: type, - isMobileSupported: isWalletConnectSupported, - installUrl: walletConnectWallet?.installUrl, - hasBrowserExtension: walletConnectWallet?.hasBrowserExtension, - extensionNotFound: walletConnectWallet?.hasBrowserExtension ? (type == 'walletConnect' && !isMobilePlatform) : false, - providerName: name - } - }) - }, [allConnectors, walletConnectConnectors, isMobilePlatform, name]) - - const { featured: featuredDynamicConnectors, additional: additionalConnectors } = useMemo(() => { - return splitRegistryConnectors(configuredConnectors, walletConnectConnectors, isMobilePlatform, name) - }, [configuredConnectors, walletConnectConnectors, isMobilePlatform, name]) - - const availableConnectors = useMemo(() => { - return [...configuredConnectors, ...featuredDynamicConnectors] - }, [configuredConnectors, featuredDynamicConnectors]) - - const requestAdditionalConnectors = useCallback(async (params: RequestAdditionalConnectorsParams = {}): Promise => { - const result = await requestRegistryConnectors(params) - return { - connectors: splitRegistryConnectors(configuredConnectors, result.connectors, isMobilePlatform, name).additional, - nextPage: result.nextPage, - totalCount: result.totalCount, - } - }, [configuredConnectors, requestRegistryConnectors, isMobilePlatform, name]) - - const connectWallet = useCallback(async (props: { connector: WalletModalConnector }) => { - let unsubscribeDisplayUri: (() => void) | undefined - let registryBase = undefined as ReturnType - try { - const internalConnector = props?.connector; - if (!internalConnector) return; - let connector = availableConnectors.find(w => w.id === internalConnector.id) as InternalConnector & LSConnector - let actualConnector = connector - - registryBase = getRegistryEntry(internalConnector) ?? getRegistryEntry(connector) - - if (registryBase) { - addWalletConnectWallet(registryBase) - - const wcConnector = allConnectors.find(c => c.id === HIDDEN_WALLETCONNECT_ID) - if (!wcConnector) throw new Error("Hidden WalletConnect connector not found") - actualConnector = wcConnector as InternalConnector & LSConnector - - const resolveURI = (uri: string) => buildDeepLink({ id: registryBase!.id, mobile: registryBase!.mobile }, uri) - connector = Object.assign({}, wcConnector, { - id: registryBase.id, - name: registryBase.name, - icon: registryBase.icon, - type: 'other', - isMobileSupported: true, - resolveURI, - }) as InternalConnector & LSConnector - } else if (!connector || typeof connector.disconnect !== 'function') { - throw new Error("Connector not found") - } - - const Icon = connector.icon || resolveWalletConnectorIcon({ connector: evmConnectorNameResolver(connector) }) - const base64Icon = typeof Icon == 'string' ? Icon : convertSvgComponentToBase64(Icon) - setSelectedConnector({ ...connector, icon: base64Icon }) - if (actualConnector.id !== "coinbaseWalletSDK" && typeof actualConnector.disconnect === 'function') { - await actualConnector.disconnect() - await disconnectAsync({ connector: actualConnector }) - } - - const resolveURI = connector.resolveURI as ((uri: string) => string | undefined) | undefined - const showQrCode = (internalConnector as any)?.showQrCode - const wantsMobileRedirect = isMobilePlatform && connector.id !== "walletConnect" && !!resolveURI - const wantsQrModal = !isMobilePlatform - && connector.type !== 'injected' - && !!connector.isMobileSupported - && connector.id !== "coinbaseWalletSDK" - && connector.id !== "metaMaskSDK" - - if (wantsQrModal) { - setSelectedConnector({ ...connector, icon: base64Icon, qr: { state: 'loading', value: undefined }, showQrCode }) - } - - if (wantsMobileRedirect || wantsQrModal) { - unsubscribeDisplayUri = subscribeDisplayUri({ - source: wagmiDisplayUriSource(actualConnector), - resolveURI, - isMobilePlatform, - onQr: (qr) => setSelectedConnector({ ...connector, icon: base64Icon, qr, showQrCode }), - }) - } - - // Always prime pending metadata for registry-origin connects so the - // `connectedWallets` re-render that happens between connect start and - // address resolution can render the right wallet name/icon. - const pendingMetadata = setPendingMetadataForRegistry(id, registryBase) - - try { - await connectAsync({ connector: actualConnector }); - } finally { - unsubscribeDisplayUri?.() - unsubscribeDisplayUri = undefined - } - - const activeAccount = await attemptGetAccount(config) - - if (registryBase && pendingMetadata && activeAccount.address) { - setDynamicWalletMetadata(activeAccount.address, pendingMetadata) - } - clearPendingDynamicWcMetadata(id) - - const connections = getConnections(config) - let connection = connections.find(c => c.connector.id === connector?.id) - - if (!connection) { - const accounts = await connector.getAccounts() - if (!accounts?.length) { - throw new Error('No accounts returned from wallet') - } - const chainId = await connector.getChainId() - connection = { - accounts: accounts as readonly [`0x${string}`, ...`0x${string}`[]], - chainId: Number(chainId), - connector - } - } - - const wallet = ResolveWallet({ - activeConnection: (activeAccount.connector && activeAccount.address) ? { - id: activeAccount.connector.id, - address: activeAccount.address - } : undefined, - connection, - disconnect: disconnectWallet, - networks, - supportedNetworks: { - asSource: asSourceSupportedNetworks, - autofill: autofillSupportedNetworks, - withdrawal: withdrawalSupportedNetworks - }, - providerName: name - }) - - return wallet - - } catch (e) { - throw mapConnectError(e) - } finally { - unsubscribeDisplayUri?.() - if (registryBase) clearPendingDynamicWcMetadata(id) - } - }, [availableConnectors, disconnectAsync, networks, asSourceSupportedNetworks, autofillSupportedNetworks, withdrawalSupportedNetworks, name, config, addWalletConnectWallet, allConnectors, connectAsync, isMobilePlatform, setSelectedConnector, disconnectWallet]) - - const connectedWalletsKey = [...config.state.connections.keys()].join('-') - - const resolvedConnectors: Wallet[] = useMemo(() => { - const connections = getConnections(config) - return connections.map((connection): Wallet | undefined => { - const wallet = ResolveWallet({ - activeConnection: (activeConnection?.id && activeConnection.address) ? { - id: activeConnection.id, - address: activeConnection.address - } : undefined, - connection, - disconnect: disconnectWallet, - networks, - supportedNetworks: { - asSource: asSourceSupportedNetworks, - autofill: autofillSupportedNetworks, - withdrawal: withdrawalSupportedNetworks - }, - providerName: name - }) - - return wallet - }).filter(w => w !== undefined) - }, [activeConnection, config, connectedWalletsKey, disconnectWallet, networks, asSourceSupportedNetworks, autofillSupportedNetworks, withdrawalSupportedNetworks, name]) - - const resolveWalletConnector = useCallback((wallet: Wallet) => { - const connections = getConnections(config) - return connections.find(c => c.connector.name === wallet.id)?.connector - ?? connections.find(c => - c.connector.id === HIDDEN_WALLETCONNECT_ID - && c.accounts.some(a => a.toLowerCase() === wallet.address.toLowerCase()) - )?.connector - }, [config]) - - const switchAccount = useCallback(async (wallet: Wallet, address: string) => { - const connector = resolveWalletConnector(wallet) - if (!connector) - throw new Error("Connector not found") - const { accounts } = await switchAccountAsync({ connector }) - const account = accounts.find(a => a.toLowerCase() === address.toLowerCase()) - if (!account) - throw new Error("Account not found") - setActiveAddress(account) - }, [resolveWalletConnector, switchAccountAsync]) - - const switchChain = async (wallet: Wallet, chainId: string | number) => { - const connector = resolveWalletConnector(wallet) - if (!connector) - throw new Error("Connector not found") - - if (connector?.switchChain) { - await connector.switchChain({ chainId: Number(chainId) }); - } else { - throw new Error("Switch chain method is not available on the connector"); - } - } - - const activeWallet = useMemo(() => resolvedConnectors.find(w => w.isActive), [resolvedConnectors]) - const providerIcon = useMemo(() => networks.find(n => ethereumNames.some(name => name === n.caip2Id))?.logoUrl, [networks]) - - const provider = useMemo(() => { - return { - connectWallet, - disconnectWallets, - switchAccount, - switchChain, - isNotAvailableCondition, - connectedWallets: resolvedConnectors, - activeWallet, - autofillSupportedNetworks, - withdrawalSupportedNetworks, - asSourceSupportedNetworks, - availableConnectors, - additionalConnectors, - name, - id, - providerIcon, - ready: allConnectors.length > 0, - requestAdditionalConnectors, - } - }, [connectWallet, disconnectWallets, switchAccount, switchChain, isNotAvailableCondition, resolvedConnectors, activeWallet, autofillSupportedNetworks, withdrawalSupportedNetworks, asSourceSupportedNetworks, availableConnectors, additionalConnectors, name, id, providerIcon, allConnectors.length, requestAdditionalConnectors]); - - return provider -} - - -type ResolveWalletProps = { - connection: { - accounts: readonly [`0x${string}`, ...`0x${string}`[]]; - chainId: number; - connector: Connector; - } | undefined, - networks: Network[], - activeConnection: { - id: string, - address: string - } | undefined, - disconnect: (connectorName: string) => Promise, - supportedNetworks: { - asSource: string[], - autofill: string[], - withdrawal: string[] - }, - providerName: string -} - -const ResolveWallet = (props: ResolveWalletProps): Wallet | undefined => { - const { activeConnection, connection, networks, disconnect, supportedNetworks, providerName } = props - const walletIsActive = activeConnection?.id === connection?.connector.id - const addresses = connection?.accounts as (string[] | undefined); - const activeAddress = activeConnection?.address - const connector = connection?.connector - if (!connector) - return undefined - const address = walletIsActive ? activeAddress : addresses?.[0] - if (!address) return undefined - - // Check if this is a dynamic wallet connected via hidden connector - const isHiddenConnector = connector.id === HIDDEN_WALLETCONNECT_ID - // Try address-based lookup first, fallback to pending metadata (for first connection) - const dynamicMetadata = isHiddenConnector - ? (getDynamicWalletMetadata(address) || getPendingDynamicWcMetadata(id)) - : null - - // Use dynamic metadata if available, otherwise use connector info - const walletName = dynamicMetadata?.name || connector.name - const walletId = dynamicMetadata?.id || connector.id - const walletIcon = dynamicMetadata?.icon || connector.icon - - const walletDisplayName = `${walletName} ${walletId === "com.immutable.passport" ? "" : " - EVM"}` - - const wallet: Wallet = { - id: walletName, - internalId: walletId, - isActive: walletIsActive, - address, - addresses: addresses || [address], - displayName: walletDisplayName, - providerName, - icon: resolveWalletConnectorIcon({ connector: evmConnectorNameResolver(connector), address, iconUrl: walletIcon }), - disconnect: () => disconnect(connector.name), - asSourceSupportedNetworks: resolveSupportedNetworks(supportedNetworks.asSource, walletId), - autofillSupportedNetworks: resolveSupportedNetworks(supportedNetworks.autofill, walletId), - withdrawalSupportedNetworks: resolveSupportedNetworks(supportedNetworks.withdrawal, walletId), - networkIcon: networks.find(n => ethereumNames.some(name => name === n.caip2Id))?.logoUrl, - metadata: { - deepLink: (connector as LSConnector).deepLink - } - } - - return wallet -} - -const resolveSupportedNetworks = (supportedNetworks: string[], connectorId: string) => { - - const specificNetworksConnectors = [ - { - id: "com.immutable.passport", - supportedNetworks: [ - ] - }, - { - id: "com.roninchain.wallet", - supportedNetworks: [ - KnownInternalNames.Networks.EthereumMainnet, - KnownInternalNames.Networks.BaseMainnet, - KnownInternalNames.Networks.ArbitrumMainnet - ] - }, - { - id: "app.phantom", - supportedNetworks: [ - KnownInternalNames.Networks.EthereumMainnet, - KnownInternalNames.Networks.BaseMainnet, - ] - } - ] - - const specificNetworks = specificNetworksConnectors.find(c => c.id === connectorId) - - if (specificNetworks) { - const values = specificNetworks.supportedNetworks.filter(n => supportedNetworks.some(name => name === n)) - return values - } - - return supportedNetworks - -} - -async function attemptGetAccount(config: Parameters[0], maxAttempts = 5) { - for (let attempt = 0; attempt < maxAttempts; attempt++) { - const account = getAccount(config); - - if (account.address) { - return account; - } - await sleep(500); - } - - return getAccount(config); -} -function dedupePreferInjected(arr: Connector[]) { - // Helper to strip off any prefix up to the last dot - const getBaseId = (id: string) => id.includes('.') ? id.split('.').pop()! : id; - - // Group items by normalized base‐id - const groups = arr.reduce[]>>((acc, obj) => { - const key = getBaseId(obj.name); - (acc[key] = acc[key] || []).push(obj); - return acc; - }, {}); - - // Within each group, if any are injected prefer them, otherwise keep all - return Object.values(groups).flatMap(group => { - const injected = group.filter(o => o.type === 'injected'); - return injected.length > 0 ? injected : group; - }); -} - -const isFeaturedRegistryWallet = (wallet: WalletConnectWalletBase) => ( - featuredWalletsIds.includes(wallet.id.toLowerCase()) - || featuredWalletsIds.some(featuredId => wallet.name.toLowerCase().includes(featuredId)) -) - -const splitRegistryConnectors = ( - configuredConnectors: InternalConnector[], - registryWallets: WalletConnectWalletBase[], - isMobilePlatform: boolean, - providerName: string -) => { - const existingConnectorKeys = new Set( - configuredConnectors.flatMap(connector => [connector.id.toLowerCase(), connector.name.toLowerCase()]) - ) - - return registryWallets.reduce<{ featured: RegistryConnector[], additional: RegistryConnector[] }>((acc, wallet) => { - if (existingConnectorKeys.has(wallet.id.toLowerCase()) || existingConnectorKeys.has(wallet.name.toLowerCase())) { - return acc - } - - const connector = createRegistryConnector(wallet, isMobilePlatform, providerName) - - if (isFeaturedRegistryWallet(wallet)) { - acc.featured.push(connector) - } else { - acc.additional.push(connector) - } - - return acc - }, { featured: [], additional: [] }) -} - -type DynamicWalletMetadata = DynamicWcMetadata - -const getDynamicWalletMetadata = (address: string) => getDynamicWcMetadata(id, address) -const setDynamicWalletMetadata = (address: string, metadata: DynamicWalletMetadata) => - setDynamicWcMetadata(id, address, metadata) - -// Adapts a wagmi `Connector` to the shared `DisplayUriSource` contract. -// Subscribes synchronously to the connector's emitter — wagmi connectors -// (including the custom one in ./connectors/resolveConnectors/walletConnect.ts) -// re-emit `display_uri` as a `message` event via `config.emitter.emit('message', -// { type: 'display_uri', data: uri })`. Registering synchronously avoids a race -// where `display_uri` fires before an async `getProvider()` resolves, which -// would leave the QR modal stuck in the `loading` state. -const wagmiDisplayUriSource = (connector: Connector): DisplayUriSource => ({ - onDisplayUri(listener) { - const handler = ({ type, data }: { type: string; data?: unknown }) => { - if (type === 'display_uri' && typeof data === 'string') listener(data) - } - connector.emitter.on('message', handler) - return () => { - try { connector.emitter.off('message', handler) } catch { /* noop */ } - } - }, -}) \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/Bako.ts b/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/Bako.ts deleted file mode 100644 index 40b3f27a..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/Bako.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { urlJoin } from "fuels"; - -export class BAKO_STATE { - static state: { last_req?: Date, data: boolean, req_count: number, period_start?: Date } = { data: false, req_count: 0 } - static period_durtion: number = 10_000 -} - -export class BakoRequestAPI { - baseUrl: string; - - constructor(baseUrl: string) { - this.baseUrl = baseUrl; - } - - async get(pathname: string) { - - if (!pathname.includes('/state')) { - const data = await fetch(urlJoin(this.baseUrl, pathname)).then((res) => - res.json(), - ); - return data; - } - - const period_elapsed = BAKO_STATE.state?.period_start && new Date().getTime() - BAKO_STATE.state?.period_start?.getTime() > BAKO_STATE.period_durtion; - const skip = BAKO_STATE.state?.last_req && new Date().getTime() - BAKO_STATE.state?.last_req?.getTime() < 1000 * 60 * 2 && period_elapsed; - - if (skip) - return BAKO_STATE.state?.data; - - const data = await fetch(urlJoin(this.baseUrl, pathname)).then((res) => - res.json(), - ); - const count = BAKO_STATE.state?.req_count || 0; - BAKO_STATE.state = { last_req: new Date(), data, req_count: count + 1, period_start: period_elapsed ? new Date() : BAKO_STATE.state?.period_start || new Date() }; - return data; - } - - async delete(pathname: string) { - await fetch(urlJoin(this.baseUrl, pathname), { - method: 'DELETE', - }); - } -} diff --git a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/BakoSafeConnector.ts b/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/BakoSafeConnector.ts deleted file mode 100644 index 8d046c06..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/BakoSafeConnector.ts +++ /dev/null @@ -1,394 +0,0 @@ -import { - type Asset, - type FuelABI, - FuelConnector, - FuelConnectorEventTypes, - type Network, - Provider, - type StartConsolidateCoins, - type StorageAbstract, - type TransactionRequestLike, -} from 'fuels'; - -import { BakoStorage } from './BakoSafeStorage'; -import { DAppWindow } from './DAPPWindow'; -import { SocketClient } from './SocketClient'; -import { - APP_DESCRIPTION, - APP_IMAGE_DARK, - APP_IMAGE_LIGHT, - APP_NAME, - APP_NETWORK, - APP_URL, - APP_VERSION, - HAS_WINDOW, - HOST_URL, - IS_SAFARI, - SESSION_ID, - WINDOW, -} from './constants'; -import { RequestAPI } from './request'; -import { - type BakoSafeConnectorConfig, - BakoSafeConnectorEvents, - type IResponseAuthConfirmed, - type IResponseTxCofirmed, -} from './types'; - -export class BakoSafeConnector extends FuelConnector { - name = APP_NAME; - metadata = { - image: { - light: APP_IMAGE_LIGHT, - dark: APP_IMAGE_DARK, - }, - install: { - action: APP_URL, - link: APP_URL, - description: APP_DESCRIPTION, - }, - }; - installed = !IS_SAFARI; - connected = false; - external = false; - - private readonly appUrl: string; - private readonly host: string; - private readonly api: RequestAPI; - private setupReady?: boolean; - private socket?: SocketClient; - private sessionId?: string; - private dAppWindow?: DAppWindow; - private storage?: StorageAbstract; - - constructor(config?: BakoSafeConnectorConfig) { - super(); - this.host = config?.host ?? HOST_URL; - this.appUrl = config?.appUrl ?? APP_URL; - this.api = config?.api ?? new RequestAPI(this.host); - this.storage = this.getStorage(config?.storage); - this.setupReady = false; - } - - // ============================================================ - // Bako Safe application specific methods - // ============================================================ - private getStorage(storage?: StorageAbstract) { - const _storage = storage ?? WINDOW.localStorage ?? new BakoStorage(); - if (!_storage) { - throw new Error('No storage provided'); - } - - return _storage; - } - - private async getSessionId() { - let sessionId: string = (await this.storage?.getItem(SESSION_ID)) || ''; - if (!sessionId) { - sessionId = crypto.randomUUID(); - await this.storage?.setItem(SESSION_ID, sessionId); - } - return sessionId; - } - - private checkWindow() { - // timeout to open - const openInterval = setInterval(() => { - const isOpen = this.dAppWindow?.isOpen; - if (!isOpen) { - this.emit(BakoSafeConnectorEvents.CLIENT_DISCONNECTED, {}); - clearInterval(openInterval); - } - }, 2000); - - // timeout to close - const interval = setInterval(() => { - const isOpen = this.dAppWindow?.opned?.closed; - if (isOpen) { - this.emit(BakoSafeConnectorEvents.CLIENT_DISCONNECTED, {}); - clearInterval(interval); - } - }, 300); - } - - /** - * [important] - * this.socket.emit -> emit message to the server - * this.emit -> emit message to the dApp client - */ - - private async setup() { - if (!HAS_WINDOW) return; - if (this.socket) this.socket.checkConnection(); - if (this.setupReady) return; - - this.setupReady = true; - - const sessionId = await this.getSessionId(); - this.sessionId = sessionId; - - this.socket = SocketClient.create({ - sessionId, - events: this, - }); - - this.dAppWindow = new DAppWindow({ - sessionId, - height: 800, - width: 450, - appUrl: this.appUrl, - request_id: this.socket.request_id, - }); - - await this.requestConnectionState(); - } - - private async requestConnectionState() { - return new Promise((resolve) => { - if (!this.socket) return; - - this.socket.server.emit(BakoSafeConnectorEvents.CONNECTION_STATE); - - this.socket.server.once( - BakoSafeConnectorEvents.CONNECTION_STATE, - async ({ data }: { data: boolean }) => { - this.connected = data; - this.emit(this.events.connection, data); - resolve(); - }, - ); - }); - } - - // ============================================================ - // Connector methods - // ============================================================ - async connect() { - await this.setup(); - - return new Promise((resolve, reject) => { - if (this.connected) { - resolve(true); - return; - } - - this.dAppWindow?.open('/', reject); - this.checkWindow(); - - this.once(BakoSafeConnectorEvents.CLIENT_DISCONNECTED, () => { - this.dAppWindow?.close(); - reject(false); - }); - - this.once( - BakoSafeConnectorEvents.AUTH_CONFIRMED, - async ({ data }: { data: IResponseAuthConfirmed }) => { - await this.requestConnectionState(); - - this.emit(this.events.accounts, await this.accounts()); - this.emit(this.events.currentAccount, await this.currentAccount()); - - this.dAppWindow?.close(); - resolve(data.connected); - }, - ); - }); - } - - /* - * @param {string} address - The address to sign the transaction - * @param {Transaction} transaction - The transaction to send - * - * @returns {string} - The transaction id - */ - async sendTransaction( - _address: string, - _transaction: TransactionRequestLike, - ) { - return new Promise((resolve, reject) => { - this.dAppWindow?.open('/dapp/transaction', reject); - this.checkWindow(); - - const onClientConnected = () => { - this.socket?.server.emit(BakoSafeConnectorEvents.TX_PENDING, { - _transaction, - _address, - }); - }; - - // @ts-ignore - this.on(BakoSafeConnectorEvents.CLIENT_CONNECTED, onClientConnected); - - this.once(BakoSafeConnectorEvents.CLIENT_DISCONNECTED, () => { - this.dAppWindow?.close(); - this.removeListener( - BakoSafeConnectorEvents.CLIENT_CONNECTED, - onClientConnected, - ); - reject(new Error('Client disconnected')); - }); - - this.once(BakoSafeConnectorEvents.TX_TIMEOUT, () => { - this.dAppWindow?.close(); - this.removeListener( - BakoSafeConnectorEvents.CLIENT_CONNECTED, - onClientConnected, - ); - reject(new Error('Transaction timeout')); - }); - - this.once( - BakoSafeConnectorEvents.TX_CONFIRMED, - ({ data }: { data: IResponseTxCofirmed }) => { - this.removeListener( - BakoSafeConnectorEvents.CLIENT_CONNECTED, - onClientConnected, - ); - this.dAppWindow?.close(); - resolve(data.id.startsWith('0x') ? data.id : `0x${data.id}`); - }, - ); - }); - } - - async selectNetwork(_network: Network): Promise { - return new Promise((resolve, reject) => { - this.dAppWindow?.open('/dapp/network', reject); - this.checkWindow(); - - const onClientConnected = () => { - this.socket?.server.emit(BakoSafeConnectorEvents.CHANGE_NETWORK, { - _network, - }); - }; - - // @ts-ignore - this.on(BakoSafeConnectorEvents.CLIENT_CONNECTED, onClientConnected); - - this.once(BakoSafeConnectorEvents.CLIENT_DISCONNECTED, () => { - this.dAppWindow?.close(); - this.removeListener( - BakoSafeConnectorEvents.CLIENT_CONNECTED, - onClientConnected, - ); - reject(new Error('Client disconnected')); - }); - - this.once(BakoSafeConnectorEvents.NETWORK_CHANGED, async () => { - const network = await this.currentNetwork(); - - this.emit(this.events.networks, [network]); - this.emit(this.events.currentNetwork, network); - - this.dAppWindow?.close(); - this.removeListener( - BakoSafeConnectorEvents.CLIENT_CONNECTED, - onClientConnected, - ); - - resolve(true); - }); - }); - } - - async ping() { - if (IS_SAFARI) { - return false; - } - await this.setup(); - return this.setupReady ?? false; - } - - async version() { - return { - app: APP_VERSION, - network: APP_NETWORK, - }; - } - - async isConnected() { - await this.setup(); - return this.connected; - } - - async accounts() { - const data = await this.api.get(`/connections/${this.sessionId}/accounts`); - - const acc = Array.isArray(data) ? data : []; - return acc; - } - - async currentAccount() { - const data = await this.api.get( - `/connections/${this.sessionId}/currentAccount`, - ); - - const isInvalid = data && JSON.stringify(data) === JSON.stringify({}); - - return isInvalid ? null : data; - } - - async disconnect() { - await this.api.delete(`/connections/${this.sessionId}`); - await this.requestConnectionState(); - this.emit(this.events.accounts, []); - this.emit(this.events.currentAccount, null); - return false; - } - - async currentNetwork(): Promise { - const data = await this.api.get( - `/connections/${this.sessionId}/currentNetwork`, - ); - - const provider = new Provider(data); - - return { - url: provider.url, - chainId: await provider.getChainId(), - }; - } - - async networks(): Promise> { - return [await this.currentNetwork()]; - } - - async assets(): Promise { - return []; - } - - async signMessage(_address: string, _message: string): Promise { - throw new Error('Method not implemented.'); - } - - async addAssets(_assets: Asset[]): Promise { - throw new Error('Method not implemented.'); - } - - async addAsset(_assets: Asset): Promise { - throw new Error('Method not implemented.'); - } - - async addNetwork(_networkUrl: string): Promise { - throw new Error('Method not implemented.'); - } - - async addABI(_contractId: string, _abi: FuelABI): Promise { - throw new Error('Method not implemented.'); - } - - async getABI(_id: string): Promise { - throw new Error('Method not implemented.'); - } - - async hasABI(_id: string): Promise { - throw new Error('Method not implemented.'); - } - - /** - * @inheritdoc - */ - async startConsolidation(opts: StartConsolidateCoins): Promise { - this.emit(FuelConnectorEventTypes.consolidateCoins, opts); - } -} diff --git a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/BakoSafeStorage.ts b/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/BakoSafeStorage.ts deleted file mode 100644 index b8000b59..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/BakoSafeStorage.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { StorageAbstract } from 'fuels'; - -export class BakoStorage extends StorageAbstract { - data: { [key: string]: string } = {}; - - async getItem(key: string): Promise { - return this.data[key]; - } - - async setItem(key: string, value: string): Promise { - this.data[key] = value; - - return; - } - - async removeItem(key: string): Promise { - delete this.data[key]; - } - - async clear(): Promise { - this.data = {}; - } -} \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/DAPPWindow.ts b/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/DAPPWindow.ts deleted file mode 100644 index 2e99a876..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/DAPPWindow.ts +++ /dev/null @@ -1,158 +0,0 @@ -import { WINDOW } from './constants'; - -type PopupConfig = { - appUrl: string; - height: number; - width: number; - sessionId: string; - request_id: string; -}; - -export class DAppWindow { - isMobile: boolean = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); - isSafariBrowser: boolean = /^((?!chrome|android).)*safari/i.test( - navigator.userAgent, - ); - request_id: string; - isOpen = false; - opned: Window | null = null; - - constructor(private config: PopupConfig) { - this.request_id = config.request_id; - } - - private get popupConfig() { - const { height, width } = this.config; - return { - top: WINDOW.innerHeight / 2 - height / 2, - left: WINDOW.innerWidth / 2 - width / 2, - width, - height: - !this.isMobile && WINDOW.innerHeight >= height - ? height - : WINDOW.innerHeight, - }; - } - - open(method: string, reject: (e: Error) => void) { - if (this.isOpen) reject(new Error('Window is already open')); - - if (!this.isSafariBrowser) { - // if is not safari, we can use popup for both cases - this.makePopup(method); - } - // if (this.isSafariBrowser && isConnection) { - // // to use webauthn, we need a new WINDOW - // this.makeLink(method); - // } - if (this.isSafariBrowser) { - // && !isConnection) { - // to confirm tx, we need a new popup - this.makeFrame(method, true); - } - - return; - } - - close() { - const frame = document.getElementById(`${this.config.sessionId}-iframe`); - const backdrop = document.getElementById( - `${this.config.sessionId}-backdrop`, - ); - if (frame) document.body.removeChild(frame); - if (backdrop) document.body.removeChild(backdrop); - if (this.opned) this.opned.close(); - this.isOpen = false; - } - - makeLink(method: string) { - const link = `${this.config.appUrl}${method}${this.queryString}`; - const a = document.createElement('a'); - a.setAttribute('href', link); - a.setAttribute('target', '_blank'); - a.click(); - this.isOpen = true; - } - - makeFrame(method: string, isSafari = false) { - const w = this.small; - //bako frame - const frame = document.createElement('iframe'); - frame.id = `${this.config.sessionId}-iframe`; - frame.src = `${this.config.appUrl}${method}${this.queryString}${ - isSafari ? '&byConnector=true' : '' - }`; - frame.style.position = 'fixed'; - frame.style.zIndex = '99999999'; - frame.style.top = `${w.top}`; - frame.style.left = `${w.left}`; - frame.style.width = w.width; - frame.style.height = w.height; - frame.style.borderRadius = '16px'; - - //backdrop - const backdrop = document.createElement('div'); - backdrop.id = `${this.config.sessionId}-backdrop`; - backdrop.style.position = 'fixed'; - backdrop.style.top = '0'; - backdrop.style.left = '0'; - backdrop.style.width = '100%'; - backdrop.style.height = '100%'; - backdrop.style.backgroundColor = 'rgba(0,0,0,0.5)'; - backdrop.style.zIndex = '99999998'; - backdrop.addEventListener('click', () => this.close()); // if user click on backdrop, close the frame - - document.body.appendChild(backdrop); - document.body.appendChild(frame); - this.isOpen = true; - } - - makePopup(method: string) { - const link = `${this.config.appUrl}${method}${this.queryString}`; - const popup = WINDOW.open( - link, - 'popup', - `width=${this.popupConfig.width}, height=${this.popupConfig.height}, top=${this.popupConfig.top}, left=${this.popupConfig.left}`, - ); - if (popup) this.opned = popup; - this.isOpen = true; - return popup; - } - - private get queryString() { - const { sessionId } = this.config; - return `?sessionId=${sessionId}&origin=${WINDOW.location.origin}&name=${WINDOW.document.title}&request_id=${this.request_id}`; - } - - private get small() { - // todo: update this to calculate by screen size changes - const breakponint = { - md: { - top: 0, - left: 0, - limit: 650, - width: '100%', - height: '100%', - }, // 100% - lg: { - top: `${(WINDOW.innerHeight - WINDOW.innerHeight * 0.7) / 2}px`, - left: `${(WINDOW.innerWidth - WINDOW.innerWidth * 0.5) / 2}px`, - limit: 1024, - width: '50%', - height: '70%', - }, // 75% - xl: { - top: `${(WINDOW.innerHeight - 650) / 2}px`, - left: `${(WINDOW.innerWidth - 500) / 2}px`, - limit: 1440, - height: '650px', - width: '500px', - }, // 400px - }; - return WINDOW.innerWidth < breakponint.md.limit - ? breakponint.md - : WINDOW.innerWidth < breakponint.lg.limit - ? breakponint.lg - : breakponint.xl; - } -} \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/SocketClient.ts b/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/SocketClient.ts deleted file mode 100644 index 96a4150d..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/SocketClient.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { type Socket, io } from 'socket.io-client'; -import type { BakoSafeConnector } from './BakoSafeConnector'; -import { APP_URL, SOCKET_URL } from './constants'; -import { WINDOW } from './constants'; -import { - BakoSafeConnectorEvents, - BakoSafeUsernames, - type ICreateClientSocket, - type IResponseAuthConfirmed, - type IResponseTxCofirmed, - type ISocketAuth, - type ISocketMessage, -} from './types'; - -const DEFAULT_SOCKET_AUTH: Omit = { - username: BakoSafeUsernames.CONNECTOR, - data: new Date(), - origin: WINDOW.origin ?? APP_URL, -}; - -export class SocketClient { - private static instance: SocketClient | null = null; - private connecting = false; - server: Socket; - events: BakoSafeConnector; - request_id: string; - - private constructor({ sessionId, events }: ICreateClientSocket) { - this.request_id = crypto.randomUUID(); - - this.server = io(SOCKET_URL, { - auth: { - ...DEFAULT_SOCKET_AUTH, - sessionId, - request_id: this.request_id, - }, - autoConnect: false, - reconnection: true, - reconnectionAttempts: 5, - reconnectionDelay: 1000, - }); - - this.events = events; - this.setupEventListeners(); - this.connect(); - } - - private setupEventListeners(): void { - this.server.on('connect', () => { - this.connecting = false; - }); - - this.server.on('connect_error', () => { - this.connecting = false; - }); - - this.server.on( - BakoSafeConnectorEvents.DEFAULT, - (data: ISocketMessage) => { - if (data.to === DEFAULT_SOCKET_AUTH.username) { - this.events.emit(data.type, { - from: data.username, - data: data.data, - }); - } - }, - ); - } - - static create(options: ICreateClientSocket) { - if (!SocketClient.instance) { - SocketClient.instance = new SocketClient(options); - } - - return SocketClient.instance; - } - - connect(): void { - if (this.isConnected || this.connecting) return; - - this.connecting = true; - this.server.connect(); - } - - get isConnected(): boolean { - return this.server.connected; - } - - checkConnection(): void { - if (this.isConnected || this.connecting) return; - this.connect(); - } -} diff --git a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/constants.ts b/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/constants.ts deleted file mode 100644 index 6df2bacd..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/constants.ts +++ /dev/null @@ -1,23 +0,0 @@ -export const APP_VERSION = '0.0.0'; -export const APP_NETWORK = '0.0.0'; -export const APP_NAME = 'Bako Safe'; -export const APP_DESCRIPTION = - 'Bako Safe is a connector to safe.bako.global, a non-custodial vault for your crypto assets.'; -export const APP_IMAGE_DARK = - 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiByeD0iOCIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEzMjQ5XzE2MjI4MCkiLz4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzMjQ5XzE2MjI4MCkiPgo8cGF0aCBkPSJNMTMgMjUuOTE2N0wzNyAzNy44NjcxTDI1LjAwMjQgMTguOTg5M0wxMyAyNS45MTY3WiIgZmlsbD0iI0Y1RjVGNSIvPgo8cGF0aCBkPSJNMzMuODg2NCAyMi4yMTgyTDI0Ljk5NzYgMTcuMDg2NVY1LjEzNTc0TDEzIDEyLjA2MjhWMjUuOTE2TDI0Ljk5NzYgMTguOTg4OVYzMC45Mzk2TDEzIDM3Ljg2NjhMMjQuOTk3NiA0NC43OTM4TDM2Ljk5NTIgMzcuODY2OFYyNy42MDMzQzM2Ljk5NTIgMjUuMzgxNiAzNS44MDk4IDIzLjMyOTEgMzMuODg2NCAyMi4yMTgyWiIgZmlsbD0iIzFFMUYyMiIvPgo8L2c+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTMyNDlfMTYyMjgwIiB4MT0iMCIgeTE9IjAiIHgyPSI1Mi4zMjg1IiB5Mj0iNDcuNDMxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkMwMTAiLz4KPHN0b3Agb2Zmc2V0PSIwLjQ4IiBzdG9wLWNvbG9yPSIjRUJBMzEyIi8+CjxzdG9wIG9mZnNldD0iMC43MSIgc3RvcC1jb2xvcj0iI0QzODAxNSIvPgo8c3RvcCBvZmZzZXQ9IjAuOTkiIHN0b3AtY29sb3I9IiNCMjRGMTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMzI0OV8xNjIyODAiPgo8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iNDAiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMyA1KSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo='; -export const APP_IMAGE_LIGHT = - 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiByeD0iOCIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEzMjQ5XzE2MjI4MCkiLz4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzMjQ5XzE2MjI4MCkiPgo8cGF0aCBkPSJNMTMgMjUuOTE2N0wzNyAzNy44NjcxTDI1LjAwMjQgMTguOTg5M0wxMyAyNS45MTY3WiIgZmlsbD0iI0Y1RjVGNSIvPgo8cGF0aCBkPSJNMzMuODg2NCAyMi4yMTgyTDI0Ljk5NzYgMTcuMDg2NVY1LjEzNTc0TDEzIDEyLjA2MjhWMjUuOTE2TDI0Ljk5NzYgMTguOTg4OVYzMC45Mzk2TDEzIDM3Ljg2NjhMMjQuOTk3NiA0NC43OTM4TDM2Ljk5NTIgMzcuODY2OFYyNy42MDMzQzM2Ljk5NTIgMjUuMzgxNiAzNS44MDk4IDIzLjMyOTEgMzMuODg2NCAyMi4yMTgyWiIgZmlsbD0iIzFFMUYyMiIvPgo8L2c+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTMyNDlfMTYyMjgwIiB4MT0iMCIgeTE9IjAiIHgyPSI1Mi4zMjg1IiB5Mj0iNDcuNDMxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkMwMTAiLz4KPHN0b3Agb2Zmc2V0PSIwLjQ4IiBzdG9wLWNvbG9yPSIjRUJBMzEyIi8+CjxzdG9wIG9mZnNldD0iMC43MSIgc3RvcC1jb2xvcj0iI0QzODAxNSIvPgo8c3RvcCBvZmZzZXQ9IjAuOTkiIHN0b3AtY29sb3I9IiNCMjRGMTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMzI0OV8xNjIyODAiPgo8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iNDAiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMyA1KSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo='; - -export const APP_URL = 'https://safe.bako.global'; -export const HOST_URL = 'https://api.bako.global'; -export const SOCKET_URL = 'https://api.bako.global'; - -// Window object -export const HAS_WINDOW = typeof window !== 'undefined'; -// biome-ignore lint/suspicious/noExplicitAny: -export const WINDOW: any = HAS_WINDOW ? window : {}; -export const IS_SAFARI = /^((?!chrome|android).)*safari/i.test( - WINDOW.navigator?.userAgent ?? '', -); -//storage -export const SESSION_ID = 'sessionId'; \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/index.ts b/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/index.ts deleted file mode 100644 index 0e6ed6ca..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './BakoSafeConnector'; \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/request.ts b/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/request.ts deleted file mode 100644 index 1a3353c2..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/request.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { urlJoin } from 'fuels'; - -export class RequestAPI { - baseUrl: string; - - constructor(baseUrl: string) { - this.baseUrl = baseUrl; - } - - async get(pathname: string) { - const data = await fetch(urlJoin(this.baseUrl, pathname)).then((res) => - res.json(), - ); - return data; - } - - async delete(pathname: string) { - await fetch(urlJoin(this.baseUrl, pathname), { - method: 'DELETE', - }); - } -} \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/types.ts b/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/types.ts deleted file mode 100644 index e4ac0234..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/bako-safe/types.ts +++ /dev/null @@ -1,73 +0,0 @@ -import type { StorageAbstract, TransactionRequestLike } from 'fuels'; -import type { BakoSafeConnector } from './BakoSafeConnector'; -import type { RequestAPI } from './request'; - -export enum BakoSafeConnectorEvents { - //default - DEFAULT = 'message', - - //client - CLIENT_DISCONNECTED = '[CLIENT_DISCONNECTED]', - CLIENT_CONNECTED = '[CONNECTED]', - - //transactions - TX_PENDING = '[TX_EVENT_REQUESTED]', - TX_CONFIRMED = '[TX_EVENT_CONFIRMED]', - TX_TIMEOUT = '[TX_EVENT_TIMEOUT]', - - //switchNetwork - CHANGE_NETWORK = '[CHANGE_NETWORK]', - NETWORK_CHANGED = '[NETWORK_CHANGED]', - - //auth - AUTH_CONFIRMED = '[AUTH_CONFIRMED]', - - CONNECTION_STATE = '[CONNECTION_STATE]', - DISCONNECT = '[DISCONNECT]', -} - -export enum BakoSafeUsernames { - CONNECTOR = '[CONNECTOR]', - CLIENT = '[UI]', - SERVER = '[API]', -} - -export type BakoSafeConnectorConfig = { - host?: string; - appUrl?: string; - storage?: StorageAbstract; - api?: RequestAPI; -}; - -export interface ISocketAuth { - username: string; - data: Date; - origin: string; - sessionId: string; -} - -export interface ISocketMessage { - username: BakoSafeUsernames; - room: string; - to: BakoSafeUsernames; - type: BakoSafeConnectorEvents; - data: T; -} - -export interface ICreateClientSocket { - sessionId: string; - events: BakoSafeConnector; -} - -export interface IRequestTxPending { - _transaction: TransactionRequestLike; - _address: string; -} - -export interface IResponseTxCofirmed { - id: string; -} - -export interface IResponseAuthConfirmed { - connected: boolean; -} \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/FuelWalletConnector.ts b/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/FuelWalletConnector.ts deleted file mode 100644 index 07e4479f..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/FuelWalletConnector.ts +++ /dev/null @@ -1,303 +0,0 @@ -import { - Address, - type Asset, - type AssetFuel, - type ConnectorMetadata, - type FuelABI, - FuelConnector, - FuelConnectorEventType, - FuelConnectorEventTypes, - type Network, - Provider, - type SelectNetworkArguments, - type TransactionRequestLike, - type Version, - transactionRequestify, - } from 'fuels'; - import type { JSONRPCRequest } from 'json-rpc-2.0'; - import { JSONRPCClient } from 'json-rpc-2.0'; - - import { - APP_IMAGE, - CONNECTOR_SCRIPT, - CONTENT_SCRIPT_NAME, - EVENT_MESSAGE, - } from './constants'; - import { - type CommunicationMessage, - type EventMessage, - MessageTypes, - type ResponseMessage, - } from './types'; - - export class FuelWalletConnector extends FuelConnector { - name = ''; - connected = false; - installed = false; - external = false; - events = FuelConnectorEventTypes; - metadata: ConnectorMetadata = { - image: APP_IMAGE, - install: { - action: 'Install', - description: - 'To connect your Fuel Wallet, install the browser extension.', - link: 'https://chrome.google.com/webstore/detail/fuel-wallet/dldjpboieedgcmpkchcjcbijingjcgok', - }, - }; - - readonly client: JSONRPCClient; - - constructor(name = 'Fuel Wallet') { - super(); - this.name = name; - this.setMaxListeners(100); - this.client = new JSONRPCClient( - this.sendRequest.bind(this), - this.createRequestId, - ); - this.setupListener(); - this.setupConnector(); - } - - /** - * ============================================================ - * Application communication methods - * ============================================================ - */ - private async setupConnector() { - if (typeof window !== 'undefined') { - this.ping() - .then(() => { - window.dispatchEvent( - new CustomEvent(FuelConnectorEventType, { detail: this }), - ); - }) - .catch(() => {}); - } - } - - private acceptMessage(message: MessageEvent): boolean { - const { data: event } = message; - return ( - message.origin === window.origin && - event.type !== MessageTypes.request && - event.connectorName === this.name && - event.target === CONNECTOR_SCRIPT - ); - } - - private setupListener() { - if (typeof window === 'undefined') return; - window.addEventListener(EVENT_MESSAGE, this.onMessage.bind(this)); - } - - private createRequestId(): string { - return crypto.randomUUID(); - } - - private postMessage(message: CommunicationMessage, origin?: string) { - window.postMessage(message, origin || window.origin); - } - - private async sendRequest(request: JSONRPCRequest | null) { - if (!request) return; - this.postMessage({ - type: MessageTypes.request, - target: CONTENT_SCRIPT_NAME, - connectorName: this.name, - request, - }); - } - - private onResponse(message: ResponseMessage): void { - this.client.receive(message.response); - } - - private onEvent(message: EventMessage): void { - message.events.forEach((eventData) => { - if (eventData.event === 'start') { - this.setupConnector(); - } else { - this.emit(eventData.event, ...eventData.params); - } - }); - } - - private onMessage = (message: MessageEvent) => { - const messageFroze = Object.freeze(message); - if (!this.acceptMessage(messageFroze)) return; - const { data: event } = messageFroze; - this.onCommunicationMessage(event); - }; - - private onCommunicationMessage = (message: CommunicationMessage) => { - switch (message.type) { - case MessageTypes.response: - this.onResponse(message); - break; - case MessageTypes.event: - this.onEvent(message); - break; - default: - } - }; - - /** - * ============================================================ - * Connector methods - * ============================================================ - */ - async ping(): Promise { - return this.client.timeout(800).request('ping', {}); - } - - async isConnected(): Promise { - // If the wallet not exists or not connected, return false - try { - return await this.client.request('isConnected', {}); - } catch { - return false; - } - } - - async connect(): Promise { - return this.client.request('connect', {}); - } - - async disconnect(): Promise { - return this.client.request('disconnect', {}); - } - - async accounts(): Promise> { - const accounts = await this.client.request('accounts', {}); - return accounts; - } - - async currentAccount(): Promise { - const account = await this.client.request('currentAccount', {}); - if (!account) return null; - return Address.fromDynamicInput(account).toString(); - } - - async signMessage(address: string, message: string): Promise { - if (!message.trim()) { - throw new Error('Message is required'); - } - return this.client.request('signMessage', { - address, - message, - }); - } - - async sendTransaction( - address: string, - transaction: TransactionRequestLike, - ): Promise { - if (!transaction) { - throw new Error('Transaction is required'); - } - // Transform transaction object to a transaction request - const txRequest = transactionRequestify(transaction); - - /** - * @todo We should remove this once the chainId standard start to be used and chainId is required - * to be correct according to the network the transaction wants to target. - */ - const network = await this.currentNetwork(); - const provider = { - url: network.url, - }; - - return this.client.request('sendTransaction', { - address, - transaction: JSON.stringify(txRequest), - provider, - }); - } - - async assets(): Promise> { - return this.client.request('assets', {}); - } - - async addAsset(asset: Asset): Promise { - return this.addAssets([asset]); - } - - async addAssets(assets: Asset[]): Promise { - /** - * @todo: Remove this once Fuel Wallet supports assets with multiple networks - */ - const assetsData = assets.map((asset) => { - const fuelNetworkAsset = asset.networks.find( - (n) => n.type === 'fuel', - ) as AssetFuel; - if (!fuelNetworkAsset) { - throw new Error('Asset for Fuel Network not found!'); - } - return { - ...asset, - imageUrl: asset.icon, - decimals: fuelNetworkAsset.decimals, - assetId: fuelNetworkAsset.assetId, - }; - }); - return this.client.request('addAssets', { - assets: assetsData, - }); - } - - async addABI(contractId: string, abi: FuelABI): Promise { - return this.client.request('addAbi', { - abiMap: { - [contractId]: abi, - }, - }); - } - - async getABI(contractId: string): Promise { - return this.client.request('getAbi', { - contractId, - }); - } - - async hasABI(contractId: string): Promise { - const abi = await this.getABI(contractId); - return !!abi; - } - - async currentNetwork(): Promise { - return this.client.request('network', {}); - } - - async selectNetwork(network: SelectNetworkArguments): Promise { - return this.client.request('selectNetwork', { - network, - }); - } - - async networks(): Promise { - return this.client.request('networks', {}); - } - - async addNetwork(networkUrl: string): Promise { - /** - * @todo: Remove fetch provider once Fuel Wallet supports adding networks - * by URL - */ - const provider = new Provider(networkUrl); - return this.client.request('addNetwork', { - network: { - url: provider.url, - name: (await provider.getChain()).name, - }, - }); - } - - async version(): Promise { - return this.client.request('version', { - app: '0.0.0', - network: '0.0.0', - }); - } - } \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/constants.ts b/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/constants.ts deleted file mode 100644 index e2b876a2..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/constants.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const CONNECTOR_SCRIPT = 'FuelConnectorScript'; -export const CONTENT_SCRIPT_NAME = 'FuelContentScript'; -export const EVENT_MESSAGE = 'message'; - -export const APP_IMAGE = - 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCA0OTEgNDk2IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRoZW1lPSJkYXJrIj48dGl0bGU+RnVlbCBXYWxsZXQgSWNvbjwvdGl0bGU+PHJlY3QgeD0iNDIuNTUzNSIgeT0iMjguMzQzOCIgd2lkdGg9IjM5Ny4xNTQiIGhlaWdodD0iNDI1LjE0MyIgZmlsbD0iIzA4MDgwOCI+PC9yZWN0PjxwYXRoIGQ9Ik0zMi42MTc4IDBDMTQuNTY5NyAwIDAgMTQuNzMyNyAwIDMyLjk4MjZWNDk2SDQwNS44NTJDNDE5LjU2OCA0OTYgNDMyLjc1OSA0OTAuNDkyIDQ0Mi40NzMgNDgwLjY3TDQ3NS4zNTMgNDQ3LjQyMkM0ODUuMDY2IDQzNy42IDQ5MC41MTMgNDI0LjI2MSA0OTAuNTEzIDQxMC4zOTFWMEgzMi42MTc4Wk0zMjAuMjcxIDYzLjc3NTJMMTYwLjcyNiAyMjUuMTA1QzE1Ni43ODggMjI5LjA4NiAxNTEuNDA3IDIzMS4zNDMgMTQ1LjgyOCAyMzEuMzQzQzEzNy42OSAyMzEuMzQzIDEzMC4yMDggMjI2LjU2NSAxMjYuNzMgMjE5LjEzMkw2NC45MDc0IDg3LjAwMjRDNTkuODUzOSA3Ni4xODUyIDY3LjY2MzggNjMuNzc1MiA3OS40NzcxIDYzLjc3NTJIMzIwLjI3MVpNNjMuMDY5NyA0MzIuMjI1VjI3NS4yNzVDNjMuMDY5NyAyNjYuOTE0IDY5Ljc2MzkgMjYwLjE0NSA3OC4wMzMyIDI2MC4xNDVIMjMzLjI0Nkw2My4wNjk3IDQzMi4yMjVaTTI0Ni4xMSAyMzEuMzQzSDE5NC43MjJMMzQ5LjM0NSA3NC45OTA2QzM1Ni40MzMgNjcuODIzNCAzNjYuMDggNjMuNzc1MiAzNzYuMTIxIDYzLjc3NTJINDI3LjUwOUwyNzIuODg3IDIyMC4xMjdDMjY1Ljc5OSAyMjcuMjk1IDI1Ni4xNTEgMjMxLjM0MyAyNDYuMTEgMjMxLjM0M1oiIGZpbGw9IiMwMEY1OEMiPjwvcGF0aD48L3N2Zz4='; \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/index.ts b/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/index.ts deleted file mode 100644 index c105d1e1..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './constants'; -export { FuelWalletConnector } from './FuelWalletConnector'; -export * from './types'; \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/types.ts b/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/types.ts deleted file mode 100644 index 9da73f87..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/fuel-wallet/types.ts +++ /dev/null @@ -1,62 +0,0 @@ -import type { JSONRPCRequest, JSONRPCResponse } from 'json-rpc-2.0'; - -export enum MessageTypes { - ping = 'ping', - uiEvent = 'uiEvent', - event = 'event', - request = 'request', - response = 'response', - removeConnection = 'removeConnection', -} - -export interface MessageSender { - id?: string | undefined; - origin?: string | undefined; - tab?: { - id?: number | undefined; - index?: number | undefined; - windowId?: number | undefined; - url?: string | undefined; - title?: string | undefined; - favIconUrl?: string | undefined; - }; -} - -type BaseEvent = { - readonly target: string; - readonly connectorName?: string; - readonly id?: string; - readonly sender?: MessageSender; -} & T; - -export type EventMessageEvents = Array<{ - event: string; - params: Array; -}>; - -export type UIEventMessage = BaseEvent<{ - readonly type: MessageTypes.uiEvent; - readonly ready: boolean; - readonly session: string; -}>; - -export type RequestMessage = BaseEvent<{ - readonly type: MessageTypes.request; - readonly request: JSONRPCRequest; -}>; - -export type ResponseMessage = BaseEvent<{ - readonly type: MessageTypes.response; - readonly response: JSONRPCResponse; -}>; - -export type EventMessage = BaseEvent<{ - readonly type: MessageTypes.event; - readonly events: T; -}>; - -export type CommunicationMessage = - | UIEventMessage - | RequestMessage - | ResponseMessage - | EventMessage; \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/fuelet-wallet/FueletWalletConnector.ts b/apps/app/lib/wallets/fuel/lib/connectors/fuelet-wallet/FueletWalletConnector.ts deleted file mode 100644 index bd0c33d8..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/fuelet-wallet/FueletWalletConnector.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { ConnectorMetadata } from 'fuels'; -import { APP_IMAGE_DARK, APP_IMAGE_LIGHT } from './constants'; -import { FuelWalletConnector } from '../fuel-wallet'; - -export class FueletWalletConnector extends FuelWalletConnector { - name = 'Fuelet Wallet'; - metadata: ConnectorMetadata = { - image: { - light: APP_IMAGE_LIGHT, - dark: APP_IMAGE_DARK, - }, - install: { - action: 'Install', - description: 'Install Fuelet Wallet in order to connect it.', - link: 'https://fuelet.app/download/', - }, - }; - - constructor() { - super('Fuelet Wallet'); - } -} \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/fuelet-wallet/constants.ts b/apps/app/lib/wallets/fuel/lib/connectors/fuelet-wallet/constants.ts deleted file mode 100644 index 8276ecfe..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/fuelet-wallet/constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const APP_IMAGE_DARK = - 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+RnVlbGV0IEljb248L3RpdGxlPjxwYXRoIGQ9Ik0yMCA0MEMxNC45MzU1IDQwIDEwLjMxNDUgMzguMTE0IDYuNzkwNSAzNS4wMTA1TDE4LjE0NiAyNi45MDdDMTguODQ1IDI2LjQwODUgMTkuODA2NSAyNi45NjQ1IDE5LjcyMiAyNy44MTk1TDE5LjI3NDUgMzIuMzYwNUMxOS4xODIgMzMuMjk1IDIwLjMxMjUgMzMuODI5NSAyMC45NzY1IDMzLjE2NTVMMjcuMDcxIDI3LjA3MUMzMS4wNjIgMjMuMDggMzAuOTc0NSAxNi41NTU1IDI2LjgwODUgMTIuNjc1NUMyMi44NDA1IDguOTggMTYuNTkzNSA5LjI2NCAxMi43NTk1IDEzLjA5ODVMNi44NTMgMTkuMDA0NUM2LjE4NyAxOS42NzEgNi43Mjc1IDIwLjgwNDUgNy42NjQ1IDIwLjcwNjVMMTIuMjA5IDIwLjIzMUMxMy4wNjU1IDIwLjE0MTUgMTMuNjI3NSAyMS4xMDUgMTMuMTI3IDIxLjgwNjVMNC45ODk1IDMzLjIwOTVDMS44ODYgMjkuNjg1NSAwIDI1LjA2NDUgMCAyMEMwIDguOTU0NSA4Ljk1NDUgMCAyMCAwQzMxLjA0NTUgMCA0MCA4Ljk1NDUgNDAgMjBDNDAgMzEuMDQ1NSAzMS4wNDU1IDQwIDIwIDQwWiIgZmlsbD0id2hpdGUiPjwvcGF0aD48L3N2Zz4='; -export const APP_IMAGE_LIGHT = - 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+RnVlbGV0IEljb248L3RpdGxlPjxwYXRoIGQ9Ik0yMCA0MEMxNC45MzU1IDQwIDEwLjMxNDUgMzguMTE0IDYuNzkwNSAzNS4wMTA1TDE4LjE0NiAyNi45MDdDMTguODQ1IDI2LjQwODUgMTkuODA2NSAyNi45NjQ1IDE5LjcyMiAyNy44MTk1TDE5LjI3NDUgMzIuMzYwNUMxOS4xODIgMzMuMjk1IDIwLjMxMjUgMzMuODI5NSAyMC45NzY1IDMzLjE2NTVMMjcuMDcxIDI3LjA3MUMzMS4wNjIgMjMuMDggMzAuOTc0NSAxNi41NTU1IDI2LjgwODUgMTIuNjc1NUMyMi44NDA1IDguOTggMTYuNTkzNSA5LjI2NCAxMi43NTk1IDEzLjA5ODVMNi44NTMgMTkuMDA0NUM2LjE4NyAxOS42NzEgNi43Mjc1IDIwLjgwNDUgNy42NjQ1IDIwLjcwNjVMMTIuMjA5IDIwLjIzMUMxMy4wNjU1IDIwLjE0MTUgMTMuNjI3NSAyMS4xMDUgMTMuMTI3IDIxLjgwNjVMNC45ODk1IDMzLjIwOTVDMS44ODYgMjkuNjg1NSAwIDI1LjA2NDUgMCAyMEMwIDguOTU0NSA4Ljk1NDUgMCAyMCAwQzMxLjA0NTUgMCA0MCA4Ljk1NDUgNDAgMjBDNDAgMzEuMDQ1NSAzMS4wNDU1IDQwIDIwIDQwWiIgZmlsbD0iIzI4MjgyRiI+PC9wYXRoPjwvc3ZnPg=='; \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/lib/connectors/fuelet-wallet/index.ts b/apps/app/lib/wallets/fuel/lib/connectors/fuelet-wallet/index.ts deleted file mode 100644 index fa048585..00000000 --- a/apps/app/lib/wallets/fuel/lib/connectors/fuelet-wallet/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { FueletWalletConnector } from './FueletWalletConnector'; \ No newline at end of file diff --git a/apps/app/lib/wallets/fuel/useFuel.ts b/apps/app/lib/wallets/fuel/useFuel.ts deleted file mode 100644 index a3081623..00000000 --- a/apps/app/lib/wallets/fuel/useFuel.ts +++ /dev/null @@ -1,249 +0,0 @@ -import { - useConnectors, - useFuel as useGlobalFuel, -} from '@fuels/react'; -import { - FuelConnector, - FuelConnectorEventTypes, - Address, -} from 'fuels'; -import { resolveWalletConnectorIcon } from "../utils/resolveWalletIcon"; -import { InternalConnector, Wallet, WalletProvider } from "@/Models/WalletProvider"; -import { useEffect, useMemo } from "react"; -import { useSettingsState } from "@/context/settings"; -import { BAKO_STATE } from "./lib/connectors/bako-safe/Bako"; -import sleep from "../utils/sleep"; -import { useWalletStore } from "@/stores/walletStore"; -import { NetworkTypes } from "@/Models/Network"; - -const name = 'Fuel' -const id = 'fuel' - -export default function useFuel(): WalletProvider { - const { connectors } = useConnectors() - const { fuel } = useGlobalFuel() - const { networks } = useSettingsState() - const commonSupportedNetworks = useMemo( - () => networks - .filter(network => network.networkType === NetworkTypes.Fuel) - .map(network => network.caip2Id) - .filter((caip2Id): caip2Id is string => - typeof caip2Id === 'string' && caip2Id.length > 0 - ), - [networks], - ) - - const wallets = useWalletStore((state) => state.connectedWallets) - const addWallet = useWalletStore((state) => state.connectWallet) - const removeWallet = useWalletStore((state) => state.disconnectWallet) - const connectedWallets = wallets.filter(wallet => wallet.providerName === name) - - const connectWallet = async ({ connector }: { connector: InternalConnector }) => { - const attemptConnection = async (isRetry: boolean = false): Promise => { - try { - - const fuelConnector = connectors.find(w => w.name === connector.name) - - BAKO_STATE.state.last_req = undefined - BAKO_STATE.period_durtion = 120_000 - await fuelConnector?.connect() - - const addresses = (await fuelConnector?.accounts())?.map(a => new Address(a).toB256()) - - if (addresses?.length && fuelConnector) { - - const result = await resolveFuelWallet({ - address: addresses[0], - addresses: addresses, - connector: fuelConnector, - disconnectWallet, - name, - commonSupportedNetworks, - networkIcon: networks.find(n => commonSupportedNetworks.some(name => name === n.caip2Id))?.logoUrl - }) - - addWallet(result) - await switchAccount(result) - return result - } - - } - catch (e) { - // For Bako Safe, retry once if error is 'false' (connection timeout/user closed popup) - if (connector.name === 'Bako Safe' && e === false && !isRetry) { - console.log('Bako Safe connection failed with false, retrying once...') - await sleep(1000) - return await attemptConnection(true) - } - console.log(e) - throw e instanceof Error ? e : new Error(String(e)) - } - } - - return await attemptConnection() - } - - const disconnectWallet = async (connectorName: string) => { - try { - const fuelConnector = connectors.find(c => c.name === connectorName) - - if (!fuelConnector) throw new Error('Connector not found') - - await fuelConnector.disconnect() - } - catch (e) { - console.log(e) - } finally { - removeWallet(name, connectorName) - } - } - - const disconnectWallets = async () => { - try { - BAKO_STATE.state.last_req = undefined - BAKO_STATE.period_durtion = 10_000 - for (const connector of connectors.filter(c => c.connected)) { - await connector.disconnect() - removeWallet(name) - } - } - catch (e) { - console.log(e) - } - } - - const switchAccount = async (wallet: Wallet) => { - try { - const res = await fuel.selectConnector(wallet.id) - - if (!res) throw new Error('Could not switch account') - } catch (e) { - console.log(e) - } - } - - const switchChain = async (connector: Wallet, chainId: string | number) => { - try { - const fuelConnector = connectors.find(c => c.name === connector.id) - - if (!fuelConnector) throw new Error('Connector not found') - - const res = await fuelConnector.selectNetwork({ chainId: Number(chainId) }) - - if (!res) throw new Error('Could not switch chain') - } catch (e) { - console.log(e) - } - } - - const connectedConnectors = useMemo(() => connectors.filter(w => w.connected), [connectors]) - - useEffect(() => { - (async () => { - resolveWallet() - })() - }, [connectedConnectors]) - - const resolveWallet = async () => { - for (const connector of connectedConnectors) { - try { - const addresses = (await connector.accounts()).map(a => Address.fromAddressOrString(a).toB256()) - if (connector.connected && addresses.length > 0) { - const w = await resolveFuelWallet({ - address: addresses?.[0], - addresses, - connector, - disconnectWallet, - name, - commonSupportedNetworks: commonSupportedNetworks, - networkIcon: networks.find(n => commonSupportedNetworks.some(name => name === n.caip2Id))?.logoUrl - }) - addWallet(w) - } - - } catch (e) { - console.log(e) - } - } - }; - - useEffect(() => { - const disposers = connectors.map((c) => { - const handler = async () => { - await resolveWallet() - }; - - c.on(FuelConnectorEventTypes.currentNetwork, handler); - return { connector: c, handler }; - }); - - return () => { - disposers.forEach(({ connector, handler }) => { - connector.off(FuelConnectorEventTypes.currentNetwork, handler); - }); - }; - }, [connectors]); - - const availableConnectors: InternalConnector[] = connectors.map(c => { - const isInstalled = c.installed && !('dAppWindow' in c) - return { - name: c.name, - id: c.name, - type: isInstalled ? 'injected' : 'other', - installUrl: c.metadata.install.link, - extensionNotFound: !c.installed, - providerName: name - } - }) - - const provider: WalletProvider = { - connectWallet, - disconnectWallets, - switchAccount, - switchChain, - availableConnectors, - autofillSupportedNetworks: commonSupportedNetworks, - withdrawalSupportedNetworks: commonSupportedNetworks, - asSourceSupportedNetworks: commonSupportedNetworks, - activeWallet: connectedWallets?.[0], - connectedWallets, - name, - id, - ready: connectors.length > 0 - } - - return provider -} - -type ResolveWalletProps = { - address: string, - addresses: string[], - connector: FuelConnector, - disconnectWallet: (connectorName: string) => Promise, - name: string, - commonSupportedNetworks: string[], - networkIcon?: string, -} - -const resolveFuelWallet = async ({ address, addresses, commonSupportedNetworks, connector, disconnectWallet, name, networkIcon }: ResolveWalletProps) => { - const network = await connector.currentNetwork() - const chainId = network.chainId ?? (network.url.toLowerCase().includes('testnet') ? 0 : 9889) - - const w: Wallet = { - id: connector.name, - address: address, - addresses: addresses, - isActive: true, - chainId: chainId, - disconnect: () => disconnectWallet(connector.name), - displayName: `${connector.name} - Fuel`, - providerName: name, - icon: resolveWalletConnectorIcon({ connector: connector.name, address: address, iconUrl: typeof connector.metadata.image === 'string' ? connector.metadata.image : (connector.metadata.image?.light.startsWith('data:') ? connector.metadata.image.light : `data:image/svg+xml;base64,${connector.metadata.image && btoa(connector.metadata.image.light)}`) }), - autofillSupportedNetworks: commonSupportedNetworks, - withdrawalSupportedNetworks: commonSupportedNetworks, - asSourceSupportedNetworks: commonSupportedNetworks, - networkIcon - } - - return w -} diff --git a/apps/app/lib/wallets/layerswap/getLayerswapProviders.ts b/apps/app/lib/wallets/layerswap/getLayerswapProviders.ts new file mode 100644 index 00000000..5732d013 --- /dev/null +++ b/apps/app/lib/wallets/layerswap/getLayerswapProviders.ts @@ -0,0 +1,97 @@ +import type { Config } from "wagmi"; +import { createEVMProvider } from "@layerswap/wallet-evm"; +import type { WalletProvider, WalletProviderDescriptor, WalletWrapper } from "@layerswap/wallet-core/types"; +import { NetworkTypes, type ExtendedNetwork } from "@/Models/Network"; +import AppSettings from "@/lib/AppSettings"; + +// This is a public, client-side-only project ID for WalletConnect wallet discovery. +// It has no authentication or authorization capability and is safe to expose in bundles. +export const WALLET_CONNECT_CONFIGS = { + projectId: AppSettings.WalletConnectProjectId, + name: 'Train Protocol', + description: 'Train Protocol App', + url: 'https://train.tech/', + icons: ['https://app.train.tech/symbol.png'], +}; + +type Provider = WalletProvider | WalletProviderDescriptor | WalletWrapper; + +export type DefaultWalletConfig = { + networks: ExtendedNetwork[]; + wagmiConfig: Config; + walletConnect?: typeof WALLET_CONNECT_CONFIGS; +}; + +function hasStorageKey(key: string) { + try { + return typeof window !== "undefined" && window.localStorage.getItem(key) !== null; + } catch { + return false; + } +} + +function readStorageJson(key: string): unknown { + try { + const raw = typeof window === "undefined" ? null : window.localStorage.getItem(key); + return raw ? JSON.parse(raw) : undefined; + } catch { + return undefined; + } +} + +export function getLayerswapProviders(config: DefaultWalletConfig) { + const { networks, wagmiConfig, walletConnect: walletConnectConfigs = WALLET_CONNECT_CONFIGS } = config; + + const networkIdsOfType = (matches: (network: ExtendedNetwork) => boolean) => networks.filter(matches).map(network => network.caip2Id); + const FUEL_NETWORKS = networkIdsOfType(network => network.networkType.toLowerCase() === "fuel"); + const SVM_NETWORKS = networkIdsOfType(network => network.networkType === NetworkTypes.Solana); + const STARKNET_NETWORKS = networkIdsOfType(network => network.networkType === NetworkTypes.Starknet); + const TRON_NETWORKS = networkIdsOfType(network => network.networkType.toLowerCase() === "tron"); + + return [ + createEVMProvider({ + walletConnectConfigs, + wagmiConfig, + ethereumChainIds: [1, 11155111], + }), + { + id: "fuel", + name: "Fuel", + autofillSupportedNetworks: FUEL_NETWORKS, + withdrawalSupportedNetworks: FUEL_NETWORKS, + asSourceSupportedNetworks: FUEL_NETWORKS, + hasPersistedSession: () => hasStorageKey("fuel-current-connector"), + loadProvider: async () => (await import("@layerswap/wallet-fuel")).createFuelProvider(), + }, + { + id: "solana", + name: "Solana", + autofillSupportedNetworks: SVM_NETWORKS, + withdrawalSupportedNetworks: SVM_NETWORKS, + asSourceSupportedNetworks: SVM_NETWORKS, + hasPersistedSession: () => hasStorageKey("walletAdapterPreviouslySelectedName"), + loadProvider: async () => (await import("@layerswap/wallet-svm")).createSVMProvider({ walletConnectConfigs }), + }, + { + id: "starknet", + name: "Starknet", + autofillSupportedNetworks: STARKNET_NETWORKS, + withdrawalSupportedNetworks: STARKNET_NETWORKS, + asSourceSupportedNetworks: STARKNET_NETWORKS, + hasPersistedSession: () => { + const state = readStorageJson("ls-starknet-accounts") as { state?: { activeWalletAddress?: string; starknetAccounts?: Record } } | undefined; + return !!state?.state?.activeWalletAddress || Object.keys(state?.state?.starknetAccounts ?? {}).length > 0; + }, + loadProvider: async () => (await import("@layerswap/wallet-starknet")).createStarknetProvider(), + }, + { + id: "tron", + name: "Tron", + autofillSupportedNetworks: TRON_NETWORKS, + withdrawalSupportedNetworks: TRON_NETWORKS, + asSourceSupportedNetworks: TRON_NETWORKS, + hasPersistedSession: () => typeof readStorageJson("tronAdapterName") === "string", + loadProvider: async () => (await import("@layerswap/wallet-tron")).createTronProvider(), + }, + ] satisfies Provider[]; +} diff --git a/apps/app/lib/wallets/layerswap/networkAdapter.ts b/apps/app/lib/wallets/layerswap/networkAdapter.ts new file mode 100644 index 00000000..74001522 --- /dev/null +++ b/apps/app/lib/wallets/layerswap/networkAdapter.ts @@ -0,0 +1,25 @@ +import { defineNetworkAdapter } from "@layerswap/wallet-core"; +import { getNativeToken, NetworkTypes, type ExtendedNetwork } from "@/Models/Network"; +import { getNetworkRpcUrls } from "@/lib/rpc/resolveNetworkRpcUrl"; + +export const walletNetworkAdapter = defineNetworkAdapter({ + getId: network => network.caip2Id, + getDisplayName: network => network.displayName, + getChainId: network => network.chainId, + getRpcUrls: network => getNetworkRpcUrls(network), + getIcon: network => network.logoUrl, + getTransactionExplorerUrl: network => network.explorerUrlTemplate?.transaction, + getAccountExplorerUrl: network => network.explorerUrlTemplate?.address, + getNativeCurrency: network => { + const token = getNativeToken(network); + return token && { symbol: token.symbol, decimals: token.decimals }; + }, + getMulticallAddress: network => network.contracts?.find(contract => contract.type === "Multicall")?.address, + isEvmNetwork: network => network.networkType === NetworkTypes.EVM, + isSolanaNetwork: network => network.networkType === NetworkTypes.Solana, + isStarknetNetwork: network => network.networkType === NetworkTypes.Starknet, + isTronNetwork: network => network.networkType.toLowerCase() === "tron", + isBitcoinNetwork: network => network.networkType.toLowerCase() === "bitcoin", + isTonNetwork: network => network.networkType === NetworkTypes.TON, + isFuelNetwork: network => network.networkType.toLowerCase() === "fuel", +}); diff --git a/apps/app/lib/wallets/solana/KnownSolanaConnectors.tsx b/apps/app/lib/wallets/solana/KnownSolanaConnectors.tsx deleted file mode 100644 index bbeb96fe..00000000 --- a/apps/app/lib/wallets/solana/KnownSolanaConnectors.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import CoinbaseIcon from "../../../components/Icons/Wallets/Coinbase" -import Phantom from "../../../components/Icons/Wallets/Phantom" -import Solflare from "../../../components/Icons/Wallets/Solflare" -import WalletConnectIcon from "../../../components/Icons/Wallets/WalletConnect" - -const KnownSolanaConnectors = [ - { - id: 'solflare', - icon: Solflare - }, - { - id: 'phantom', - icon: Phantom - }, - { - id: 'walletconnect', - icon: WalletConnectIcon - }, - { - id: 'coinbase', - icon: CoinbaseIcon - } -] - -export default KnownSolanaConnectors \ No newline at end of file diff --git a/apps/app/lib/wallets/solana/connectors/SolanaWalletConnectAdapter.ts b/apps/app/lib/wallets/solana/connectors/SolanaWalletConnectAdapter.ts deleted file mode 100644 index ecc660f3..00000000 --- a/apps/app/lib/wallets/solana/connectors/SolanaWalletConnectAdapter.ts +++ /dev/null @@ -1,388 +0,0 @@ -import { - BaseSignerWalletAdapter, - WalletAdapterNetwork, - WalletDisconnectionError, - WalletName, - WalletNotConnectedError, - WalletNotReadyError, - WalletReadyState, - WalletSignMessageError, - WalletSignTransactionError, - isVersionedTransaction, -} from "@solana/wallet-adapter-base" -import { PublicKey, Transaction, VersionedTransaction, TransactionVersion } from "@solana/web3.js" -import type { UniversalProvider as UniversalProviderClass } from "@walletconnect/universal-provider" -import type { SessionTypes, SignClientTypes } from "@walletconnect/types" -import { parseAccountId } from "@walletconnect/utils" -import base58 from "bs58" - -type UniversalProviderType = InstanceType - -const Methods = { - signTransaction: "solana_signTransaction", - signMessage: "solana_signMessage", - signAndSendTransaction: "solana_signAndSendTransaction", - signAllTransactions: "solana_signAllTransactions", -} as const - -const ChainIDs = { - Mainnet: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - Devnet: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", - DeprecatedMainnet: "solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ", - DeprecatedDevnet: "solana:8E9rvCKLFQia2Y35HXjjpWzj8weVo44K", -} as const - -const WALLET_CONNECT_ICON = - 'data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE4NSIgdmlld0JveD0iMCAwIDMwMCAxODUiIHdpZHRoPSIzMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTYxLjQzODU0MjkgMzYuMjU2MjYxMmM0OC45MTEyMjQxLTQ3Ljg4ODE2NjMgMTI4LjIxMTk4NzEtNDcuODg4MTY2MyAxNzcuMTIzMjA5MSAwbDUuODg2NTQ1IDUuNzYzNDE3NGMyLjQ0NTU2MSAyLjM5NDQwODEgMi40NDU1NjEgNi4yNzY1MTEyIDAgOC42NzA5MjA0bC0yMC4xMzY2OTUgMTkuNzE1NTAzYy0xLjIyMjc4MSAxLjE5NzIwNTEtMy4yMDUzIDEuMTk3MjA1MS00LjQyODA4MSAwbC04LjEwMDU4NC03LjkzMTE0NzljLTM0LjEyMTY5Mi0zMy40MDc5ODE3LTg5LjQ0Mzg4Ni0zMy40MDc5ODE3LTEyMy41NjU1Nzg4IDBsLTguNjc1MDU2MiA4LjQ5MzYwNTFjLTEuMjIyNzgxNiAxLjE5NzIwNDEtMy4yMDUzMDEgMS4xOTcyMDQxLTQuNDI4MDgwNiAwbC0yMC4xMzY2OTQ5LTE5LjcxNTUwMzFjLTIuNDQ1NTYxMi0yLjM5NDQwOTItMi40NDU1NjEyLTYuMjc2NTEyMiAwLTguNjcwOTIwNHptMjE4Ljc2Nzc5NjEgNDAuNzczNzQ0OSAxNy45MjE2OTcgMTcuNTQ2ODk3YzIuNDQ1NTQ5IDIuMzk0Mzk2OSAyLjQ0NTU2MyA2LjI3NjQ3NjkuMDAwMDMxIDguNjcwODg5OWwtODAuODEwMTcxIDc5LjEyMTEzNGMtMi40NDU1NDQgMi4zOTQ0MjYtNi40MTA1ODIgMi4zOTQ0NTMtOC44NTYxNi4wMDAwNjItLjAwMDAxLS4wMDAwMTAtLjAwMDAyMi0uMDAwMDIyLS4wMDAwMzItLjAwMDAzMmwtNTcuMzU0MTQzLTU2LjE1NDU3MmMtLjYxMTM5LS41OTg2MDItMS42MDI2NS0uNTk4NjAyLTIuMjE0MDQgMC0uMDAwMDA0LjAwMDAwNC0uMDAwMDA3LjAwMDAwOC0uMDAwMDExLjAwMDAxMWwtNTcuMzUyOTIxMiA1Ni4xNTQ1MzFjLTIuNDQ1NTM2OCAyLjM5NDQzMi02LjQxMDU3NTUgMi4zOTQ0NzItOC44NTYxNjEyLjAwMDA4Ny0uMDAwMDE0My0uMDAwMDE0LS4wMDAwMjk2LS4wMDAwMjgtLjAwMDA0NDktLjAwMDA0NGwtODAuODEyNDE5NDMtNzkuMTIyMTg1Yy0yLjQ0NTU2MDIxLTIuMzk0NDA4LTIuNDQ1NTYwMjEtNi4yNzY1MTE1IDAtOC42NzA5MTk3bDE3LjkyMTcyOTYzLTE3LjU0Njg2NzNjMi40NDU1NjAyLTIuMzk0NDA4MiA2LjQxMDU5ODktMi4zOTQ0MDgyIDguODU2MTYwMiAwbDU3LjM1NDk3NzUgNTYuMTU1MzU3Yy42MTEzOTA4LjU5ODYwMiAxLjYwMjY0OS41OTg2MDIgMi4yMTQwMzk4IDAgLjAwMDAwOTItLjAwMDAwOS4wMDAwMTc0LS4wMDAwMTcuMDAwMDI2NS0uMDAwMDI0bDU3LjM1MjEwMzEtNTYuMTU1MzMzYzIuNDQ1NTA1LTIuMzk0NDYzMyA2LjQxMDU0NC0yLjM5NDU1MzEgOC44NTYxNjEtLjAwMDIuMDAwMDM0LjAwMDAzMzYuMDAwMDY4LjAwMDA2NzMuMDAwMTAxLjAwMDEwMWw1Ny4zNTQ5MDIgNTYuMTU1NDMyYy42MTEzOS41OTg2MDEgMS42MDI2NS41OTg2MDEgMi4yMTQwNCAwbDU3LjM1Mzk3NS01Ni4xNTQzMjQ5YzIuNDQ1NTYxLTIuMzk0NDA5MiA2LjQxMDU5OS0yLjM5NDQwOTIgOC44NTYxNiAweiIgZmlsbD0iIzNiOTlmYyIvPjwvc3ZnPg==' - -export const SolanaWalletConnectWalletName = "WalletConnect" as WalletName<"WalletConnect"> - -export type SolanaWalletConnectAdapterConfig = { - network: WalletAdapterNetwork.Mainnet | WalletAdapterNetwork.Devnet - options: SignClientTypes.Options -} - -type DisplayUriListener = (uri: string) => void - -export class SolanaWalletConnectAdapter extends BaseSignerWalletAdapter { - name = SolanaWalletConnectWalletName - url = "https://walletconnect.org" - icon = WALLET_CONNECT_ICON - - readonly supportedTransactionVersions: ReadonlySet = new Set(["legacy" as TransactionVersion, 0 as TransactionVersion]) - - private _publicKey: PublicKey | null - private _connecting: boolean - private _provider: UniversalProviderType | undefined - private _providerInitPromise: Promise | undefined - private _session: SessionTypes.Struct | undefined - private _config: SolanaWalletConnectAdapterConfig - private _readyState: WalletReadyState - private _network: string - private _onSessionDelete: () => void - private _displayUriListeners: Set = new Set() - private _internalDisplayUriHandler: ((uri: string) => void) | undefined - - constructor(config: SolanaWalletConnectAdapterConfig) { - super() - this._config = config - this._publicKey = null - this._connecting = false - this._readyState = typeof window === "undefined" ? WalletReadyState.Unsupported : WalletReadyState.Loadable - this._network = config.network === WalletAdapterNetwork.Mainnet ? ChainIDs.Mainnet : ChainIDs.Devnet - this._onSessionDelete = () => { - this.disconnect() - } - } - - get publicKey(): PublicKey | null { - return this._publicKey - } - - get connecting(): boolean { - return this._connecting - } - - get readyState(): WalletReadyState { - return this._readyState - } - - onDisplayUri(listener: DisplayUriListener): () => void { - this._displayUriListeners.add(listener) - return () => this._displayUriListeners.delete(listener) - } - - /** - * Fire-and-forget hint that the user is about to connect — eagerly runs - * the `UniversalProvider.init()` so the actual `connect()` doesn't block - * on a cold import + init when the user clicks a WC wallet tile. - */ - warmup(): void { - if (this._readyState !== WalletReadyState.Loadable) return - if (this._provider || this._providerInitPromise) return - this.getProvider().catch(() => { /* next connect() will surface the real error */ }) - } - - private async getProvider(): Promise { - if (this._provider) return this._provider - if (!this._providerInitPromise) { - this._providerInitPromise = (async () => { - try { - const { UniversalProvider: UP } = await import("@walletconnect/universal-provider") - const provider = await UP.init(this._config.options) - this._provider = provider - if (!this._internalDisplayUriHandler) { - this._internalDisplayUriHandler = (uri: string) => { - for (const cb of this._displayUriListeners) { - try { cb(uri) } catch (e) { /* swallow listener errors */ } - } - } - provider.on("display_uri", this._internalDisplayUriHandler) - } - return provider - } finally { - this._providerInitPromise = undefined - } - })() - } - return this._providerInitPromise - } - - /** - * Override the base `autoConnect` so we never start a NEW WC pairing from - * wallet-adapter-react's auto-reconnect path. A new pairing requires the - * user to scan a QR, which isn't available during auto-reconnect; calling - * `provider.connect()` there hangs with `_connecting = true` until the - * internal timeout, blocking any subsequent user-initiated connect - * (`connect()` early-returns on `this.connecting`). Only resume an - * existing session here; a real connect always goes through `connect()`. - */ - async autoConnect(): Promise { - if (this._readyState !== WalletReadyState.Loadable) return - try { - const provider = await this.getProvider() - if (provider.session) await this.connect() - } catch { /* silent — the user can still connect manually */ } - } - - async connect(): Promise { - try { - if (this.connected || this.connecting) return - if (this._readyState !== WalletReadyState.Loadable) throw new WalletNotReadyError() - - this._connecting = true - const provider = await this.getProvider() - - // Reuse existing session when available - const existing = provider.session - if (existing) { - this._session = existing - provider.setDefaultChain(this._network) - this._publicKey = this.publicKeyFromSession(existing) - this.bindSessionListeners() - this.emit("connect", this._publicKey) - return - } - - const chains = this._network === ChainIDs.Mainnet - ? [ChainIDs.Mainnet, ChainIDs.DeprecatedMainnet] - : [ChainIDs.Devnet, ChainIDs.DeprecatedDevnet] - - const session = await provider.connect({ - optionalNamespaces: { - solana: { - chains, - methods: [ - Methods.signTransaction, - Methods.signMessage, - Methods.signAndSendTransaction, - Methods.signAllTransactions, - ], - events: [], - }, - }, - }) - - if (!session) throw new Error("WalletConnect Solana: empty session") - this._session = session - provider.setDefaultChain(this._network) - this._publicKey = this.publicKeyFromSession(session) - this.bindSessionListeners() - this.emit("connect", this._publicKey) - } catch (error: any) { - throw error - } finally { - this._connecting = false - } - } - - private bindSessionListeners() { - if (!this._provider) return - // Avoid duplicate listeners — re-bind cleanly each connect cycle - try { this._provider.client.off("session_delete", this._onSessionDelete) } catch { /* no-op */ } - this._provider.client.on("session_delete", this._onSessionDelete) - } - - private publicKeyFromSession(session: SessionTypes.Struct): PublicKey { - const account = session.namespaces["solana"]?.accounts?.[0] - if (!account) throw new Error("WalletConnect Solana: no Solana account in session") - const { address } = parseAccountId(account) - return new PublicKey(address) - } - - async disconnect(): Promise { - const provider = this._provider - let providerDisconnectThrew = false - if (provider) { - try { provider.client.off("session_delete", this._onSessionDelete) } catch { /* no-op */ } - try { - if (provider.session) await provider.disconnect() - } catch (error: any) { - providerDisconnectThrew = true - this.emit("error", new WalletDisconnectionError(error?.message, error)) - } - } - this._publicKey = null - this._session = undefined - - // Keep `_provider` warm across the disconnect → reconnect path. UP's - // `disconnect()` awaits `cleanup()` which clears `provider.session`, so - // the next `connect()` will take the fresh-pairing branch and emit - // `display_uri` immediately — no cold `UP.init()` to wait for, which - // is what previously made the QR spinner hang on the first reconnect. - // Only tear down the provider if its own `disconnect()` threw, because - // then `provider.session` may still be set. - if (providerDisconnectThrew && provider) { - if (this._internalDisplayUriHandler) { - try { provider.off("display_uri", this._internalDisplayUriHandler) } catch { /* no-op */ } - } - this._provider = undefined - this._providerInitPromise = undefined - this._internalDisplayUriHandler = undefined - if (this._readyState === WalletReadyState.Loadable) { - this.getProvider().catch(() => { /* next connect() will surface the real error */ }) - } - } - - this.emit("disconnect") - } - - async signTransaction(transaction: T): Promise { - try { - if (!this._provider || !this._session || !this._publicKey) throw new WalletNotConnectedError() - try { - const isVersioned = isVersionedTransaction(transaction) - const serialized = this.serialize(transaction) - const result = await this._provider.client.request<{ signature: string, transaction?: string }>({ - chainId: this._network, - topic: this._session.topic, - request: { - method: Methods.signTransaction, - params: { - ...(isVersioned ? {} : (transaction as any).toJSON?.() ?? {}), - transaction: serialized, - }, - }, - }) - if (result.transaction) { - return this.deserialize(result.transaction, isVersioned) as T - } - // Legacy WC wallets return only the signature. `Transaction.addSignature` has a - // different contract than `VersionedTransaction.addSignature` (and blind-attaching - // a single signature to a v0 tx can silently drop required co-signers), so we - // refuse the partial result and surface a clear error. - if (isVersioned) { - throw new WalletSignTransactionError( - "Wallet returned only a signature for a versioned transaction; full signed transaction required", - ) - } - ;(transaction as Transaction).addSignature(this._publicKey, Buffer.from(base58.decode(result.signature))) - return transaction - } catch (error: any) { - throw new WalletSignTransactionError(error?.message, error) - } - } catch (error: any) { - this.emit("error", error) - throw error - } - } - - async signMessage(message: Uint8Array): Promise { - try { - if (!this._provider || !this._session || !this._publicKey) throw new WalletNotConnectedError() - try { - const result = await this._provider.client.request<{ signature: string }>({ - chainId: this._network, - topic: this._session.topic, - request: { - method: Methods.signMessage, - params: { - pubkey: this._publicKey.toString(), - message: base58.encode(message), - }, - }, - }) - return base58.decode(result.signature) - } catch (error: any) { - throw new WalletSignMessageError(error?.message, error) - } - } catch (error: any) { - this.emit("error", error) - throw error - } - } - - async signAndSendTransaction(transaction: T): Promise { - try { - if (!this._provider || !this._session) throw new WalletNotConnectedError() - try { - const result = await this._provider.client.request<{ signature: string }>({ - chainId: this._network, - topic: this._session.topic, - request: { - method: Methods.signAndSendTransaction, - params: { transaction: this.serialize(transaction) }, - }, - }) - return result.signature - } catch (error: any) { - throw new WalletSignTransactionError(error?.message, error) - } - } catch (error: any) { - this.emit("error", error) - throw error - } - } - - async signAllTransactions(transactions: T[]): Promise { - if (!this._provider || !this._session) { - const error = new WalletNotConnectedError() - this.emit("error", error) - throw error - } - try { - const serialized = transactions.map(t => this.serialize(t)) - const result = await this._provider.client.request<{ transactions: string[] }>({ - chainId: this._network, - topic: this._session.topic, - request: { - method: Methods.signAllTransactions, - params: { transactions: serialized }, - }, - }) - return transactions.map((t, i) => { - const isVersioned = isVersionedTransaction(t) - return this.deserialize(result.transactions[i] ?? "", isVersioned) as T - }) - } catch (batchError: any) { - // Only fall back to per-transaction signing when the wallet genuinely - // doesn't support the batch method. For user rejections or other - // failures, surface the original error — otherwise a declined batch - // would re-prompt the user once per transaction. - const msg = (batchError?.message ?? '').toLowerCase() - const isUnsupported = - batchError?.code === 4200 || - msg.includes('not supported') || - msg.includes('method not found') || - msg.includes('unsupported') - if (!isUnsupported) { - this.emit("error", batchError) - throw batchError - } - // signTransaction handles its own "error" emission, so we don't - // re-emit here to avoid firing listeners twice for the same failure. - return await Promise.all(transactions.map(t => this.signTransaction(t))) - } - } - - private serialize(transaction: Transaction | VersionedTransaction): string { - return Buffer.from(transaction.serialize({ verifySignatures: false } as any)).toString("base64") - } - - private deserialize(serializedTransaction: string, versioned = false): Transaction | VersionedTransaction { - if (versioned) { - return VersionedTransaction.deserialize(Buffer.from(serializedTransaction, "base64")) - } - return Transaction.from(Buffer.from(serializedTransaction, "base64")) - } -} \ No newline at end of file diff --git a/apps/app/lib/wallets/solana/useSVM.tsx b/apps/app/lib/wallets/solana/useSVM.tsx deleted file mode 100644 index 861902e8..00000000 --- a/apps/app/lib/wallets/solana/useSVM.tsx +++ /dev/null @@ -1,334 +0,0 @@ -import KnownInternalNames from "../../knownIds" -import { useWallet } from "@solana/wallet-adapter-react" -import { resolveWalletConnectorIcon, resolveWalletConnectorIndex } from "../utils/resolveWalletIcon" -import { NetworkTypes } from "@/Models/Network" -import { - InternalConnector, - RequestAdditionalConnectorsParams, - RequestAdditionalConnectorsResult, - Wallet, - WalletProvider, -} from "@/Models/WalletProvider" -import { useCallback, useEffect, useMemo, useRef } from "react" -import { useSettingsState } from "@/context/settings" -import { useConnectModal, WalletModalConnector } from "@/components/WalletModal" -import { - getRegistryEntry, -} from "@/lib/walletConnect/types" -import { buildDeepLink } from "@/lib/walletConnect/buildDeepLink" -import { subscribeDisplayUri } from "@/lib/walletConnect/subscribeDisplayUri" -import { mapConnectError } from "@/lib/walletConnect/mapConnectError" -import { - getDynamicWcMetadata, - setDynamicWcMetadata, - getPendingDynamicWcMetadata, - clearPendingDynamicWcMetadata, - setPendingMetadataForRegistry, -} from "@/lib/walletConnect/dynamicMetadata" -import { SolanaWalletConnectAdapter } from "./connectors/SolanaWalletConnectAdapter" -import { useAdditionalConnectors } from "@/lib/walletConnect/useAdditionalConnectors" -import { createRegistryConnector } from "@/lib/walletConnect/createRegistryConnector" -import { isMobile } from "../utils/isMobile" - -const SOLANA_WC_ADAPTER_NAME = 'WalletConnect' -const name = 'Solana' -const id = 'solana' -const solanaNames = [KnownInternalNames.Networks.SolanaMainnet, KnownInternalNames.Networks.SolanaDevnet, KnownInternalNames.Networks.SolanaTestnet] - -export default function useSVM(): WalletProvider { - const { networks } = useSettingsState() - const isMobilePlatform = useMemo(() => isMobile(), []) - - const commonSupportedNetworks = useMemo(() => [ - ...networks.filter(network => network.networkType === NetworkTypes.Solana).map(l => l.caip2Id) - ], [networks]) - - const { disconnect, select, wallets, wallet: solanaWallet } = useWallet() - const walletsRef = useRef(wallets) - walletsRef.current = wallets - const connectedWallet = solanaWallet?.adapter.connected === true ? solanaWallet : undefined - const connectedAddress = connectedWallet?.adapter.publicKey?.toBase58() - const connectedAdapterName = connectedWallet?.adapter.name - - const { setSelectedConnector, isWalletModalOpen } = useConnectModal() - const { - browseConnectors: walletConnectConnectors, - browseMetadata: walletConnectBrowseMetadata, - requestAdditionalConnectors: requestRegistryConnectors, - addRecentConnector: addWalletConnectWallet, - } = useAdditionalConnectors(id) - - useEffect(() => { - if (isWalletModalOpen && !walletConnectBrowseMetadata.loaded) { - requestRegistryConnectors({ page: 1, pageSize: 40 }).catch((error) => console.warn('Failed to load Solana WalletConnect wallets registry', error)) - } - // Pre-warm the WC provider so the user's first wallet click doesn't wait - // for UP.init() — the cold init is what makes recent-wallet reconnects - // after a refresh spin on "QR loading" for several seconds. - if (isWalletModalOpen) { - const wcAdapterEntry = walletsRef.current.find(w => w.adapter.name === SOLANA_WC_ADAPTER_NAME) - const wcAdapter = wcAdapterEntry?.adapter as unknown as SolanaWalletConnectAdapter | undefined - wcAdapter?.warmup?.() - } - }, [isWalletModalOpen, walletConnectBrowseMetadata.loaded, requestRegistryConnectors]) - - const connectedWallets = useMemo(() => { - - if (solanaWallet?.adapter.connected === true) { - const isWalletConnect = connectedAdapterName === SOLANA_WC_ADAPTER_NAME - const dynamicMeta = (isWalletConnect && connectedAddress) - ? (getDynamicWcMetadata(id, connectedAddress) || getPendingDynamicWcMetadata(id)) - : null - - const displayName = dynamicMeta?.name || connectedAdapterName - const displayIcon = dynamicMeta?.icon || connectedWallet?.adapter.icon - const displayId = dynamicMeta?.id || (connectedAdapterName ? String(connectedAdapterName) : undefined) - - const wallet: Wallet | undefined = (connectedAddress && displayId) ? { - id: displayId, - address: connectedAddress, - displayName: `${displayName} - Solana`, - providerName: name, - icon: resolveWalletConnectorIcon({ connector: displayId, address: connectedAddress, iconUrl: displayIcon }), - disconnect, - isActive: true, - addresses: [connectedAddress], - asSourceSupportedNetworks: resolveSupportedNetworks(commonSupportedNetworks, displayId), - autofillSupportedNetworks: resolveSupportedNetworks(commonSupportedNetworks, displayId), - withdrawalSupportedNetworks: resolveSupportedNetworks(commonSupportedNetworks, displayId), - networkIcon: networks.find(n => solanaNames.some(name => name === n.caip2Id))?.logoUrl - } : undefined - - if (wallet) { - return [wallet] - } - } - - }, [connectedAddress, connectedAdapterName, solanaWallet, disconnect, commonSupportedNetworks, networks]) - - const connectWallet = useCallback(async ({ connector }: { connector: WalletModalConnector }) => { - let unsubscribeDisplayUri: (() => void) | undefined - const registry = getRegistryEntry(connector) - try { - const isRegistryWallet = !!registry - const isBareWcTile = connector.name === SOLANA_WC_ADAPTER_NAME - const currentWallets = walletsRef.current - const installedAdapter = currentWallets.find(w => w.adapter.name === connector.name) || - currentWallets.find(w => w.adapter.name.includes(connector.name)) - const walletConnectAdapter = currentWallets.find(w => w.adapter.name === SOLANA_WC_ADAPTER_NAME) - - // Decide which adapter actually performs the connect: - // - Registry WC wallets and the bare WC tile always go through the WC adapter - // - Installed adapters that explicitly want a QR (showQrCode) or are missing on mobile fall back to WC - const useWalletConnect = isRegistryWallet || isBareWcTile - || (connector.hasBrowserExtension && (connector.showQrCode || (isMobilePlatform && connector.extensionNotFound))) - - const targetAdapterEntry = useWalletConnect ? walletConnectAdapter : installedAdapter - if (!targetAdapterEntry) throw new Error('Connector not found') - - if (connectedWallet) { - try { await targetAdapterEntry.adapter.disconnect() } catch { /* noop */ } - } - - const resolveURI = registry - ? (uri: string) => buildDeepLink({ id: registry.id, mobile: registry.mobile }, uri) - : undefined - - if (useWalletConnect && walletConnectAdapter) { - const wcAdapter = walletConnectAdapter.adapter as unknown as SolanaWalletConnectAdapter - - // Track display metadata so connectedWallets can render the right name/icon after success - setPendingMetadataForRegistry(id, registry) - - // Only pre-render the QR screen when we actually want the user to see it: - // - Desktop → QR modal. - // - Mobile WITHOUT a resolvable deeplink (e.g. bare WC tile) → QR fallback so - // the user isn't stuck on a spinner. - // On mobile WITH a deeplink, leave `qr` unset so ConnectorsList renders the - // neutral LoadingConnect screen; `subscribeDisplayUri` will then navigate via - // `window.location.href = deepLink` as soon as the URI arrives. - const wantsQrModal = !isMobilePlatform || !resolveURI - - if (wantsQrModal) { - setSelectedConnector({ ...connector, qr: { state: 'loading', value: undefined }, showQrCode: true }) - } else { - setSelectedConnector({ ...connector }) - } - - unsubscribeDisplayUri = subscribeDisplayUri({ - source: wcAdapter, - resolveURI, - isMobilePlatform, - onQr: (qr) => setSelectedConnector({ ...connector, qr, showQrCode: true }), - }) - - // Track recent registry wallets so they can be re-surfaced - if (registry) addWalletConnectWallet(registry) - } - - try { - select(targetAdapterEntry.adapter.name) - await targetAdapterEntry.adapter.connect() - } finally { - unsubscribeDisplayUri?.() - unsubscribeDisplayUri = undefined - } - - // Prefer the adapter we just connected — `wallets.find(connected)` can - // return a stale entry (e.g. a previously-connected Phantom that sits - // earlier in the array) and yield the wrong address. Fall back to the - // scan only if our target somehow isn't reporting connected. - const newConnectedWallet = targetAdapterEntry.adapter.connected === true - ? targetAdapterEntry - : walletsRef.current.find(w => w.adapter.connected === true) - const newAddress = newConnectedWallet?.adapter.publicKey?.toBase58() - - // Persist display metadata for reconnects after refresh - if (newAddress && useWalletConnect && registry) { - setDynamicWcMetadata(id, newAddress, { - name: registry.name, - icon: registry.icon || '', - id: registry.id, - }) - } - - const displayId = registry?.id || (newConnectedWallet?.adapter.name ? String(newConnectedWallet.adapter.name) : undefined) - const displayName = registry?.name || newConnectedWallet?.adapter.name - const displayIconRaw = registry?.icon || newConnectedWallet?.adapter.icon - - const wallet: Wallet | undefined = newAddress && newConnectedWallet && displayId ? { - id: displayId, - address: newAddress, - displayName: `${displayName} - Solana`, - providerName: name, - icon: resolveWalletConnectorIcon({ connector: displayId, address: newAddress, iconUrl: displayIconRaw }), - disconnect, - isActive: true, - addresses: [newAddress], - asSourceSupportedNetworks: resolveSupportedNetworks(commonSupportedNetworks, displayId), - autofillSupportedNetworks: resolveSupportedNetworks(commonSupportedNetworks, displayId), - withdrawalSupportedNetworks: resolveSupportedNetworks(commonSupportedNetworks, displayId), - networkIcon: networks.find(n => solanaNames.some(name => name === n.caip2Id))?.logoUrl - } : undefined - - return wallet - } catch (e) { - throw mapConnectError(e) - } finally { - unsubscribeDisplayUri?.() - if (registry) clearPendingDynamicWcMetadata(id) - } - }, [connectedWallet, disconnect, select, isMobilePlatform, setSelectedConnector, addWalletConnectWallet, commonSupportedNetworks, networks, name]) - - const disconnectWallet = useCallback(async () => { - try { - await disconnect() - } - catch (e) { - console.log(e) - } - }, [disconnect]) - - const { availableConnectors, additionalConnectors } = useMemo(() => { - const installed: InternalConnector[] = [] - const registry: InternalConnector[] = [] - const seenIds = new Set() - const seenNames = new Set() - - for (const wallet of wallets) { - const isWcAdapter = wallet.adapter.name === SOLANA_WC_ADAPTER_NAME - const isInstalled = wallet.readyState === 'Installed' || wallet.readyState === 'Loadable' || wallet.adapter.name === 'Coinbase Wallet' - const internalConnector: InternalConnector = { - name: wallet.adapter.name.trim(), - id: wallet.adapter.name.trim(), - icon: wallet.adapter.icon, - type: isInstalled ? 'injected' : 'other', - installUrl: wallet.adapter?.url, - hasBrowserExtension: !isWcAdapter, - extensionNotFound: isWcAdapter ? false : !isInstalled, - isLoadable: wallet.readyState === 'Loadable' && wallet.adapter.name !== 'Coinbase Wallet', - providerName: name, - order: resolveWalletConnectorIndex(wallet.adapter.name.trim().toLowerCase()), - } - installed.push(internalConnector) - seenIds.add(internalConnector.id.toLowerCase()) - seenNames.add(internalConnector.name.toLowerCase()) - } - - for (const reg of walletConnectConnectors) { - if (seenIds.has(reg.id.toLowerCase())) continue - if (seenNames.has(reg.name.toLowerCase())) continue - registry.push(createRegistryConnector(reg, isMobilePlatform, name)) - } - - return { availableConnectors: installed, additionalConnectors: registry } - }, [wallets, walletConnectConnectors, isMobilePlatform]) - - const isNotAvailableCondition = useCallback((connectorId: string | undefined, network: string | undefined, purpose?: "withdrawal" | "autofill" | "asSource") => { - if (!network) return false - if (!connectorId) return true - - if (!purpose) { - return resolveSupportedNetworks([network], connectorId).length === 0 - } - - const supportedNetworksByPurpose = resolveSupportedNetworks(commonSupportedNetworks, connectorId) - return supportedNetworksByPurpose.length === 0 || !supportedNetworksByPurpose.includes(network) - }, [commonSupportedNetworks]) - - const requestAdditionalConnectors = useCallback(async (params: RequestAdditionalConnectorsParams = {}): Promise => { - const result = await requestRegistryConnectors(params) - const installedConnectorIds = new Set(availableConnectors.map(connector => connector.id.toLowerCase())) - const installedConnectorNames = new Set(availableConnectors.map(connector => connector.name.toLowerCase())) - - return { - connectors: result.connectors - .filter(connector => !installedConnectorIds.has(connector.id.toLowerCase()) && !installedConnectorNames.has(connector.name.toLowerCase())) - .map(connector => createRegistryConnector(connector, isMobilePlatform, name)), - nextPage: result.nextPage, - totalCount: result.totalCount, - } - }, [requestRegistryConnectors, availableConnectors, isMobilePlatform, name]) - - const providerIcon = useMemo(() => networks.find(n => solanaNames.some(name => name === n.caip2Id))?.logoUrl, [networks]) - - const provider: WalletProvider = useMemo(() => ({ - connectedWallets: connectedWallets, - activeWallet: connectedWallets?.[0], - connectWallet, - disconnectWallets: disconnectWallet, - isNotAvailableCondition, - availableConnectors, - additionalConnectors, - withdrawalSupportedNetworks: commonSupportedNetworks, - autofillSupportedNetworks: commonSupportedNetworks, - asSourceSupportedNetworks: commonSupportedNetworks, - name, - id, - providerIcon, - ready: wallets.length > 0, - requestAdditionalConnectors, - }), [connectedWallets, connectWallet, disconnectWallet, isNotAvailableCondition, availableConnectors, additionalConnectors, commonSupportedNetworks, name, id, providerIcon, wallets.length, requestAdditionalConnectors]) - - return provider -} - -const networkSupport = { - soon: ["okx wallet", "tokenpocket", "nightly"], - eclipse: ["nightly", "backpack"], -}; - -function resolveSupportedNetworks(supportedNetworks: string[], connectorId: string): string[] { - const supportedNetworksForWallet: string[] = []; - - supportedNetworks.forEach((network) => { - const lowerCaseName = network.split(/[_:]/)[0].toLowerCase(); - if (lowerCaseName === "solana") { - supportedNetworksForWallet.push(network); - } else if (networkSupport[lowerCaseName] && networkSupport[lowerCaseName].includes(connectorId?.toLowerCase())) { - supportedNetworksForWallet.push(network); - } - }); - - return supportedNetworksForWallet; -} \ No newline at end of file diff --git a/apps/app/lib/wallets/starknet/KnownStarknetConnectors.tsx b/apps/app/lib/wallets/starknet/KnownStarknetConnectors.tsx deleted file mode 100644 index cfc95973..00000000 --- a/apps/app/lib/wallets/starknet/KnownStarknetConnectors.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import Argent from "@/components/Icons/Wallets/Argent" -import ArgentX from "@/components/Icons/Wallets/ArgentX" -import Braavos from "@/components/Icons/Wallets/Braavos" -import Controller from "@/components/Icons/Wallets/Controller" -import Keplr from "@/components/Icons/Wallets/Keplr" -import Xverse from "@/components/Icons/Wallets/Xverse" - -const KnownStarknetConnectors = [ - { - id: 'ready x', - icon: ArgentX - }, - { - id: 'ready (formerly argent)', - icon: Argent - }, - { - id: 'braavos', - icon: Braavos - }, - { - id: 'keplr', - icon: Keplr - }, - { - id: 'xverse wallet', - icon: Xverse - }, - { - id: 'cartridge controller', - icon: Controller - } -] - -export default KnownStarknetConnectors \ No newline at end of file diff --git a/apps/app/lib/wallets/starknet/useStarknet.ts b/apps/app/lib/wallets/starknet/useStarknet.ts deleted file mode 100644 index 822bc3fe..00000000 --- a/apps/app/lib/wallets/starknet/useStarknet.ts +++ /dev/null @@ -1,224 +0,0 @@ -import KnownInternalNames from "../../knownIds" -import { resolveWalletConnectorIcon } from "../utils/resolveWalletIcon" -import { useSettingsState } from "../../../context/settings"; -import { Connector, useConnect, useDisconnect } from "@starknet-react/core"; -import { InternalConnector, Wallet, WalletProvider } from "../../../Models/WalletProvider"; -import { useRpcConfigStore } from "../../../stores/rpcConfigStore"; -import { useStarknetStore } from "@/stores/starknetWalletStore"; -import { Network } from "@/Models/Network"; - -export const starknetNames = [KnownInternalNames.Networks.StarkNetGoerli, KnownInternalNames.Networks.StarkNetMainnet, KnownInternalNames.Networks.StarkNetSepolia] -export default function useStarknet(): WalletProvider { - const commonSupportedNetworks = [ - KnownInternalNames.Networks.StarkNetMainnet, - KnownInternalNames.Networks.StarkNetGoerli, - KnownInternalNames.Networks.StarkNetSepolia - ] - - const withdrawalSupportedNetworks = [ - ...commonSupportedNetworks - ] - - const name = 'Starknet' - const id = 'starknet' - const { networks } = useSettingsState() - const { getEffectiveRpcUrl } = useRpcConfigStore() - - const { connectors } = useConnect(); - const { disconnectAsync } = useDisconnect() - - const starknetWallets = useStarknetStore((state) => state.connectedWallets) - const addWallet = useStarknetStore((state) => state.connectWallet) - const removeAccount = useStarknetStore((state) => state.removeAccount) - const addAccount = useStarknetStore((state) => state.addAccount) - - const activeWalletAddress = useStarknetStore((state) => state.activeWalletAddress); - const setActiveWallet = useStarknetStore((state) => state.setActiveWallet); - - const activeWallet = starknetWallets.find(wallet => wallet.address === activeWalletAddress); - const isMainnet = networks?.some(network => network.caip2Id === KnownInternalNames.Networks.StarkNetMainnet) - const network = networks?.find(network => starknetNames.some(name => name === network.caip2Id)) - const nodeUrl = network ? getEffectiveRpcUrl(network) : undefined - - const connectWallet = async ({ connector }) => { - try { - const starknetConnector = connectors.find(c => c.id === connector.id) - - let result = await starknetConnector?.connect({}) - - const walletChain = `0x${result?.chainId?.toString(16)}` - const isWalletOnMainnet = walletChain === '0x534e5f4d41494e' - const wrongChain = isWalletOnMainnet !== isMainnet - const starknetNetwork = networks.find(n => n.caip2Id === KnownInternalNames.Networks.StarkNetMainnet || n.caip2Id === KnownInternalNames.Networks.StarkNetSepolia) - - if (result?.account && wrongChain) { - const wallet = (starknetConnector as any)?._wallet || (starknetConnector as any)?.wallet - if (wallet?.request) { - const targetChainId = isMainnet ? 'SN_MAIN' : 'SN_SEPOLIA' - try { - await wallet.request({ - type: "wallet_switchStarknetChain", - params: { chainId: targetChainId } - }) - result = await starknetConnector?.connect({}) - } catch (switchError) { - console.log('Chain switch failed:', switchError) - await disconnectWallets(connector?.name, result?.account) - throw new Error(`Failed to switch network. Please switch manually to ${isMainnet ? 'Mainnet' : 'Sepolia'} in your wallet.`) - } - } else { - await disconnectWallets(connector?.name, result?.account) - throw new Error(`Please switch the network in your wallet to ${isMainnet ? 'Mainnet' : 'Sepolia'} and connect again.`) - } - } - - if (result?.account && starknetConnector) { - const resolvedWallet = await resolveStarknetWallet({ - name, - connector: starknetConnector, - network: starknetNetwork, - nodeUrl: nodeUrl, - disconnectWallets: () => disconnectWallets(starknetConnector.id, result?.account), - address: result?.account, - withdrawalSupportedNetworks, - autofillSupportedNetworks: commonSupportedNetworks, - asSourceSupportedNetworks: commonSupportedNetworks, - }); - - addAccount(starknetConnector.id, result.account); - if (resolvedWallet) { - addWallet(resolvedWallet); - setActiveWallet(resolvedWallet.address) - return resolvedWallet; - } - } - } - catch (e) { - console.log(e) - throw e - } - } - - const disconnectWallets = async (connectorName?: string, address?: string) => { - try { - await disconnectAsync() - if (address) removeAccount(address) - } - catch (e) { - console.log(e) - } - } - - const availableConnectors: InternalConnector[] = connectors.map(connector => { - - const configuredName = connectorsConfigs.find(c => c.id === connector.id)?.name - const name = configuredName ?? connector.name - - return { - name: name, - id: connector.id, - icon: typeof connector.icon === 'string' ? connector.icon : (connector.icon.light.startsWith('data:') ? connector.icon.light : `data:image/svg+xml;base64,${btoa(connector.icon.light.replaceAll('currentColor', '#FFFFFF'))}`), - type: connector?.["_wallet"] ? 'injected' : 'other', - installUrl: connectorsConfigs.find(c => c.id === connector.id)?.installLink, - extensionNotFound: !connector?.["_wallet"] && connectorsConfigs.find(c => c.id === connector.id)?.installLink !== undefined, - providerName: name - } - }) - - const switchAccount = async (connector: Wallet, address: string): Promise => { - setActiveWallet(address); - }; - const provider: WalletProvider = { - connectWallet, - switchAccount, - connectedWallets: starknetWallets, - activeWallet, - withdrawalSupportedNetworks, - autofillSupportedNetworks: commonSupportedNetworks, - asSourceSupportedNetworks: commonSupportedNetworks, - availableConnectors, - name, - id, - providerIcon: networks.find(n => starknetNames.some(name => name === n.caip2Id))?.logoUrl, - ready: connectors.length > 0, - } - - return provider -} - - -type ResolveStarknetWalletProps = { - name: string, - connector: Connector; - network: Network | undefined; - nodeUrl: string | undefined; - disconnectWallets: (connectorName?: string, address?: string) => Promise; - address: string, - withdrawalSupportedNetworks: string[] - autofillSupportedNetworks?: string[], - asSourceSupportedNetworks?: string[] -} - -export async function resolveStarknetWallet(props: ResolveStarknetWalletProps): Promise { - const { name, connector, network, nodeUrl, disconnectWallets, address, withdrawalSupportedNetworks, autofillSupportedNetworks, asSourceSupportedNetworks } = props; - try { - const walletChain = network?.chainId; - const { RpcProvider, WalletAccount } = await import('starknet') - const rpcProvider = new RpcProvider({ nodeUrl: nodeUrl }) - - const walletAccount = new WalletAccount({ provider: rpcProvider, walletProvider: (connector as any).wallet, address }) - - const accounts = await walletAccount.requestAccounts(true) - const account = accounts?.[0]; - - const configuredName = connectorsConfigs.find(c => c.id === connector.id)?.name - const connectorName = configuredName ?? connector.name - - const wallet: Wallet = { - id: connectorName, - displayName: `${connectorName} - Starknet`, - address: account, - addresses: [account], - chainId: walletChain || '', - icon: resolveWalletConnectorIcon({ connector: connectorName, address: account }), - providerName: name, - metadata: { - starknetAccount: walletAccount, - }, - isActive: true, - withdrawalSupportedNetworks, - disconnect: () => disconnectWallets(connector.name, account), - networkIcon: starknetNames.includes(network?.caip2Id || '') ? network?.logoUrl : undefined, - autofillSupportedNetworks, - asSourceSupportedNetworks - }; - - return wallet; - } catch (e) { - console.warn(`Failed to initialize wallet for ${connector.name}:`, e); - return null; - } -} - -const connectorsConfigs = [ - { - id: "braavos", - name: "Braavos", - installLink: "https://chromewebstore.google.com/detail/braavos-starknet-wallet/jnlgamecbpmbajjfhmmmlhejkemejdma" - }, - { - id: "argentX", - name: 'Ready X', - installLink: "https://chromewebstore.google.com/detail/argent-x-starknet-wallet/dlcobpjiigpikoobohmabehhmhfoodbb" - }, - { - id: "keplr", - name: 'Keplr', - installLink: "https://chromewebstore.google.com/detail/keplr/dmkamcknogkgcdfhhbddcghachkejeap" - }, - { - id: "xverse", - name: 'Xverse Wallet', - installLink: "https://chromewebstore.google.com/detail/xverse-bitcoin-crypto-wal/idnnbdplmphpflfnlkomgpfbpcgelopg" - } -] diff --git a/apps/app/lib/wallets/tron/useTron.ts b/apps/app/lib/wallets/tron/useTron.ts deleted file mode 100644 index 83278304..00000000 --- a/apps/app/lib/wallets/tron/useTron.ts +++ /dev/null @@ -1,125 +0,0 @@ -import KnownInternalNames from "../../knownIds"; -import { useWallet } from '@tronweb3/tronwallet-adapter-react-hooks'; -import { InternalConnector, Wallet, WalletProvider } from "@/Models/WalletProvider"; -import { resolveWalletConnectorIcon } from "../utils/resolveWalletIcon"; -import { useSettingsState } from "@/context/settings"; -import { useMemo } from "react"; -import { useSyncProviders } from "../evm/connectors/useSyncProviders"; - -const name = 'Tron' -const id = 'tron' - -const commonSupportedNetworks = [ - KnownInternalNames.Networks.TronMainnet, - KnownInternalNames.Networks.TronNile -] - -export default function useTron(): WalletProvider { - const { networks } = useSettingsState() - const network = networks.find(n => commonSupportedNetworks.includes(n.caip2Id)) - const { wallets, wallet: tronWallet, disconnect, select } = useWallet(); - const eip6963Providers = useSyncProviders(); - const isMetaMaskAnnounced = eip6963Providers.some(p => p.info.rdns === 'io.metamask'); - const isTronLinkAnnounced = eip6963Providers.some(p => p.info.rdns === 'org.tronlink.www'); - - const address = tronWallet?.adapter.address - - const wallet: Wallet | undefined = address ? { - id: tronWallet.adapter.name, - addresses: [address], - address, - displayName: `${tronWallet.adapter.name} - Tron`, - networkIcon: network?.logoUrl, - providerName: name, - isActive: true, - icon: resolveWalletConnectorIcon({ connector: name, address, iconUrl: tronWallet.adapter.icon }), - disconnect: () => disconnectWallet(), - autofillSupportedNetworks: commonSupportedNetworks, - withdrawalSupportedNetworks: commonSupportedNetworks, - asSourceSupportedNetworks: commonSupportedNetworks, - } : undefined - - const getWallet = () => { - if (wallet) { - return [wallet] - } - return undefined - } - - const connectWallet = async ({ connector }: { connector: InternalConnector }) => { - const tronConnector = wallets.find(w => w.adapter.name === connector.name) - if (!tronConnector) throw new Error('Connector not found') - try { - select(tronConnector.adapter.name) - await tronConnector.adapter.connect() - - const connectedWallet = wallets.find(w => w.adapter.connected === true) - const connectedAddress = connectedWallet?.adapter.address - - const wallet: Wallet | undefined = connectedAddress ? { - address: connectedAddress, - providerName: name, - id: connectedWallet?.adapter.name, - displayName: `${connectedWallet.adapter.name} - Tron`, - networkIcon: network?.logoUrl, - icon: resolveWalletConnectorIcon({ connector: String(connectedWallet?.adapter.name), address: connectedAddress, iconUrl: connectedWallet?.adapter.icon }), - disconnect, - isActive: true, - addresses: [connectedAddress], - autofillSupportedNetworks: commonSupportedNetworks, - withdrawalSupportedNetworks: commonSupportedNetworks, - asSourceSupportedNetworks: commonSupportedNetworks, - } : undefined - return wallet - } - catch (e) { - const error = e - throw new Error(e.message || e); - } - } - - const disconnectWallet = async () => { - try { - await disconnect() - } - catch (e) { - console.log(e) - } - } - - const availableConnectors: InternalConnector[] = useMemo(() => wallets.map(wallet => { - const adapterName = wallet.adapter.name - const isLoading = wallet.state === 'Loading' - - const isMetaMaskMissing = adapterName === 'MetaMask' && !isMetaMaskAnnounced - const isTronLinkMissing = adapterName === 'TronLink' && !isTronLinkAnnounced - const isNotInstalled = wallet.state == 'NotFound' || isMetaMaskMissing || isTronLinkMissing - return { - id: adapterName, - name: adapterName, - icon: wallet.adapter.icon, - type: isNotInstalled ? 'other' : 'injected', - installUrl: wallet.adapter?.url, - extensionNotFound: isNotInstalled, - isLoadable: isLoading, - providerName: name - } - }), [wallets]) - - const provider: WalletProvider = { - connectWallet, - disconnectWallets: disconnectWallet, - availableConnectors, - connectedWallets: getWallet(), - activeWallet: wallet, - autofillSupportedNetworks: commonSupportedNetworks, - withdrawalSupportedNetworks: commonSupportedNetworks, - asSourceSupportedNetworks: commonSupportedNetworks, - name, - id, - providerIcon: network?.logoUrl, - ready: wallets.length > 0 - } - - return provider -} \ No newline at end of file diff --git a/apps/app/lib/wallets/utils/isMobile.ts b/apps/app/lib/wallets/utils/isMobile.ts deleted file mode 100644 index c06c5a1a..00000000 --- a/apps/app/lib/wallets/utils/isMobile.ts +++ /dev/null @@ -1,28 +0,0 @@ -//scrapped from rainbowkit -export function isAndroid(): boolean { - return ( - typeof navigator !== 'undefined' && /android/i.test(navigator.userAgent) - ); - } - - export function isSmallIOS(): boolean { - return ( - typeof navigator !== 'undefined' && /iPhone|iPod/.test(navigator.userAgent) - ); - } - - export function isLargeIOS(): boolean { - return ( - typeof navigator !== 'undefined' && - (/iPad/.test(navigator.userAgent) || - (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) - ); - } - - export function isIOS(): boolean { - return isSmallIOS() || isLargeIOS(); - } - - export function isMobile(): boolean { - return isAndroid() || isIOS(); - } \ No newline at end of file diff --git a/apps/app/lib/wallets/utils/resolveWalletIcon.tsx b/apps/app/lib/wallets/utils/resolveWalletIcon.tsx deleted file mode 100644 index 9a0cb75d..00000000 --- a/apps/app/lib/wallets/utils/resolveWalletIcon.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import AddressIcon from "../../../components/AddressIcon"; -import SVGWithImg from "../../../components/Icons/SvgWithImg"; -import WalletIcon from "../../../components/Icons/WalletIcon"; -import KnownAztecConnectors from "../aztec/KnownAztecConnectors"; -import KnownEVMConnectors from "../evm/KnownEVMConnectors"; -import KnownSolanaConnectors from "../solana/KnownSolanaConnectors"; -import KnownStarknetConnectors from "../starknet/KnownStarknetConnectors"; - -const connectors = [ - ...KnownEVMConnectors, - ...KnownSolanaConnectors, - ...KnownStarknetConnectors, - ...KnownAztecConnectors, -] - -export const resolveWalletConnectorIcon = ({ connector, address, iconUrl }: { connector?: string, address?: string, iconUrl?: string }) => { - const knownConnector = connectors.find(c => c.id === connector?.toLowerCase()) - - if (knownConnector && knownConnector.icon) return knownConnector.icon - else if (iconUrl) return SVGIconWrapper(iconUrl) - - if (address) return AddressIconWrapper(address) - else return WalletIcon -} - -export const resolveWalletConnectorIndex = (id: string) => { - return connectors.findIndex(c => c.id === id?.toLowerCase()) -} - -const AddressIconWrapper = (address: string) => (props: typeof AddressIcon) => { - return -} - -const SVGIconWrapper = (iconUrl: string) => (props) => { - return -} diff --git a/apps/app/lib/wallets/utils/sleep.ts b/apps/app/lib/wallets/utils/sleep.ts deleted file mode 100644 index a29e7df0..00000000 --- a/apps/app/lib/wallets/utils/sleep.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default function sleep(ms: number): Promise { - return new Promise(resolve => setTimeout(resolve, ms)); -} \ No newline at end of file diff --git a/apps/app/package.json b/apps/app/package.json index 0206ad26..c904402a 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -7,7 +7,6 @@ "dev": "next dev", "build": "next build", "start": "next start", - "analyze": "cross-env ANALYZE=true next build", "build:workers": "tsc -p tsconfig.worker.json" }, "dependencies": { @@ -16,15 +15,22 @@ "@aztec/standard-contracts": "^5.1.0", "@aztec/stdlib": "^5.1.0", "@aztec/wallet-sdk": "^5.1.0", - "@cartridge/controller": "^0.10.7", "@coral-xyz/anchor": "catalog:", "@eth-optimism/contracts-ts": "^0.17.2", - "@fuels/react": "^0.43.2", "@grafana/faro-react": "^2.5.0", "@grafana/faro-web-sdk": "^2.5.0", "@grafana/faro-web-tracing": "^2.5.0", "@hugeicons/core-free-icons": "^4.0.0", "@hugeicons/react": "^1.1.6", + "@layerswap/ui-kit": "2.0.0-next.0", + "@layerswap/utils": "2.0.0-next.0", + "@layerswap/widget-types": "1.0.0-next.0", + "@layerswap/wallet-core": "2.0.0-next.0", + "@layerswap/wallet-evm": "2.0.0-next.0", + "@layerswap/wallet-fuel": "2.0.0-next.0", + "@layerswap/wallet-starknet": "2.0.0-next.0", + "@layerswap/wallet-svm": "2.0.0-next.0", + "@layerswap/wallet-tron": "2.0.0-next.0", "@noble/hashes": "^2.0.1", "@number-flow/react": "^0.5.11", "@radix-ui/react-accordion": "^1.1.2", @@ -36,17 +42,10 @@ "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tooltip": "^1.0.7", "@solana/spl-token": "catalog:", - "@solana/wallet-adapter-base": "^0.9.27", - "@solana/wallet-adapter-react": "^0.15.39", - "@solana/wallet-adapter-wallets": "^0.19.37", "@solana/web3.js": "catalog:", - "@starknet-io/types-js": "^0.10.0", - "@starknet-react/chains": "^5.0.3", - "@starknet-react/core": "^5.0.3", "@tailwindcss/forms": "^0.5.0", "@tailwindcss/typography": "^0.5.2", "@tanstack/react-query": "^5.59.20", - "@tanstack/react-virtual": "^3.13.18", "@tanstack/virtual-core": "^3.13.19", "@train-protocol/auth": "workspace:^", "@train-protocol/aztec": "workspace:^", @@ -57,24 +56,8 @@ "@train-protocol/solana": "workspace:^", "@train-protocol/starknet": "workspace:^", "@train-protocol/tron": "workspace:^", - "@tronweb3/tronwallet-adapter-bitkeep": "^1.1.5", - "@tronweb3/tronwallet-adapter-bybit": "^1.0.1", - "@tronweb3/tronwallet-adapter-foxwallet": "^1.0.1", - "@tronweb3/tronwallet-adapter-gatewallet": "^1.0.3", - "@tronweb3/tronwallet-adapter-imtoken": "^1.0.2", - "@tronweb3/tronwallet-adapter-ledger": "^1.1.11", - "@tronweb3/tronwallet-adapter-metamask-tron": "^1.0.0", - "@tronweb3/tronwallet-adapter-okxwallet": "^1.0.6", - "@tronweb3/tronwallet-adapter-react-hooks": "^1.1.10", - "@tronweb3/tronwallet-adapter-tokenpocket": "^1.0.6", - "@tronweb3/tronwallet-adapter-tronlink": "^1.1.12", - "@tronweb3/tronwallet-adapter-trust": "^1.0.0", "@uidotdev/usehooks": "^2.4.1", "@vercel/analytics": "^1.5.0", - "@walletconnect/ethereum-provider": "2.21.8", - "@walletconnect/types": "2.21.8", - "@walletconnect/universal-provider": "2.21.8", - "@walletconnect/utils": "2.21.8", "axios": "^1.19.0", "bn.js": "^5.2.3", "bs58": "^6.0.0", @@ -84,47 +67,34 @@ "cmdk": "^1.1.1", "color": "4.2.3", "copy-to-clipboard": "^3.3.3", - "crypto-js": "^4.1.1", "formik": "^2.2.9", "framer-motion": "^12.42.2", "fuels": "catalog:", - "get-starknet-core": "^3.3.5", "js-sha3": "^0.8.0", - "json-rpc-2.0": "1.7.0", "lucide-react": "^1.27.0", - "memoizee": "^0.4.17", "next": "16.3.0", "next-themes": "^0.4.6", - "qrcode.react": "^4.2.0", "radix-ui": "^1.4.3", "react": "catalog:", "react-dom": "catalog:", "react-use-intercom": "^2.0.0", "shadcn": "^4.1.2", - "socket.io-client": "^4.8.3", "starknet": "catalog:", - "starknetkit": "^3.2.0", "swr": "^2.2.5", "tailwind-merge": "^3.5.0", "tailwindcss-animate": "^1.0.5", "tronweb": "^6.2.2", "tw-animate-css": "^1.4.0", - "uuid": "^11.1.1", "viem": "catalog:", "wagmi": "2.14.11", "zustand": "^4.5.7" }, "devDependencies": { - "@next/bundle-analyzer": "^16.3.0", "@tailwindcss/postcss": "^4.2.1", "@types/bn.js": "^5.1.0", - "@types/crypto-js": "^4.1.1", "@types/node": "^20", "@types/react": "catalog:", "@types/react-dom": "^19.2.3", - "@web3-react/types": "^6.0.7", - "autoprefixer": "^10.4.5", - "file-loader": "^6.2.0", "tailwindcss": "^4.2.1", "typescript": "catalog:" }, diff --git a/apps/app/stores/starknetWalletStore.ts b/apps/app/stores/starknetWalletStore.ts index 0d0a069a..06f501e8 100644 --- a/apps/app/stores/starknetWalletStore.ts +++ b/apps/app/stores/starknetWalletStore.ts @@ -1,5 +1,5 @@ import { createWithEqualityFn as create } from 'zustand/traditional' -import { Wallet } from '../Models/WalletProvider' +import type { Wallet } from "@layerswap/widget-types"; import { createJSONStorage, persist } from 'zustand/middleware' type StarknetAccountMap = { [key: string]: string } @@ -77,4 +77,4 @@ export const useStarknetStore = create()( }), } ) -) \ No newline at end of file +) diff --git a/apps/app/stores/walletStore.ts b/apps/app/stores/walletStore.ts index 815f4310..8dabdc43 100644 --- a/apps/app/stores/walletStore.ts +++ b/apps/app/stores/walletStore.ts @@ -1,6 +1,5 @@ import { createWithEqualityFn as create } from 'zustand/traditional' -import { Wallet } from '../Models/WalletProvider'; - +import type { Wallet } from "@layerswap/widget-types"; interface WalletState { connectedWallets: Wallet[]; connectWallet: (wallet: Wallet) => void; @@ -36,4 +35,4 @@ export const useWalletStore = create()((set) => ({ disconnectWallet: (providerName, connectorName) => set((state) => ({ connectedWallets: state.connectedWallets.filter(w => connectorName ? !(w.providerName == providerName && w.id == connectorName) : w.providerName != providerName) })) -})) \ No newline at end of file +})) diff --git a/apps/app/styles/globals.css b/apps/app/styles/globals.css index e75affe1..1299e6da 100644 --- a/apps/app/styles/globals.css +++ b/apps/app/styles/globals.css @@ -2,6 +2,7 @@ @import 'tw-animate-css'; @import 'shadcn/tailwind.css'; @config '../tailwind.config.js'; +@source "../node_modules/@layerswap/ui-kit/dist/esm"; @custom-variant dark (&:is([data-theme="default"] *, [data-theme="mist"] *)); diff --git a/package.json b/package.json index e20c57a8..ac05cf69 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,10 @@ } }, "overrides": { + "@layerswap/ui-kit": "2.0.0-next.0", + "@layerswap/utils": "2.0.0-next.0", + "@layerswap/widget-types": "1.0.0-next.0", "@radix-ui/react-dismissable-layer": "1.1.1", - "@walletconnect/universal-provider": "2.21.8", - "@walletconnect/ethereum-provider": "2.21.8", "@aztec/aztec.js": "catalog:", "elliptic": ">=6.6.1", "ws": ">=8.21.0", diff --git a/packages/blockchains/solana/src/client/wallet/redeemSolver.ts b/packages/blockchains/solana/src/client/wallet/redeemSolver.ts index 7bc1ade3..b131e7d7 100644 --- a/packages/blockchains/solana/src/client/wallet/redeemSolver.ts +++ b/packages/blockchains/solana/src/client/wallet/redeemSolver.ts @@ -14,7 +14,8 @@ export async function redeemSolver( const tx = await buildRedeemSolverTx(connection, program, walletPublicKey, params) try { - const signature = await signer.sendTransaction(tx) + const signed = await signer.signTransaction(tx) + const signature = await connection.sendRawTransaction(signed.serialize()) const res = await connection.confirmTransaction({ blockhash: tx.recentBlockhash!, lastValidBlockHeight: tx.lastValidBlockHeight!, diff --git a/packages/blockchains/solana/src/client/wallet/refund.ts b/packages/blockchains/solana/src/client/wallet/refund.ts index 912f02a6..938be4cb 100644 --- a/packages/blockchains/solana/src/client/wallet/refund.ts +++ b/packages/blockchains/solana/src/client/wallet/refund.ts @@ -14,7 +14,8 @@ export async function refund( const tx = await buildRefundTx(connection, program, walletPublicKey, params) try { - const signature = await signer.sendTransaction(tx) + const signed = await signer.signTransaction(tx) + const signature = await connection.sendRawTransaction(signed.serialize()) const res = await connection.confirmTransaction({ blockhash: tx.recentBlockhash!, lastValidBlockHeight: tx.lastValidBlockHeight!, diff --git a/packages/blockchains/solana/src/client/wallet/userLock.ts b/packages/blockchains/solana/src/client/wallet/userLock.ts index bc941ff9..016b2135 100644 --- a/packages/blockchains/solana/src/client/wallet/userLock.ts +++ b/packages/blockchains/solana/src/client/wallet/userLock.ts @@ -16,7 +16,8 @@ export async function userLock( let signature: string try { - signature = await signer.sendTransaction(tx) + const signed = await signer.signTransaction(tx) + signature = await connection.sendRawTransaction(signed.serialize()) } catch (e: any) { console.error('[SolanaHTLC] sendTransaction failed', e?.message ?? String(e), e?.logs ?? []) throw e diff --git a/packages/blockchains/solana/src/types.ts b/packages/blockchains/solana/src/types.ts index 9c1d9cc1..58591d7d 100644 --- a/packages/blockchains/solana/src/types.ts +++ b/packages/blockchains/solana/src/types.ts @@ -26,12 +26,15 @@ export type SolanaWalletSignConfig = { /** * Framework-agnostic Solana signer. - * The app wraps @solana/wallet-adapter-react hooks into this interface. + * + * Signing only — the wallet never touches the network. The client owns the sole + * `Connection` and uses it to build, broadcast and confirm, so the blockhash and + * the preflight can never come from differently configured endpoints. */ export interface SolanaSigner { /** Base58 public key string */ publicKey: string - sendTransaction(tx: Transaction | VersionedTransaction): Promise + signTransaction(tx: T): Promise } export type SolanaHTLCPublicClientConfig = { diff --git a/packages/react/src/providers/TrainProvider.tsx b/packages/react/src/providers/TrainProvider.tsx index f1c332b1..f972eec9 100644 --- a/packages/react/src/providers/TrainProvider.tsx +++ b/packages/react/src/providers/TrainProvider.tsx @@ -85,8 +85,18 @@ export function TrainProvider({ // adapterVersion in deps ensures these callbacks get new references when adapters register, // which propagates through walletValue → walletCtx → consumer useMemos. const createClient = useCallback((networkId: Caip2Id): IHTLCPublicClient => { - return findAdapter(networkId).createClient(sdk, networkId) - }, [findAdapter, sdk, adapterVersion]) + const { namespace } = parseCaip2Id(networkId) + const adapter = adaptersRef.current.get(namespace) + if (adapter) return adapter.createClient(sdk, networkId) + const rpcUrl = config.resolveNodeUrls?.(networkId)?.[0] + if (!rpcUrl) { + throw new Error( + `No RPC URL resolvable for network "${networkId}". ` + + `Pass resolveNodeUrls to TrainProvider or register a wallet adapter for "${namespace}".` + ) + } + return sdk.createHTLCPublicClient(namespace, { rpcUrl }) + }, [sdk, adapterVersion, config.resolveNodeUrls]) const createWriteClient = useCallback((networkId: Caip2Id, address?: string): IHTLCWalletClient => { return findAdapter(networkId).createWriteClient(sdk, networkId, address) diff --git a/packages/react/src/wallet/WalletContext.ts b/packages/react/src/wallet/WalletContext.ts index e5fded64..c99e225f 100644 --- a/packages/react/src/wallet/WalletContext.ts +++ b/packages/react/src/wallet/WalletContext.ts @@ -5,7 +5,7 @@ import type { Caip2Id, ChainNamespace } from '../internal/branded' export interface WalletContextValue { registerAdapter: (adapter: TrainWalletAdapter) => () => void - /** Create a public HTLC client for the given network (delegates to adapter) */ + /** Create a public HTLC client for the given network (uses an adapter or RPC fallback) */ createClient: (networkId: Caip2Id) => IHTLCPublicClient /** Create a wallet HTLC client with signer for the given network (delegates to adapter). * @param address - When provided, use this specific account as signer. */ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 251f9726..252967af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,9 +50,10 @@ catalogs: version: 4.5.7 overrides: + '@layerswap/ui-kit': 2.0.0-next.0 + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/widget-types': 1.0.0-next.0 '@radix-ui/react-dismissable-layer': 1.1.1 - '@walletconnect/universal-provider': 2.21.8 - '@walletconnect/ethereum-provider': 2.21.8 '@aztec/aztec.js': ^5.1.0 elliptic: '>=6.6.1' ws: '>=8.21.0' @@ -120,18 +121,12 @@ importers: '@aztec/wallet-sdk': specifier: ^5.1.0 version: 5.1.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@cartridge/controller': - specifier: ^0.10.7 - version: 0.10.7(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@coral-xyz/anchor': specifier: 'catalog:' version: 0.30.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@eth-optimism/contracts-ts': specifier: ^0.17.2 - version: 0.17.2(@types/react@19.2.17)(@wagmi/core@2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)(wagmi@2.14.11(@react-native-async-storage/async-storage@1.24.0)(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))) - '@fuels/react': - specifier: ^0.43.2 - version: 0.43.2(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(fuels@0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + version: 0.17.2(@types/react@19.2.17)(@wagmi/core@2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)(wagmi@2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))) '@grafana/faro-react': specifier: ^2.5.0 version: 2.9.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -147,6 +142,33 @@ importers: '@hugeicons/react': specifier: ^1.1.6 version: 1.1.6(react@19.2.8) + '@layerswap/ui-kit': + specifier: 2.0.0-next.0 + version: 2.0.0-next.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/utils': + specifier: 2.0.0-next.0 + version: 2.0.0-next.0 + '@layerswap/wallet-core': + specifier: 2.0.0-next.0 + version: 2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/wallet-evm': + specifier: 2.0.0-next.0 + version: 2.0.0-next.0(@layerswap/utils@2.0.0-next.0)(@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)))(@layerswap/widget-types@1.0.0-next.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(wagmi@2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/wallet-fuel': + specifier: 2.0.0-next.0 + version: 2.0.0-next.0(@layerswap/utils@2.0.0-next.0)(@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)))(@layerswap/widget-types@1.0.0-next.0)(@wagmi/core@2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(bufferutil@4.1.0)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2)))(wagmi@2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/wallet-starknet': + specifier: 2.0.0-next.0 + version: 2.0.0-next.0(@layerswap/utils@2.0.0-next.0)(@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)))(@layerswap/widget-types@1.0.0-next.0)(@radix-ui/react-slot@1.2.4(@types/react@19.2.17)(react@19.2.8))(@scure/bip39@2.0.1)(@types/react@19.2.17)(bufferutil@4.1.0)(class-variance-authority@0.7.1)(clsx@1.2.1)(framer-motion@12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(swr@2.4.0(react@19.2.8))(tailwind-merge@3.5.0)(tailwindcss-animate@1.0.7(tailwindcss@4.2.1))(tailwindcss@4.2.1)(typescript@7.0.2)(utf-8-validate@5.0.10)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/wallet-svm': + specifier: 2.0.0-next.0 + version: 2.0.0-next.0(@babel/runtime@7.28.6)(@layerswap/utils@2.0.0-next.0)(@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)))(@layerswap/widget-types@1.0.0-next.0)(@solana/sysvars@2.3.0(typescript@7.0.2))(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tslib@2.8.1)(typescript@7.0.2)(utf-8-validate@5.0.10)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/wallet-tron': + specifier: 2.0.0-next.0 + version: 2.0.0-next.0(@layerswap/utils@2.0.0-next.0)(@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)))(@layerswap/widget-types@1.0.0-next.0)(bufferutil@4.1.0)(utf-8-validate@5.0.10)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/widget-types': + specifier: 1.0.0-next.0 + version: 1.0.0-next.0 '@noble/hashes': specifier: ^2.0.1 version: 2.0.1 @@ -180,27 +202,9 @@ importers: '@solana/spl-token': specifier: 'catalog:' version: 0.4.14(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-base': - specifier: ^0.9.27 - version: 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-react': - specifier: ^0.15.39 - version: 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.2.8)(typescript@7.0.2) - '@solana/wallet-adapter-wallets': - specifier: ^0.19.37 - version: 0.19.37(@babel/runtime@7.28.6)(@react-native-async-storage/async-storage@1.24.0)(@solana/sysvars@2.3.0(typescript@7.0.2))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bs58@6.0.0)(bufferutil@4.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tslib@2.8.1)(typescript@7.0.2)(utf-8-validate@5.0.10)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) '@solana/web3.js': specifier: 'catalog:' version: 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@starknet-io/types-js': - specifier: ^0.10.0 - version: 0.10.0 - '@starknet-react/chains': - specifier: ^5.0.3 - version: 5.0.3 - '@starknet-react/core': - specifier: ^5.0.3 - version: 5.0.3(bufferutil@4.1.0)(get-starknet-core@3.3.5(starknet@8.9.2))(react@19.2.8)(starknet@8.9.2)(typescript@7.0.2)(utf-8-validate@5.0.10) '@tailwindcss/forms': specifier: ^0.5.0 version: 0.5.11(tailwindcss@4.2.1) @@ -210,9 +214,6 @@ importers: '@tanstack/react-query': specifier: ^5.59.20 version: 5.90.21(react@19.2.8) - '@tanstack/react-virtual': - specifier: ^3.13.18 - version: 3.13.19(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@tanstack/virtual-core': specifier: ^3.13.19 version: 3.13.19 @@ -243,60 +244,12 @@ importers: '@train-protocol/tron': specifier: workspace:^ version: link:../../packages/blockchains/tron - '@tronweb3/tronwallet-adapter-bitkeep': - specifier: ^1.1.5 - version: 1.1.8(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-bybit': - specifier: ^1.0.1 - version: 1.0.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-foxwallet': - specifier: ^1.0.1 - version: 1.0.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-gatewallet': - specifier: ^1.0.3 - version: 1.0.5(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-imtoken': - specifier: ^1.0.2 - version: 1.0.4(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-ledger': - specifier: ^1.1.11 - version: 1.1.13(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-metamask-tron': - specifier: ^1.0.0 - version: 1.0.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-okxwallet': - specifier: ^1.0.6 - version: 1.0.8(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-react-hooks': - specifier: ^1.1.10 - version: 1.1.12(bufferutil@4.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-tokenpocket': - specifier: ^1.0.6 - version: 1.0.9(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-tronlink': - specifier: ^1.1.12 - version: 1.1.14(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-trust': - specifier: ^1.0.0 - version: 1.0.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) '@uidotdev/usehooks': specifier: ^2.4.1 version: 2.4.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@vercel/analytics': specifier: ^1.5.0 version: 1.6.1(next@16.3.0(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8) - '@walletconnect/ethereum-provider': - specifier: 2.21.8 - version: 2.21.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/types': - specifier: 2.21.8 - version: 2.21.8(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/universal-provider': - specifier: 2.21.8 - version: 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/utils': - specifier: 2.21.8 - version: 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) axios: specifier: '>=1.19.0' version: 1.19.0 @@ -324,9 +277,6 @@ importers: copy-to-clipboard: specifier: ^3.3.3 version: 3.3.3 - crypto-js: - specifier: ^4.1.1 - version: 4.2.0 formik: specifier: ^2.2.9 version: 2.4.9(@types/react@19.2.17)(react@19.2.8) @@ -336,30 +286,18 @@ importers: fuels: specifier: 'catalog:' version: 0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))) - get-starknet-core: - specifier: ^3.3.5 - version: 3.3.5(starknet@8.9.2) js-sha3: specifier: ^0.8.0 version: 0.8.0 - json-rpc-2.0: - specifier: 1.7.0 - version: 1.7.0 lucide-react: specifier: ^1.27.0 version: 1.27.0(react@19.2.8) - memoizee: - specifier: ^0.4.17 - version: 0.4.17 next: specifier: 16.3.0 version: 16.3.0(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - qrcode.react: - specifier: ^4.2.0 - version: 4.2.0(react@19.2.8) radix-ui: specifier: ^1.4.3 version: 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -375,15 +313,9 @@ importers: shadcn: specifier: ^4.1.2 version: 4.1.2(@types/node@20.19.34)(typescript@7.0.2) - socket.io-client: - specifier: ^4.8.3 - version: 4.8.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) starknet: specifier: 'catalog:' version: 8.9.2 - starknetkit: - specifier: ^3.2.0 - version: 3.4.3(@radix-ui/react-slot@1.2.4(@types/react@19.2.17)(react@19.2.8))(@react-native-async-storage/async-storage@1.24.0)(@scure/bip39@2.0.1)(@types/react@19.2.17)(bufferutil@4.1.0)(class-variance-authority@0.7.1)(clsx@1.2.1)(framer-motion@12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(starknet@8.9.2)(swr@2.4.0(react@19.2.8))(tailwind-merge@3.5.0)(tailwindcss-animate@1.0.7(tailwindcss@4.2.1))(tailwindcss@4.2.1)(typescript@7.0.2)(utf-8-validate@5.0.10) swr: specifier: ^2.2.5 version: 2.4.0(react@19.2.8) @@ -399,31 +331,22 @@ importers: tw-animate-css: specifier: ^1.4.0 version: 1.4.0 - uuid: - specifier: ^11.1.1 - version: 11.1.1 viem: specifier: 'catalog:' version: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) wagmi: specifier: 2.14.11 - version: 2.14.11(@react-native-async-storage/async-storage@1.24.0)(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + version: 2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) zustand: specifier: ^4.5.7 version: 4.5.7(@types/react@19.2.17)(react@19.2.8) devDependencies: - '@next/bundle-analyzer': - specifier: ^16.3.0 - version: 16.3.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) '@tailwindcss/postcss': specifier: ^4.2.1 version: 4.2.1 '@types/bn.js': specifier: ^5.1.0 version: 5.2.0 - '@types/crypto-js': - specifier: ^4.1.1 - version: 4.2.2 '@types/node': specifier: ^20 version: 20.19.34 @@ -433,15 +356,6 @@ importers: '@types/react-dom': specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.17) - '@web3-react/types': - specifier: ^6.0.7 - version: 6.0.7 - autoprefixer: - specifier: ^10.4.5 - version: 10.4.27(postcss@8.5.26) - file-loader: - specifier: ^6.2.0 - version: 6.2.0 tailwindcss: specifier: ^4.2.1 version: 4.2.1 @@ -683,9 +597,6 @@ importers: packages: - '@adobe/css-tools@4.4.4': - resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@adraffy/ens-normalize@1.10.1': resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} @@ -1306,10 +1217,6 @@ packages: resolution: {integrity: sha512-sGDPH1nW2EhJzjzHyINvTQwDNGRzdq/2vVzFwwrmFOHtIBaRjXGqo7wKj/JoJoNjuRSGeXz/EmaahRq0pgxzqw==} engines: {node: '>= 10'} - '@discoveryjs/json-ext@0.5.7': - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - '@dotenvx/dotenvx@1.59.1': resolution: {integrity: sha512-Qg+meC+XFxliuVSDlEPkKnaUjdaJKK6FNx/Wwl2UxhQR8pyPIuLhMavsF7ePdB9qFZUWV1jEK3ckbJir/WmF4w==} hasBin: true @@ -1531,6 +1438,96 @@ packages: resolution: {integrity: sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==} engines: {node: '>=18'} + '@ethersproject/abi@5.7.0': + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + + '@ethersproject/abstract-provider@5.7.0': + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + + '@ethersproject/abstract-signer@5.7.0': + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + + '@ethersproject/base64@5.7.0': + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + + '@ethersproject/basex@5.7.0': + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + + '@ethersproject/constants@5.7.0': + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + + '@ethersproject/contracts@5.7.0': + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + + '@ethersproject/hash@5.7.0': + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + + '@ethersproject/hdnode@5.7.0': + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + + '@ethersproject/json-wallets@5.7.0': + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + '@ethersproject/networks@5.7.1': + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + + '@ethersproject/pbkdf2@5.7.0': + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + + '@ethersproject/properties@5.7.0': + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + + '@ethersproject/providers@5.7.2': + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + + '@ethersproject/random@5.7.0': + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + + '@ethersproject/sha2@5.7.0': + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + + '@ethersproject/signing-key@5.7.0': + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + + '@ethersproject/solidity@5.7.0': + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + + '@ethersproject/strings@5.7.0': + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + + '@ethersproject/transactions@5.7.0': + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + + '@ethersproject/units@5.7.0': + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + + '@ethersproject/wallet@5.7.0': + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + + '@ethersproject/web@5.7.1': + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + + '@ethersproject/wordlists@5.7.0': + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + '@fivebinaries/coin-selection@3.0.0': resolution: {integrity: sha512-h25Pn1ZA7oqQBQDodGAgIsQt66T2wDge9onBKNqE66WNWL0KJiKJbpij8YOLo5AAlEIg5IS7EB1QjBgDOIg6DQ==} @@ -1626,13 +1623,6 @@ packages: engines: {node: ^20.0.0 || ^22.0.0 || ^24.0.0} hasBin: true - '@fuels/react@0.43.2': - resolution: {integrity: sha512-xcAAB4ahtYKPxjxb+zv93BSANksNAfCxjBNasUwKJ8rnRRksfLHJYb4YLCOU8vVLM8pGcwWj7rSr+6je5uJKww==} - peerDependencies: - '@tanstack/react-query': '>=5.0.0' - fuels: 0.101.1 - react: '>=18.0.0' - '@fuels/vm-asm@0.60.2': resolution: {integrity: sha512-wkCu63jTGJWpRZQirTaB8S4/gyoebEJLk3AKfnykt/lgWp1U9iHOcCICVHQP547i+y8jEVKwk18+huINFyYVFQ==} @@ -1922,30 +1912,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jest/diff-sequences@30.3.0': - resolution: {integrity: sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/expect-utils@30.3.0': - resolution: {integrity: sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/get-type@30.1.0': - resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/pattern@30.0.1': - resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/schemas@30.0.5': - resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/types@30.3.0': - resolution: {integrity: sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1987,8 +1953,77 @@ packages: resolution: {integrity: sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==} engines: {node: '>= 14.0.0'} - '@ledgerhq/devices@6.27.1': - resolution: {integrity: sha512-jX++oy89jtv7Dp2X6gwt3MMkoajel80JFWcdc0HCouwDsV1mVJ3SQdwl/bQU0zd8HI6KebvUP95QTwbQLLK/RQ==} + '@layerswap/ui-kit@2.0.0-next.0': + resolution: {integrity: sha512-MNXS75ZYoTBqlhL5GpnHgqxOGI1Fe2f/hyYnvL4oT9YAbC0C/xnnDB45x5IlrObbxsECJApHkmZzYpzkMZmc7A==} + engines: {node: '>=22'} + peerDependencies: + react: ^18.0 || ^19.0.0 || ^19.0.0-rc + zustand: ^4.5.7 + + '@layerswap/utils@2.0.0-next.0': + resolution: {integrity: sha512-IqDMJbTOWYQX0K8x8+hjviofK+OwaTe+oV5l6hpeLDx0IhE0VbYIFnJ982Q3NafP0oEGDXN1J/vfkrGTRLXXlw==} + engines: {node: '>=22'} + + '@layerswap/wallet-core@2.0.0-next.0': + resolution: {integrity: sha512-at6+PGrtsTe+dx7oTM46pTPx9JM1IIYWQPiMHJYsxnk/OTe/bMF4BeVOwcD1g+fkhJWEu++D4mz344X3CH7ZbQ==} + engines: {node: '>=22'} + peerDependencies: + react: ^18.0 || ^19.0.0 || ^19.0.0-rc + zustand: ^4.5.7 + + '@layerswap/wallet-evm@2.0.0-next.0': + resolution: {integrity: sha512-tlopGDS1Hu1TYLzouayqw2Yyo6k972uiShzxVv242/zhhB7NiSn8Qe494UTG+kDHvaxVIiu145RJvNJJcMOwXw==} + engines: {node: '>=22'} + peerDependencies: + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': ^2.0.0-next.0 + '@layerswap/widget-types': 1.0.0-next.0 + viem: ^2.21.16 + wagmi: 2.14.11 + zustand: ^4.5.7 + + '@layerswap/wallet-fuel@2.0.0-next.0': + resolution: {integrity: sha512-euT0JMH8f4pT09WFfbSMWfHgGN9eXlnNN2Rbx7K2b3pSqvhJgLmXdOhNP2lmMQzKU+HFExLSaFfRn4tFVrLMhQ==} + engines: {node: '>=22'} + peerDependencies: + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': ^2.0.0-next.0 + '@layerswap/widget-types': 1.0.0-next.0 + '@wagmi/core': 2.16.4 + viem: ^2.21.16 + wagmi: 2.14.11 + zustand: ^4.5.7 + + '@layerswap/wallet-starknet@2.0.0-next.0': + resolution: {integrity: sha512-kiVwWptPt2VLPQd1Hf/QoCTGTNoxfPjqY2efnp4SErHdC9+uiZdxU3a8LtNwzv7w87T+SWJO9CflkN6kj8oTIQ==} + engines: {node: '>=22'} + peerDependencies: + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': ^2.0.0-next.0 + '@layerswap/widget-types': 1.0.0-next.0 + zustand: ^4.5.7 + + '@layerswap/wallet-svm@2.0.0-next.0': + resolution: {integrity: sha512-ELMjSeBHLfqr0ap388u1LV8fCd3jVTQoWXOdK25zx4LFzjo8NM1ISRytIQRun7uP14R42PuULK1JAw0TUArEBA==} + engines: {node: '>=22'} + peerDependencies: + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': ^2.0.0-next.0 + '@layerswap/widget-types': 1.0.0-next.0 + zustand: ^4.5.7 + + '@layerswap/wallet-tron@2.0.0-next.0': + resolution: {integrity: sha512-JizkXIleO69CrWgwNuT18J/3rIprgZU7ibKKBpjXYqj1is+OkXD3vAPrwMs70fqwFQ7SqN0+LtcoPVNo09TzNQ==} + engines: {node: '>=22'} + peerDependencies: + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': ^2.0.0-next.0 + '@layerswap/widget-types': 1.0.0-next.0 + zustand: ^4.5.7 + + '@layerswap/widget-types@1.0.0-next.0': + resolution: {integrity: sha512-s/aUXiJ/Cc1ACv1F7eLzO0mNEZlmG05tb009A681DJkMb3yqubsFWM/hJ70MSBWZUGMWv6pBGWt1P8Z49ehmCA==} + engines: {node: '>=18'} '@ledgerhq/devices@8.10.0': resolution: {integrity: sha512-ytT66KI8MizFX6dGJKthOzPDw5uNRmmg+RaMta62jbFePKYqfXtYTp6Wc0ErTXaL8nFS3IujHENwKthPmsj6jw==} @@ -1996,18 +2031,9 @@ packages: '@ledgerhq/errors@6.29.0': resolution: {integrity: sha512-mmDsGN662zd0XGKyjzSKkg+5o1/l9pvV1HkVHtbzaydvHAtRypghmVoWMY9XAQDLXiUBXGIsLal84NgmGeuKWA==} - '@ledgerhq/hw-app-trx@6.29.2': - resolution: {integrity: sha512-sLb5IiGf2Sqc64iUMcudt+YyJ/J68YhpupxAQDnEsyhDTrxxrn4ihRIxeYTYOSUwsSP/VNZaAuL+zqn3IqsA0w==} - - '@ledgerhq/hw-transport-webhid@6.27.1': - resolution: {integrity: sha512-u74rBYlibpbyGblSn74fRs2pMM19gEAkYhfVibq0RE1GNFjxDMFC1n7Sb+93Jqmz8flyfB4UFJsxs8/l1tm2Kw==} - '@ledgerhq/hw-transport-webhid@6.31.0': resolution: {integrity: sha512-XtCFOJ1ooaqCefB6WDfV/ie+GaO/7xQgezwRpyLroMBYboSpnEd3Diu3BAoptXKTNklwZEiUVRLVXlltTBzNvw==} - '@ledgerhq/hw-transport@6.27.1': - resolution: {integrity: sha512-hnE4/Fq1YzQI4PA1W0H8tCkI99R3UWDb3pJeZd6/Xs4Qw/q1uiQO+vNLC6KIPPhK0IajUfuI/P2jk0qWcMsuAQ==} - '@ledgerhq/hw-transport@6.32.0': resolution: {integrity: sha512-bf2nxzDQ21DV/bsmExfWI0tatoVeoqhu/ePWalD/nPgPnTn/ZIDq7VBU+TY5p0JZaE87NQwmRUAjm6C1Exe61A==} @@ -2017,6 +2043,9 @@ packages: '@lit-labs/ssr-dom-shim@1.5.1': resolution: {integrity: sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==} + '@lit/reactive-element@1.6.3': + resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + '@lit/reactive-element@2.1.2': resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==} @@ -2154,6 +2183,31 @@ packages: '@module-federation/sdk@0.1.21': resolution: {integrity: sha512-r7xPiAm+O4e+8Zvw+8b4ToeD0D0VJD004nHmt+Y8r/l98J2eA6di72Vn1FeyjtQbCrFtiMw3ts/dlqtcmIBipw==} + '@motionone/animation@10.18.0': + resolution: {integrity: sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==} + + '@motionone/dom@10.18.0': + resolution: {integrity: sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==} + + '@motionone/easing@10.18.0': + resolution: {integrity: sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==} + + '@motionone/generators@10.18.0': + resolution: {integrity: sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==} + + '@motionone/svelte@10.16.4': + resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} + + '@motionone/types@10.17.1': + resolution: {integrity: sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==} + + '@motionone/utils@10.18.0': + resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} + + '@motionone/vue@10.16.4': + resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} + deprecated: Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion + '@msgpack/msgpack@3.1.2': resolution: {integrity: sha512-JEW4DEtBzfe8HvUYecLU9e6+XJnKDlUAIve8FvPzF3Kzs6Xo/KuZkZJsDH0wJXl/qEZbeeE7edxDNY3kMs39hQ==} engines: {node: '>= 18'} @@ -2196,9 +2250,6 @@ packages: resolution: {integrity: sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==} engines: {node: '>=18'} - '@next/bundle-analyzer@16.3.0': - resolution: {integrity: sha512-o8OiXKIATcSC6kHm5BIEmaDEDTFUDhpy9POQIbzAQTlb8NWwFhEQheTLFSbyQXxH2ywhjZ/e8EUlbOjj2k22Yg==} - '@next/env@16.3.0': resolution: {integrity: sha512-o9r1S0BNiNreHP9Vs+Qnqd9kviDkJh8xIACY7UFZSmiGbbQRzPBBosvHzAU4TULHOIuOj/18RSsyz2qrREmIFw==} @@ -2499,12 +2550,6 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/resources@2.5.1': - resolution: {integrity: sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/resources@2.8.0': resolution: {integrity: sha512-qmXQ27ilDbUK/vGMqwL8D4/rhn76C+sherM4wTbjlfknR8Nvfc/hCxjRJPhkzZzUsPiNg16SA31NxMabwttRjg==} engines: {node: ^18.19.0 || >=20.6.0} @@ -2624,7 +2669,7 @@ packages: '@paulmillr/qr@0.2.1': resolution: {integrity: sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==} - deprecated: 'The package is now available as "qr": npm install qr' + deprecated: 'Switch to "qr" (new package name) for security updates: npm install qr' '@pinojs/redact@0.4.0': resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} @@ -2633,9 +2678,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@polka/url@1.0.0-next.29': - resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@project-serum/sol-wallet-adapter@0.2.6': resolution: {integrity: sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g==} engines: {node: '>=10'} @@ -2799,15 +2841,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-context@1.1.0': - resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-context@1.1.2': resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: @@ -2826,19 +2859,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.1.1': - resolution: {integrity: sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-dialog@1.1.15': resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: @@ -2887,15 +2907,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-focus-guards@1.1.0': - resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-focus-guards@1.1.3': resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: @@ -2905,19 +2916,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-focus-scope@1.1.0': - resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: @@ -2957,15 +2955,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-id@1.1.0': - resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-id@1.1.1': resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: @@ -3079,19 +3068,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-portal@1.1.1': - resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-portal@1.1.9': resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: @@ -3105,19 +3081,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.0': - resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-presence@1.1.5': resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: @@ -3410,15 +3373,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-controllable-state@1.1.0': - resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-controllable-state@1.2.2': resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: @@ -3464,15 +3418,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-layout-effect@1.1.0': - resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-layout-effect@1.1.1': resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: @@ -3525,11 +3470,6 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@react-native-async-storage/async-storage@1.24.0': - resolution: {integrity: sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g==} - peerDependencies: - react-native: ^0.0.0-0 || >=0.60 <1.0 - '@reown/appkit-common@1.7.2': resolution: {integrity: sha512-DZkl3P5+Iw3TmsitWmWxYbuSCox8iuzngNp/XhbNDJd7t4Cj4akaIUxSEeCajNDiGHlu4HZnfyM1swWsOJ0cOw==} @@ -3724,9 +3664,6 @@ packages: '@sinclair/typebox@0.33.22': resolution: {integrity: sha512-auUj4k+f4pyrIVf4GW5UKquSZFHJWri06QgARy9C0t9ZTjJLIuNIrr1yl9bWcJWJ1Gz1vOvYN1D+QPaIlNMVkQ==} - '@sinclair/typebox@0.34.49': - resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} - '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} @@ -3950,24 +3887,6 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.5': - resolution: {integrity: sha512-xfQl6Kee0ZXagUG5mpy+bMhQTNf2LAzF65m5SSgNJp47y/nP9GdXWi9blVH8IPP+QjF/+DnCtURaXS14bk3WJw==} - peerDependencies: - '@solana/web3.js': ^1.58.0 - - '@solana-mobile/mobile-wallet-adapter-protocol@2.2.5': - resolution: {integrity: sha512-kCI+0/umWm98M9g12ndpS56U6wBzq4XdhobCkDPF8qRDYX/iTU8CD+QMcalh7VgRT7GWEmySQvQdaugM0Chf0g==} - peerDependencies: - react-native: '>0.69' - - '@solana-mobile/wallet-adapter-mobile@2.2.5': - resolution: {integrity: sha512-Zpzfwm3N4FfI63ZMs2qZChQ1j0z+p2prkZbSU51NyTnE+K9l9sDAl8RmRCOWnE29y+/AN10WuQZQoIAccHVOFg==} - peerDependencies: - '@solana/web3.js': ^1.58.0 - - '@solana-mobile/wallet-standard-mobile@0.4.4': - resolution: {integrity: sha512-LMvqkS5/aEH+EiDje9Dk351go6wO3POysgmobM4qm8RsG5s6rDAW3U0zA+5f2coGCTyRx8BKE1I/9nHlwtBuow==} - '@solana-program/compute-budget@0.8.0': resolution: {integrity: sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ==} peerDependencies: @@ -4031,12 +3950,6 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-core@4.0.0': - resolution: {integrity: sha512-28kNUsyIlhU3MO3/7ZLDqeJf2YAm32B4tnTjl5A9HrbBqsTZ+upT/RzxZGP1MMm7jnPuIKCMwmTpsyqyR6IUpw==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/codecs-data-structures@2.0.0-rc.1': resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} peerDependencies: @@ -4059,12 +3972,6 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/codecs-numbers@4.0.0': - resolution: {integrity: sha512-z9zpjtcwzqT9rbkKVZpkWB5/0V7+6YRKs6BccHkGJlaDx8Pe/+XOvPi2rEdXPqrPd9QWb5Xp1iBfcgaDMyiOiA==} - engines: {node: '>=20.18.0'} - peerDependencies: - typescript: '>=5.3.3' - '@solana/codecs-strings@2.0.0-rc.1': resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} peerDependencies: @@ -4078,13 +3985,6 @@ packages: fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5.3.3' - '@solana/codecs-strings@4.0.0': - resolution: {integrity: sha512-XvyD+sQ1zyA0amfxbpoFZsucLoe+yASQtDiLUGMDg5TZ82IHE3B7n82jE8d8cTAqi0HgqQiwU13snPhvg1O0Ow==} - engines: {node: '>=20.18.0'} - peerDependencies: - fastestsmallesttextencoderdecoder: ^1.0.22 - typescript: '>=5.3.3' - '@solana/codecs@2.0.0-rc.1': resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} peerDependencies: @@ -4109,13 +4009,6 @@ packages: peerDependencies: typescript: '>=5.3.3' - '@solana/errors@4.0.0': - resolution: {integrity: sha512-3YEtvcMvtcnTl4HahqLt0VnaGVf7vVWOnt6/uPky5e0qV6BlxDSbGkbBzttNjxLXHognV0AQi3pjvrtfUnZmbg==} - engines: {node: '>=20.18.0'} - hasBin: true - peerDependencies: - typescript: '>=5.3.3' - '@solana/fast-stable-stringify@2.3.0': resolution: {integrity: sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==} engines: {node: '>=20.18.0'} @@ -4428,18 +4321,11 @@ packages: peerDependencies: '@solana/web3.js': ^1.98.0 - '@solana/wallet-adapter-phantom@0.9.28': - resolution: {integrity: sha512-g/hcuWwWjzo5l8I4vor9htniVhLxd/GhoVK52WSd0hy8IZ8/FBnV3u8ABVTheLqO13d0IVy+xTxoVBbDaMjLog==} - engines: {node: '>=20'} - peerDependencies: - '@solana/web3.js': ^1.98.0 - - '@solana/wallet-adapter-react@0.15.39': - resolution: {integrity: sha512-WXtlo88ith5m22qB+qiGw301/Zb9r5pYr4QdXWmlXnRNqwST5MGmJWhG+/RVrzc+OG7kSb3z1gkVNv+2X/Y0Gg==} + '@solana/wallet-adapter-phantom@0.9.29': + resolution: {integrity: sha512-nAFvjtX2S1aRLzi70CSLajsmixGxev+1O1GzGzety4eyfv2AYxTHEuDIJySugcMTtSTleVpOMhHXjzlUkxuf1w==} engines: {node: '>=20'} peerDependencies: '@solana/web3.js': ^1.98.0 - react: '*' '@solana/wallet-adapter-safepal@0.5.22': resolution: {integrity: sha512-K1LlQIPoKgg3rdDIVUtMV218+uUM1kCtmuVKq2N+e+ZC8zK05cW3w7++nakDtU97AOmg+y4nsSFRCFsWBWmhTw==} @@ -4465,8 +4351,8 @@ packages: peerDependencies: '@solana/web3.js': ^1.98.0 - '@solana/wallet-adapter-solflare@0.6.32': - resolution: {integrity: sha512-FIqNyooif3yjPnw2gPNBZnsG6X9JYSrwCf1Oa0NN4/VxQcPjzGqvc+Tq1+js/nBOHju5roToeMFTbwNTdEOuZw==} + '@solana/wallet-adapter-solflare@0.6.33': + resolution: {integrity: sha512-eYDjpXMF+LyfWf5jG89IqJG2ehaEsWvv7P3y3NjPmhCqe0WjfFc2EwED19G4R0JUqdhnY5zFj+gn3pJ3ystGhg==} engines: {node: '>=20'} peerDependencies: '@solana/web3.js': ^1.98.0 @@ -4525,8 +4411,8 @@ packages: peerDependencies: '@solana/web3.js': ^1.98.0 - '@solana/wallet-adapter-wallets@0.19.37': - resolution: {integrity: sha512-LUHK2Zh6gELt0+kt+viIMxqc/bree65xZgTPXXBzjhbJNKJaV4D4wanYG2LM9O35/avehZ5BTLMHltbkibE+GA==} + '@solana/wallet-adapter-wallets@0.19.38': + resolution: {integrity: sha512-uwWP3DZe8uG9X80SMHo8+NvXaat8ChBnZExTcvQVQhxhvzsYdS04YyVhCiU0zFyPpmkZuBCsArHXDQnFr1XhjA==} engines: {node: '>=20'} peerDependencies: '@solana/web3.js': ^1.98.0 @@ -4541,10 +4427,6 @@ packages: resolution: {integrity: sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw==} engines: {node: '>=16'} - '@solana/wallet-standard-core@1.1.2': - resolution: {integrity: sha512-FaSmnVsIHkHhYlH8XX0Y4TYS+ebM+scW7ZeDkdXo3GiKge61Z34MfBPinZSUMV08hCtzxxqH2ydeU9+q/KDrLA==} - engines: {node: '>=16'} - '@solana/wallet-standard-features@1.3.0': resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} engines: {node: '>=16'} @@ -4560,34 +4442,68 @@ packages: '@solana/web3.js': ^1.98.0 bs58: ^6.0.0 - '@solana/wallet-standard-wallet-adapter-react@1.1.4': - resolution: {integrity: sha512-xa4KVmPgB7bTiWo4U7lg0N6dVUtt2I2WhEnKlIv0jdihNvtyhOjCKMjucWet6KAVhir6I/mSWrJk1U9SvVvhCg==} - engines: {node: '>=16'} - peerDependencies: - '@solana/wallet-adapter-base': '*' - react: '*' - - '@solana/wallet-standard-wallet-adapter@1.1.4': - resolution: {integrity: sha512-YSBrxwov4irg2hx9gcmM4VTew3ofNnkqsXQ42JwcS6ykF1P1ecVY8JCbrv75Nwe6UodnqeoZRbN7n/p3awtjNQ==} - engines: {node: '>=16'} - - '@solana/wallet-standard@1.1.4': - resolution: {integrity: sha512-NF+MI5tOxyvfTU4A+O5idh/gJFmjm52bMwsPpFGRSL79GECSN0XLmpVOO/jqTKJgac2uIeYDpQw/eMaQuWuUXw==} - engines: {node: '>=16'} - '@solana/web3.js@1.98.4': resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} - '@solflare-wallet/metamask-sdk@1.0.3': - resolution: {integrity: sha512-os5Px5PTMYKGS5tzOoyjDxtOtj0jZKnbI1Uwt8+Jsw1HHIA+Ib2UACCGNhQ/un2f8sIbTfLD1WuucNMOy8KZpQ==} - peerDependencies: - '@solana/web3.js': '*' - '@solflare-wallet/sdk@1.4.2': resolution: {integrity: sha512-jrseNWipwl9xXZgrzwZF3hhL0eIVxuEtoZOSLmuPuef7FgHjstuTtNJAeT4icA7pzdDV4hZvu54pI2r2f7SmrQ==} peerDependencies: '@solana/web3.js': '*' + '@stablelib/aead@1.0.1': + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} + + '@stablelib/binary@1.0.1': + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + + '@stablelib/bytes@1.0.1': + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} + + '@stablelib/chacha20poly1305@1.0.1': + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} + + '@stablelib/chacha@1.0.1': + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} + + '@stablelib/constant-time@1.0.1': + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + + '@stablelib/ed25519@1.0.3': + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} + + '@stablelib/hash@1.0.1': + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} + + '@stablelib/hkdf@1.0.1': + resolution: {integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==} + + '@stablelib/hmac@1.0.1': + resolution: {integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==} + + '@stablelib/int@1.0.1': + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + + '@stablelib/keyagreement@1.0.1': + resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} + + '@stablelib/poly1305@1.0.1': + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} + + '@stablelib/random@1.0.2': + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + + '@stablelib/sha256@1.0.1': + resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} + + '@stablelib/sha512@1.0.1': + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} + + '@stablelib/wipe@1.0.1': + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + + '@stablelib/x25519@1.0.3': + resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -4749,12 +4665,6 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-virtual@3.13.19': - resolution: {integrity: sha512-KzwmU1IbE0IvCZSm6OXkS+kRdrgW2c2P3Ho3NC+zZXWK6oObv/L+lcV/2VuJ+snVESRlMJ+w/fg4WXI/JzoNGQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.13.19': resolution: {integrity: sha512-/BMP7kNhzKOd7wnDeB8NrIRNLwkf5AhCYCvtfZV2GXWbBieFm/el0n6LOAXlTi6ZwHICSNnQcIxRCWHrLzDY+g==} @@ -4786,10 +4696,6 @@ packages: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} - '@testing-library/jest-dom@5.17.0': - resolution: {integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==} - engines: {node: '>=8', npm: '>=6', yarn: '>=1'} - '@testing-library/react@14.3.1': resolution: {integrity: sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==} engines: {node: '>=14'} @@ -4972,22 +4878,10 @@ packages: resolution: {integrity: sha512-2KGvaL5auUfAzf8TZQDE7y/dAP59sN4hdYDU5AjVgIlVpGMRWIgE4hzCaYAzk9hkQK/xaltmku24OprmJ7DwnQ==} engines: {node: '>=16', pnpm: '>=7'} - '@tronweb3/tronwallet-adapter-foxwallet@1.0.2': - resolution: {integrity: sha512-FmuYhrZqBfeGRz+s5EzDJmyBq6Su+aAb0wcyp6VS5Z1Ng9J5MpLkqWT0TgkdF8GbYy8aS3fu46BkvRbji9gt7A==} - engines: {node: '>=16', pnpm: '>=7'} - '@tronweb3/tronwallet-adapter-gatewallet@1.0.5': resolution: {integrity: sha512-5ioI8+XH8nrYD7G1NmUbEvvNTSE+3otEKzmxafas1awGsV8QZ1GGtqQtOyY4d6RRjoFv3SAE1UB0UDV6GIg5Og==} engines: {node: '>=18', pnpm: '>=9'} - '@tronweb3/tronwallet-adapter-imtoken@1.0.4': - resolution: {integrity: sha512-4g0/I+eIi9sbTEl4oe4VeLFHhqkfnFFYT91CKMXh7n9VfDSKDIfUubhlr3mILMqPUSGDXdke+yO22uUtXMZU9Q==} - engines: {node: '>=16', pnpm: '>=7'} - - '@tronweb3/tronwallet-adapter-ledger@1.1.13': - resolution: {integrity: sha512-pMjO9dxIFA53WsTbUTXA4NPocST4qXXDvpXx7WMTvm1ingBliOH5Jn2YwKFQ6B1dbcU/hBXWNGO6dN/K9ATmyQ==} - engines: {node: '>=16', pnpm: '>=7'} - '@tronweb3/tronwallet-adapter-metamask-tron@1.0.3': resolution: {integrity: sha512-3nWoHc6oX9GbrDJeChfXDupHPI6u+EMY/mSLEoN6MdGUSJwF057UzQ1nDzcgPWt+ySVOyk4NeIHr45e2608xlg==} engines: {node: '>=16', pnpm: '>=7'} @@ -4996,17 +4890,6 @@ packages: resolution: {integrity: sha512-WX/e3LHxl7Bw78C7GTrKC4Aq+zh/oTgx9iWJ8HacEAFxe7HLsglyPt7tI8zr79yuXQEg4ryok2eO/foLY4KRQQ==} engines: {node: '>=16', pnpm: '>=7'} - '@tronweb3/tronwallet-adapter-react-hooks@1.1.12': - resolution: {integrity: sha512-L7qTkfQ/usd2m3TbNCRC6qH6Jp6HwES0CpHR3xxYjScLeOxBlhvOSXmfjkE9sK0m+jR4iTKsExEXV+J0P88ERA==} - engines: {node: '>=16', pnpm: '>=7'} - peerDependencies: - react: '*' - react-dom: '*' - - '@tronweb3/tronwallet-adapter-tokenpocket@1.0.9': - resolution: {integrity: sha512-7WykmtFbC6Pelg6QrNt7fms1Wn3NlNsvx2UyGBPtEOFblSZJmbx37K1sjD9qSBiEV3gaE951ye0w8CgS6oQ2lg==} - engines: {node: '>=16', pnpm: '>=7'} - '@tronweb3/tronwallet-adapter-tronlink@1.1.14': resolution: {integrity: sha512-knfKownZrSU37LyvEe7eD2n2Aq5AaacapBDX29/LYjXN20jraZrF4Kh/waAKuoY8muOSUME29CQWOr3JZ96J7A==} engines: {node: '>=16', pnpm: '>=7'} @@ -5079,9 +4962,6 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/crypto-js@4.2.2': - resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} - '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -5096,21 +4976,6 @@ packages: peerDependencies: '@types/react': '*' - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jest@30.0.0': - resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -5139,15 +5004,9 @@ packages: '@types/request@2.48.13': resolution: {integrity: sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==} - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/statuses@2.0.6': resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} - '@types/testing-library__jest-dom@5.14.9': - resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} - '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} @@ -5172,12 +5031,6 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.35': - resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript/typescript-aix-ppc64@7.0.2': resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} engines: {node: '>=16.20.0'} @@ -5390,15 +5243,6 @@ packages: resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} engines: {node: '>=16'} - '@wallet-standard/core@1.1.1': - resolution: {integrity: sha512-5Xmjc6+Oe0hcPfVc5n8F77NVLwx1JVAoCVgQpLyv/43/bhtIif+Gx3WUrDlaSDoM8i2kA2xd6YoFbHCxs+e0zA==} - engines: {node: '>=16'} - - '@wallet-standard/errors@0.1.1': - resolution: {integrity: sha512-V8Ju1Wvol8i/VDyQOHhjhxmMVwmKiwyxUZBnHhtiPZJTWY0U/Shb2iEWyGngYEbAkp2sGTmEeNX1tVyGR7PqNw==} - engines: {node: '>=16'} - hasBin: true - '@wallet-standard/features@1.1.0': resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} engines: {node: '>=16'} @@ -5407,6 +5251,22 @@ packages: resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} engines: {node: '>=16'} + '@walletconnect/core@2.17.0': + resolution: {integrity: sha512-On+uSaCfWdsMIQsECwWHZBmUXfrnqmv6B8SXRRuTJgd8tUpEvBkLQH4X7XkSm3zW6ozEkQTCagZ2ox2YPn3kbw==} + engines: {node: '>=18'} + + '@walletconnect/core@2.19.0': + resolution: {integrity: sha512-AEoyICLHQEnjijZr9XsL4xtFhC5Cmu0RsEGxAxmwxbfGvAcYcSCNp1fYq0Q6nHc8jyoPOALpwySTle300Y1vxw==} + engines: {node: '>=18'} + + '@walletconnect/core@2.19.1': + resolution: {integrity: sha512-rMvpZS0tQXR/ivzOxN1GkHvw3jRRMlI/jRX5g7ZteLgg2L0ZcANsFvAU5IxILxIKcIkTCloF9TcfloKVbK3qmw==} + engines: {node: '>=18'} + + '@walletconnect/core@2.21.0': + resolution: {integrity: sha512-o6R7Ua4myxR8aRUAJ1z3gT9nM+jd2B2mfamu6arzy1Cc6vi10fIwFWb6vg3bC8xJ6o9H3n/cN5TOW3aA9Y1XVw==} + engines: {node: '>=18'} + '@walletconnect/core@2.21.8': resolution: {integrity: sha512-MD1SY7KAeHWvufiBK8C1MwP9/pxxI7SnKi/rHYfjco2Xvke+M+Bbm2OzvuSN7dYZvwLTkZCiJmBccTNVPCpSUQ==} engines: {node: '>=18'} @@ -5418,6 +5278,10 @@ packages: '@walletconnect/environment@1.0.1': resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} + '@walletconnect/ethereum-provider@2.17.0': + resolution: {integrity: sha512-b+KTAXOb6JjoxkwpgYQQKPUcTwENGmdEdZoIDLeRicUmZTn/IQKfkMoC2frClB4YxkyoVMtj1oMV2JAax+yu9A==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + '@walletconnect/ethereum-provider@2.21.8': resolution: {integrity: sha512-yjDlPpGMkuSXoIdmX7q7K7mDjPBqBqRW3hjXExhrRpbScdP92ZEFHoJf3E4ALDxdaV894ivXrOmMyGsoY5Eexg==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' @@ -5440,6 +5304,9 @@ packages: '@walletconnect/jsonrpc-utils@1.0.8': resolution: {integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==} + '@walletconnect/jsonrpc-ws-connection@1.0.14': + resolution: {integrity: sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA==} + '@walletconnect/jsonrpc-ws-connection@1.0.16': resolution: {integrity: sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q==} @@ -5457,15 +5324,44 @@ packages: '@walletconnect/logger@3.0.2': resolution: {integrity: sha512-7wR3wAwJTOmX4gbcUZcFMov8fjftY05+5cO/d4cpDD8wDzJ+cIlKdYOXaXfxHLSYeDazMXIsxMYjHYVDfkx+nA==} + '@walletconnect/modal-core@2.7.0': + resolution: {integrity: sha512-oyMIfdlNdpyKF2kTJowTixZSo0PGlCJRdssUN/EZdA6H6v03hZnf09JnwpljZNfir2M65Dvjm/15nGrDQnlxSA==} + + '@walletconnect/modal-ui@2.7.0': + resolution: {integrity: sha512-gERYvU7D7K1ANCN/8vUgsE0d2hnRemfAFZ2novm9aZBg7TEd/4EgB+AqbJ+1dc7GhOL6dazckVq78TgccHb7mQ==} + + '@walletconnect/modal@2.7.0': + resolution: {integrity: sha512-RQVt58oJ+rwqnPcIvRFeMGKuXb9qkgSmwz4noF8JZGUym3gUAzVs+uW2NQ1Owm9XOJAV+sANrtJ+VoVq1ftElw==} + deprecated: Please follow the migration guide on https://docs.reown.com/appkit/upgrade/wcm + '@walletconnect/relay-api@1.0.11': resolution: {integrity: sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==} + '@walletconnect/relay-auth@1.0.4': + resolution: {integrity: sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==} + '@walletconnect/relay-auth@1.1.0': resolution: {integrity: sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ==} '@walletconnect/safe-json@1.0.2': resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} + '@walletconnect/sign-client@2.17.0': + resolution: {integrity: sha512-sErYwvSSHQolNXni47L3Bm10ptJc1s1YoJvJd34s5E9h9+d3rj7PrhbiW9X82deN+Dm5oA8X9tC4xty1yIBrVg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + + '@walletconnect/sign-client@2.19.0': + resolution: {integrity: sha512-+GkuJzPK9SPq+RZgdKHNOvgRagxh/hhYWFHOeSiGh3DyAQofWuFTq4UrN/MPjKOYswSSBKfIa+iqKYsi4t8zLQ==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + + '@walletconnect/sign-client@2.19.1': + resolution: {integrity: sha512-OgBHRPo423S02ceN3lAzcZ3MYb1XuLyTTkKqLmKp/icYZCyRzm3/ynqJDKndiBLJ5LTic0y07LiZilnliYqlvw==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + + '@walletconnect/sign-client@2.21.0': + resolution: {integrity: sha512-z7h+PeLa5Au2R591d/8ZlziE0stJvdzP9jNFzFolf2RG/OiXulgFKum8PrIyXy+Rg2q95U9nRVUF9fWcn78yBA==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + '@walletconnect/sign-client@2.21.8': resolution: {integrity: sha512-lTcUbMjQ0YUZ5wzCLhpBeS9OkWYgLLly6BddEp2+pm4QxiwCCU2Nao0nBJXgzKbZYQOgrEGqtdm/7ze67gjzRA==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' @@ -5482,6 +5378,9 @@ packages: '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} + '@walletconnect/types@2.17.0': + resolution: {integrity: sha512-i1pn9URpvt9bcjRDkabuAmpA9K7mzyKoLJlbsAujRVX7pfaG7wur7u9Jz0bk1HxvuABL5LHNncTnVKSXKQ5jZA==} + '@walletconnect/types@2.19.0': resolution: {integrity: sha512-Ttse3p3DCdFQ/TRQrsPMQJzFr7cb/2AF5ltLPzXRNMmapmGydc6WO8QU7g/tGEB3RT9nHcLY2aqlwsND9sXMxA==} @@ -5497,13 +5396,38 @@ packages: '@walletconnect/types@2.23.6': resolution: {integrity: sha512-ZoAa/TnNzq1hfh4b7J+GU5IXaYidWw469N4nSji5irPg2KQXvQWW+mhzswGrzYEzD3K/OTFzo0bdkhYVrvTTMw==} + '@walletconnect/universal-provider@2.17.0': + resolution: {integrity: sha512-d3V5Be7AqLrvzcdMZSBS8DmGDRdqnyLk1DWmRKAGgR6ieUWykhhUKlvfeoZtvJrIXrY7rUGYpH1X41UtFkW5Pw==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + + '@walletconnect/universal-provider@2.19.0': + resolution: {integrity: sha512-e9JvadT5F8QwdLmd7qBrmACq04MT7LQEe1m3X2Fzvs3DWo8dzY8QbacnJy4XSv5PCdxMWnua+2EavBk8nrI9QA==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + + '@walletconnect/universal-provider@2.19.1': + resolution: {integrity: sha512-4rdLvJ2TGDIieNWW3sZw2MXlX65iHpTuKb5vyvUHQtjIVNLj+7X/09iUAI/poswhtspBK0ytwbH+AIT/nbGpjg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + + '@walletconnect/universal-provider@2.21.0': + resolution: {integrity: sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + '@walletconnect/universal-provider@2.21.8': resolution: {integrity: sha512-Nc1Z6VXnya152yucNDPnlTkrhG289tCUfcjiWqDmwNYzFSfdT5oJQHlnffQXlvoks90kn5Ru8Rnwag2CH1YOVQ==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + '@walletconnect/utils@2.17.0': + resolution: {integrity: sha512-1aeQvjwsXy4Yh9G6g2eGmXrEl+BzkNjHRdCrGdMYqFTFa8ROEJfTGsSH3pLsNDlOY94CoBUvJvM55q/PMoN/FQ==} + '@walletconnect/utils@2.19.0': resolution: {integrity: sha512-LZ0D8kevknKfrfA0Sq3Hf3PpmM8oWyNfsyWwFR51t//2LBgtN2Amz5xyoDDJcjLibIbKAxpuo/i0JYAQxz+aPA==} + '@walletconnect/utils@2.19.1': + resolution: {integrity: sha512-aOwcg+Hpph8niJSXLqkU25pmLR49B8ECXp5gFQDW5IeVgXHoOoK7w8a79GBhIBheMLlIt1322sTKQ7Rq5KzzFg==} + + '@walletconnect/utils@2.21.0': + resolution: {integrity: sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig==} + '@walletconnect/utils@2.21.8': resolution: {integrity: sha512-HtMraGJ9qXo55l4wGSM1aZvyz0XVv460iWhlRGAyRl9Yz8RQeKyXavDhwBfcTFha/6kwLxPExqQ+MURtKeVVXw==} @@ -5516,9 +5440,6 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} - '@web3-react/types@6.0.7': - resolution: {integrity: sha512-ofGmfDhxmNT1/P/MgVa8IKSkCStFiyvXe+U5tyZurKdrtTDFU+wJ/LxClPDtFerWpczNFPUSrKcuhfPX1sI6+A==} - '@xrplf/isomorphic@1.0.1': resolution: {integrity: sha512-0bIpgx8PDjYdrLFeC3csF305QQ1L7sxaWnL5y71mCvhenZzJgku9QsA+9QCXBC1eNYtxWO/xR91zrXJy2T/ixg==} engines: {node: '>=16.0.0'} @@ -5580,14 +5501,8 @@ packages: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} - acorn-walk@8.3.5: - resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} - engines: {node: '>=0.4.0'} - - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} - engines: {node: '>=0.4.0'} - hasBin: true + aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} @@ -5607,14 +5522,6 @@ packages: ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} @@ -5659,10 +5566,6 @@ packages: aria-query@5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - array-back@3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} engines: {node: '>=6'} @@ -5712,13 +5615,6 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - autoprefixer@10.4.27: - resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: '>=8.5.23' - available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -5743,6 +5639,10 @@ packages: resolution: {integrity: sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==} engines: {node: '>=0.12.0'} + base58-js@3.0.3: + resolution: {integrity: sha512-3hf42BysHnUqmZO7mK6e5X/hs1AvyEJIhdVLbG/Mxn/fhFnhGxOO37mWbMHg1RT4TxqcPKXgqj9/bp1YG0GBXA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -5755,6 +5655,9 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + bech32@2.0.0: resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} @@ -5762,9 +5665,6 @@ packages: resolution: {integrity: sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==} engines: {node: '>=0.6'} - big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - big.js@6.2.2: resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} @@ -5791,6 +5691,9 @@ packages: bip66@2.0.0: resolution: {integrity: sha512-kBG+hSpgvZBrkIm9dt5T1Hd/7xGCPEX2npoxAWZfsK1FvjgaxySEh2WizjyIstWXriKo9K9uJ4u0OnsyLDUPXQ==} + bitcoin-address-validation@3.0.0: + resolution: {integrity: sha512-R1X1c9EdgjgjTpjshjk5e16TbgF7HYasxBcu7l5ScWMxVs53845vMUg5PvnQ/R/3h8Grly6Y52DgH6/77gazLQ==} + bitcoin-ops@1.4.1: resolution: {integrity: sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==} @@ -5975,10 +5878,6 @@ packages: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} - chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -6001,10 +5900,6 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} - ci-info@4.4.0: - resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} - engines: {node: '>=8'} - cipher-base@1.0.7: resolution: {integrity: sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==} engines: {node: '>= 0.10'} @@ -6120,10 +6015,6 @@ packages: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} - commander@14.0.1: - resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} - engines: {node: '>=20'} - commander@14.0.3: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} @@ -6131,10 +6022,6 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -6247,9 +6134,6 @@ packages: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} deprecated: Active development of CryptoJS has been discontinued. This library is no longer maintained. - css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -6258,10 +6142,6 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - d@1.0.2: - resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} - engines: {node: '>=0.12'} - data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -6276,9 +6156,6 @@ packages: dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -6448,9 +6325,6 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - duplexify@4.1.3: resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} @@ -6482,10 +6356,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} @@ -6540,32 +6410,21 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + es-toolkit@1.33.0: + resolution: {integrity: sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg==} + es-toolkit@1.39.3: resolution: {integrity: sha512-Qb/TCFCldgOy8lZ5uC7nLGdqJwSabkQiYQShmw4jyiPk1pZzaYWTwaYKYP7EgLccWYgZocMrtItrwh683voaww==} es-toolkit@1.44.0: resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==} - es5-ext@0.10.64: - resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} - engines: {node: '>=0.10'} - - es6-iterator@2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} es6-promisify@5.0.0: resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} - es6-symbol@3.1.4: - resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} - engines: {node: '>=0.12'} - - es6-weak-map@2.0.3: - resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} - esbuild@0.25.3: resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} engines: {node: '>=18'} @@ -6582,21 +6441,9 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - esniff@2.0.1: - resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} - engines: {node: '>=0.10'} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -6626,6 +6473,9 @@ packages: ethereum-cryptography@2.2.1: resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + ethers@6.13.5: resolution: {integrity: sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ==} engines: {node: '>=14.0.0'} @@ -6637,9 +6487,6 @@ packages: ev-emitter@2.1.2: resolution: {integrity: sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q==} - event-emitter@0.3.5: - resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} - event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -6690,10 +6537,6 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - expect@30.3.0: - resolution: {integrity: sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - express-rate-limit@8.3.1: resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} engines: {node: '>= 16'} @@ -6704,9 +6547,6 @@ packages: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} - ext@1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -6777,12 +6617,6 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-loader@6.2.0: - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -6844,9 +6678,6 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - fraction.js@5.3.4: - resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - framer-motion@12.42.2: resolution: {integrity: sha512-5XY9luDiu0oHfHBjpDthFMh0ES+122w6p/papSJBweMkO8Sn+PW2QaEgRblQBpWFnuvZS5qvarpt/hO2pjGmnw==} peerDependencies: @@ -6939,12 +6770,6 @@ packages: get-size@3.0.0: resolution: {integrity: sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw==} - get-starknet-core@3.3.5: - resolution: {integrity: sha512-EiXfbVp1ZIKc4jjGA5hEyNsy9rnkH4ALpiMCD+4G2jtqo/Gq4TrcVzh//mJclLA8yHRh3576H1vbAeH5zA1CiQ==} - deprecated: Package no longer supported. Please use @starknet-io/get-starknet-core - peerDependencies: - starknet: ^5.18.0 - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -7007,10 +6832,6 @@ packages: resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} engines: {node: '>=14.0.0'} - gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - h3@1.15.11: resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} @@ -7066,6 +6887,9 @@ packages: help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} @@ -7083,9 +6907,6 @@ packages: html-entities@2.6.0: resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - http-assert@1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} engines: {node: '>= 0.8'} @@ -7150,10 +6971,6 @@ packages: resolution: {integrity: sha512-AiohS3H80sXO6owEltjGX+glb7qXaDhBoJb9XcQVH4UI207xu/bDLUcadVKp7Qe576reg9yr/PXZjV5qx8gfbA==} engines: {node: '>=18'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - inflation@2.1.0: resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} engines: {node: '>= 0.8.0'} @@ -7274,21 +7091,10 @@ packages: resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} engines: {node: '>=12'} - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - - is-promise@2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -7391,30 +7197,6 @@ packages: engines: {node: '>=8'} hasBin: true - jest-diff@30.3.0: - resolution: {integrity: sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-matcher-utils@30.3.0: - resolution: {integrity: sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-message-util@30.3.0: - resolution: {integrity: sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-mock@30.3.0: - resolution: {integrity: sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-regex-util@30.0.1: - resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-util@30.3.0: - resolution: {integrity: sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -7426,9 +7208,6 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} - js-base64@3.7.8: - resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} - js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} @@ -7463,9 +7242,6 @@ packages: json-rpc-random-id@1.0.1: resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -7718,12 +7494,21 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lit-element@3.3.3: + resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + lit-element@4.2.2: resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==} + lit-html@2.8.0: + resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + lit-html@3.3.2: resolution: {integrity: sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==} + lit@2.8.0: + resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} + lit@3.1.0: resolution: {integrity: sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==} @@ -7738,10 +7523,6 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -7815,8 +7596,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-queue@0.1.0: - resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + lucide-react@0.379.0: + resolution: {integrity: sha512-KcdeVPqmhRldldAAgptb8FjIunM2x2Zy26ZBh1RsEUcdLIvsEmbcw7KpzFYUy5BbpGeWhPu9Z9J5YXfStiXwhg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 lucide-react@1.27.0: resolution: {integrity: sha512-rJicGl/3Fly/E0rOH1YmPZ6e49JCnKknh1ox1vpHnkfjujAkKA6sqUZvH3MTAaXXjgexyUwgNwTJzTtYuAFYJw==} @@ -7845,18 +7628,10 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - memoizee@0.4.17: - resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} - engines: {node: '>=0.12'} - merge-descriptors@2.0.0: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} - merge-options@3.0.4: - resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} - engines: {node: '>=10'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -7910,10 +7685,6 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - mini-svg-data-uri@1.4.4: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} hasBin: true @@ -7965,9 +7736,8 @@ packages: motion-utils@12.39.0: resolution: {integrity: sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==} - mrmime@2.0.1: - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} - engines: {node: '>=10'} + motion@10.16.2: + resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -8027,9 +7797,6 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - next@16.3.0: resolution: {integrity: sha512-NEdGOzH+08eTXMUp9UYkA99Nhi5N6Thrhc1jgFOQgfgnGK/dA2hRwBpXep+exdFQrnwlRf/3Wixyp8lLBUpE2A==} engines: {node: '>=20.9.0'} @@ -8204,10 +7971,6 @@ packages: openapi-typescript-helpers@0.0.15: resolution: {integrity: sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==} - opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true - ora@8.2.0: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} @@ -8439,9 +8202,6 @@ packages: resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.26: resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} engines: {node: ^10 || ^12 || >=14} @@ -8450,9 +8210,6 @@ packages: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} - preact@10.23.0: - resolution: {integrity: sha512-Pox0jeY4q6PGkFB5AsXni+zHxxx/sAYFIFZzukW4nIpoJLRziRX0xC4WjZENlkSrDQvqVgZcaZzZ/NL8/A+H/w==} - preact@10.28.4: resolution: {integrity: sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ==} @@ -8460,10 +8217,6 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@30.3.0: - resolution: {integrity: sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - pretty-ms@9.3.0: resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} engines: {node: '>=18'} @@ -8503,6 +8256,9 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + proxy-compare@2.5.1: + resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + proxy-compare@2.6.0: resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==} @@ -8516,36 +8272,25 @@ packages: pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - pushdata-bitcoin@1.0.1: resolution: {integrity: sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ==} qr.js@0.0.0: resolution: {integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==} + qrcode-generator@2.0.4: + resolution: {integrity: sha512-mZSiP6RnbHl4xL2Ap5HfkjLnmxfKcPWpWe/c+5XxCuetEenqmNFf1FH/ftXPCtFG5/TDobjsjz6sSNL0Sr8Z9g==} + qrcode.react@1.0.1: resolution: {integrity: sha512-8d3Tackk8IRLXTo67Y+c1rpaiXjoz/Dd2HpcMdW//62/x8J1Nbho14Kh8x974t9prsLHN6XqVgcnRiBGFptQmg==} peerDependencies: react: ^15.5.3 || ^16.0.0 || ^17.0.0 - qrcode.react@4.2.0: - resolution: {integrity: sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - qrcode@1.5.3: resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} engines: {node: '>=10.13.0'} hasBin: true - qrcode@1.5.4: - resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} - engines: {node: '>=10.13.0'} - hasBin: true - qs@6.15.3: resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} engines: {node: '>=0.6'} @@ -8616,9 +8361,6 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} @@ -8634,6 +8376,12 @@ packages: react: ~16 react-dom: ~16 + react-qrcode-logo@4.1.0: + resolution: {integrity: sha512-drcieitJFX3u66XpFn+4PxsCzrQo5nAMXsyOtiuTZCJPUQwGwysIlr14MjKbXDhBNz3iOqM8/yV5K1mllt/mTw==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -8644,16 +8392,6 @@ packages: '@types/react': optional: true - react-remove-scroll@2.5.7: - resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - react-remove-scroll@2.7.2: resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} engines: {node: '>=10'} @@ -8720,10 +8458,6 @@ packages: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - redeyed@2.1.1: resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} @@ -8859,9 +8593,8 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} + scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} sdp@2.12.0: resolution: {integrity: sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==} @@ -8883,11 +8616,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} - engines: {node: '>=10'} - hasBin: true - semver@7.8.5: resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} @@ -8987,17 +8715,9 @@ packages: simple-swizzle@0.2.4: resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - slow-redact@0.3.2: resolution: {integrity: sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==} @@ -9049,10 +8769,6 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -9151,10 +8867,6 @@ packages: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - strip-json-comments@5.0.3: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} @@ -9250,10 +8962,6 @@ packages: thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} - timers-ext@0.1.8: - resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} - engines: {node: '>=0.12'} - tiny-case@1.0.3: resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} @@ -9314,10 +9022,6 @@ packages: toposort@2.0.2: resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - tough-cookie@6.0.1: resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} engines: {node: '>=16'} @@ -9328,6 +9032,9 @@ packages: tronweb@6.2.2: resolution: {integrity: sha512-jRBf4+7fJ0HUVzveBi0tE21r3EygCNtbYE92T38Sxlwr/x320W2vz+dvGLOIpp4kW/CvJ4HLvtnb6U30A0V2eA==} + tronweb@6.4.0: + resolution: {integrity: sha512-WyrjHKN6YSnV/Dvc4cdULDyXVKJfj4bqQ/8dib6FlOaQ1T/EiOjLtOx24hDgcn8lY/iVMy4Axchzurk1wGcRJg==} + trpc-browser@1.4.4: resolution: {integrity: sha512-5ZH/LqSoF008W8KU+4tfQ+g3F4Yl6BywDUnSlx5jT6fKa87mm8PkIXfhjGN1k6LoxjpMjy82bxvQzNLkJ3vUvw==} peerDependencies: @@ -9388,9 +9095,6 @@ packages: resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} engines: {node: '>= 18'} - type@2.7.3: - resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} - typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -9551,9 +9255,6 @@ packages: upper-case@2.0.2: resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - urijs@1.19.11: resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} @@ -9622,6 +9323,18 @@ packages: resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==} engines: {node: '>= 0.10'} + valtio@1.11.2: + resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=16.8' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + valtio@1.13.2: resolution: {integrity: sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A==} engines: {node: '>=12.20.0'} @@ -9778,11 +9491,6 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webpack-bundle-analyzer@4.10.1: - resolution: {integrity: sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==} - engines: {node: '>= 10.13.0'} - hasBin: true - webrtc-adapter@7.7.1: resolution: {integrity: sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A==} engines: {node: '>=6.0.0', npm: '>=3.10.0'} @@ -9975,8 +9683,6 @@ packages: snapshots: - '@adobe/css-tools@4.4.4': {} - '@adraffy/ens-normalize@1.10.1': {} '@adraffy/ens-normalize@1.11.1': {} @@ -11210,57 +10916,14 @@ snapshots: '@cartridge/controller-wasm@0.3.19': {} - '@cartridge/controller@0.10.7(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': - dependencies: - '@cartridge/controller-wasm': 0.3.19 - '@cartridge/penpal': 6.2.4 - '@starknet-io/types-js': 0.9.1 - '@telegram-apps/sdk': 2.11.3 - '@turnkey/sdk-browser': 4.3.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/ethereum-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) - bs58: 6.0.0 - cbor-x: 1.6.0 - ethers: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) - micro-sol-signer: 0.5.0 - mipd: 0.0.7(typescript@7.0.2) - open: 10.2.0 - starknet: 8.9.2 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - encoding - - ioredis - - react - - typescript - - uploadthing - - utf-8-validate - - zod - - '@cartridge/controller@0.10.7(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@cartridge/controller@0.10.7(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@cartridge/controller-wasm': 0.3.19 '@cartridge/penpal': 6.2.4 '@starknet-io/types-js': 0.9.1 '@telegram-apps/sdk': 2.11.3 '@turnkey/sdk-browser': 4.3.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/ethereum-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/ethereum-provider': 2.21.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) bs58: 6.0.0 cbor-x: 1.6.0 ethers: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) @@ -11395,8 +11058,6 @@ snapshots: '@crate-crypto/node-eth-kzg-win32-arm64-msvc': 0.10.0 '@crate-crypto/node-eth-kzg-win32-x64-msvc': 0.10.0 - '@discoveryjs/json-ext@0.5.7': {} - '@dotenvx/dotenvx@1.59.1': dependencies: commander: 11.1.0 @@ -11497,7 +11158,7 @@ snapshots: '@esbuild/win32-x64@0.25.3': optional: true - '@eth-optimism/contracts-ts@0.17.2(@types/react@19.2.17)(@wagmi/core@2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)(wagmi@2.14.11(@react-native-async-storage/async-storage@1.24.0)(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))': + '@eth-optimism/contracts-ts@0.17.2(@types/react@19.2.17)(@wagmi/core@2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)(wagmi@2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))': dependencies: '@testing-library/react': 14.3.1(@types/react@19.2.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/change-case': 2.3.5 @@ -11507,7 +11168,7 @@ snapshots: viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) optionalDependencies: '@wagmi/core': 2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - wagmi: 2.14.11(@react-native-async-storage/async-storage@1.24.0)(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + wagmi: 2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) transitivePeerDependencies: - '@types/react' - bufferutil @@ -11563,47 +11224,302 @@ snapshots: '@ethereumjs/rlp': 5.0.2 ethereum-cryptography: 2.2.1 - '@fivebinaries/coin-selection@3.0.0': + '@ethersproject/abi@5.7.0': dependencies: - '@emurgo/cardano-serialization-lib-browser': 13.2.1 - '@emurgo/cardano-serialization-lib-nodejs': 13.2.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 - '@floating-ui/core@1.7.4': + '@ethersproject/abstract-provider@5.7.0': dependencies: - '@floating-ui/utils': 0.2.10 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 - '@floating-ui/dom@1.7.5': + '@ethersproject/abstract-signer@5.7.0': dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/utils': 0.2.10 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 - '@floating-ui/react-dom@2.1.7(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@ethersproject/address@5.7.0': dependencies: - '@floating-ui/dom': 1.7.5 - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 - '@floating-ui/utils@0.2.10': {} - - '@fractalwagmi/popup-connection@1.1.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@ethersproject/base64@5.7.0': dependencies: - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) + '@ethersproject/bytes': 5.7.0 - '@fractalwagmi/solana-wallet-adapter@0.1.1(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@ethersproject/basex@5.7.0': dependencies: - '@fractalwagmi/popup-connection': 1.1.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - bs58: 5.0.0 - transitivePeerDependencies: - - '@solana/web3.js' - - react - - react-dom + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 - '@fuel-ts/abi-coder@0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2)))': + '@ethersproject/bignumber@5.7.0': dependencies: - '@fuel-ts/crypto': 0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))) - '@fuel-ts/errors': 0.101.3 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.3 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/constants@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + + '@ethersproject/contracts@5.7.0': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + + '@ethersproject/hash@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/hdnode@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/json-wallets@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/networks@5.7.1': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/pbkdf2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + + '@ethersproject/properties@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/providers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@ethersproject/random@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/sha2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + + '@ethersproject/signing-key@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.3 + elliptic: 6.6.1 + hash.js: 1.1.7 + + '@ethersproject/solidity@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/strings@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/transactions@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + + '@ethersproject/units@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/wallet@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/web@5.7.1': + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/wordlists@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@fivebinaries/coin-selection@3.0.0': + dependencies: + '@emurgo/cardano-serialization-lib-browser': 13.2.1 + '@emurgo/cardano-serialization-lib-nodejs': 13.2.0 + + '@floating-ui/core@1.7.4': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.5': + dependencies: + '@floating-ui/core': 1.7.4 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/react-dom@2.1.7(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@floating-ui/dom': 1.7.5 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@floating-ui/utils@0.2.10': {} + + '@fractalwagmi/popup-connection@1.1.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@fractalwagmi/solana-wallet-adapter@0.1.1(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@fractalwagmi/popup-connection': 1.1.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + bs58: 5.0.0 + transitivePeerDependencies: + - '@solana/web3.js' + - react + - react-dom + + '@fuel-ts/abi-coder@0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2)))': + dependencies: + '@fuel-ts/crypto': 0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))) + '@fuel-ts/errors': 0.101.3 '@fuel-ts/hasher': 0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))) '@fuel-ts/math': 0.101.3 '@fuel-ts/utils': 0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))) @@ -11774,18 +11690,6 @@ snapshots: chalk: 4.1.2 cli-table: 0.3.11 - '@fuels/react@0.43.2(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(fuels@0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': - dependencies: - '@radix-ui/react-dialog': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@tanstack/react-query': 5.90.21(react@19.2.8) - events: 3.3.0 - fuels: 0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))) - react: 19.2.8 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - '@fuels/vm-asm@0.60.2': {} '@google-cloud/paginator@5.0.2': @@ -11850,7 +11754,7 @@ snapshots: '@opentelemetry/instrumentation-fetch': 0.219.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-xml-http-request': 0.219.0(@opentelemetry/api@1.9.0) '@opentelemetry/otlp-transformer': 0.219.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-web': 2.10.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: @@ -12036,33 +11940,6 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jest/diff-sequences@30.3.0': {} - - '@jest/expect-utils@30.3.0': - dependencies: - '@jest/get-type': 30.1.0 - - '@jest/get-type@30.1.0': {} - - '@jest/pattern@30.0.1': - dependencies: - '@types/node': 20.19.34 - jest-regex-util: 30.0.1 - - '@jest/schemas@30.0.5': - dependencies: - '@sinclair/typebox': 0.34.49 - - '@jest/types@30.3.0': - dependencies: - '@jest/pattern': 30.0.1 - '@jest/schemas': 30.0.5 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.34 - '@types/yargs': 17.0.35 - chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -12132,149 +12009,382 @@ snapshots: dependencies: vary: 1.1.2 - '@ledgerhq/devices@6.27.1': - dependencies: - '@ledgerhq/errors': 6.29.0 - '@ledgerhq/logs': 6.14.0 - rxjs: 6.6.7 - semver: 7.7.4 - - '@ledgerhq/devices@8.10.0': - dependencies: - '@ledgerhq/errors': 6.29.0 - '@ledgerhq/logs': 6.14.0 - rxjs: 7.8.2 - semver: 7.7.3 - - '@ledgerhq/errors@6.29.0': {} - - '@ledgerhq/hw-app-trx@6.29.2': - dependencies: - '@ledgerhq/hw-transport': 6.32.0 - - '@ledgerhq/hw-transport-webhid@6.27.1': - dependencies: - '@ledgerhq/devices': 6.27.1 - '@ledgerhq/errors': 6.29.0 - '@ledgerhq/hw-transport': 6.32.0 - '@ledgerhq/logs': 6.14.0 - - '@ledgerhq/hw-transport-webhid@6.31.0': - dependencies: - '@ledgerhq/devices': 8.10.0 - '@ledgerhq/errors': 6.29.0 - '@ledgerhq/hw-transport': 6.32.0 - '@ledgerhq/logs': 6.14.0 - - '@ledgerhq/hw-transport@6.27.1': - dependencies: - '@ledgerhq/devices': 6.27.1 - '@ledgerhq/errors': 6.29.0 - events: 3.3.0 - - '@ledgerhq/hw-transport@6.32.0': - dependencies: - '@ledgerhq/devices': 8.10.0 - '@ledgerhq/errors': 6.29.0 - '@ledgerhq/logs': 6.14.0 - events: 3.3.0 - - '@ledgerhq/logs@6.14.0': {} - - '@lit-labs/ssr-dom-shim@1.5.1': {} - - '@lit/reactive-element@2.1.2': - dependencies: - '@lit-labs/ssr-dom-shim': 1.5.1 - - '@lmdb/lmdb-darwin-arm64@3.5.1': - optional: true - - '@lmdb/lmdb-darwin-x64@3.5.1': - optional: true - - '@lmdb/lmdb-linux-arm64@3.5.1': - optional: true - - '@lmdb/lmdb-linux-arm@3.5.1': - optional: true - - '@lmdb/lmdb-linux-x64@3.5.1': - optional: true - - '@lmdb/lmdb-win32-arm64@3.5.1': - optional: true - - '@lmdb/lmdb-win32-x64@3.5.1': - optional: true - - '@metamask/eth-json-rpc-provider@1.0.1': + '@layerswap/ui-kit@2.0.0-next.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8))': dependencies: - '@metamask/json-rpc-engine': 7.3.3 - '@metamask/safe-event-emitter': 3.1.2 - '@metamask/utils': 5.0.2 + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': 2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/widget-types': 1.0.0-next.0 + '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + clsx: 2.1.1 + copy-to-clipboard: 3.3.3 + framer-motion: 12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + lucide-react: 0.379.0(react@19.2.8) + react: 19.2.8 + react-qrcode-logo: 4.1.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + zustand: 4.5.7(@types/react@19.2.17)(react@19.2.8) transitivePeerDependencies: - - supports-color + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - react-dom - '@metamask/json-rpc-engine@7.3.3': + '@layerswap/utils@2.0.0-next.0': dependencies: - '@metamask/rpc-errors': 6.4.0 - '@metamask/safe-event-emitter': 3.1.2 - '@metamask/utils': 8.5.0 - transitivePeerDependencies: - - supports-color + '@layerswap/widget-types': 1.0.0-next.0 + bitcoin-address-validation: 3.0.0 + bn.js: 5.2.3 + bs58: 6.0.0 + csstype: 3.2.3 + js-sha3: 0.8.0 - '@metamask/json-rpc-engine@8.0.2': + '@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8))': dependencies: - '@metamask/rpc-errors': 6.4.0 - '@metamask/safe-event-emitter': 3.1.2 - '@metamask/utils': 8.5.0 - transitivePeerDependencies: - - supports-color + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/widget-types': 1.0.0-next.0 + react: 19.2.8 + zustand: 4.5.7(@types/react@19.2.17)(react@19.2.8) - '@metamask/json-rpc-middleware-stream@7.0.2': + '@layerswap/wallet-evm@2.0.0-next.0(@layerswap/utils@2.0.0-next.0)(@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)))(@layerswap/widget-types@1.0.0-next.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(wagmi@2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8))': dependencies: - '@metamask/json-rpc-engine': 8.0.2 - '@metamask/safe-event-emitter': 3.1.2 - '@metamask/utils': 8.5.0 - readable-stream: 3.6.2 + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': 2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/widget-types': 1.0.0-next.0 + '@metamask/sdk': 0.34.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/ethereum-provider': 2.21.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) + js-sha3: 0.8.0 + viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + wagmi: 2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + zustand: 4.5.7(@types/react@19.2.17)(react@19.2.8) transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react - supports-color + - typescript + - uploadthing + - utf-8-validate + - zod - '@metamask/multichain-api-client@0.11.0': {} - - '@metamask/object-multiplex@2.1.0': - dependencies: - once: 1.4.0 - readable-stream: 3.6.2 - - '@metamask/onboarding@1.0.1': - dependencies: - bowser: 2.14.1 - - '@metamask/providers@16.1.0': + '@layerswap/wallet-fuel@2.0.0-next.0(@layerswap/utils@2.0.0-next.0)(@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)))(@layerswap/widget-types@1.0.0-next.0)(@wagmi/core@2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(bufferutil@4.1.0)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2)))(wagmi@2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8))': dependencies: - '@metamask/json-rpc-engine': 8.0.2 - '@metamask/json-rpc-middleware-stream': 7.0.2 - '@metamask/object-multiplex': 2.1.0 - '@metamask/rpc-errors': 6.4.0 - '@metamask/safe-event-emitter': 3.1.2 - '@metamask/utils': 8.5.0 - detect-browser: 5.3.0 - extension-port-stream: 3.0.0 - fast-deep-equal: 3.1.3 - is-stream: 2.0.1 - readable-stream: 3.6.2 - webextension-polyfill: 0.10.0 + '@fuel-ts/account': 0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))) + '@fuel-ts/address': 0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))) + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': 2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/widget-types': 1.0.0-next.0 + '@wagmi/core': 2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + fuels: 0.101.3(vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(jiti@2.6.1)(msw@2.12.14(@types/node@20.19.34)(typescript@7.0.2))) + json-rpc-2.0: 1.7.0 + socket.io-client: 4.8.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + wagmi: 2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + zustand: 4.5.7(@types/react@19.2.17)(react@19.2.8) transitivePeerDependencies: + - bufferutil + - encoding - supports-color + - utf-8-validate + - vitest - '@metamask/rpc-errors@6.4.0': + '@layerswap/wallet-starknet@2.0.0-next.0(@layerswap/utils@2.0.0-next.0)(@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)))(@layerswap/widget-types@1.0.0-next.0)(@radix-ui/react-slot@1.2.4(@types/react@19.2.17)(react@19.2.8))(@scure/bip39@2.0.1)(@types/react@19.2.17)(bufferutil@4.1.0)(class-variance-authority@0.7.1)(clsx@1.2.1)(framer-motion@12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(swr@2.4.0(react@19.2.8))(tailwind-merge@3.5.0)(tailwindcss-animate@1.0.7(tailwindcss@4.2.1))(tailwindcss@4.2.1)(typescript@7.0.2)(utf-8-validate@5.0.10)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8))': dependencies: - '@metamask/utils': 9.3.0 - fast-safe-stringify: 2.1.1 - transitivePeerDependencies: - - supports-color + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': 2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/widget-types': 1.0.0-next.0 + '@starknet-io/get-starknet-core': 4.0.8 + '@starknet-io/types-js': 0.10.0 + '@starknet-react/core': 5.0.3(bufferutil@4.1.0)(react@19.2.8)(starknet@8.9.2)(typescript@7.0.2)(utf-8-validate@5.0.10) + bn.js: 5.2.3 + ethers: 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) + starknet: 8.9.2 + starknetkit: 3.4.3(@radix-ui/react-slot@1.2.4(@types/react@19.2.17)(react@19.2.8))(@scure/bip39@2.0.1)(@types/react@19.2.17)(bufferutil@4.1.0)(class-variance-authority@0.7.1)(clsx@1.2.1)(framer-motion@12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(starknet@8.9.2)(swr@2.4.0(react@19.2.8))(tailwind-merge@3.5.0)(tailwindcss-animate@1.0.7(tailwindcss@4.2.1))(tailwindcss@4.2.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + zustand: 4.5.7(@types/react@19.2.17)(react@19.2.8) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@chakra-ui/react' + - '@deno/kv' + - '@emotion/react' + - '@emotion/styled' + - '@netlify/blobs' + - '@planetscale/database' + - '@radix-ui/react-slot' + - '@react-native-async-storage/async-storage' + - '@scure/bip39' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@zxcvbn-ts/core' + - '@zxcvbn-ts/language-common' + - '@zxcvbn-ts/language-en' + - aws4fetch + - bufferutil + - class-variance-authority + - clsx + - colord + - db0 + - embla-carousel + - embla-carousel-react + - embla-carousel-wheel-gestures + - emittery + - encoding + - framer-motion + - get-starknet-core + - history + - i18next + - ioredis + - lightweight-charts + - object-hash + - popmotion + - react + - react-copy-to-clipboard + - react-i18next + - react-router-dom + - react-spring-bottom-sheet + - react-virtuoso + - swr + - tailwind-merge + - tailwindcss + - tailwindcss-animate + - typescript + - uploadthing + - url-join + - utf-8-validate + - zod + + '@layerswap/wallet-svm@2.0.0-next.0(@babel/runtime@7.28.6)(@layerswap/utils@2.0.0-next.0)(@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)))(@layerswap/widget-types@1.0.0-next.0)(@solana/sysvars@2.3.0(typescript@7.0.2))(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tslib@2.8.1)(typescript@7.0.2)(utf-8-validate@5.0.10)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8))': + dependencies: + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': 2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/widget-types': 1.0.0-next.0 + '@solana/spl-token': 0.4.14(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + '@solana/wallet-adapter-wallets': 0.19.38(@babel/runtime@7.28.6)(@solana/sysvars@2.3.0(typescript@7.0.2))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bs58@6.0.0)(bufferutil@4.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tslib@2.8.1)(typescript@7.0.2)(utf-8-validate@5.0.10)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@6.0.0) + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@wallet-standard/app': 1.1.0 + '@walletconnect/ethereum-provider': 2.21.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.21.8 + '@walletconnect/universal-provider': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/utils': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + bs58: 6.0.0 + zustand: 4.5.7(@types/react@19.2.17)(react@19.2.8) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@babel/runtime' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@sentry/types' + - '@solana/sysvars' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - debug + - encoding + - expo-constants + - expo-localization + - fastestsmallesttextencoderdecoder + - ioredis + - react + - react-dom + - react-native + - supports-color + - tslib + - typescript + - uploadthing + - utf-8-validate + - ws + - zod + + '@layerswap/wallet-tron@2.0.0-next.0(@layerswap/utils@2.0.0-next.0)(@layerswap/wallet-core@2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)))(@layerswap/widget-types@1.0.0-next.0)(bufferutil@4.1.0)(utf-8-validate@5.0.10)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8))': + dependencies: + '@layerswap/utils': 2.0.0-next.0 + '@layerswap/wallet-core': 2.0.0-next.0(react@19.2.8)(zustand@4.5.7(@types/react@19.2.17)(react@19.2.8)) + '@layerswap/widget-types': 1.0.0-next.0 + '@tronweb3/tronwallet-adapter-bitkeep': 1.1.8(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@tronweb3/tronwallet-adapter-bybit': 1.0.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@tronweb3/tronwallet-adapter-gatewallet': 1.0.5(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@tronweb3/tronwallet-adapter-metamask-tron': 1.0.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@tronweb3/tronwallet-adapter-okxwallet': 1.0.8(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@tronweb3/tronwallet-adapter-tronlink': 1.1.14(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@tronweb3/tronwallet-adapter-trust': 1.0.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + tronweb: 6.4.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + zustand: 4.5.7(@types/react@19.2.17)(react@19.2.8) + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@layerswap/widget-types@1.0.0-next.0': + dependencies: + csstype: 3.2.3 + + '@ledgerhq/devices@8.10.0': + dependencies: + '@ledgerhq/errors': 6.29.0 + '@ledgerhq/logs': 6.14.0 + rxjs: 7.8.2 + semver: 7.7.3 + + '@ledgerhq/errors@6.29.0': {} + + '@ledgerhq/hw-transport-webhid@6.31.0': + dependencies: + '@ledgerhq/devices': 8.10.0 + '@ledgerhq/errors': 6.29.0 + '@ledgerhq/hw-transport': 6.32.0 + '@ledgerhq/logs': 6.14.0 + + '@ledgerhq/hw-transport@6.32.0': + dependencies: + '@ledgerhq/devices': 8.10.0 + '@ledgerhq/errors': 6.29.0 + '@ledgerhq/logs': 6.14.0 + events: 3.3.0 + + '@ledgerhq/logs@6.14.0': {} + + '@lit-labs/ssr-dom-shim@1.5.1': {} + + '@lit/reactive-element@1.6.3': + dependencies: + '@lit-labs/ssr-dom-shim': 1.5.1 + + '@lit/reactive-element@2.1.2': + dependencies: + '@lit-labs/ssr-dom-shim': 1.5.1 + + '@lmdb/lmdb-darwin-arm64@3.5.1': + optional: true + + '@lmdb/lmdb-darwin-x64@3.5.1': + optional: true + + '@lmdb/lmdb-linux-arm64@3.5.1': + optional: true + + '@lmdb/lmdb-linux-arm@3.5.1': + optional: true + + '@lmdb/lmdb-linux-x64@3.5.1': + optional: true + + '@lmdb/lmdb-win32-arm64@3.5.1': + optional: true + + '@lmdb/lmdb-win32-x64@3.5.1': + optional: true + + '@metamask/eth-json-rpc-provider@1.0.1': + dependencies: + '@metamask/json-rpc-engine': 7.3.3 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 5.0.2 + transitivePeerDependencies: + - supports-color + + '@metamask/json-rpc-engine@7.3.3': + dependencies: + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + transitivePeerDependencies: + - supports-color + + '@metamask/json-rpc-engine@8.0.2': + dependencies: + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + transitivePeerDependencies: + - supports-color + + '@metamask/json-rpc-middleware-stream@7.0.2': + dependencies: + '@metamask/json-rpc-engine': 8.0.2 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + readable-stream: 3.6.2 + transitivePeerDependencies: + - supports-color + + '@metamask/multichain-api-client@0.11.0': {} + + '@metamask/object-multiplex@2.1.0': + dependencies: + once: 1.4.0 + readable-stream: 3.6.2 + + '@metamask/onboarding@1.0.1': + dependencies: + bowser: 2.14.1 + + '@metamask/providers@16.1.0': + dependencies: + '@metamask/json-rpc-engine': 8.0.2 + '@metamask/json-rpc-middleware-stream': 7.0.2 + '@metamask/object-multiplex': 2.1.0 + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + detect-browser: 5.3.0 + extension-port-stream: 3.0.0 + fast-deep-equal: 3.1.3 + is-stream: 2.0.1 + readable-stream: 3.6.2 + webextension-polyfill: 0.10.0 + transitivePeerDependencies: + - supports-color + + '@metamask/rpc-errors@6.4.0': + dependencies: + '@metamask/utils': 9.3.0 + fast-safe-stringify: 2.1.1 + transitivePeerDependencies: + - supports-color '@metamask/safe-event-emitter@2.0.0': {} @@ -12402,17 +12512,62 @@ snapshots: '@module-federation/sdk@0.1.21': {} - '@msgpack/msgpack@3.1.2': {} + '@motionone/animation@10.18.0': + dependencies: + '@motionone/easing': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + tslib: 2.8.1 - '@msgpack/msgpack@3.1.3': {} + '@motionone/dom@10.18.0': + dependencies: + '@motionone/animation': 10.18.0 + '@motionone/generators': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + hey-listen: 1.0.8 + tslib: 2.8.1 - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': - optional: true + '@motionone/easing@10.18.0': + dependencies: + '@motionone/utils': 10.18.0 + tslib: 2.8.1 - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': - optional: true + '@motionone/generators@10.18.0': + dependencies: + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + tslib: 2.8.1 - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + '@motionone/svelte@10.16.4': + dependencies: + '@motionone/dom': 10.18.0 + tslib: 2.8.1 + + '@motionone/types@10.17.1': {} + + '@motionone/utils@10.18.0': + dependencies: + '@motionone/types': 10.17.1 + hey-listen: 1.0.8 + tslib: 2.8.1 + + '@motionone/vue@10.16.4': + dependencies: + '@motionone/dom': 10.18.0 + tslib: 2.8.1 + + '@msgpack/msgpack@3.1.2': {} + + '@msgpack/msgpack@3.1.3': {} + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': optional: true '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': @@ -12433,13 +12588,6 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@next/bundle-analyzer@16.3.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)': - dependencies: - webpack-bundle-analyzer: 4.10.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - '@next/env@16.3.0': {} '@next/swc-darwin-arm64@16.3.0': @@ -12729,12 +12877,6 @@ snapshots: '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/resources@2.8.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -12873,8 +13015,6 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@polka/url@1.0.0-next.29': {} - '@project-serum/sol-wallet-adapter@0.2.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': dependencies: '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) @@ -13028,12 +13168,6 @@ snapshots: '@types/react': 19.2.17 '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@radix-ui/react-context@1.1.0(@types/react@19.2.17)(react@19.2.8)': - dependencies: - react: 19.2.8 - optionalDependencies: - '@types/react': 19.2.17 - '@radix-ui/react-context@1.1.2(@types/react@19.2.17)(react@19.2.8)': dependencies: react: 19.2.8 @@ -13046,28 +13180,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.17 - '@radix-ui/react-dialog@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-context': 1.1.0(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-focus-guards': 1.1.0(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-portal': 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-presence': 1.1.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-slot': 1.1.0(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.17)(react@19.2.8) - aria-hidden: 1.2.6 - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) - react-remove-scroll: 2.5.7(@types/react@19.2.17)(react@19.2.8) - optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -13124,29 +13236,12 @@ snapshots: '@types/react': 19.2.17 '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@radix-ui/react-focus-guards@1.1.0(@types/react@19.2.17)(react@19.2.8)': - dependencies: - react: 19.2.8 - optionalDependencies: - '@types/react': 19.2.17 - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.17)(react@19.2.8)': dependencies: react: 19.2.8 optionalDependencies: '@types/react': 19.2.17 - '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.17)(react@19.2.8) - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) - optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.8) @@ -13189,13 +13284,6 @@ snapshots: '@types/react': 19.2.17 '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@radix-ui/react-id@1.1.0(@types/react@19.2.17)(react@19.2.8)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.17)(react@19.2.8) - react: 19.2.8 - optionalDependencies: - '@types/react': 19.2.17 - '@radix-ui/react-id@1.1.1(@types/react@19.2.17)(react@19.2.8)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.8) @@ -13355,16 +13443,6 @@ snapshots: '@types/react': 19.2.17 '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@radix-ui/react-portal@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': - dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.17)(react@19.2.8) - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) - optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -13375,16 +13453,6 @@ snapshots: '@types/react': 19.2.17 '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@radix-ui/react-presence@1.1.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.17)(react@19.2.8) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.17)(react@19.2.8) - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) - optionalDependencies: - '@types/react': 19.2.17 - '@types/react-dom': 19.2.3(@types/react@19.2.17) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.8) @@ -13696,13 +13764,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.17 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.17)(react@19.2.8)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.17)(react@19.2.8) - react: 19.2.8 - optionalDependencies: - '@types/react': 19.2.17 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.17)(react@19.2.8)': dependencies: '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.17)(react@19.2.8) @@ -13739,12 +13800,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.17 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.17)(react@19.2.8)': - dependencies: - react: 19.2.8 - optionalDependencies: - '@types/react': 19.2.17 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.17)(react@19.2.8)': dependencies: react: 19.2.8 @@ -13782,11 +13837,6 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@react-native-async-storage/async-storage@1.24.0': - dependencies: - merge-options: 3.0.4 - optional: true - '@reown/appkit-common@1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: big.js: 6.2.2 @@ -13831,11 +13881,11 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-controllers@1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) valtio: 1.13.2(@types/react@19.2.17)(react@19.2.8) viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -13866,11 +13916,11 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-controllers@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) valtio: 1.13.2(@types/react@19.2.17)(react@18.3.1) viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -13901,11 +13951,11 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-controllers@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) valtio: 1.13.2(@types/react@19.2.17)(react@19.2.8) viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -13936,12 +13986,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-pay@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-ui': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-utils': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) lit: 3.3.0 valtio: 1.13.2(@types/react@19.2.17)(react@18.3.1) transitivePeerDependencies: @@ -13972,12 +14022,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-pay@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-ui': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-utils': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) lit: 3.3.0 valtio: 1.13.2(@types/react@19.2.17)(react@19.2.8) transitivePeerDependencies: @@ -14016,12 +14066,12 @@ snapshots: dependencies: buffer: 6.0.3 - '@reown/appkit-scaffold-ui@1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-scaffold-ui@1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-utils': 1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-ui': 1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-utils': 1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) lit: 3.1.0 transitivePeerDependencies: @@ -14052,12 +14102,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-scaffold-ui@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-ui': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-utils': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: @@ -14088,12 +14138,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-scaffold-ui@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-ui': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-utils': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: @@ -14124,10 +14174,10 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-ui@1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-ui@1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) lit: 3.1.0 qrcode: 1.5.3 @@ -14159,10 +14209,10 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-ui@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-ui@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 @@ -14194,10 +14244,10 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-ui@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-ui@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 @@ -14229,14 +14279,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-utils@1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-polyfills': 1.7.2 '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) valtio: 1.13.2(@types/react@19.2.17)(react@19.2.8) viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -14267,14 +14317,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-utils@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-polyfills': 1.7.8 '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) valtio: 1.13.2(@types/react@19.2.17)(react@18.3.1) viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -14305,14 +14355,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit-utils@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-polyfills': 1.7.8 '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) valtio: 1.13.2(@types/react@19.2.17)(react@19.2.8) viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -14365,17 +14415,17 @@ snapshots: - typescript - utf-8-validate - '@reown/appkit@1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit@1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-polyfills': 1.7.2 - '@reown/appkit-scaffold-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-utils': 1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-scaffold-ui': 1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-ui': 1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-utils': 1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.19.1(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.19.1 + '@walletconnect/universal-provider': 2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.2.17)(react@19.2.8) viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) @@ -14407,18 +14457,18 @@ snapshots: - utf-8-validate - zod - '@reown/appkit@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-pay': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-pay': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-ui': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-utils': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.21.0(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.21.0 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.2.17)(react@18.3.1) viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) @@ -14450,18 +14500,18 @@ snapshots: - utf-8-validate - zod - '@reown/appkit@1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@reown/appkit@1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@reown/appkit-common': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-controllers': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-pay': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-pay': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-ui': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@reown/appkit-utils': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.21.0(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.21.0 + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.2.17)(react@19.2.8) viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) @@ -14612,8 +14662,6 @@ snapshots: '@sinclair/typebox@0.33.22': {} - '@sinclair/typebox@0.34.49': {} - '@sindresorhus/merge-streams@4.0.0': {} '@smithy/abort-controller@4.2.10': @@ -14956,68 +15004,6 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(react@19.2.8)(typescript@7.0.2)': - dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.8)(typescript@7.0.2) - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - bs58: 5.0.0 - js-base64: 3.7.8 - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - fastestsmallesttextencoderdecoder - - react - - react-native - - typescript - - '@solana-mobile/mobile-wallet-adapter-protocol@2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.8)(typescript@7.0.2)': - dependencies: - '@solana/codecs-strings': 4.0.0(typescript@7.0.2) - '@solana/wallet-standard': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.8) - '@solana/wallet-standard-util': 1.1.2 - '@wallet-standard/core': 1.1.1 - js-base64: 3.7.8 - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - fastestsmallesttextencoderdecoder - - react - - typescript - - '@solana-mobile/wallet-adapter-mobile@2.2.5(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(react@19.2.8)(typescript@7.0.2)': - dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(react@19.2.8)(typescript@7.0.2) - '@solana-mobile/wallet-standard-mobile': 0.4.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(react@19.2.8)(typescript@7.0.2) - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-features': 1.3.0 - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - js-base64: 3.7.8 - optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0 - transitivePeerDependencies: - - fastestsmallesttextencoderdecoder - - react - - react-native - - typescript - - '@solana-mobile/wallet-standard-mobile@0.4.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(react@19.2.8)(typescript@7.0.2)': - dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.8)(typescript@7.0.2) - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - bs58: 5.0.0 - js-base64: 3.7.8 - qrcode: 1.5.4 - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - fastestsmallesttextencoderdecoder - - react - - react-native - - typescript - '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(typescript@7.0.2)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(typescript@7.0.2)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) @@ -15093,11 +15079,6 @@ snapshots: '@solana/errors': 2.3.0(typescript@7.0.2) typescript: 7.0.2 - '@solana/codecs-core@4.0.0(typescript@7.0.2)': - dependencies: - '@solana/errors': 4.0.0(typescript@7.0.2) - typescript: 7.0.2 - '@solana/codecs-data-structures@2.0.0-rc.1(typescript@7.0.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@7.0.2) @@ -15124,12 +15105,6 @@ snapshots: '@solana/errors': 2.3.0(typescript@7.0.2) typescript: 7.0.2 - '@solana/codecs-numbers@4.0.0(typescript@7.0.2)': - dependencies: - '@solana/codecs-core': 4.0.0(typescript@7.0.2) - '@solana/errors': 4.0.0(typescript@7.0.2) - typescript: 7.0.2 - '@solana/codecs-strings@2.0.0-rc.1(typescript@7.0.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@7.0.2) @@ -15144,13 +15119,6 @@ snapshots: '@solana/errors': 2.3.0(typescript@7.0.2) typescript: 7.0.2 - '@solana/codecs-strings@4.0.0(typescript@7.0.2)': - dependencies: - '@solana/codecs-core': 4.0.0(typescript@7.0.2) - '@solana/codecs-numbers': 4.0.0(typescript@7.0.2) - '@solana/errors': 4.0.0(typescript@7.0.2) - typescript: 7.0.2 - '@solana/codecs@2.0.0-rc.1(typescript@7.0.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@7.0.2) @@ -15185,12 +15153,6 @@ snapshots: commander: 14.0.3 typescript: 7.0.2 - '@solana/errors@4.0.0(typescript@7.0.2)': - dependencies: - chalk: 5.6.2 - commander: 14.0.1 - typescript: 7.0.2 - '@solana/fast-stable-stringify@2.3.0(typescript@7.0.2)': dependencies: typescript: 7.0.2 @@ -15644,23 +15606,10 @@ snapshots: transitivePeerDependencies: - bs58 - '@solana/wallet-adapter-phantom@0.9.28(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': - dependencies: - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - - '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.2.8)(typescript@7.0.2)': + '@solana/wallet-adapter-phantom@0.9.29(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.2.5(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(react@19.2.8)(typescript@7.0.2) '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.2.8) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - react: 19.2.8 - transitivePeerDependencies: - - bs58 - - fastestsmallesttextencoderdecoder - - react-native - - typescript '@solana/wallet-adapter-safepal@0.5.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': dependencies: @@ -15683,14 +15632,11 @@ snapshots: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-solflare@0.6.32(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': + '@solana/wallet-adapter-solflare@0.6.33(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': dependencies: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-chains': 1.1.1 '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@solflare-wallet/metamask-sdk': 1.0.3(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solflare-wallet/sdk': 1.4.2(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@wallet-standard/wallet': 1.1.0 '@solana/wallet-adapter-solong@0.9.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': dependencies: @@ -15764,11 +15710,11 @@ snapshots: '@solana/wallet-standard-util': 1.1.2 '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-walletconnect@0.1.21(@react-native-async-storage/async-storage@1.24.0)(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@solana/wallet-adapter-walletconnect@0.1.21(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/solana-adapter': 0.0.8(@react-native-async-storage/async-storage@1.24.0)(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/solana-adapter': 0.0.8(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -15797,7 +15743,7 @@ snapshots: - utf-8-validate - zod - '@solana/wallet-adapter-wallets@0.19.37(@babel/runtime@7.28.6)(@react-native-async-storage/async-storage@1.24.0)(@solana/sysvars@2.3.0(typescript@7.0.2))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bs58@6.0.0)(bufferutil@4.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tslib@2.8.1)(typescript@7.0.2)(utf-8-validate@5.0.10)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))': + '@solana/wallet-adapter-wallets@0.19.38(@babel/runtime@7.28.6)(@solana/sysvars@2.3.0(typescript@7.0.2))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bs58@6.0.0)(bufferutil@4.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tslib@2.8.1)(typescript@7.0.2)(utf-8-validate@5.0.10)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))': dependencies: '@solana/wallet-adapter-alpha': 0.1.14(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-avana': 0.1.17(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) @@ -15819,12 +15765,12 @@ snapshots: '@solana/wallet-adapter-nufi': 0.1.21(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-onto': 0.1.11(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-particle': 0.1.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@6.0.0) - '@solana/wallet-adapter-phantom': 0.9.28(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + '@solana/wallet-adapter-phantom': 0.9.29(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-safepal': 0.5.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-saifu': 0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-salmon': 0.1.18(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-sky': 0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-solflare': 0.6.32(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + '@solana/wallet-adapter-solflare': 0.6.33(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-solong': 0.9.22(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-spot': 0.1.19(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-tokenary': 0.1.16(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) @@ -15833,7 +15779,7 @@ snapshots: '@solana/wallet-adapter-trezor': 0.1.6(@solana/sysvars@2.3.0(typescript@7.0.2))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(tslib@2.8.1)(typescript@7.0.2)(utf-8-validate@5.0.10)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-trust': 0.1.17(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-unsafe-burner': 0.1.11(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-walletconnect': 0.1.21(@react-native-async-storage/async-storage@1.24.0)(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@solana/wallet-adapter-walletconnect': 0.1.21(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) '@solana/wallet-adapter-xdefi': 0.1.11(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -15886,12 +15832,6 @@ snapshots: dependencies: '@wallet-standard/base': 1.1.0 - '@solana/wallet-standard-core@1.1.2': - dependencies: - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-util': 1.1.2 - '@solana/wallet-standard-features@1.3.0': dependencies: '@wallet-standard/base': 1.1.0 @@ -15903,19 +15843,6 @@ snapshots: '@solana/wallet-standard-chains': 1.1.1 '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0)': - dependencies: - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-util': 1.1.2 - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - '@wallet-standard/wallet': 1.1.0 - bs58: 5.0.0 - '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@6.0.0)': dependencies: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) @@ -15929,48 +15856,6 @@ snapshots: '@wallet-standard/wallet': 1.1.0 bs58: 6.0.0 - '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.8)': - dependencies: - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - react: 19.2.8 - transitivePeerDependencies: - - '@solana/web3.js' - - bs58 - - '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.2.8)': - dependencies: - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@6.0.0) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - react: 19.2.8 - transitivePeerDependencies: - - '@solana/web3.js' - - bs58 - - '@solana/wallet-standard-wallet-adapter@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.8)': - dependencies: - '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.8) - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - react - - '@solana/wallet-standard@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.8)': - dependencies: - '@solana/wallet-standard-core': 1.1.2 - '@solana/wallet-standard-wallet-adapter': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.8) - transitivePeerDependencies: - - '@solana/wallet-adapter-base' - - '@solana/web3.js' - - bs58 - - react - '@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.28.6 @@ -15994,21 +15879,92 @@ snapshots: - typescript - utf-8-validate - '@solflare-wallet/metamask-sdk@1.0.3(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': + '@solflare-wallet/sdk@1.4.2(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': dependencies: - '@solana/wallet-standard-features': 1.3.0 '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@wallet-standard/base': 1.1.0 bs58: 5.0.0 eventemitter3: 5.0.4 uuid: 11.1.1 - '@solflare-wallet/sdk@1.4.2(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': + '@stablelib/aead@1.0.1': {} + + '@stablelib/binary@1.0.1': dependencies: - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - bs58: 5.0.0 - eventemitter3: 5.0.4 - uuid: 11.1.1 + '@stablelib/int': 1.0.1 + + '@stablelib/bytes@1.0.1': {} + + '@stablelib/chacha20poly1305@1.0.1': + dependencies: + '@stablelib/aead': 1.0.1 + '@stablelib/binary': 1.0.1 + '@stablelib/chacha': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/poly1305': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/chacha@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/constant-time@1.0.1': {} + + '@stablelib/ed25519@1.0.3': + dependencies: + '@stablelib/random': 1.0.2 + '@stablelib/sha512': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/hash@1.0.1': {} + + '@stablelib/hkdf@1.0.1': + dependencies: + '@stablelib/hash': 1.0.1 + '@stablelib/hmac': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/hmac@1.0.1': + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/int@1.0.1': {} + + '@stablelib/keyagreement@1.0.1': + dependencies: + '@stablelib/bytes': 1.0.1 + + '@stablelib/poly1305@1.0.1': + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/random@1.0.2': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/sha256@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/sha512@1.0.1': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/wipe@1.0.1': {} + + '@stablelib/x25519@1.0.3': + dependencies: + '@stablelib/keyagreement': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 '@standard-schema/spec@1.1.0': {} @@ -16035,14 +15991,13 @@ snapshots: '@starknet-react/chains@5.0.3': {} - '@starknet-react/core@5.0.3(bufferutil@4.1.0)(get-starknet-core@3.3.5(starknet@8.9.2))(react@19.2.8)(starknet@8.9.2)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@starknet-react/core@5.0.3(bufferutil@4.1.0)(react@19.2.8)(starknet@8.9.2)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@starknet-io/types-js': 0.7.10 '@starknet-react/chains': 5.0.3 '@tanstack/react-query': 5.90.21(react@19.2.8) abi-wan-kanabi: 2.2.4 eventemitter3: 5.0.4 - get-starknet-core: 3.3.5(starknet@8.9.2) react: 19.2.8 starknet: 8.9.2 viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)(zod@3.25.76) @@ -16171,12 +16126,6 @@ snapshots: '@tanstack/query-core': 5.90.20 react: 19.2.8 - '@tanstack/react-virtual@3.13.19(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': - dependencies: - '@tanstack/virtual-core': 3.13.19 - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) - '@tanstack/virtual-core@3.13.19': {} '@telegram-apps/bridge@1.9.2': @@ -16218,18 +16167,6 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@5.17.0': - dependencies: - '@adobe/css-tools': 4.4.4 - '@babel/runtime': 7.28.6 - '@types/testing-library__jest-dom': 5.14.9 - aria-query: 5.3.2 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.5.16 - lodash: 4.18.1 - redent: 3.0.0 - '@testing-library/react@14.3.1(@types/react@19.2.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.6 @@ -16614,16 +16551,6 @@ snapshots: - supports-color - utf-8-validate - '@tronweb3/tronwallet-adapter-foxwallet@1.0.2(bufferutil@4.1.0)(utf-8-validate@5.0.10)': - dependencies: - '@tronweb3/tronwallet-abstract-adapter': 1.1.12(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-tronlink': 1.1.14(bufferutil@4.1.0)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - '@tronweb3/tronwallet-adapter-gatewallet@1.0.5(bufferutil@4.1.0)(utf-8-validate@5.0.10)': dependencies: '@tronweb3/tronwallet-abstract-adapter': 1.1.12(bufferutil@4.1.0)(utf-8-validate@5.0.10) @@ -16634,33 +16561,6 @@ snapshots: - supports-color - utf-8-validate - '@tronweb3/tronwallet-adapter-imtoken@1.0.4(bufferutil@4.1.0)(utf-8-validate@5.0.10)': - dependencies: - '@tronweb3/tronwallet-abstract-adapter': 1.1.12(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-tronlink': 1.1.14(bufferutil@4.1.0)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - - '@tronweb3/tronwallet-adapter-ledger@1.1.13(bufferutil@4.1.0)(utf-8-validate@5.0.10)': - dependencies: - '@ledgerhq/hw-app-trx': 6.29.2 - '@ledgerhq/hw-transport': 6.27.1 - '@ledgerhq/hw-transport-webhid': 6.27.1 - '@testing-library/jest-dom': 5.17.0 - '@tronweb3/tronwallet-abstract-adapter': 1.1.12(bufferutil@4.1.0)(utf-8-validate@5.0.10) - buffer: 6.0.3 - eventemitter3: 5.0.4 - preact: 10.23.0 - tronweb: 6.2.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - '@tronweb3/tronwallet-adapter-metamask-tron@1.0.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)': dependencies: '@metamask/multichain-api-client': 0.11.0 @@ -16681,28 +16581,6 @@ snapshots: - supports-color - utf-8-validate - '@tronweb3/tronwallet-adapter-react-hooks@1.1.12(bufferutil@4.1.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(utf-8-validate@5.0.10)': - dependencies: - '@tronweb3/tronwallet-abstract-adapter': 1.1.12(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-tronlink': 1.1.14(bufferutil@4.1.0)(utf-8-validate@5.0.10) - react: 19.2.8 - react-dom: 19.2.8(react@19.2.8) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - - '@tronweb3/tronwallet-adapter-tokenpocket@1.0.9(bufferutil@4.1.0)(utf-8-validate@5.0.10)': - dependencies: - '@tronweb3/tronwallet-abstract-adapter': 1.1.12(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@tronweb3/tronwallet-adapter-tronlink': 1.1.14(bufferutil@4.1.0)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - '@tronweb3/tronwallet-adapter-tronlink@1.1.14(bufferutil@4.1.0)(utf-8-validate@5.0.10)': dependencies: '@tronweb3/tronwallet-abstract-adapter': 1.1.12(bufferutil@4.1.0)(utf-8-validate@5.0.10) @@ -16823,8 +16701,6 @@ snapshots: dependencies: '@types/node': 20.19.34 - '@types/crypto-js@4.2.2': {} - '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 @@ -16838,23 +16714,6 @@ snapshots: '@types/react': 19.2.17 hoist-non-react-statics: 3.3.2 - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jest@30.0.0': - dependencies: - expect: 30.3.0 - pretty-format: 30.3.0 - - '@types/json-schema@7.0.15': {} - '@types/ms@2.1.0': {} '@types/node@12.20.55': {} @@ -16886,14 +16745,8 @@ snapshots: '@types/tough-cookie': 4.0.5 form-data: 2.5.6 - '@types/stack-utils@2.0.3': {} - '@types/statuses@2.0.6': {} - '@types/testing-library__jest-dom@5.14.9': - dependencies: - '@types/jest': 30.0.0 - '@types/tough-cookie@4.0.5': {} '@types/trusted-types@2.0.7': {} @@ -16914,12 +16767,6 @@ snapshots: dependencies: '@types/node': 20.19.34 - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.35': - dependencies: - '@types/yargs-parser': 21.0.3 - '@typescript/typescript-aix-ppc64@7.0.2': optional: true @@ -17032,14 +16879,14 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.1 - '@wagmi/connectors@5.7.7(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(@wagmi/core@2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': + '@wagmi/connectors@5.7.7(@types/react@19.2.17)(@wagmi/core@2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))': dependencies: '@coinbase/wallet-sdk': 4.3.0 '@metamask/sdk': 0.34.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.5(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@wagmi/core': 2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@walletconnect/ethereum-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/ethereum-provider': 2.17.0(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(utf-8-validate@5.0.10) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' viem: 2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) optionalDependencies: @@ -17108,46 +16955,694 @@ snapshots: '@wallet-standard/base@1.1.0': {} - '@wallet-standard/core@1.1.1': + '@wallet-standard/features@1.1.0': dependencies: - '@wallet-standard/app': 1.1.0 '@wallet-standard/base': 1.1.0 - '@wallet-standard/errors': 0.1.1 - '@wallet-standard/features': 1.1.0 - '@wallet-standard/wallet': 1.1.0 - '@wallet-standard/errors@0.1.1': + '@wallet-standard/wallet@1.1.0': dependencies: - chalk: 5.6.2 - commander: 13.1.0 + '@wallet-standard/base': 1.1.0 - '@wallet-standard/features@1.1.0': + '@walletconnect/core@2.17.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)': dependencies: - '@wallet-standard/base': 1.1.0 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.14(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.17.0 + '@walletconnect/utils': 2.17.0 + events: 3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - uploadthing + - utf-8-validate - '@wallet-standard/wallet@1.1.0': + '@walletconnect/core@2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: - '@wallet-standard/base': 1.1.0 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.19.0 + '@walletconnect/utils': 2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/window-getters': 1.0.1 + events: 3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/core@2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.19.1 + '@walletconnect/utils': 2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.33.0 + events: 3.3.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/core@2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.33.0 + events: 3.3.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod - '@walletconnect/core@2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@walletconnect/core@2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.8 + '@walletconnect/utils': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.39.3 + events: 3.3.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/core@2.23.6(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.23.6 + '@walletconnect/utils': 2.23.6(typescript@7.0.2) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.44.0 + events: 3.3.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/environment@1.0.1': + dependencies: + tslib: 1.14.1 + + '@walletconnect/ethereum-provider@2.17.0(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/modal': 2.7.0(@types/react@19.2.17)(react@19.2.8) + '@walletconnect/sign-client': 2.17.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.17.0 + '@walletconnect/universal-provider': 2.17.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/utils': 2.17.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - uploadthing + - utf-8-validate + + '@walletconnect/ethereum-provider@2.21.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@reown/appkit': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/sign-client': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.21.8 + '@walletconnect/universal-provider': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/utils': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/ethereum-provider@2.21.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@reown/appkit': 1.7.8(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/sign-client': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.21.8 + '@walletconnect/universal-provider': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/utils': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/events@1.0.1': + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + + '@walletconnect/heartbeat@1.2.2': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + events: 3.3.0 + + '@walletconnect/jsonrpc-http-connection@1.0.8': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + cross-fetch: 3.2.0 + events: 3.3.0 + transitivePeerDependencies: + - encoding + + '@walletconnect/jsonrpc-provider@1.0.14': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + + '@walletconnect/jsonrpc-types@1.0.4': + dependencies: + events: 3.3.0 + keyvaluestorage-interface: 1.0.0 + + '@walletconnect/jsonrpc-utils@1.0.8': + dependencies: + '@walletconnect/environment': 1.0.1 + '@walletconnect/jsonrpc-types': 1.0.4 + tslib: 1.14.1 + + '@walletconnect/jsonrpc-ws-connection@1.0.14(bufferutil@4.1.0)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@walletconnect/jsonrpc-ws-connection@1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@walletconnect/keyvaluestorage@1.1.1': + dependencies: + '@walletconnect/safe-json': 1.0.2 + idb-keyval: 6.2.2 + unstorage: 1.17.4(idb-keyval@6.2.2) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + + '@walletconnect/logger@2.1.2': + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 7.11.0 + + '@walletconnect/logger@3.0.2': + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 10.0.0 + + '@walletconnect/modal-core@2.7.0(@types/react@19.2.17)(react@19.2.8)': + dependencies: + valtio: 1.11.2(@types/react@19.2.17)(react@19.2.8) + transitivePeerDependencies: + - '@types/react' + - react + + '@walletconnect/modal-ui@2.7.0(@types/react@19.2.17)(react@19.2.8)': + dependencies: + '@walletconnect/modal-core': 2.7.0(@types/react@19.2.17)(react@19.2.8) + lit: 2.8.0 + motion: 10.16.2 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@types/react' + - react + + '@walletconnect/modal@2.7.0(@types/react@19.2.17)(react@19.2.8)': + dependencies: + '@walletconnect/modal-core': 2.7.0(@types/react@19.2.17)(react@19.2.8) + '@walletconnect/modal-ui': 2.7.0(@types/react@19.2.17)(react@19.2.8) + transitivePeerDependencies: + - '@types/react' + - react + + '@walletconnect/relay-api@1.0.11': + dependencies: + '@walletconnect/jsonrpc-types': 1.0.4 + + '@walletconnect/relay-auth@1.0.4': + dependencies: + '@stablelib/ed25519': 1.0.3 + '@stablelib/random': 1.0.2 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + uint8arrays: 3.1.1 + + '@walletconnect/relay-auth@1.1.0': + dependencies: + '@noble/curves': 1.8.0 + '@noble/hashes': 1.7.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + uint8arrays: 3.1.1 + + '@walletconnect/safe-json@1.0.2': + dependencies: + tslib: 1.14.1 + + '@walletconnect/sign-client@2.17.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/core': 2.17.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.17.0 + '@walletconnect/utils': 2.17.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - uploadthing + - utf-8-validate + + '@walletconnect/sign-client@2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/core': 2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.19.0 + '@walletconnect/utils': 2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/sign-client@2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/core': 2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.19.1 + '@walletconnect/utils': 2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/sign-client@2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/core': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/sign-client@2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/core': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 - '@walletconnect/relay-api': 1.0.11 - '@walletconnect/relay-auth': 1.1.0 - '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.21.8(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/utils': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/window-getters': 1.0.1 - es-toolkit: 1.39.3 + '@walletconnect/types': 2.21.8 + '@walletconnect/utils': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) events: 3.3.0 - uint8arrays: 3.1.1 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -17173,25 +17668,17 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.23.6(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@walletconnect/sign-client@2.23.6(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: + '@walletconnect/core': 2.23.6(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-provider': 1.0.14 - '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) '@walletconnect/logger': 3.0.2 - '@walletconnect/relay-api': 1.0.11 - '@walletconnect/relay-auth': 1.1.0 - '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.23.6(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/utils': 2.23.6(@react-native-async-storage/async-storage@1.24.0)(typescript@7.0.2) - '@walletconnect/window-getters': 1.0.1 - es-toolkit: 1.44.0 + '@walletconnect/types': 2.23.6 + '@walletconnect/utils': 2.23.6(typescript@7.0.2) events: 3.3.0 - uint8arrays: 3.1.1 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -17217,23 +17704,14 @@ snapshots: - utf-8-validate - zod - '@walletconnect/environment@1.0.1': - dependencies: - tslib: 1.14.1 - - '@walletconnect/ethereum-provider@2.21.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@walletconnect/solana-adapter@0.0.8(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: - '@reown/appkit': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/jsonrpc-http-connection': 1.0.8 - '@walletconnect/jsonrpc-provider': 1.0.14 - '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/sign-client': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.21.8(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/utils': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - events: 3.3.0 + '@reown/appkit': 1.7.2(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/utils': 2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + bs58: 6.0.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -17262,18 +17740,17 @@ snapshots: - utf-8-validate - zod - '@walletconnect/ethereum-provider@2.21.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@walletconnect/time@1.0.2': dependencies: - '@reown/appkit': 1.7.8(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/jsonrpc-http-connection': 1.0.8 - '@walletconnect/jsonrpc-provider': 1.0.14 + tslib: 1.14.1 + + '@walletconnect/types@2.17.0': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/sign-client': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.21.8(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/utils': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -17287,76 +17764,52 @@ snapshots: - '@netlify/blobs' - '@planetscale/database' - '@react-native-async-storage/async-storage' - - '@types/react' - '@upstash/redis' - '@vercel/blob' - '@vercel/functions' - '@vercel/kv' - aws4fetch - - bufferutil - db0 - - encoding - ioredis - - react - - typescript - uploadthing - - utf-8-validate - - zod - - '@walletconnect/events@1.0.1': - dependencies: - keyvaluestorage-interface: 1.0.0 - tslib: 1.14.1 - '@walletconnect/heartbeat@1.2.2': + '@walletconnect/types@2.19.0': dependencies: '@walletconnect/events': 1.0.1 - '@walletconnect/time': 1.0.2 - events: 3.3.0 - - '@walletconnect/jsonrpc-http-connection@1.0.8': - dependencies: - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/safe-json': 1.0.2 - cross-fetch: 3.2.0 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 events: 3.3.0 transitivePeerDependencies: - - encoding - - '@walletconnect/jsonrpc-provider@1.0.14': - dependencies: - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/safe-json': 1.0.2 - events: 3.3.0 - - '@walletconnect/jsonrpc-types@1.0.4': - dependencies: - events: 3.3.0 - keyvaluestorage-interface: 1.0.0 + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing - '@walletconnect/jsonrpc-utils@1.0.8': + '@walletconnect/types@2.19.1': dependencies: - '@walletconnect/environment': 1.0.1 + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 - tslib: 1.14.1 - - '@walletconnect/jsonrpc-ws-connection@1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10)': - dependencies: - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/safe-json': 1.0.2 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 events: 3.3.0 - ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@walletconnect/keyvaluestorage@1.1.1(@react-native-async-storage/async-storage@1.24.0)': - dependencies: - '@walletconnect/safe-json': 1.0.2 - idb-keyval: 6.2.2 - unstorage: 1.17.4(idb-keyval@6.2.2) - optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -17368,6 +17821,7 @@ snapshots: - '@deno/kv' - '@netlify/blobs' - '@planetscale/database' + - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - '@vercel/functions' @@ -17377,42 +17831,42 @@ snapshots: - ioredis - uploadthing - '@walletconnect/logger@2.1.2': - dependencies: - '@walletconnect/safe-json': 1.0.2 - pino: 7.11.0 - - '@walletconnect/logger@3.0.2': - dependencies: - '@walletconnect/safe-json': 1.0.2 - pino: 10.0.0 - - '@walletconnect/relay-api@1.0.11': + '@walletconnect/types@2.21.0': dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing - '@walletconnect/relay-auth@1.1.0': - dependencies: - '@noble/curves': 1.8.0 - '@noble/hashes': 1.7.0 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - uint8arrays: 3.1.1 - - '@walletconnect/safe-json@1.0.2': - dependencies: - tslib: 1.14.1 - - '@walletconnect/sign-client@2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@walletconnect/types@2.21.8': dependencies: - '@walletconnect/core': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.21.8(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/utils': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -17431,24 +17885,17 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch - - bufferutil - db0 - ioredis - - typescript - uploadthing - - utf-8-validate - - zod - '@walletconnect/sign-client@2.23.6(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@walletconnect/types@2.23.6': dependencies: - '@walletconnect/core': 2.23.6(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 3.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.23.6(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/utils': 2.23.6(@react-native-async-storage/async-storage@1.24.0)(typescript@7.0.2) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -17467,22 +17914,21 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch - - bufferutil - db0 - ioredis - - typescript - uploadthing - - utf-8-validate - - zod - '@walletconnect/solana-adapter@0.0.8(@react-native-async-storage/async-storage@1.24.0)(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@walletconnect/universal-provider@2.17.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)': dependencies: - '@reown/appkit': 1.7.2(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - bs58: 6.0.0 + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.17.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.17.0 + '@walletconnect/utils': 2.17.0 + events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -17495,7 +17941,6 @@ snapshots: - '@netlify/blobs' - '@planetscale/database' - '@react-native-async-storage/async-storage' - - '@types/react' - '@upstash/redis' - '@vercel/blob' - '@vercel/functions' @@ -17505,24 +17950,23 @@ snapshots: - db0 - encoding - ioredis - - react - - typescript - uploadthing - utf-8-validate - - zod - - '@walletconnect/time@1.0.2': - dependencies: - tslib: 1.14.1 - '@walletconnect/types@2.19.0(@react-native-async-storage/async-storage@1.24.0)': + '@walletconnect/universal-provider@2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.19.0 + '@walletconnect/utils': 2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) events: 3.3.0 + lodash: 4.18.1 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -17540,17 +17984,28 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch + - bufferutil - db0 + - encoding - ioredis + - typescript - uploadthing + - utf-8-validate + - zod - '@walletconnect/types@2.19.1(@react-native-async-storage/async-storage@1.24.0)': + '@walletconnect/universal-provider@2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.19.1 + '@walletconnect/utils': 2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -17569,17 +18024,28 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch + - bufferutil - db0 + - encoding - ioredis + - typescript - uploadthing + - utf-8-validate + - zod - '@walletconnect/types@2.21.0(@react-native-async-storage/async-storage@1.24.0)': + '@walletconnect/universal-provider@2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -17598,18 +18064,73 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch + - bufferutil - db0 + - encoding - ioredis + - typescript - uploadthing + - utf-8-validate + - zod - '@walletconnect/types@2.21.8(@react-native-async-storage/async-storage@1.24.0)': + '@walletconnect/universal-provider@2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.21.8 + '@walletconnect/utils': 2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + es-toolkit: 1.39.3 events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/utils@2.17.0': + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.17.0 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + elliptic: 6.6.1 + query-string: 7.1.3 + uint8arrays: 3.1.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -17631,14 +18152,25 @@ snapshots: - ioredis - uploadthing - '@walletconnect/types@2.23.6(@react-native-async-storage/async-storage@1.24.0)': + '@walletconnect/utils@2.19.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/logger': 3.0.2 - events: 3.3.0 + '@noble/ciphers': 1.2.1 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.19.0 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + elliptic: 6.6.1 + query-string: 7.1.3 + uint8arrays: 3.1.0 + viem: 2.23.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -17656,24 +18188,34 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch + - bufferutil - db0 - ioredis + - typescript - uploadthing + - utf-8-validate + - zod - '@walletconnect/universal-provider@2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@walletconnect/utils@2.19.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/jsonrpc-http-connection': 1.0.8 - '@walletconnect/jsonrpc-provider': 1.0.14 - '@walletconnect/jsonrpc-types': 1.0.4 + '@noble/ciphers': 1.2.1 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.21.8(@react-native-async-storage/async-storage@1.24.0) - '@walletconnect/utils': 2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) - es-toolkit: 1.39.3 - events: 3.3.0 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.19.1 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + bs58: 6.0.0 + detect-browser: 5.3.0 + elliptic: 6.6.1 + query-string: 7.1.3 + uint8arrays: 3.1.0 + viem: 2.23.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -17693,29 +18235,28 @@ snapshots: - aws4fetch - bufferutil - db0 - - encoding - ioredis - typescript - uploadthing - utf-8-validate - zod - '@walletconnect/utils@2.19.0(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@walletconnect/utils@2.21.0(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.19.0(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/types': 2.21.0 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 + bs58: 6.0.0 detect-browser: 5.3.0 - elliptic: 6.6.1 query-string: 7.1.3 uint8arrays: 3.1.0 viem: 2.23.2(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) @@ -17744,7 +18285,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.8(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': + '@walletconnect/utils@2.21.8(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)': dependencies: '@msgpack/msgpack': 3.1.2 '@noble/ciphers': 1.3.0 @@ -17752,12 +18293,12 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.21.8(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/types': 2.21.8 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 blakejs: 1.2.1 @@ -17791,7 +18332,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.23.6(@react-native-async-storage/async-storage@1.24.0)(typescript@7.0.2)': + '@walletconnect/utils@2.23.6(typescript@7.0.2)': dependencies: '@msgpack/msgpack': 3.1.3 '@noble/ciphers': 1.3.0 @@ -17799,13 +18340,13 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 3.0.2 '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.23.6(@react-native-async-storage/async-storage@1.24.0) + '@walletconnect/types': 2.23.6 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 blakejs: 1.2.1 @@ -17844,8 +18385,6 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 - '@web3-react/types@6.0.7': {} - '@xrplf/isomorphic@1.0.1(bufferutil@4.1.0)(utf-8-validate@5.0.10)': dependencies: '@noble/hashes': 1.8.0 @@ -17917,11 +18456,7 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 - acorn-walk@8.3.5: - dependencies: - acorn: 8.16.0 - - acorn@8.16.0: {} + aes-js@3.0.0: {} aes-js@4.0.0-beta.5: {} @@ -17941,17 +18476,6 @@ snapshots: dependencies: ajv: 8.18.0 - ajv-keywords@3.5.2(ajv@6.14.0): - dependencies: - ajv: 6.14.0 - - ajv@6.14.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 @@ -17992,8 +18516,6 @@ snapshots: dependencies: deep-equal: 2.2.3 - aria-query@5.3.2: {} - array-back@3.1.0: {} array-back@4.0.2: {} @@ -18045,15 +18567,6 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.27(postcss@8.5.26): - dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001774 - fraction.js: 5.3.4 - picocolors: 1.1.1 - postcss: 8.5.26 - postcss-value-parser: 4.2.0 - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -18080,18 +18593,20 @@ snapshots: base32.js@0.1.0: {} + base58-js@3.0.3: {} + base64-js@1.5.1: {} base64url@3.0.1: {} baseline-browser-mapping@2.10.0: {} + bech32@1.1.4: {} + bech32@2.0.0: {} big-integer@1.6.36: {} - big.js@5.2.2: {} - big.js@6.2.2: {} bigint-buffer@1.1.5: @@ -18112,6 +18627,12 @@ snapshots: bip66@2.0.0: {} + bitcoin-address-validation@3.0.0: + dependencies: + base58-js: 3.0.3 + bech32: 2.0.0 + sha256-uint8array: 0.10.7 + bitcoin-ops@1.4.1: {} blake-hash@2.0.0: @@ -18349,11 +18870,6 @@ snapshots: escape-string-regexp: 1.0.5 supports-color: 5.5.0 - chalk@3.0.0: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -18394,8 +18910,6 @@ snapshots: dependencies: readdirp: 5.0.0 - ci-info@4.4.0: {} - cipher-base@1.0.7: dependencies: inherits: 2.0.4 @@ -18514,14 +19028,10 @@ snapshots: commander@13.1.0: {} - commander@14.0.1: {} - commander@14.0.3: {} commander@2.20.3: {} - commander@7.2.0: {} - compressible@2.0.18: dependencies: mime-db: 1.54.0 @@ -18662,17 +19172,10 @@ snapshots: crypto-js@4.2.0: {} - css.escape@1.5.1: {} - cssesc@3.0.0: {} csstype@3.2.3: {} - d@1.0.2: - dependencies: - es5-ext: 0.10.64 - type: 2.7.3 - data-uri-to-buffer@4.0.1: {} date-fns@2.30.0: @@ -18683,8 +19186,6 @@ snapshots: dayjs@1.11.13: {} - debounce@1.2.1: {} - debug@3.2.7: dependencies: ms: 2.1.3 @@ -18767,10 +19268,6 @@ snapshots: dequal@2.0.3: {} - derive-valtio@0.1.0(valtio@1.13.2(@types/react@19.2.17)(react@18.3.1)): - dependencies: - valtio: 1.13.2(@types/react@19.2.17)(react@18.3.1) - derive-valtio@0.1.0(valtio@1.13.2(@types/react@19.2.17)(react@19.2.8)): dependencies: valtio: 1.13.2(@types/react@19.2.17)(react@19.2.8) @@ -18826,8 +19323,6 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - duplexer@0.1.2: {} - duplexify@4.1.3: dependencies: end-of-stream: 1.4.5 @@ -18868,8 +19363,6 @@ snapshots: emoji-regex@9.2.2: {} - emojis-list@3.0.0: {} - encode-utf8@1.0.3: {} encodeurl@1.0.2: {} @@ -18934,41 +19427,18 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.4 + es-toolkit@1.33.0: {} + es-toolkit@1.39.3: {} es-toolkit@1.44.0: {} - es5-ext@0.10.64: - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esniff: 2.0.1 - next-tick: 1.1.0 - - es6-iterator@2.0.3: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-symbol: 3.1.4 - es6-promise@4.2.8: {} es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 - es6-symbol@3.1.4: - dependencies: - d: 1.0.2 - ext: 1.7.0 - - es6-weak-map@2.0.3: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esbuild@0.25.3: optionalDependencies: '@esbuild/aix-ppc64': 0.25.3 @@ -19003,19 +19473,8 @@ snapshots: escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} - - escape-string-regexp@4.0.0: {} - esm-env@1.2.2: {} - esniff@2.0.1: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-emitter: 0.3.5 - type: 2.7.3 - esprima@4.0.1: {} estree-walker@3.0.3: @@ -19058,6 +19517,42 @@ snapshots: '@scure/bip32': 1.4.0 '@scure/bip39': 1.3.0 + ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10): + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + ethers@6.13.5(bufferutil@4.1.0)(utf-8-validate@5.0.10): dependencies: '@adraffy/ens-normalize': 1.10.1 @@ -19086,11 +19581,6 @@ snapshots: ev-emitter@2.1.2: {} - event-emitter@0.3.5: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-target-shim@5.0.1: {} eventemitter2@6.4.9: {} @@ -19147,15 +19637,6 @@ snapshots: expect-type@1.3.0: {} - expect@30.3.0: - dependencies: - '@jest/expect-utils': 30.3.0 - '@jest/get-type': 30.1.0 - jest-matcher-utils: 30.3.0 - jest-message-util: 30.3.0 - jest-mock: 30.3.0 - jest-util: 30.3.0 - express-rate-limit@8.3.1(express@5.2.1): dependencies: express: 5.2.1 @@ -19194,10 +19675,6 @@ snapshots: transitivePeerDependencies: - supports-color - ext@1.7.0: - dependencies: - type: 2.7.3 - extend@3.0.2: {} extension-port-stream@3.0.0: @@ -19269,11 +19746,6 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-loader@6.2.0: - dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - file-uri-to-path@1.0.0: {} fill-range@7.1.1: @@ -19350,8 +19822,6 @@ snapshots: forwarded@0.2.0: {} - fraction.js@5.3.4: {} - framer-motion@12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: motion-dom: 12.42.2 @@ -19474,11 +19944,6 @@ snapshots: get-size@3.0.0: {} - get-starknet-core@3.3.5(starknet@8.9.2): - dependencies: - '@module-federation/runtime': 0.1.21 - starknet: 8.9.2 - get-stream@6.0.1: {} get-stream@9.0.1: @@ -19550,10 +20015,6 @@ snapshots: - encoding - supports-color - gzip-size@6.0.0: - dependencies: - duplexer: 0.1.2 - h3@1.15.11: dependencies: cookie-es: 1.2.3 @@ -19621,6 +20082,8 @@ snapshots: help-me@5.0.0: {} + hey-listen@1.0.8: {} + hmac-drbg@1.0.1: dependencies: hash.js: 1.1.7 @@ -19643,8 +20106,6 @@ snapshots: html-entities@2.6.0: {} - html-escaper@2.0.2: {} - http-assert@1.5.0: dependencies: deep-equal: 1.0.1 @@ -19723,8 +20184,6 @@ snapshots: es-module-lexer: 2.3.1 module-details-from-path: 1.0.4 - indent-string@4.0.0: {} - inflation@2.1.0: {} inherits@2.0.4: {} @@ -19824,15 +20283,8 @@ snapshots: is-obj@3.0.0: {} - is-plain-obj@2.1.0: - optional: true - is-plain-obj@4.1.0: {} - is-plain-object@5.0.0: {} - - is-promise@2.2.2: {} - is-promise@4.0.0: {} is-regex@1.2.1: @@ -19932,57 +20384,12 @@ snapshots: - bufferutil - utf-8-validate - jest-diff@30.3.0: - dependencies: - '@jest/diff-sequences': 30.3.0 - '@jest/get-type': 30.1.0 - chalk: 4.1.2 - pretty-format: 30.3.0 - - jest-matcher-utils@30.3.0: - dependencies: - '@jest/get-type': 30.1.0 - chalk: 4.1.2 - jest-diff: 30.3.0 - pretty-format: 30.3.0 - - jest-message-util@30.3.0: - dependencies: - '@babel/code-frame': 7.29.0 - '@jest/types': 30.3.0 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - picomatch: 4.0.4 - pretty-format: 30.3.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@30.3.0: - dependencies: - '@jest/types': 30.3.0 - '@types/node': 20.19.34 - jest-util: 30.3.0 - - jest-regex-util@30.0.1: {} - - jest-util@30.3.0: - dependencies: - '@jest/types': 30.3.0 - '@types/node': 20.19.34 - chalk: 4.1.2 - ci-info: 4.4.0 - graceful-fs: 4.2.11 - picomatch: 4.0.4 - jiti@2.6.1: {} jose@6.2.2: {} joycon@3.1.1: {} - js-base64@3.7.8: {} - js-sha3@0.8.0: {} js-tokens@4.0.0: {} @@ -20010,8 +20417,6 @@ snapshots: json-rpc-random-id@1.0.1: {} - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} json-schema-typed@8.0.2: {} @@ -20241,16 +20646,32 @@ snapshots: lines-and-columns@1.2.4: {} + lit-element@3.3.3: + dependencies: + '@lit-labs/ssr-dom-shim': 1.5.1 + '@lit/reactive-element': 1.6.3 + lit-html: 2.8.0 + lit-element@4.2.2: dependencies: '@lit-labs/ssr-dom-shim': 1.5.1 '@lit/reactive-element': 2.1.2 lit-html: 3.3.2 + lit-html@2.8.0: + dependencies: + '@types/trusted-types': 2.0.7 + lit-html@3.3.2: dependencies: '@types/trusted-types': 2.0.7 + lit@2.8.0: + dependencies: + '@lit/reactive-element': 1.6.3 + lit-element: 3.3.3 + lit-html: 2.8.0 + lit@3.1.0: dependencies: '@lit/reactive-element': 2.1.2 @@ -20282,12 +20703,6 @@ snapshots: load-tsconfig@0.2.5: {} - loader-utils@2.0.4: - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -20343,9 +20758,9 @@ snapshots: dependencies: yallist: 3.1.1 - lru-queue@0.1.0: + lucide-react@0.379.0(react@19.2.8): dependencies: - es5-ext: 0.10.64 + react: 19.2.8 lucide-react@1.27.0(react@19.2.8): dependencies: @@ -20369,24 +20784,8 @@ snapshots: media-typer@1.1.0: {} - memoizee@0.4.17: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-weak-map: 2.0.3 - event-emitter: 0.3.5 - is-promise: 2.2.2 - lru-queue: 0.1.0 - next-tick: 1.1.0 - timers-ext: 0.1.8 - merge-descriptors@2.0.0: {} - merge-options@3.0.4: - dependencies: - is-plain-obj: 2.1.0 - optional: true - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -20432,8 +20831,6 @@ snapshots: mimic-function@5.0.1: {} - min-indent@1.0.1: {} - mini-svg-data-uri@1.4.4: {} minimalistic-assert@1.0.1: {} @@ -20470,7 +20867,14 @@ snapshots: motion-utils@12.39.0: {} - mrmime@2.0.1: {} + motion@10.16.2: + dependencies: + '@motionone/animation': 10.18.0 + '@motionone/dom': 10.18.0 + '@motionone/svelte': 10.16.4 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + '@motionone/vue': 10.16.4 ms@2.1.2: {} @@ -20538,8 +20942,6 @@ snapshots: react: 19.2.8 react-dom: 19.2.8(react@19.2.8) - next-tick@1.1.0: {} - next@16.3.0(@opentelemetry/api@1.9.0)(@types/node@20.19.34)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: '@next/env': 16.3.0 @@ -20709,8 +21111,6 @@ snapshots: openapi-typescript-helpers@0.0.15: {} - opener@1.5.2: {} - ora@8.2.0: dependencies: chalk: 5.6.2 @@ -21065,8 +21465,6 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-value-parser@4.2.0: {} - postcss@8.5.26: dependencies: nanoid: 3.3.18 @@ -21075,8 +21473,6 @@ snapshots: powershell-utils@0.1.0: {} - preact@10.23.0: {} - preact@10.28.4: {} pretty-format@27.5.1: @@ -21085,12 +21481,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - pretty-format@30.3.0: - dependencies: - '@jest/schemas': 30.0.5 - ansi-styles: 5.2.0 - react-is: 18.3.1 - pretty-ms@9.3.0: dependencies: parse-ms: 4.0.0 @@ -21130,6 +21520,8 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-compare@2.5.1: {} + proxy-compare@2.6.0: {} proxy-from-env@2.1.0: {} @@ -21148,14 +21540,14 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 - punycode@2.3.1: {} - pushdata-bitcoin@1.0.1: dependencies: bitcoin-ops: 1.4.1 qr.js@0.0.0: {} + qrcode-generator@2.0.4: {} + qrcode.react@1.0.1(react@19.2.8): dependencies: loose-envify: 1.4.0 @@ -21163,10 +21555,6 @@ snapshots: qr.js: 0.0.0 react: 19.2.8 - qrcode.react@4.2.0(react@19.2.8): - dependencies: - react: 19.2.8 - qrcode@1.5.3: dependencies: dijkstrajs: 1.0.3 @@ -21174,12 +21562,6 @@ snapshots: pngjs: 5.0.0 yargs: 15.4.1 - qrcode@1.5.4: - dependencies: - dijkstrajs: 1.0.3 - pngjs: 5.0.0 - yargs: 15.4.1 - qs@6.15.3: dependencies: es-define-property: 1.0.1 @@ -21305,8 +21687,6 @@ snapshots: react-is@17.0.2: {} - react-is@18.3.1: {} - react-lifecycles-compat@3.0.4: {} react-modal@3.16.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8): @@ -21326,22 +21706,17 @@ snapshots: react-dom: 19.2.8(react@19.2.8) webrtc-adapter: 7.7.1 - react-remove-scroll-bar@2.3.8(@types/react@19.2.17)(react@19.2.8): + react-qrcode-logo@4.1.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: + qrcode-generator: 2.0.4 react: 19.2.8 - react-style-singleton: 2.2.3(@types/react@19.2.17)(react@19.2.8) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.17 + react-dom: 19.2.8(react@19.2.8) - react-remove-scroll@2.5.7(@types/react@19.2.17)(react@19.2.8): + react-remove-scroll-bar@2.3.8(@types/react@19.2.17)(react@19.2.8): dependencies: react: 19.2.8 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.17)(react@19.2.8) react-style-singleton: 2.2.3(@types/react@19.2.17)(react@19.2.8) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.17)(react@19.2.8) - use-sidecar: 1.1.3(@types/react@19.2.17)(react@19.2.8) optionalDependencies: '@types/react': 19.2.17 @@ -21417,11 +21792,6 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - redeyed@2.1.1: dependencies: esprima: 4.0.1 @@ -21601,11 +21971,7 @@ snapshots: scheduler@0.27.0: {} - schema-utils@3.3.0: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.14.0 - ajv-keywords: 3.5.2(ajv@6.14.0) + scrypt-js@3.0.1: {} sdp@2.12.0: {} @@ -21617,8 +21983,6 @@ snapshots: semver@7.7.3: {} - semver@7.7.4: {} - semver@7.8.5: {} send@1.2.1: @@ -21818,16 +22182,8 @@ snapshots: dependencies: is-arrayish: 0.3.4 - sirv@2.0.4: - dependencies: - '@polka/url': 1.0.0-next.29 - mrmime: 2.0.1 - totalist: 3.0.1 - sisteransi@1.0.5: {} - slash@3.0.0: {} - slow-redact@0.3.2: {} smart-buffer@4.2.0: {} @@ -21889,10 +22245,6 @@ snapshots: split2@4.2.0: {} - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - stackback@0.0.2: {} starknet@8.9.2: @@ -21908,16 +22260,16 @@ snapshots: pako: 2.1.0 ts-mixer: 6.0.4 - starknetkit@3.4.3(@radix-ui/react-slot@1.2.4(@types/react@19.2.17)(react@19.2.8))(@react-native-async-storage/async-storage@1.24.0)(@scure/bip39@2.0.1)(@types/react@19.2.17)(bufferutil@4.1.0)(class-variance-authority@0.7.1)(clsx@1.2.1)(framer-motion@12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(starknet@8.9.2)(swr@2.4.0(react@19.2.8))(tailwind-merge@3.5.0)(tailwindcss-animate@1.0.7(tailwindcss@4.2.1))(tailwindcss@4.2.1)(typescript@7.0.2)(utf-8-validate@5.0.10): + starknetkit@3.4.3(@radix-ui/react-slot@1.2.4(@types/react@19.2.17)(react@19.2.8))(@scure/bip39@2.0.1)(@types/react@19.2.17)(bufferutil@4.1.0)(class-variance-authority@0.7.1)(clsx@1.2.1)(framer-motion@12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(starknet@8.9.2)(swr@2.4.0(react@19.2.8))(tailwind-merge@3.5.0)(tailwindcss-animate@1.0.7(tailwindcss@4.2.1))(tailwindcss@4.2.1)(typescript@7.0.2)(utf-8-validate@5.0.10): dependencies: '@argent/x-ui': 1.109.1(@radix-ui/react-slot@1.2.4(@types/react@19.2.17)(react@19.2.8))(@scure/bip39@2.0.1)(@starknet-io/types-js@0.8.4)(class-variance-authority@0.7.1)(clsx@1.2.1)(framer-motion@12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(lodash-es@4.18.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(starknet@8.9.2)(swr@2.4.0(react@19.2.8))(tailwind-merge@3.5.0)(tailwindcss-animate@1.0.7(tailwindcss@4.2.1))(tailwindcss@4.2.1) - '@cartridge/controller': 0.10.7(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@cartridge/controller': 0.10.7(@types/react@19.2.17)(bufferutil@4.1.0)(react@18.3.1)(typescript@7.0.2)(utf-8-validate@5.0.10) '@starknet-io/get-starknet': 4.0.8 '@starknet-io/get-starknet-core': 4.0.8 '@starknet-io/types-js': 0.8.4 '@trpc/client': 10.45.4(@trpc/server@10.45.4) '@trpc/server': 10.45.4 - '@walletconnect/sign-client': 2.23.6(@react-native-async-storage/async-storage@1.24.0)(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) + '@walletconnect/sign-client': 2.23.6(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10) bowser: 2.14.1 detect-browser: 5.3.0 eventemitter3: 5.0.4 @@ -22068,10 +22420,6 @@ snapshots: strip-final-newline@4.0.0: {} - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - strip-json-comments@5.0.3: {} strnum@2.3.0: {} @@ -22153,11 +22501,6 @@ snapshots: dependencies: real-require: 0.2.0 - timers-ext@0.1.8: - dependencies: - es5-ext: 0.10.64 - next-tick: 1.1.0 - tiny-case@1.0.3: {} tiny-invariant@1.3.3: {} @@ -22212,8 +22555,6 @@ snapshots: toposort@2.0.2: {} - totalist@3.0.1: {} - tough-cookie@6.0.1: dependencies: tldts: 7.0.27 @@ -22237,6 +22578,23 @@ snapshots: - supports-color - utf-8-validate + tronweb@6.4.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + dependencies: + '@babel/runtime': 7.26.10 + axios: 1.19.0 + bignumber.js: 9.1.2 + ethereum-cryptography: 2.2.1 + ethers: 6.13.5(bufferutil@4.1.0)(utf-8-validate@5.0.10) + eventemitter3: 5.0.1 + google-protobuf: 3.21.4 + semver: 7.7.1 + validator: 13.15.23 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + trpc-browser@1.4.4(@trpc/client@10.45.4(@trpc/server@10.45.4))(@trpc/server@10.45.4): dependencies: '@trpc/client': 10.45.4(@trpc/server@10.45.4) @@ -22297,8 +22655,6 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 - type@2.7.3: {} - typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -22409,10 +22765,6 @@ snapshots: dependencies: tslib: 2.8.1 - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - urijs@1.19.11: {} usb@2.17.0: @@ -22477,9 +22829,17 @@ snapshots: validator@13.15.23: {} + valtio@1.11.2(@types/react@19.2.17)(react@19.2.8): + dependencies: + proxy-compare: 2.5.1 + use-sync-external-store: 1.2.0(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.17 + react: 19.2.8 + valtio@1.13.2(@types/react@19.2.17)(react@18.3.1): dependencies: - derive-valtio: 0.1.0(valtio@1.13.2(@types/react@19.2.17)(react@18.3.1)) + derive-valtio: 0.1.0(valtio@1.13.2(@types/react@19.2.17)(react@19.2.8)) proxy-compare: 2.6.0 use-sync-external-store: 1.2.0(react@18.3.1) optionalDependencies: @@ -22637,10 +22997,10 @@ snapshots: - tsx - yaml - wagmi@2.14.11(@react-native-async-storage/async-storage@1.24.0)(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)): + wagmi@2.14.11(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.8))(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)): dependencies: '@tanstack/react-query': 5.90.21(react@19.2.8) - '@wagmi/connectors': 5.7.7(@react-native-async-storage/async-storage@1.24.0)(@types/react@19.2.17)(@wagmi/core@2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) + '@wagmi/connectors': 5.7.7(@types/react@19.2.17)(@wagmi/core@2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.6.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)))(bufferutil@4.1.0)(react@19.2.8)(typescript@7.0.2)(utf-8-validate@5.0.10)(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) '@wagmi/core': 2.16.4(@tanstack/query-core@5.90.20)(@types/react@19.2.17)(react@19.2.8)(typescript@7.0.2)(use-sync-external-store@1.4.0(react@19.2.8))(viem@2.44.1(bufferutil@4.1.0)(typescript@7.0.2)(utf-8-validate@5.0.10)) react: 19.2.8 use-sync-external-store: 1.4.0(react@19.2.8) @@ -22690,25 +23050,6 @@ snapshots: webidl-conversions@3.0.1: {} - webpack-bundle-analyzer@4.10.1(bufferutil@4.1.0)(utf-8-validate@5.0.10): - dependencies: - '@discoveryjs/json-ext': 0.5.7 - acorn: 8.16.0 - acorn-walk: 8.3.5 - commander: 7.2.0 - debounce: 1.2.1 - escape-string-regexp: 4.0.0 - gzip-size: 6.0.0 - html-escaper: 2.0.2 - is-plain-object: 5.0.0 - opener: 1.5.2 - picocolors: 1.1.1 - sirv: 2.0.4 - ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - webrtc-adapter@7.7.1: dependencies: rtcpeerconnection-shim: 1.2.15 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 639f688b..948217d3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -24,4 +24,6 @@ catalog: wagmi: 2.14.11 zustand: ^4.5.7 -minimumReleaseAge: 4320 \ No newline at end of file +minimumReleaseAge: 4320 +minimumReleaseAgeExclude: + - '@layerswap/*' \ No newline at end of file