diff --git a/packages/ui/package.json b/packages/ui/package.json index 083ef30..b68c43c 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -14,13 +14,20 @@ "@mosaic/sdk": "workspace:*", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", + "@solana/react": "^2.3.0", + "@solana/signers": "^2.3.0", "@solana/wallet-adapter-base": "^0.9.27", "@solana/wallet-adapter-react": "^0.15.39", "@solana/wallet-adapter-react-ui": "^0.9.39", "@solana/wallet-adapter-wallets": "^0.19.37", + "@tanstack/react-query": "^5.83.0", + "@wallet-standard/core": "^1.1.1", + "@wallet-standard/react": "^1.0.1", + "bs58": "^6.0.0", "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "gill": "^0.10.2", + "gill-react": "^0.4.4", "lucide-react": "^0.294.0", "next": "15.4.5", "next-themes": "^0.2.1", diff --git a/packages/ui/src/app/dashboard/create/arcade-token/page.tsx b/packages/ui/src/app/dashboard/create/arcade-token/page.tsx index 37f71b8..4960d2b 100644 --- a/packages/ui/src/app/dashboard/create/arcade-token/page.tsx +++ b/packages/ui/src/app/dashboard/create/arcade-token/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useState } from 'react'; +import { useContext, useState } from 'react'; import { Button } from '@/components/ui/button'; import { Card, @@ -14,10 +14,10 @@ import Link from 'next/link'; import { ArcadeTokenOptions, ArcadeTokenCreationResult } from '@/types/token'; // import { createArcadeTokenForUI } from '@/lib/arcadeToken'; import { mockCreateArcadeTokenForUI } from '@/lib/mockFunctions'; -import { useWallet } from '@solana/wallet-adapter-react'; +import { SelectedWalletAccountContext } from '@/context/SelectedWalletAccountContext'; export default function ArcadeTokenCreatePage() { - const { publicKey, connected } = useWallet(); + const [selectedWalletAccount] = useContext(SelectedWalletAccountContext); const [arcadeTokenOptions, setArcadeTokenOptions] = useState({ name: '', @@ -38,7 +38,7 @@ export default function ArcadeTokenCreatePage() { const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); - if (!connected || !publicKey) { + if (!selectedWalletAccount) { alert('Please connect your wallet first'); return; } @@ -48,7 +48,7 @@ export default function ArcadeTokenCreatePage() { try { const result = await mockCreateArcadeTokenForUI(arcadeTokenOptions, { - publicKey, + publicKey: selectedWalletAccount.address, connected: true, }); setResult(result); diff --git a/packages/ui/src/app/dashboard/create/stablecoin/StablecoinAuthorityParams.tsx b/packages/ui/src/app/dashboard/create/stablecoin/StablecoinAuthorityParams.tsx new file mode 100644 index 0000000..e58929d --- /dev/null +++ b/packages/ui/src/app/dashboard/create/stablecoin/StablecoinAuthorityParams.tsx @@ -0,0 +1,112 @@ +import { useState } from 'react'; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from '@/components/ui/card'; +import { ChevronDown, ChevronUp } from 'lucide-react'; +import { StablecoinOptions } from '@/types/token'; + +interface StablecoinAuthorityParamsProps { + options: StablecoinOptions; + onInputChange: (field: string, value: string) => void; +} + +export function StablecoinAuthorityParams({ + options, + onInputChange, +}: StablecoinAuthorityParamsProps) { + const [showOptionalParams, setShowOptionalParams] = useState(false); + + return ( + + + + + Configure authorities for advanced token management + + + {showOptionalParams && ( + +
+ + onInputChange('mintAuthority', e.target.value)} + /> +
+
+ + onInputChange('metadataAuthority', e.target.value)} + /> +
+
+ + onInputChange('pausableAuthority', e.target.value)} + /> +
+
+ + + onInputChange('confidentialBalancesAuthority', e.target.value) + } + /> +
+
+ + + onInputChange('permanentDelegateAuthority', e.target.value) + } + /> +
+
+ )} +
+ ); +} diff --git a/packages/ui/src/app/dashboard/create/stablecoin/StablecoinBasicParams.tsx b/packages/ui/src/app/dashboard/create/stablecoin/StablecoinBasicParams.tsx new file mode 100644 index 0000000..5bf07b0 --- /dev/null +++ b/packages/ui/src/app/dashboard/create/stablecoin/StablecoinBasicParams.tsx @@ -0,0 +1,84 @@ +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from '@/components/ui/card'; +import { StablecoinOptions } from '@/types/token'; + +interface StablecoinBasicParamsProps { + options: StablecoinOptions; + onInputChange: (field: string, value: string) => void; +} + +export function StablecoinBasicParams({ + options, + onInputChange, +}: StablecoinBasicParamsProps) { + return ( + + + Basic Parameters + + Configure the fundamental properties of your stablecoin + + + +
+
+ + onInputChange('name', e.target.value)} + required + /> +
+
+ + onInputChange('symbol', e.target.value)} + required + /> +
+
+
+
+ + onInputChange('decimals', e.target.value)} + min="0" + max="9" + required + /> +
+
+ + onInputChange('uri', e.target.value)} + /> +
+
+
+
+ ); +} diff --git a/packages/ui/src/app/dashboard/create/stablecoin/StablecoinCreateForm.tsx b/packages/ui/src/app/dashboard/create/stablecoin/StablecoinCreateForm.tsx new file mode 100644 index 0000000..701537b --- /dev/null +++ b/packages/ui/src/app/dashboard/create/stablecoin/StablecoinCreateForm.tsx @@ -0,0 +1,126 @@ +import { useState } from 'react'; +import { Button } from '@/components/ui/button'; +import { StablecoinOptions, StablecoinCreationResult } from '@/types/token'; +import { StablecoinBasicParams } from './StablecoinBasicParams'; +import { StablecoinAuthorityParams } from './StablecoinAuthorityParams'; +import { StablecoinCreationResultDisplay } from '@/app/dashboard/create/stablecoin/StablecoinCreationResult'; +import { createStablecoin } from '@/lib/stablecoin'; +import { TransactionSendingSigner } from '@solana/signers'; + +interface StablecoinCreateFormProps { + transactionSendingSigner: TransactionSendingSigner; +} + +export function StablecoinCreateForm({ + transactionSendingSigner, +}: StablecoinCreateFormProps) { + const [stablecoinOptions, setStablecoinOptions] = useState( + { + name: '', + symbol: '', + decimals: '6', + uri: '', + mintAuthority: '', + metadataAuthority: '', + pausableAuthority: '', + confidentialBalancesAuthority: '', + permanentDelegateAuthority: '', + } + ); + const [isCreating, setIsCreating] = useState(false); + const [result, setResult] = useState(null); + + const handleInputChange = (field: string, value: string) => { + setStablecoinOptions(prev => ({ ...prev, [field]: value })); + }; + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + setIsCreating(true); + setResult(null); + + try { + const result = await createStablecoin( + stablecoinOptions, + transactionSendingSigner + ); + setResult({ + success: true, + mintAddress: result.mintAddress, + transactionSignature: result.transactionSignature, + details: { + ...stablecoinOptions, + decimals: parseInt(stablecoinOptions.decimals), + mintAuthority: stablecoinOptions.mintAuthority || '', + metadataAuthority: stablecoinOptions.metadataAuthority || '', + pausableAuthority: stablecoinOptions.pausableAuthority || '', + confidentialBalancesAuthority: + stablecoinOptions.confidentialBalancesAuthority || '', + permanentDelegateAuthority: + stablecoinOptions.permanentDelegateAuthority || '', + extensions: ['stablecoin'], + }, + }); + } catch (error) { + setResult({ + success: false, + error: + error instanceof Error ? error.message : 'Unknown error occurred', + }); + } finally { + setIsCreating(false); + } + }; + + const handleReset = () => { + setStablecoinOptions({ + name: '', + symbol: '', + decimals: '6', + uri: '', + mintAuthority: '', + metadataAuthority: '', + pausableAuthority: '', + confidentialBalancesAuthority: '', + permanentDelegateAuthority: '', + }); + setResult(null); + }; + + return ( + <> +
+ + + + + {result && } + +
+ + +
+ + + ); +} diff --git a/packages/ui/src/app/dashboard/create/stablecoin/StablecoinCreationResult.tsx b/packages/ui/src/app/dashboard/create/stablecoin/StablecoinCreationResult.tsx new file mode 100644 index 0000000..7b3ded6 --- /dev/null +++ b/packages/ui/src/app/dashboard/create/stablecoin/StablecoinCreationResult.tsx @@ -0,0 +1,72 @@ +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { DollarSign } from 'lucide-react'; +import { StablecoinCreationResult } from '@/types/token'; + +interface StablecoinCreationResultProps { + result: StablecoinCreationResult; +} + +export function StablecoinCreationResultDisplay({ + result, +}: StablecoinCreationResultProps) { + return ( + + + + {result.success ? ( + <> + + Stablecoin Created Successfully! + + ) : ( + <> + + Creation Failed + + )} + + + + {result.success ? ( +
+
+ Mint Address: + + {result.mintAddress} + +
+
+ Transaction: + + {result.transactionSignature} + +
+
+ Your stablecoin has been successfully created with the following + parameters: +
+
+
+ Name: {result.details?.name} +
+
+ Symbol: {result.details?.symbol} +
+
+ Decimals: {result.details?.decimals} +
+
+ Extensions:{' '} + {result.details?.extensions?.join(', ')} +
+
+
+ ) : ( +
+ Error: {result.error} +
+ )} +
+
+ ); +} diff --git a/packages/ui/src/app/dashboard/create/stablecoin/page.tsx b/packages/ui/src/app/dashboard/create/stablecoin/page.tsx index 35d5a1a..fdd46a8 100644 --- a/packages/ui/src/app/dashboard/create/stablecoin/page.tsx +++ b/packages/ui/src/app/dashboard/create/stablecoin/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useState } from 'react'; +import { useContext } from 'react'; import { Button } from '@/components/ui/button'; import { Card, @@ -9,71 +9,68 @@ import { CardHeader, CardTitle, } from '@/components/ui/card'; -import { DollarSign, ChevronDown, ChevronUp } from 'lucide-react'; import Link from 'next/link'; -import { StablecoinOptions, StablecoinCreationResult } from '@/types/token'; -// import { createStablecoinForUI } from '@/lib/stablecoin'; -import { mockCreateStablecoinForUI } from '@/lib/mockFunctions'; -import { useWallet } from '@solana/wallet-adapter-react'; - -export default function StablecoinCreatePage() { - const { publicKey, connected } = useWallet(); - const [stablecoinOptions, setStablecoinOptions] = useState( - { - name: '', - symbol: '', - decimals: '6', - uri: '', - mintAuthority: '', - metadataAuthority: '', - pausableAuthority: '', - confidentialBalancesAuthority: '', - permanentDelegateAuthority: '', - } +import { SelectedWalletAccountContext } from '@/context/SelectedWalletAccountContext'; +import { ChainContext } from '@/context/ChainContext'; +import { useWalletAccountTransactionSendingSigner } from '@solana/react'; +import { UiWalletAccount } from '@wallet-standard/react'; +import { StablecoinCreateForm } from '@/app/dashboard/create/stablecoin/StablecoinCreateForm'; + +// Component that only renders when wallet is available +function StablecoinCreateWithWallet({ + selectedWalletAccount, + currentChain, +}: { + selectedWalletAccount: UiWalletAccount; + currentChain: string; +}) { + // Now we can safely call the hook because we know we have valid inputs + const transactionSendingSigner = useWalletAccountTransactionSendingSigner( + selectedWalletAccount, + currentChain as `solana:${string}` ); - const [showOptionalParams, setShowOptionalParams] = useState(false); - const [isCreating, setIsCreating] = useState(false); - const [result, setResult] = useState(null); - - const handleSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - - if (!connected || !publicKey) { - alert('Please connect your wallet first'); - return; - } - setIsCreating(true); - setResult(null); - - try { - const result = await mockCreateStablecoinForUI(stablecoinOptions, { - publicKey, - connected: true, - }); - setResult(result); - - if (result.success) { - // console.log('Stablecoin created successfully:', result); - } else { - // console.error('Failed to create stablecoin:', result.error); - } - } catch (error) { - // console.error('Error creating stablecoin:', error); - setResult({ - success: false, - error: - error instanceof Error ? error.message : 'Unknown error occurred', - }); - } finally { - setIsCreating(false); - } - }; + return ( +
+
+
+ + + +
+

Create Stablecoin

+

+ Configure your stablecoin parameters +

+
+
- const handleInputChange = (field: string, value: string) => { - setStablecoinOptions(prev => ({ ...prev, [field]: value })); - }; + +
+
+ ); +} +// Simple wrapper component that shows a message when wallet is not connected +function StablecoinCreatePage() { + const [selectedWalletAccount] = useContext(SelectedWalletAccountContext); + const { chain: currentChain } = useContext(ChainContext); + + // If wallet is connected and chain is available, render the full component + if (selectedWalletAccount && currentChain) { + return ( + + ); + } + + // Otherwise, show a message to connect wallet return (
@@ -93,309 +90,21 @@ export default function StablecoinCreatePage() { -
- -
- Stablecoin Configuration - - Fill in the required fields to create your - regulatory-compliant stablecoin - -
-
+ Wallet Required + + Please connect your wallet to create a stablecoin +
-
-
- {/* Required Fields */} -
-

- Required Parameters -

-
-
- - - handleInputChange('name', e.target.value) - } - className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" - placeholder="Token Name" - required - /> -
- -
- - - handleInputChange('symbol', e.target.value) - } - className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" - placeholder="USD" - required - /> -
- -
- - - handleInputChange('decimals', e.target.value) - } - className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" - placeholder="6" - min="0" - max="9" - required - /> -
-
-
- - {/* Optional Parameters Dropdown */} -
- - - {showOptionalParams && ( -
-
-
- - - handleInputChange('mintAuthority', e.target.value) - } - className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" - placeholder="Public key" - /> -
- -
- - - handleInputChange( - 'metadataAuthority', - e.target.value - ) - } - className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" - placeholder="Public key" - /> -
- -
- - - handleInputChange( - 'pausableAuthority', - e.target.value - ) - } - className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" - placeholder="Public key" - /> -
- -
- - - handleInputChange( - 'confidentialBalancesAuthority', - e.target.value - ) - } - className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" - placeholder="Public key" - /> -
- -
- - - handleInputChange( - 'permanentDelegateAuthority', - e.target.value - ) - } - className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent" - placeholder="Public key" - /> -
-
-
- )} -
-
- -
- -
-
+

+ To create a stablecoin, you need to connect a wallet first. Please + use the wallet connection button in the top navigation. +

- - {/* Result Display */} - {result && ( - - - - {result.success - ? '✅ Stablecoin Creation Successful' - : '❌ Stablecoin Creation Failed'} - - - - {result.success ? ( -
-
-

- 📋 Details: -

-
-
- Name:{' '} - {result.details?.name} -
-
- Symbol:{' '} - {result.details?.symbol} -
-
- Decimals:{' '} - {result.details?.decimals} -
-
- Mint Address:{' '} - {result.mintAddress} -
-
- Transaction:{' '} - {result.transactionSignature} -
-
-
- -
-

- 🔐 Authorities: -

-
-
- Mint Authority:{' '} - {result.details?.mintAuthority} -
-
- Metadata Authority:{' '} - {result.details?.metadataAuthority} -
-
- Pausable Authority:{' '} - {result.details?.pausableAuthority} -
-
- - Confidential Balances Authority: - {' '} - {result.details?.confidentialBalancesAuthority} -
-
- - Permanent Delegate Authority: - {' '} - {result.details?.permanentDelegateAuthority} -
-
-
- -
-

- 🛡️ Token Extensions: -

-
- {result.details?.extensions.map( - (ext: string, index: number) => ( - - ✓ {ext} - - ) - )} -
-
- - {stablecoinOptions.uri && ( -
- Metadata URI:{' '} - {stablecoinOptions.uri} -
- )} -
- ) : ( -
-

Error:

-

{result.error}

-
- )} -
-
- )}
); } + +export default StablecoinCreatePage; diff --git a/packages/ui/src/app/dashboard/manage/[address]/page.tsx b/packages/ui/src/app/dashboard/manage/[address]/page.tsx index 73bdeec..1e1c28b 100644 --- a/packages/ui/src/app/dashboard/manage/[address]/page.tsx +++ b/packages/ui/src/app/dashboard/manage/[address]/page.tsx @@ -1,7 +1,6 @@ 'use client'; -import { useWallet } from '@solana/wallet-adapter-react'; -import { useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; import { Button } from '@/components/ui/button'; import { ArrowLeft, @@ -27,13 +26,14 @@ import { } from '@/components/ui/card'; import { TokenDisplay } from '@/types/token'; import { findTokenByAddress } from '@/lib/tokenData'; +import { SelectedWalletAccountContext } from '@/context/SelectedWalletAccountContext'; export default function ManageTokenPage() { - const { connected, publicKey } = useWallet(); + const [selectedWalletAccount] = useContext(SelectedWalletAccountContext); const params = useParams(); const address = params.address as string; - if (!connected || !publicKey) { + if (!selectedWalletAccount) { return (
diff --git a/packages/ui/src/app/dashboard/page.tsx b/packages/ui/src/app/dashboard/page.tsx index 8072596..fbe87bf 100644 --- a/packages/ui/src/app/dashboard/page.tsx +++ b/packages/ui/src/app/dashboard/page.tsx @@ -1,7 +1,6 @@ 'use client'; -import { useWallet } from '@solana/wallet-adapter-react'; -import { useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; import { Button } from '@/components/ui/button'; import { Plus, Settings, Coins } from 'lucide-react'; import Link from 'next/link'; @@ -21,13 +20,13 @@ import { } from '@/components/ui/dropdown-menu'; import { TokenDisplay } from '@/types/token'; import { getAllTokens } from '@/lib/tokenData'; +import { SelectedWalletAccountContext } from '@/context/SelectedWalletAccountContext'; export default function DashboardPage() { - const { connected, publicKey } = useWallet(); - const walletConnected = connected && !!publicKey; + const [selectedWalletAccount] = useContext(SelectedWalletAccountContext); - return walletConnected ? ( - + return selectedWalletAccount ? ( + ) : ( ); diff --git a/packages/ui/src/app/layout.tsx b/packages/ui/src/app/layout.tsx index a3f5154..2650c7b 100644 --- a/packages/ui/src/app/layout.tsx +++ b/packages/ui/src/app/layout.tsx @@ -4,7 +4,9 @@ import './globals.css'; import { ThemeProvider } from '@/components/theme-provider'; import { Header } from '@/components/layout/header'; import { Footer } from '@/components/layout/footer'; -import { SolanaProvider } from '@/components/solana-provider'; +import { ChainContextProvider } from '@/context/ChainContextProvider'; +import { SelectedWalletAccountContextProvider } from '@/context/SelectedWalletAccountContextProvider'; +import { RpcContextProvider } from '@/context/RpcContextProvider'; const ar = AR_One_Sans({ subsets: ['latin'] }); @@ -20,23 +22,27 @@ export default function RootLayout({ children: React.ReactNode; }) { return ( - - - - -
-
-
{children}
-
-
-
- - -
+ + + + + + +
+
+
{children}
+
+
+
+
+
+
+ + ); } diff --git a/packages/ui/src/components/ConnectWallet/ConnectWalletMenu.tsx b/packages/ui/src/components/ConnectWallet/ConnectWalletMenu.tsx new file mode 100644 index 0000000..199938d --- /dev/null +++ b/packages/ui/src/components/ConnectWallet/ConnectWalletMenu.tsx @@ -0,0 +1,108 @@ +import { StandardConnect, StandardDisconnect } from '@wallet-standard/core'; +import { + type UiWallet, + uiWalletAccountBelongsToUiWallet, + useWallets, +} from '@wallet-standard/react'; +import { useContext, useState } from 'react'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu'; + +import { SelectedWalletAccountContext } from '@/context/SelectedWalletAccountContext'; +import { ConnectWalletMenuItem } from './ConnectWalletMenuItem'; +import { UnconnectableWalletMenuItem } from './UnconnectableWalletMenuItem'; +import { WalletAccountIcon } from './WalletAccountIcon'; + +type Props = Readonly<{ + children: React.ReactNode; +}>; + +export function ConnectWalletMenu({ children }: Props) { + const wallets = useWallets(); + const [selectedWalletAccount, setSelectedWalletAccount] = useContext( + SelectedWalletAccountContext + ); + const [forceClose, setForceClose] = useState(false); + const [error, setError] = useState(); + function renderItem(wallet: UiWallet) { + if (error) { + return ; + } + return ( + { + setSelectedWalletAccount(account); + setForceClose(true); + }} + onDisconnect={wallet => { + if ( + selectedWalletAccount && + uiWalletAccountBelongsToUiWallet(selectedWalletAccount, wallet) + ) { + setSelectedWalletAccount(undefined); + } + }} + onError={setError} + wallet={wallet} + /> + ); + } + const walletsThatSupportStandardConnect = []; + const unconnectableWallets = []; + for (const wallet of wallets) { + if ( + wallet.features.includes(StandardConnect) && + wallet.features.includes(StandardDisconnect) + ) { + walletsThatSupportStandardConnect.push(wallet); + } else { + unconnectableWallets.push(wallet); + } + } + return ( + <> + setForceClose(false)} + > + +
+ {selectedWalletAccount ? ( + <> + + {selectedWalletAccount.address.slice(0, 8)} + + ) : ( + children + )} +
+
+ + {wallets.length === 0 ? ( +
+ This browser has no wallets installed. +
+ ) : ( + <> + {walletsThatSupportStandardConnect.map(renderItem)} + {unconnectableWallets.length ? ( + <> + + {unconnectableWallets.map(renderItem)} + + ) : null} + + )} +
+
+ + ); +} diff --git a/packages/ui/src/components/ConnectWallet/ConnectWalletMenuItem.tsx b/packages/ui/src/components/ConnectWallet/ConnectWalletMenuItem.tsx new file mode 100644 index 0000000..db46019 --- /dev/null +++ b/packages/ui/src/components/ConnectWallet/ConnectWalletMenuItem.tsx @@ -0,0 +1,126 @@ +import { + type UiWallet, + type UiWalletAccount, + uiWalletAccountsAreSame, + useConnect, + useDisconnect, +} from '@wallet-standard/react'; +import { useCallback, useContext } from 'react'; + +import { SelectedWalletAccountContext } from '@/context/SelectedWalletAccountContext'; +import { WalletMenuItemContent } from './WalletMenuItemContent'; +import { + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, +} from '@/components/ui/dropdown-menu'; +import { ChevronRightIcon } from 'lucide-react'; + +type Props = Readonly<{ + onAccountSelect(account: UiWalletAccount | undefined): void; + onDisconnect(wallet: UiWallet): void; + onError(err: unknown): void; + wallet: UiWallet; +}>; + +export function ConnectWalletMenuItem({ + onAccountSelect, + onDisconnect, + onError, + wallet, +}: Props) { + const [isConnecting, connect] = useConnect(wallet); + const [isDisconnecting, disconnect] = useDisconnect(wallet); + const isPending = isConnecting || isDisconnecting; + const isConnected = wallet.accounts.length > 0; + const [selectedWalletAccount] = useContext(SelectedWalletAccountContext); + const handleConnectClick = useCallback(async () => { + try { + const existingAccounts = [...wallet.accounts]; + const nextAccounts = await connect(); + // Try to choose the first never-before-seen account. + for (const nextAccount of nextAccounts) { + if ( + !existingAccounts.some(existingAccount => + uiWalletAccountsAreSame(nextAccount, existingAccount) + ) + ) { + onAccountSelect(nextAccount); + return; + } + } + // Failing that, choose the first account in the list. + if (nextAccounts[0]) { + onAccountSelect(nextAccounts[0]); + } + } catch (e) { + onError(e); + } + }, [connect, onAccountSelect, onError, wallet.accounts]); + return ( + + + + {isConnected ? ( +
+ +
+ ) : null} +
+ + Accounts + + {wallet.accounts.map(account => ( + { + onAccountSelect(account); + }} + > + {account.address.slice(0, 8)}… + + ))} + + + { + e.preventDefault(); + await handleConnectClick(); + }} + > + Connect More + + { + e.preventDefault(); + try { + await disconnect(); + onDisconnect(wallet); + } catch (e) { + onError(e); + } + }} + > + Disconnect + + +
+ ); +} diff --git a/packages/ui/src/components/ConnectWallet/UnconnectableWalletMenuItem.tsx b/packages/ui/src/components/ConnectWallet/UnconnectableWalletMenuItem.tsx new file mode 100644 index 0000000..3743b0b --- /dev/null +++ b/packages/ui/src/components/ConnectWallet/UnconnectableWalletMenuItem.tsx @@ -0,0 +1,38 @@ +import type { UiWallet } from '@wallet-standard/react'; +import { useState } from 'react'; + +import { WalletMenuItemContent } from './WalletMenuItemContent'; +import { DropdownMenuItem } from '@/components/ui/dropdown-menu'; +import { AlertTriangleIcon } from 'lucide-react'; +import { Button } from '../ui/button'; + +type Props = Readonly<{ + error: unknown; + wallet: UiWallet; +}>; + +export function UnconnectableWalletMenuItem({ error, wallet }: Props) { + const [dialogIsOpen, setDialogIsOpen] = useState(false); + return ( + <> + setDialogIsOpen(true)}> + +
{wallet.name}
+
+
+ +
+
+ {dialogIsOpen ? ( +
+

Unconnectable wallet

+

{error instanceof Error ? error.message : 'Unknown error'}

+ +
+ ) : null} + + ); +} diff --git a/packages/ui/src/components/ConnectWallet/WalletAccountIcon.tsx b/packages/ui/src/components/ConnectWallet/WalletAccountIcon.tsx new file mode 100644 index 0000000..ed5364e --- /dev/null +++ b/packages/ui/src/components/ConnectWallet/WalletAccountIcon.tsx @@ -0,0 +1,36 @@ +import { + type UiWalletAccount, + uiWalletAccountBelongsToUiWallet, + useWallets, +} from '@wallet-standard/react'; +import Image from 'next/image'; +import React from 'react'; + +type Props = React.ComponentProps<'img'> & + Readonly<{ + account: UiWalletAccount; + }>; + +export function WalletAccountIcon({ account }: Props) { + const wallets = useWallets(); + let icon; + if (account.icon) { + icon = account.icon; + } else { + for (const wallet of wallets) { + if (uiWalletAccountBelongsToUiWallet(account, wallet)) { + icon = wallet.icon; + break; + } + } + } + return icon ? ( + {account.address} + ) : null; +} diff --git a/packages/ui/src/components/ConnectWallet/WalletMenuItemContent.tsx b/packages/ui/src/components/ConnectWallet/WalletMenuItemContent.tsx new file mode 100644 index 0000000..6b0d7a6 --- /dev/null +++ b/packages/ui/src/components/ConnectWallet/WalletMenuItemContent.tsx @@ -0,0 +1,34 @@ +import type { UiWallet } from '@wallet-standard/react'; +import { Loader2Icon } from 'lucide-react'; +import Image from 'next/image'; + +type Props = Readonly<{ + children?: React.ReactNode; + loading?: boolean; + wallet: UiWallet; +}>; + +export function WalletMenuItemContent({ children, loading, wallet }: Props) { + if (loading) { + return ( +
+ +
+ ); + } + + return ( +
+
+ {wallet.name} +
+
{children ?? wallet.name}
+
+ ); +} diff --git a/packages/ui/src/components/layout/header.tsx b/packages/ui/src/components/layout/header.tsx index 735bf8d..ed01b77 100644 --- a/packages/ui/src/components/layout/header.tsx +++ b/packages/ui/src/components/layout/header.tsx @@ -2,8 +2,8 @@ import { ModeToggle } from '@/components/mode-toggle'; import { Button } from '@/components/ui/button'; import { useRouter, usePathname } from 'next/navigation'; -import { WalletMultiButton } from '@solana/wallet-adapter-react-ui'; import Link from 'next/link'; +import { ConnectWalletMenu } from '@/components/ConnectWallet/ConnectWalletMenu'; export function Header() { const router = useRouter(); @@ -25,7 +25,9 @@ export function Header() { Get Started ) : ( - + +

Connect Wallet

+
)}
diff --git a/packages/ui/src/context/ChainContext.tsx b/packages/ui/src/context/ChainContext.tsx new file mode 100644 index 0000000..0c1edb2 --- /dev/null +++ b/packages/ui/src/context/ChainContext.tsx @@ -0,0 +1,23 @@ +'use client'; +import { type ClusterUrl, devnet } from 'gill'; +import { createContext } from 'react'; + +export type ChainContextType = Readonly<{ + chain: `solana:${string}`; + displayName: string; + setChain?(chain: `solana:${string}`): void; + solanaExplorerClusterName: 'devnet' | 'mainnet-beta' | 'testnet'; + solanaRpcSubscriptionsUrl: ClusterUrl; + solanaRpcUrl: ClusterUrl; +}>; + +export const DEFAULT_CHAIN_CONFIG = Object.freeze({ + chain: 'solana:devnet', + displayName: 'Devnet', + solanaExplorerClusterName: 'devnet', + solanaRpcSubscriptionsUrl: devnet('wss://api.devnet.solana.com'), + solanaRpcUrl: devnet('https://api.devnet.solana.com'), +}); + +export const ChainContext = + createContext(DEFAULT_CHAIN_CONFIG); diff --git a/packages/ui/src/context/ChainContextProvider.tsx b/packages/ui/src/context/ChainContextProvider.tsx new file mode 100644 index 0000000..0d2d682 --- /dev/null +++ b/packages/ui/src/context/ChainContextProvider.tsx @@ -0,0 +1,77 @@ +'use client'; +import { mainnet, testnet } from 'gill'; +import React, { useMemo, useState, useEffect } from 'react'; + +import { + ChainContext, + ChainContextType, + DEFAULT_CHAIN_CONFIG, +} from './ChainContext'; + +const STORAGE_KEY = 'solana-example-react-app:selected-chain'; + +interface ChainContextProviderProps { + children: React.ReactNode; +} + +export function ChainContextProvider({ children }: ChainContextProviderProps) { + const [chain, setChain] = useState(DEFAULT_CHAIN_CONFIG.chain); + + // Load chain preference from localStorage after component mounts (client-side only) + useEffect(() => { + if (typeof window !== 'undefined') { + const savedChain = localStorage.getItem(STORAGE_KEY); + if (savedChain) { + setChain(savedChain); + } + } + }, []); + const contextValue = useMemo(() => { + switch (chain) { + case 'solana:mainnet': + if (process.env.NEXT_PUBLIC_EXAMPLE_APP_ENABLE_MAINNET === 'true') { + return { + chain: 'solana:mainnet', + displayName: 'Mainnet Beta', + solanaExplorerClusterName: 'mainnet-beta', + solanaRpcSubscriptionsUrl: mainnet( + 'wss://api.mainnet-beta.solana.com' + ), + solanaRpcUrl: mainnet('https://api.mainnet-beta.solana.com'), + }; + } + case 'solana:testnet': + return { + chain: 'solana:testnet', + displayName: 'Testnet', + solanaExplorerClusterName: 'testnet', + solanaRpcSubscriptionsUrl: testnet('wss://api.testnet.solana.com'), + solanaRpcUrl: testnet('https://api.testnet.solana.com'), + }; + case 'solana:devnet': + default: + if (chain !== 'solana:devnet' && typeof window !== 'undefined') { + localStorage.removeItem(STORAGE_KEY); + } + return DEFAULT_CHAIN_CONFIG; + } + }, [chain]); + return ( + ({ + ...contextValue, + setChain(newChain: `solana:${string}`) { + if (typeof window !== 'undefined') { + localStorage.setItem(STORAGE_KEY, newChain); + } + setChain(newChain); + }, + }), + [contextValue] + )} + > + {children} + + ); +} diff --git a/packages/ui/src/context/RpcContext.tsx b/packages/ui/src/context/RpcContext.tsx new file mode 100644 index 0000000..f509937 --- /dev/null +++ b/packages/ui/src/context/RpcContext.tsx @@ -0,0 +1,21 @@ +'use client'; +import { + type Rpc, + type RpcSubscriptions, + type SolanaRpcApiMainnet, + type SolanaRpcSubscriptionsApi, + createSolanaRpc, + createSolanaRpcSubscriptions, + devnet, +} from 'gill'; +import { createContext } from 'react'; + +export const RpcContext = createContext<{ + rpc: Rpc; // Limit the API to only those methods found on Mainnet (ie. not `requestAirdrop`) + rpcSubscriptions: RpcSubscriptions; +}>({ + rpc: createSolanaRpc(devnet('https://api.devnet.solana.com')), + rpcSubscriptions: createSolanaRpcSubscriptions( + devnet('wss://api.devnet.solana.com') + ), +}); diff --git a/packages/ui/src/context/RpcContextProvider.tsx b/packages/ui/src/context/RpcContextProvider.tsx new file mode 100644 index 0000000..9f6440c --- /dev/null +++ b/packages/ui/src/context/RpcContextProvider.tsx @@ -0,0 +1,29 @@ +'use client'; +import { createSolanaRpc, createSolanaRpcSubscriptions } from 'gill'; +import React, { useContext, useMemo } from 'react'; + +import { ChainContext } from './ChainContext'; +import { RpcContext } from './RpcContext'; + +interface RpcContextProviderProps { + children: React.ReactNode; +} + +export function RpcContextProvider({ children }: RpcContextProviderProps) { + const { solanaRpcSubscriptionsUrl, solanaRpcUrl } = useContext(ChainContext); + return ( + ({ + rpc: createSolanaRpc(solanaRpcUrl), + rpcSubscriptions: createSolanaRpcSubscriptions( + solanaRpcSubscriptionsUrl + ), + }), + [solanaRpcSubscriptionsUrl, solanaRpcUrl] + )} + > + {children} + + ); +} diff --git a/packages/ui/src/context/SelectedWalletAccountContext.tsx b/packages/ui/src/context/SelectedWalletAccountContext.tsx new file mode 100644 index 0000000..404796f --- /dev/null +++ b/packages/ui/src/context/SelectedWalletAccountContext.tsx @@ -0,0 +1,19 @@ +'use client'; +import type { UiWalletAccount } from '@wallet-standard/react'; +import { createContext } from 'react'; + +export type SelectedWalletAccountState = UiWalletAccount | undefined; + +export const SelectedWalletAccountContext = createContext< + readonly [ + selectedWalletAccount: SelectedWalletAccountState, + setSelectedWalletAccount: React.Dispatch< + React.SetStateAction + >, + ] +>([ + undefined /* selectedWalletAccount */, + function setSelectedWalletAccount() { + /* empty */ + }, +]); diff --git a/packages/ui/src/context/SelectedWalletAccountContextProvider.tsx b/packages/ui/src/context/SelectedWalletAccountContextProvider.tsx new file mode 100644 index 0000000..b9643cf --- /dev/null +++ b/packages/ui/src/context/SelectedWalletAccountContextProvider.tsx @@ -0,0 +1,134 @@ +'use client'; +import { + getUiWalletAccountStorageKey, + UiWallet, + UiWalletAccount, + uiWalletAccountBelongsToUiWallet, + uiWalletAccountsAreSame, + useWallets, +} from '@wallet-standard/react'; +import { useEffect, useMemo, useState } from 'react'; + +import { + SelectedWalletAccountContext, + SelectedWalletAccountState, +} from './SelectedWalletAccountContext'; + +const STORAGE_KEY = + 'solana-wallet-standard-example-react:selected-wallet-and-address'; + +let wasSetterInvoked = false; +function getSavedWalletAccount( + wallets: readonly UiWallet[] +): UiWalletAccount | undefined { + if (wasSetterInvoked) { + // After the user makes an explicit choice of wallet, stop trying to auto-select the + // saved wallet, if and when it appears. + return; + } + // Only access localStorage in the browser environment + if (typeof window === 'undefined') { + return; + } + const savedWalletNameAndAddress = localStorage.getItem(STORAGE_KEY); + if ( + !savedWalletNameAndAddress || + typeof savedWalletNameAndAddress !== 'string' + ) { + return; + } + const [savedWalletName, savedAccountAddress] = + savedWalletNameAndAddress.split(':'); + if (!savedWalletName || !savedAccountAddress) { + return; + } + for (const wallet of wallets) { + if (wallet.name === savedWalletName) { + for (const account of wallet.accounts) { + if (account.address === savedAccountAddress) { + return account; + } + } + } + } +} + +/** + * Saves the selected wallet account's storage key to the browser's local storage. In future + * sessions it will try to return that same wallet account, or at least one from the same brand of + * wallet if the wallet from which it came is still in the Wallet Standard registry. + */ +export function SelectedWalletAccountContextProvider({ + children, +}: { + children: React.ReactNode; +}) { + const wallets = useWallets(); + const [selectedWalletAccount, setSelectedWalletAccountInternal] = + useState(() => getSavedWalletAccount(wallets)); + const setSelectedWalletAccount: React.Dispatch< + React.SetStateAction + > = setStateAction => { + setSelectedWalletAccountInternal(prevSelectedWalletAccount => { + wasSetterInvoked = true; + const nextWalletAccount = + typeof setStateAction === 'function' + ? setStateAction(prevSelectedWalletAccount) + : setStateAction; + const accountKey = nextWalletAccount + ? getUiWalletAccountStorageKey(nextWalletAccount) + : undefined; + // Only access localStorage in the browser environment + if (typeof window !== 'undefined') { + if (accountKey) { + localStorage.setItem(STORAGE_KEY, accountKey); + } else { + localStorage.removeItem(STORAGE_KEY); + } + } + return nextWalletAccount; + }); + }; + useEffect(() => { + const savedWalletAccount = getSavedWalletAccount(wallets); + if (savedWalletAccount) { + setSelectedWalletAccountInternal(savedWalletAccount); + } + }, [wallets]); + const walletAccount = useMemo(() => { + if (selectedWalletAccount) { + for (const uiWallet of wallets) { + for (const uiWalletAccount of uiWallet.accounts) { + if (uiWalletAccountsAreSame(selectedWalletAccount, uiWalletAccount)) { + return uiWalletAccount; + } + } + if ( + uiWalletAccountBelongsToUiWallet(selectedWalletAccount, uiWallet) && + uiWallet.accounts[0] + ) { + // If the selected account belongs to this connected wallet, at least, then + // select one of its accounts. + return uiWallet.accounts[0]; + } + } + } + }, [selectedWalletAccount, wallets]); + useEffect(() => { + // If there is a selected wallet account but the wallet to which it belongs has since + // disconnected, clear the selected wallet. + if (selectedWalletAccount && !walletAccount) { + setSelectedWalletAccountInternal(undefined); + } + }, [selectedWalletAccount, walletAccount]); + return ( + [walletAccount, setSelectedWalletAccount], + [walletAccount] + )} + > + {children} + + ); +} diff --git a/packages/ui/src/lib/stablecoin.ts b/packages/ui/src/lib/stablecoin.ts index 4d48b65..7f138c4 100644 --- a/packages/ui/src/lib/stablecoin.ts +++ b/packages/ui/src/lib/stablecoin.ts @@ -1,115 +1,55 @@ import { - signTransactionMessageWithSigners, generateKeyPairSigner, createSolanaRpc, type Address, type Rpc, type SolanaRpcApi, - getSignatureFromTransaction, + signAndSendTransactionMessageWithSigners, + TransactionSendingSigner, } from 'gill'; -import { StablecoinOptions, StablecoinCreationResult } from '@/types/token'; -import { WalletAdapter } from '@/types/wallet'; +import { StablecoinOptions } from '@/types/token'; import { createStablecoinInitTransaction } from '@mosaic/sdk'; +import bs58 from 'bs58'; /** - * Creates a stablecoin using the web-compatible version of the CLI script - * @param options - Configuration options for the stablecoin - * @param wallet - Solana wallet instance - * @returns Promise that resolves to the transaction signature + * Validates stablecoin options and returns parsed decimals + * @param options - Stablecoin configuration options + * @returns Parsed decimals value + * @throws Error if validation fails */ -export const createStablecoin = async ( - options: StablecoinOptions, - wallet: WalletAdapter -): Promise => { - try { - if (!options.name || !options.symbol) { - throw new Error('Name and symbol are required'); - } - - // Parse decimals - const decimals = parseInt(options.decimals, 10); - if (isNaN(decimals) || decimals < 0 || decimals > 9) { - throw new Error('Decimals must be a number between 0 and 9'); - } - - // Get wallet public key - const walletPublicKey = wallet.publicKey; - if (!walletPublicKey) { - throw new Error('Wallet not connected'); - } - - const signerAddress = walletPublicKey.toString(); - - // Generate mint keypair - const mintKeypair = await generateKeyPairSigner(); - - // Set authorities (default to signer if not provided) - const mintAuthority = (options.mintAuthority || signerAddress) as Address; - const metadataAuthority = (options.metadataAuthority || - mintAuthority) as Address; - const pausableAuthority = (options.pausableAuthority || - mintAuthority) as Address; - const confidentialBalancesAuthority = - (options.confidentialBalancesAuthority || mintAuthority) as Address; - const permanentDelegateAuthority = (options.permanentDelegateAuthority || - mintAuthority) as Address; - - // Create RPC client - const rpcUrl = options.rpcUrl || 'https://api.devnet.solana.com'; - const rpc: Rpc = createSolanaRpc(rpcUrl); - - // Create stablecoin transaction using SDK - const transaction = await createStablecoinInitTransaction( - rpc, - options.name, - options.symbol, - decimals, - options.uri || '', - mintAuthority, - mintKeypair, - wallet.publicKey as Address, // Use wallet as fee payer - metadataAuthority, - pausableAuthority, - confidentialBalancesAuthority, - permanentDelegateAuthority - ); - - // Sign the transaction - const signedTransaction = - await signTransactionMessageWithSigners(transaction); - const signature = getSignatureFromTransaction(signedTransaction); +function validateStablecoinOptions(options: StablecoinOptions): number { + if (!options.name || !options.symbol) { + throw new Error('Name and symbol are required'); + } - // Return the transaction signature - return signature; - } catch (error) { - throw new Error( - error instanceof Error ? error.message : 'Unknown error occurred' - ); + const decimals = parseInt(options.decimals, 10); + if (isNaN(decimals) || decimals < 0 || decimals > 9) { + throw new Error('Decimals must be a number between 0 and 9'); } -}; + + return decimals; +} /** - * Simplified version for UI integration that handles the transaction conversion - * This version works with the existing UI structure + * Creates a stablecoin using the wallet standard transaction signer + * @param options - Configuration options for the stablecoin + * @param signer - Transaction sending signer instance + * @returns Promise that resolves to creation result with signature and mint address */ -export const createStablecoinForUI = async ( +export const createStablecoin = async ( options: StablecoinOptions, - wallet: WalletAdapter -): Promise => { + signer: TransactionSendingSigner +): Promise<{ + success: boolean; + error?: string; + transactionSignature?: string; + mintAddress?: string; +}> => { try { - // Validate required fields - if (!options.name || !options.symbol) { - throw new Error('Name and symbol are required'); - } - - // Parse decimals - const decimals = parseInt(options.decimals, 10); - if (isNaN(decimals) || decimals < 0 || decimals > 9) { - throw new Error('Decimals must be a number between 0 and 9'); - } + const decimals = validateStablecoinOptions(options); // Get wallet public key - const walletPublicKey = wallet.publicKey; + const walletPublicKey = signer.address; if (!walletPublicKey) { throw new Error('Wallet not connected'); } @@ -143,7 +83,7 @@ export const createStablecoinForUI = async ( options.uri || '', mintAuthority, mintKeypair, - wallet.publicKey as Address, // Use wallet as fee payer + signer, // Use wallet as fee payer metadataAuthority, pausableAuthority, confidentialBalancesAuthority, @@ -151,32 +91,13 @@ export const createStablecoinForUI = async ( ); // Sign the transaction - const signedTransaction = - await signTransactionMessageWithSigners(transaction); - const signature = getSignatureFromTransaction(signedTransaction); + const signature = + await signAndSendTransactionMessageWithSigners(transaction); - // Return success result with all details return { success: true, - transactionSignature: signature, + transactionSignature: bs58.encode(signature), mintAddress: mintKeypair.address, - details: { - name: options.name, - symbol: options.symbol, - decimals: decimals, - mintAuthority: mintAuthority, - metadataAuthority: metadataAuthority, - pausableAuthority: pausableAuthority, - confidentialBalancesAuthority: confidentialBalancesAuthority, - permanentDelegateAuthority: permanentDelegateAuthority, - extensions: [ - 'Metadata', - 'Pausable', - 'Default Account State (Blocklist)', - 'Confidential Balances', - 'Permanent Delegate', - ], - }, }; } catch (error) { return { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3c741e4..f28dd90 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -103,18 +103,36 @@ importers: '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.2.3(@types/react@18.3.23)(react@18.3.1) + '@solana/react': + specifier: ^2.3.0 + version: 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3) + '@solana/signers': + specifier: ^2.3.0 + version: 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/wallet-adapter-base': specifier: ^0.9.27 version: 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-react': specifier: ^0.15.39 - version: 0.15.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + version: 0.15.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@solana/wallet-adapter-react-ui': specifier: ^0.9.39 - version: 0.9.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-dom@18.3.1(react@18.3.1))(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + version: 0.9.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-dom@18.3.1(react@18.3.1))(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@solana/wallet-adapter-wallets': specifier: ^0.19.37 - version: 0.19.37(@babel/runtime@7.28.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bs58@5.0.0)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@18.3.1(react@18.3.1))(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.22.4) + version: 0.19.37(@babel/runtime@7.28.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bs58@6.0.0)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@18.3.1(react@18.3.1))(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.22.4) + '@tanstack/react-query': + specifier: ^5.83.0 + version: 5.83.0(react@18.3.1) + '@wallet-standard/core': + specifier: ^1.1.1 + version: 1.1.1 + '@wallet-standard/react': + specifier: ^1.0.1 + version: 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + bs58: + specifier: ^6.0.0 + version: 6.0.0 class-variance-authority: specifier: ^0.7.0 version: 0.7.1 @@ -123,7 +141,10 @@ importers: version: 2.1.1 gill: specifier: ^0.10.2 - version: 0.10.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.10.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + gill-react: + specifier: ^0.4.4 + version: 0.4.4(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(@tanstack/react-query@5.83.0(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) lucide-react: specifier: ^0.294.0 version: 0.294.0(react@18.3.1) @@ -1659,6 +1680,12 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/react@2.3.0': + resolution: {integrity: sha512-+PKxHce8TIPrse3VChSGKsI+2XPTgtmAtTFag9xGYxwEE8k+rDpIoCZR8RVeCfLAR9k1Tiox+7AkDEA2UXkMoQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + react: '>=18' + '@solana/rpc-api@2.3.0': resolution: {integrity: sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==} engines: {node: '>=20.18.0'} @@ -2083,6 +2110,14 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@tanstack/query-core@5.83.0': + resolution: {integrity: sha512-0M8dA+amXUkyz5cVUm/B+zSk3xkQAcuXuz5/Q/LveT4ots2rBpPTZOzd7yJa2Utsf8D2Upl5KyjhHRY+9lB/XA==} + + '@tanstack/react-query@5.83.0': + resolution: {integrity: sha512-/XGYhZ3foc5H0VM2jLSD/NyBRIOK4q9kfeml4+0x2DlL6xVuAcVEW+hTlTapAmejObg0i3eNqhkr2dT+eciwoQ==} + peerDependencies: + react: ^18 || ^19 + '@toruslabs/base-controllers@5.11.0': resolution: {integrity: sha512-5AsGOlpf3DRIsd6PzEemBoRq+o2OhgSFXj5LZD6gXcBlfe0OpF+ydJb7Q8rIt5wwpQLNJCs8psBUbqIv7ukD2w==} engines: {node: '>=18.x', npm: '>=9.x'} @@ -2499,10 +2534,45 @@ packages: engines: {node: '>=16'} hasBin: true + '@wallet-standard/experimental-features@0.2.0': + resolution: {integrity: sha512-B6fBLgouurN3IAoqhh8/1Mm33IAWIErQXVyvMcyBJM+elOD6zkNDUjew5QMG19qCbJ+ZiZUZmdOUC5PxxWw69w==} + engines: {node: '>=16'} + '@wallet-standard/features@1.1.0': resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} engines: {node: '>=16'} + '@wallet-standard/react-core@1.0.1': + resolution: {integrity: sha512-g+vZaLlAGlYMwZEoKsmjjI5qz1D8P3FF1aqiI3WLooWOVk55Nszbpk01QCbIFdIMF0UDhxia2FU667TCv509iw==} + engines: {node: '>=16'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + '@wallet-standard/react@1.0.1': + resolution: {integrity: sha512-StpPv234R94MmJCCUZurQvQSsX6Xe1eOd2lNgwVonvSVdPqCNVS/haVpdrBMx0wX1Ut24X77qyBLP7SGxK5OUg==} + engines: {node: '>=16'} + + '@wallet-standard/ui-compare@1.0.1': + resolution: {integrity: sha512-Qr6AjgxTgTNgjUm/HQend08jFCUJ2ugbONpbC1hSl4Ndul+theJV3CwVZ2ffKun584bHoR8OAibJ+QA4ecogEA==} + engines: {node: '>=16'} + + '@wallet-standard/ui-core@1.0.0': + resolution: {integrity: sha512-pnpBfxJois0fIAI0IBJ6hopOguw81JniB6DzOs5J7C16W7/M2kC0OKHQFKrz6cgSGMq8X0bPA8nZTXFTSNbURg==} + engines: {node: '>=16'} + + '@wallet-standard/ui-features@1.0.1': + resolution: {integrity: sha512-0/lZFx599bGcDEvisAWtbFMuRM/IuqP/o0vbhAeQdLWsWsaqFTUIKZtMt8JJq+fFBMQGc6tuRH6ehrgm+Y0biQ==} + engines: {node: '>=16'} + + '@wallet-standard/ui-registry@1.0.1': + resolution: {integrity: sha512-+SeXEwSoyqEWv9B6JLxRioRlgN5ksSFObZMf+XKm2U+vwmc/mfm43I8zw5wvGBpubzmywbe2eejd5k/snyx+uA==} + engines: {node: '>=16'} + + '@wallet-standard/ui@1.0.1': + resolution: {integrity: sha512-3b1iSfHOB3YpuBM645ZAgA0LMGZv+3Eh4y9lM3kS+NnvK4NxwnEdn1mLbFxevRhyulNjFZ50m2Cq5mpEOYs2mw==} + engines: {node: '>=16'} + '@wallet-standard/wallet@1.1.0': resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} engines: {node: '>=16'} @@ -3852,6 +3922,16 @@ packages: get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + gill-react@0.4.4: + resolution: {integrity: sha512-gNbWIroxYMKPhyFLJnvkYxDUVbhkTCduylbdqguGMprXVpn5ByxOyi33W0sSVXrAIWzxD2RV66ZcIc4Qap0sLQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + '@tanstack/react-query': ^5.61.4 + '@types/react': ^18 + '@types/react-dom': ^18 + react: ^18 + typescript: '>=5' + gill@0.10.2: resolution: {integrity: sha512-upWoY2dfOzKHOcX3UnD+B3h9WUunPv0oxeKzsIgKSaLyURpWK9oI+K2NHWbwrUFsXEK6ozu/sgkhuqyAcVTZCg==} engines: {node: '>=20.18.0'} @@ -7195,11 +7275,11 @@ snapshots: crypto-js: 4.2.0 uuidv4: 6.2.13 - '@particle-network/solana-wallet@1.3.2(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)': + '@particle-network/solana-wallet@1.3.2(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)': dependencies: '@particle-network/auth': 1.3.1 '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - bs58: 5.0.0 + bs58: 6.0.0 '@pkgjs/parseargs@0.11.0': optional: true @@ -7857,37 +7937,37 @@ snapshots: - react - react-native - '@solana-program/address-lookup-table@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/address-lookup-table@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana-program/address-lookup-table@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/stake@0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/stake@0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/system@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/system@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana-program/system@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))': + '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))': @@ -7895,9 +7975,9 @@ snapshots: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/accounts@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: @@ -7999,7 +8079,7 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) @@ -8012,11 +8092,11 @@ snapshots: '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/rpc-parsed-types': 2.3.0(typescript@5.8.3) '@solana/rpc-spec-types': 2.3.0(typescript@5.8.3) - '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) typescript: 5.8.3 @@ -8076,6 +8156,24 @@ snapshots: dependencies: typescript: 5.8.3 + '@solana/react@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/errors': 2.3.0(typescript@5.8.3) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/promises': 2.3.0(typescript@5.8.3) + '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/wallet-standard-features': 1.3.0 + '@wallet-standard/base': 1.1.0 + '@wallet-standard/errors': 0.1.1 + '@wallet-standard/ui': 1.0.1 + '@wallet-standard/ui-registry': 1.0.1 + react: 18.3.1 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + '@solana/rpc-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) @@ -8120,14 +8218,14 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/errors': 2.3.0(typescript@5.8.3) '@solana/functional': 2.3.0(typescript@5.8.3) '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.8.3) '@solana/subscribable': 2.3.0(typescript@5.8.3) typescript: 5.8.3 - ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.8.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: @@ -8146,7 +8244,7 @@ snapshots: '@solana/subscribable': 2.3.0(typescript@5.8.3) typescript: 5.8.3 - '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/errors': 2.3.0(typescript@5.8.3) '@solana/fast-stable-stringify': 2.3.0(typescript@5.8.3) @@ -8154,7 +8252,7 @@ snapshots: '@solana/promises': 2.3.0(typescript@5.8.3) '@solana/rpc-spec-types': 2.3.0(typescript@5.8.3) '@solana/rpc-subscriptions-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.8.3) '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) @@ -8257,7 +8355,7 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) @@ -8265,7 +8363,7 @@ snapshots: '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/promises': 2.3.0(typescript@5.8.3) '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) @@ -8334,9 +8432,9 @@ snapshots: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-base-ui@0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@solana/wallet-adapter-base-ui@0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: - '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) react: 18.3.1 transitivePeerDependencies: @@ -8455,9 +8553,9 @@ snapshots: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-particle@0.1.16(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)': + '@solana/wallet-adapter-particle@0.1.16(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)': dependencies: - '@particle-network/solana-wallet': 1.3.2(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0) + '@particle-network/solana-wallet': 1.3.2(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0) '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -8468,11 +8566,11 @@ snapshots: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-react-ui@0.9.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-dom@18.3.1(react@18.3.1))(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@solana/wallet-adapter-react-ui@0.9.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-dom@18.3.1(react@18.3.1))(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-base-ui': 0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) - '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@solana/wallet-adapter-base-ui': 0.1.6(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -8480,11 +8578,11 @@ snapshots: - bs58 - react-native - '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: '@solana-mobile/wallet-adapter-mobile': 2.2.2(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(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.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@18.3.1) + '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@18.3.1) '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) react: 18.3.1 transitivePeerDependencies: @@ -8559,11 +8657,11 @@ snapshots: - typescript - utf-8-validate - '@solana/wallet-adapter-trezor@0.1.6(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/wallet-adapter-trezor@0.1.6(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@trezor/connect-web': 9.6.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@trezor/connect-web': 9.6.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) buffer: 6.0.3 transitivePeerDependencies: - '@solana/sysvars' @@ -8625,7 +8723,7 @@ snapshots: - utf-8-validate - zod - '@solana/wallet-adapter-wallets@0.19.37(@babel/runtime@7.28.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bs58@5.0.0)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@18.3.1(react@18.3.1))(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.22.4)': + '@solana/wallet-adapter-wallets@0.19.37(@babel/runtime@7.28.2)(@react-native-async-storage/async-storage@1.24.0(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bs58@6.0.0)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@18.3.1(react@18.3.1))(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.22.4)': dependencies: '@solana/wallet-adapter-alpha': 0.1.14(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-avana': 0.1.17(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) @@ -8646,7 +8744,7 @@ snapshots: '@solana/wallet-adapter-nightly': 0.1.20(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-nufi': 0.1.21(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-onto': 0.1.11(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-particle': 0.1.16(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0) + '@solana/wallet-adapter-particle': 0.1.16(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0) '@solana/wallet-adapter-phantom': 0.9.28(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-safepal': 0.5.22(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-saifu': 0.1.19(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) @@ -8658,7 +8756,7 @@ snapshots: '@solana/wallet-adapter-tokenary': 0.1.16(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-tokenpocket': 0.4.23(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-torus': 0.11.32(@babel/runtime@7.28.2)(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-trezor': 0.1.6(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/wallet-adapter-trezor': 0.1.6(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-trust': 0.1.17(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-unsafe-burner': 0.1.11(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-walletconnect': 0.1.21(@react-native-async-storage/async-storage@1.24.0(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4) @@ -8743,6 +8841,19 @@ snapshots: '@wallet-standard/wallet': 1.1.0 bs58: 5.0.0 + '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)': + dependencies: + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(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.2(bufferutil@4.0.9)(typescript@5.8.3)(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: 6.0.0 + '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@18.3.1)': dependencies: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) @@ -8754,6 +8865,17 @@ snapshots: - '@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.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@18.3.1)': + dependencies: + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0) + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + react: 18.3.1 + 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.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@18.3.1)': dependencies: '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0) @@ -8843,6 +8965,13 @@ snapshots: dependencies: tslib: 2.8.1 + '@tanstack/query-core@5.83.0': {} + + '@tanstack/react-query@5.83.0(react@18.3.1)': + dependencies: + '@tanstack/query-core': 5.83.0 + react: 18.3.1 + '@toruslabs/base-controllers@5.11.0(@babel/runtime@7.28.2)(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.28.2 @@ -8972,12 +9101,12 @@ snapshots: - react-native - utf-8-validate - '@trezor/blockchain-link@2.5.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@trezor/blockchain-link@2.5.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@solana-program/stake': 0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana-program/stake': 0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) '@stellar/stellar-sdk': 13.3.0 '@trezor/blockchain-link-types': 1.4.2(tslib@2.8.1) @@ -9026,9 +9155,9 @@ snapshots: - expo-localization - react-native - '@trezor/connect-web@9.6.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@trezor/connect-web@9.6.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@trezor/connect': 9.6.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@trezor/connect': 9.6.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@trezor/connect-common': 0.4.2(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1) '@trezor/utils': 9.4.2(tslib@2.8.1) '@trezor/websocket-client': 1.2.2(bufferutil@4.0.9)(tslib@2.8.1)(utf-8-validate@5.0.10) @@ -9047,7 +9176,7 @@ snapshots: - utf-8-validate - ws - '@trezor/connect@9.6.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@trezor/connect@9.6.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@ethereumjs/common': 10.0.0 '@ethereumjs/tx': 10.0.0 @@ -9055,12 +9184,12 @@ snapshots: '@mobily/ts-belt': 3.13.1 '@noble/hashes': 1.8.0 '@scure/bip39': 1.6.0 - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/system': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@trezor/blockchain-link': 2.5.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/system': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@trezor/blockchain-link': 2.5.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@trezor/blockchain-link-types': 1.4.2(tslib@2.8.1) '@trezor/blockchain-link-utils': 1.4.2(bufferutil@4.0.9)(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1)(utf-8-validate@5.0.10) '@trezor/connect-analytics': 1.3.5(react-native@0.80.2(@babel/core@7.28.0)(@types/react@18.3.23)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(tslib@2.8.1) @@ -9448,10 +9577,62 @@ snapshots: chalk: 5.4.1 commander: 13.1.0 + '@wallet-standard/experimental-features@0.2.0': + dependencies: + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features@1.1.0': dependencies: '@wallet-standard/base': 1.1.0 + '@wallet-standard/react-core@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + '@wallet-standard/errors': 0.1.1 + '@wallet-standard/experimental-features': 0.2.0 + '@wallet-standard/features': 1.1.0 + '@wallet-standard/ui': 1.0.1 + '@wallet-standard/ui-registry': 1.0.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@wallet-standard/react@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@wallet-standard/react-core': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - react + - react-dom + + '@wallet-standard/ui-compare@1.0.1': + dependencies: + '@wallet-standard/base': 1.1.0 + '@wallet-standard/ui-core': 1.0.0 + '@wallet-standard/ui-registry': 1.0.1 + + '@wallet-standard/ui-core@1.0.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@wallet-standard/ui-features@1.0.1': + dependencies: + '@wallet-standard/base': 1.1.0 + '@wallet-standard/errors': 0.1.1 + '@wallet-standard/ui-core': 1.0.0 + '@wallet-standard/ui-registry': 1.0.1 + + '@wallet-standard/ui-registry@1.0.1': + dependencies: + '@wallet-standard/base': 1.1.0 + '@wallet-standard/errors': 0.1.1 + '@wallet-standard/ui-core': 1.0.0 + + '@wallet-standard/ui@1.0.1': + dependencies: + '@wallet-standard/ui-compare': 1.0.1 + '@wallet-standard/ui-core': 1.0.0 + '@wallet-standard/ui-features': 1.0.1 + '@wallet-standard/wallet@1.1.0': dependencies: '@wallet-standard/base': 1.1.0 @@ -11512,16 +11693,29 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - gill@0.10.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + gill-react@0.4.4(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(@tanstack/react-query@5.83.0(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(fastestsmallesttextencoderdecoder@1.0.22)(react@18.3.1)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + '@tanstack/react-query': 5.83.0(react@18.3.1) + '@types/react': 18.3.23 + '@types/react-dom': 18.3.7(@types/react@18.3.23) + gill: 0.10.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + react: 18.3.1 + typescript: 5.8.3 + transitivePeerDependencies: + - '@solana/sysvars' + - fastestsmallesttextencoderdecoder + - ws + + gill@0.10.2(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - '@solana-program/address-lookup-table': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/system': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)) + '@solana-program/address-lookup-table': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/system': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)) '@solana/assertions': 2.3.0(typescript@5.8.3) '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) typescript: 5.8.3 transitivePeerDependencies: - '@solana/sysvars'