diff --git a/app/components/WalletConnectionProgress.tsx b/app/components/WalletConnectionProgress.tsx new file mode 100644 index 0000000..6d617e0 --- /dev/null +++ b/app/components/WalletConnectionProgress.tsx @@ -0,0 +1,113 @@ +import React from 'react'; +import { ConnectionStep } from '@/app/hooks/useWalletConnection'; +import { Loader2, CheckCircle, AlertCircle, Wallet } from 'lucide-react'; + +interface WalletConnectionProgressProps { + step: ConnectionStep; + walletName?: string; + className?: string; +} + +const WalletConnectionProgress: React.FC = ({ + step, + walletName, + className = '' +}) => { + const getStepIcon = () => { + switch (step) { + case 'connecting': + return ; + case 'success': + case 'connected': + return ; + case 'failed': + return ; + default: + return ; + } + }; + + const getStepMessage = () => { + switch (step) { + case 'connecting': + return `Connecting to ${walletName || 'wallet'}...`; + case 'success': + return `Successfully connected to ${walletName || 'wallet'}!`; + case 'connected': + return `Connected to ${walletName || 'wallet'}`; + case 'failed': + return `Failed to connect to ${walletName || 'wallet'}`; + default: + return 'Ready to connect'; + } + }; + + const getStepColor = () => { + switch (step) { + case 'connecting': + return 'text-[#A26DFF]'; + case 'success': + case 'connected': + return 'text-green-400'; + case 'failed': + return 'text-red-400'; + default: + return 'text-gray-400'; + } + }; + + const getProgressWidth = () => { + switch (step) { + case 'idle': + return '0%'; + case 'connecting': + return '50%'; + case 'success': + case 'connected': + return '100%'; + case 'failed': + return '30%'; + default: + return '0%'; + } + }; + + return ( +
+ {/* Progress Bar */} +
+
+
+ + {/* Status */} +
+
+ {getStepIcon()} +
+
+

+ {getStepMessage()} +

+ {step === 'connecting' && ( +

+ Please check your wallet and approve the connection +

+ )} +
+
+
+ ); +}; + +export default WalletConnectionProgress; \ No newline at end of file diff --git a/app/components/WalletEmptyState.tsx b/app/components/WalletEmptyState.tsx new file mode 100644 index 0000000..1a3fb72 --- /dev/null +++ b/app/components/WalletEmptyState.tsx @@ -0,0 +1,125 @@ +import React from 'react'; +import { Wallet, Download, ExternalLink } from 'lucide-react'; +import { WalletInfo } from '@/app/utils/walletDetection'; + +interface WalletEmptyStateProps { + category: 'ethereum' | 'starknet'; + availableWallets: WalletInfo[]; + onRefresh: () => void; + className?: string; +} + +const WalletEmptyState: React.FC = ({ + category, + availableWallets, + onRefresh, + className = '' +}) => { + const categoryName = category === 'ethereum' ? 'Ethereum' : 'Starknet'; + const primaryWallet = availableWallets[0]; + + return ( +
+ {/* Icon */} +
+
+ +
+
+ + {/* Title */} +

+ No {categoryName} Wallets Found +

+ + {/* Description */} +

+ To connect to {categoryName}, you'll need to install a compatible wallet extension. +

+ + {/* Primary Action - Install main wallet */} + {primaryWallet && ( +
+ + + Install {primaryWallet.name} + +

+ {primaryWallet.description} +

+
+ )} + + {/* Alternative Wallets */} + {availableWallets.length > 1 && ( +
+

Or choose an alternative:

+
+ {availableWallets.slice(1).map((wallet) => ( + + + {wallet.name} + + ))} +
+
+ )} + + {/* Refresh Action */} +
+

+ Already installed a wallet? +

+ +
+ + {/* Help Text */} +

+ Need help? Check our{' '} + + wallet setup guide + +

+
+ ); +}; + +export default WalletEmptyState; \ No newline at end of file diff --git a/app/components/WalletError.tsx b/app/components/WalletError.tsx new file mode 100644 index 0000000..894f518 --- /dev/null +++ b/app/components/WalletError.tsx @@ -0,0 +1,116 @@ +import React from 'react'; +import { AlertCircle, RefreshCw, ExternalLink, X } from 'lucide-react'; +import { WalletError, getWalletInstallUrl } from '@/app/utils/walletErrors'; + +interface WalletErrorProps { + error: WalletError; + walletName?: string; + onRetry?: () => void; + onDismiss?: () => void; + className?: string; +} + +const WalletErrorComponent: React.FC = ({ + error, + walletName, + onRetry, + onDismiss, + className = '' +}) => { + const installUrl = walletName ? getWalletInstallUrl(walletName) : null; + + return ( +
+ {/* Dismiss button */} + {onDismiss && ( + + )} + +
+ {/* Error icon */} +
+ +
+ +
+ {/* Error message */} +

+ {(() => { + switch (error.type) { + case 'CONNECTION_REJECTED': return 'Request Rejected'; + case 'UNSUPPORTED_NETWORK': return 'Unsupported Network'; + case 'NETWORK_MISMATCH': return 'Network Mismatch'; + case 'WALLET_NOT_INSTALLED': return 'Wallet Not Installed'; + case 'CONNECTION_FAILED': return 'Connection Failed'; + default: return 'Something Went Wrong'; + } + })()} +

+

+ {error.message} +

+ + {/* Suggested action */} + {error.suggestedAction && ( +

+ {error.suggestedAction} +

+ )} + + {/* Action buttons */} +
+ {/* Retry button */} + {error.retryable && onRetry && ( + + )} + + {/* Install wallet button - only show for WALLET_NOT_INSTALLED error */} + {error.type === 'WALLET_NOT_INSTALLED' && installUrl && installUrl !== '#' && ( + + + Install {walletName} + + )} +
+
+
+
+ ); +}; + +export default WalletErrorComponent; \ No newline at end of file diff --git a/app/components/WalletLoader.tsx b/app/components/WalletLoader.tsx new file mode 100644 index 0000000..9475cf9 --- /dev/null +++ b/app/components/WalletLoader.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { Loader2 } from 'lucide-react'; + +interface WalletLoaderProps { + size?: 'sm' | 'md' | 'lg'; + message?: string; + className?: string; +} + +const sizeClasses = { + sm: { + spinner: 'w-4 h-4', + text: 'text-xs' + }, + md: { + spinner: 'w-5 h-5', + text: 'text-sm' + }, + lg: { + spinner: 'w-6 h-6', + text: 'text-base' + } +}; + +const WalletLoader: React.FC = ({ + size = 'md', + message = 'Connecting...', + className = '' +}) => { + const classes = sizeClasses[size]; + + return ( +
+ + + {message} + +
+ ); +}; + +export default WalletLoader; \ No newline at end of file diff --git a/app/components/WalletRecommendations.tsx b/app/components/WalletRecommendations.tsx new file mode 100644 index 0000000..47713ba --- /dev/null +++ b/app/components/WalletRecommendations.tsx @@ -0,0 +1,101 @@ +import React from 'react'; +import { CheckCircle, AlertCircle, Download } from 'lucide-react'; +import { WalletInfo } from '@/app/utils/walletDetection'; + +interface WalletRecommendationsProps { + installedWallets: WalletInfo[]; + missingWallets: WalletInfo[]; + category: 'ethereum' | 'starknet'; + className?: string; +} + +const WalletRecommendations: React.FC = ({ + installedWallets, + missingWallets, + category, + className = '' +}) => { + if (installedWallets.length === 0 && missingWallets.length === 0) { + return null; + } + + const categoryName = category === 'ethereum' ? 'Ethereum' : 'Starknet'; + + return ( +
+

+ {categoryName} Wallet Status +

+ + {/* Installed Wallets */} + {installedWallets.length > 0 && ( +
+

✅ Installed & Ready:

+
+ {installedWallets.map((wallet) => ( +
+ + {wallet.name} + • {wallet.description} +
+ ))} +
+
+ )} + + {/* Missing Wallets */} + {missingWallets.length > 0 && ( +
+

+ 💡 {missingWallets.length === 1 ? 'Alternative Option:' : 'Additional Options:'} +

+
+ {missingWallets.map((wallet) => ( +
+
+ +
+ {wallet.name} +

{wallet.description}

+
+
+ + + Install + +
+ ))} +
+
+ )} + + {/* Summary */} +
+

+ {installedWallets.length > 0 + ? `${installedWallets.length} wallet${installedWallets.length > 1 ? 's' : ''} ready to use` + : 'Install any wallet to get started' + } +

+
+
+ ); +}; + +export default WalletRecommendations; \ No newline at end of file diff --git a/app/components/WalletSuccess.tsx b/app/components/WalletSuccess.tsx new file mode 100644 index 0000000..26b9cd3 --- /dev/null +++ b/app/components/WalletSuccess.tsx @@ -0,0 +1,110 @@ +import React, { useEffect, useState } from 'react'; +import { CheckCircle, Wallet } from 'lucide-react'; + +interface WalletSuccessProps { + walletName: string; + address: string; + onClose: () => void; + autoClose?: boolean; + autoCloseDelay?: number; + className?: string; +} + +const WalletSuccess: React.FC = ({ + walletName, + address, + onClose, + autoClose = true, + autoCloseDelay = 2000, + className = '' +}) => { + const [isVisible, setIsVisible] = useState(false); + + useEffect(() => { + // Trigger entrance animation + setIsVisible(true); + + if (autoClose) { + const timer = setTimeout(() => { + setIsVisible(false); + setTimeout(onClose, 300); // Wait for exit animation + }, autoCloseDelay); + + return () => clearTimeout(timer); + } + }, [autoClose, autoCloseDelay, onClose]); + + const formatAddress = (addr: string) => { + return `${addr.slice(0, 6)}...${addr.slice(-4)}`; + }; + + return ( +
+
+ {/* Success Animation */} +
+
+ {/* Outer glow ring */} +
+ {/* Inner success icon */} +
+ +
+
+
+ + {/* Success Message */} +
+

+ Successfully Connected! +

+ +
+
+ + {walletName} +
+ +
+
+ + {formatAddress(address)} + +
+
+ +

+ You can now use all features of the platform +

+
+ + {/* Manual close option */} + {!autoClose && ( +
+ +
+ )} +
+
+ ); +}; + +export default WalletSuccess; \ No newline at end of file diff --git a/app/components/WalletTooltip.tsx b/app/components/WalletTooltip.tsx new file mode 100644 index 0000000..e9be5b8 --- /dev/null +++ b/app/components/WalletTooltip.tsx @@ -0,0 +1,149 @@ +import React, { useEffect, useRef, useState, useId } from 'react'; +import { Info, HelpCircle } from 'lucide-react'; + +interface WalletTooltipProps { + content: string; + children: React.ReactNode; + position?: 'top' | 'bottom' | 'left' | 'right'; + trigger?: 'hover' | 'click'; + className?: string; +} + +const WalletTooltip: React.FC = ({ + content, + children, + position = 'top', + trigger = 'hover', + className = '' +}) => { + const [isVisible, setIsVisible] = useState(false); + const tooltipId = useId(); + const wrapperRef = useRef(null); + + const getPositionClasses = () => { + const base = 'absolute z-50 px-3 py-2 text-xs text-white bg-gray-900 rounded-lg shadow-lg border border-gray-700 max-w-xs'; + + switch (position) { + case 'top': + return `${base} bottom-full left-1/2 transform -translate-x-1/2 mb-2`; + case 'bottom': + return `${base} top-full left-1/2 transform -translate-x-1/2 mt-2`; + case 'left': + return `${base} right-full top-1/2 transform -translate-y-1/2 mr-2`; + case 'right': + return `${base} left-full top-1/2 transform -translate-y-1/2 ml-2`; + default: + return `${base} bottom-full left-1/2 transform -translate-x-1/2 mb-2`; + } + }; + + const getArrowClasses = () => { + const base = 'absolute w-2 h-2 bg-gray-900 border border-gray-700 transform rotate-45'; + + switch (position) { + case 'top': + return `${base} top-full left-1/2 -translate-x-1/2 -mt-1 border-t-0 border-l-0`; + case 'bottom': + return `${base} bottom-full left-1/2 -translate-x-1/2 -mb-1 border-b-0 border-r-0`; + case 'left': + return `${base} left-full top-1/2 -translate-y-1/2 -ml-1 border-l-0 border-b-0`; + case 'right': + return `${base} right-full top-1/2 -translate-y-1/2 -mr-1 border-r-0 border-t-0`; + default: + return `${base} top-full left-1/2 -translate-x-1/2 -mt-1 border-t-0 border-l-0`; + } + }; + + const handleMouseEnter = () => { + if (trigger === 'hover') { + setIsVisible(true); + } + }; + + const handleMouseLeave = () => { + if (trigger === 'hover') { + setIsVisible(false); + } + }; + + const handleClick = () => { + if (trigger === 'click') { + setIsVisible(!isVisible); + } + }; + + // Close on outside click for click-triggered tooltips + useEffect(() => { + if (trigger !== 'click' || !isVisible) return; + const onDocMouseDown = (e: MouseEvent) => { + if (!wrapperRef.current?.contains(e.target as Node)) { + setIsVisible(false); + } + }; + document.addEventListener('mousedown', onDocMouseDown); + return () => document.removeEventListener('mousedown', onDocMouseDown); + }, [isVisible, trigger]); + + // Keyboard support: Enter/Space toggles, Esc closes + const handleKeyDown = (e: React.KeyboardEvent) => { + if (trigger === 'click' && (e.key === 'Enter' || e.key === ' ')) { + e.preventDefault(); + setIsVisible(v => !v); + } + if (e.key === 'Escape') { + setIsVisible(false); + } + }; + + return ( +
+ {children} + + {isVisible && ( + + ); +}; + +// Convenience component for info icon with tooltip +export const InfoTooltip: React.FC<{ + content: string; + position?: 'top' | 'bottom' | 'left' | 'right'; +}> = ({ content, position = 'top' }) => ( + + + +); + +// Convenience component for help icon with tooltip +export const HelpTooltip: React.FC<{ + content: string; + position?: 'top' | 'bottom' | 'left' | 'right'; +}> = ({ content, position = 'top' }) => ( + + + +); + +export default WalletTooltip; \ No newline at end of file diff --git a/app/globals.css b/app/globals.css index 12826b3..1930a79 100644 --- a/app/globals.css +++ b/app/globals.css @@ -261,6 +261,57 @@ select:disabled { } } +/* Custom Scrollbar - Combined and Simplified */ +.custom-scrollbar::-webkit-scrollbar { + height: 6px; + width: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: transparent; + margin: 0 2px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + border-radius: 20px; + background: #A26DFF; + opacity: 0.3; + transition: all 0.2s ease; +} + +.custom-scrollbar::-webkit-scrollbar-thumb:hover { + background: #A26DFF; + opacity: 0.6; +} + +.dark .custom-scrollbar::-webkit-scrollbar-thumb { + background: #3b2a65; +} + +.dark .custom-scrollbar::-webkit-scrollbar-thumb:hover { + background: #5c4a85; +} + +/* Hide scrollbar for mobile devices */ +@media (max-width: 768px) { + .custom-scrollbar::-webkit-scrollbar { + width: 0; + height: 0; + } + + .custom-scrollbar { + scrollbar-width: none; + -ms-overflow-style: none; + } +} + +/* Ensure Smooth Rendering on Webkit Browsers */ +@media screen and (-webkit-min-device-pixel-ratio: 0) { + .footer-background-text { + -webkit-font-smoothing: antialiased; + } +} + @layer components { .text-logo { color: var(--color-logo); @@ -282,4 +333,111 @@ select:disabled { transform: translateY(0); } } -} \ No newline at end of file +} + +.shadow-glow { + box-shadow: 0 0 10px rgba(255, 255, 255, 0.7), 0 0 20px rgba(162, 109, 255, 0.6); +} + +/* Add this to your global CSS file */ + +@keyframes glow { + 0%, 100% { + filter: brightness(1) drop-shadow(0 0 2px rgba(255, 255, 255, 0.3)); + } + 20% { + filter: brightness(0.8) drop-shadow(0 0 0px rgba(255, 255, 255, 0.2)); + } + 50% { + filter: brightness(1.2) drop-shadow(0 0 4px rgba(255, 255, 255, 0.3)); + } + 70% { + filter: brightness(1.4) drop-shadow(0 0 0px rgba(255, 255, 255, 0.7)); + } +} + +/* Wallet Connection Animations */ +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes slideIn { + from { + opacity: 0; + transform: translateX(-20px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes successPulse { + 0% { + transform: scale(1); + box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.7); + } + 70% { + transform: scale(1.05); + box-shadow: 0 0 0 10px rgba(34, 197, 94, 0); + } + 100% { + transform: scale(1); + box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); + } +} + +@keyframes walletConnecting { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +/* Utility Classes */ +.animate-fadeIn { + animation: fadeIn 0.3s ease-out; +} + +.animate-slideIn { + animation: slideIn 0.4s ease-out; +} + +.animate-successPulse { + animation: successPulse 2s infinite; +} + +.animate-walletConnecting { + background: linear-gradient(45deg, #A26DFF, #291A43, #A26DFF, #291A43); + background-size: 300% 300%; + animation: walletConnecting 2s ease infinite; +} + +.animate-glowSlow { + animation: glow 4s cubic-bezier(0.6, 0.8, 0.6, 1) infinite; +} + +/* Remove default borders from all images */ +img { + border: none !important; + outline: none !important; + box-shadow: none !important; +} + +.globe-grid-image { + border: none !important; + outline: none !important; + background: transparent !important; +} diff --git a/app/hooks/useWalletConnection.ts b/app/hooks/useWalletConnection.ts new file mode 100644 index 0000000..dbab197 --- /dev/null +++ b/app/hooks/useWalletConnection.ts @@ -0,0 +1,153 @@ +import { useState, useCallback, useRef } from 'react'; +import { useConnect as useStarknetConnect } from '@starknet-react/core'; +import { useConnect as useEthereumConnect } from 'wagmi'; +import { WalletError, parseWalletError, createWalletError, WalletErrorType } from '@/app/utils/walletErrors'; + +export type WalletType = 'ethereum' | 'starknet'; +export type ConnectionStep = 'idle' | 'connecting' | 'connected' | 'failed' | 'success'; + +interface WalletConnectionState { + isConnecting: boolean; + error: WalletError | null; + connectionStep: ConnectionStep; + connectedWallet: string | null; + attemptCount: number; + lastAttemptTimestamp: number | null; +} + +const CONNECTION_TIMEOUT = 30000; // 30 seconds +const DEBOUNCE_DELAY = 1000; // 1 second between attempts + +export const useWalletConnection = (walletType: WalletType) => { + const [state, setState] = useState({ + isConnecting: false, + error: null, + connectionStep: 'idle', + connectedWallet: null, + attemptCount: 0, + lastAttemptTimestamp: null + }); + + const timeoutRef = useRef(null); + + const starknetConnect = useStarknetConnect(); + const ethereumConnect = useEthereumConnect(); + + const updateState = useCallback((updates: Partial) => { + setState(prev => ({ ...prev, ...updates })); + }, []); + + const clearError = useCallback(() => { + updateState({ error: null }); + }, [updateState]); + + const connectWallet = useCallback(async (connector: any) => { + const now = Date.now(); + + // Prevent rapid successive attempts (debouncing) + if (state.lastAttemptTimestamp && (now - state.lastAttemptTimestamp) < DEBOUNCE_DELAY) { + return; + } + + // Prevent multiple concurrent connections + if (state.isConnecting) { + return; + } + + try { + // Clear any existing timeout + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + } + + // Update state for connection attempt + updateState({ + isConnecting: true, + error: null, + connectionStep: 'connecting', + connectedWallet: null, + attemptCount: state.attemptCount + 1, + lastAttemptTimestamp: now + }); + + // Set timeout for connection + const timeoutPromise = new Promise((_, reject) => { + timeoutRef.current = setTimeout(() => { + reject(createWalletError(WalletErrorType.CONNECTION_FAILED)); + }, CONNECTION_TIMEOUT); + }); + + // Connection promise using connectAsync for proper promise-based flow + const connectionPromise = walletType === 'starknet' + ? starknetConnect.connectAsync({ connector }) + : ethereumConnect.connectAsync({ connector }); + + // Race between connection and timeout + const result = await Promise.race([connectionPromise, timeoutPromise]); + + // Clear timeout on success + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + timeoutRef.current = null; + } + + // Success - first show success state briefly + updateState({ + isConnecting: false, + connectionStep: 'success', + connectedWallet: connector.name || connector.id + }); + + // After a brief moment, transition to connected state + setTimeout(() => { + updateState({ + connectionStep: 'connected' + }); + }, 1500); + + return result; + + } catch (error) { + // Clear timeout on error + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + timeoutRef.current = null; + } + + const walletError = parseWalletError(error); + + updateState({ + isConnecting: false, + error: walletError, + connectionStep: 'failed' + }); + + throw walletError; + } + }, [walletType, starknetConnect, ethereumConnect, updateState, state.isConnecting, state.lastAttemptTimestamp, state.attemptCount]); + + const retryConnection = useCallback((connector: any) => { + return connectWallet(connector); + }, [connectWallet]); + + // Cleanup timeout on unmount + const cleanup = useCallback(() => { + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + timeoutRef.current = null; + } + }, []); + + return { + ...state, + connectWallet, + retryConnection, + clearError, + cleanup, + isIdle: state.connectionStep === 'idle', + isConnected: state.connectionStep === 'connected', + isSuccess: state.connectionStep === 'success', + hasFailed: state.connectionStep === 'failed', + canRetry: !state.isConnecting && state.connectionStep === 'failed' + }; +}; \ No newline at end of file diff --git a/app/utils/walletDetection.ts b/app/utils/walletDetection.ts new file mode 100644 index 0000000..d122060 --- /dev/null +++ b/app/utils/walletDetection.ts @@ -0,0 +1,127 @@ +export interface WalletInfo { + id: string; + name: string; + icon: string; + downloadUrl: string; + isInstalled: boolean; + category: 'ethereum' | 'starknet'; + description: string; +} + +// Check if wallet extensions are installed +export const checkWalletInstallation = () => { + if (typeof window === 'undefined') { + return { + metamask: false, + walletconnect: true, // WalletConnect doesn't require installation + argentx: false, + braavos: false + }; + } + + return { + metamask: !!( + (window as any).ethereum?.isMetaMask || + (window as any).ethereum?.providers?.some((p: any) => p?.isMetaMask) + ), + walletconnect: true, // Always available + argentx: !!( + (window as any).starknet_argentX || + (window as any).starknet?.isArgentX || + (window as any).starknet?.providers?.some((p: any) => p?.isArgentX) + ), + braavos: !!( + (window as any).starknet_braavos || + (window as any).starknet?.isBraavos || + (window as any).starknet?.providers?.some((p: any) => p?.isBraavos) + ) + }; +}; + +// Get wallet installation status with detailed info +export const getWalletInstallationDetails = (): WalletInfo[] => { + const installation = checkWalletInstallation(); + + return [ + { + id: 'metamask', + name: 'MetaMask', + icon: '/icons/wallets/metamask.svg', + downloadUrl: 'https://metamask.io/download/', + isInstalled: installation.metamask, + category: 'ethereum', + description: 'The most popular Ethereum wallet' + }, + { + id: 'walletconnect', + name: 'WalletConnect', + icon: '/icons/wallets/walletconnect.svg', + downloadUrl: 'https://walletconnect.com/', + isInstalled: installation.walletconnect, + category: 'ethereum', + description: 'Connect with 300+ wallets' + }, + { + id: 'argentx', + name: 'ArgentX', + icon: '/wallet.svg', // Using default icon as per existing code + downloadUrl: 'https://www.argent.xyz/download', + isInstalled: installation.argentx, + category: 'starknet', + description: 'The smart wallet for Starknet' + }, + { + id: 'braavos', + name: 'Braavos', + icon: '/wallet.svg', // Using default icon as per existing code + downloadUrl: 'https://braavos.app/download', + isInstalled: installation.braavos, + category: 'starknet', + description: 'Smart wallet with advanced security' + } + ]; +}; + +// Get available wallets for a specific category +export const getAvailableWallets = (category: 'ethereum' | 'starknet'): WalletInfo[] => { + return getWalletInstallationDetails().filter(wallet => wallet.category === category); +}; + +// Get only installed wallets +export const getInstalledWallets = (category?: 'ethereum' | 'starknet'): WalletInfo[] => { + const wallets = category + ? getAvailableWallets(category) + : getWalletInstallationDetails(); + + return wallets.filter(wallet => wallet.isInstalled); +}; + +// Get only missing wallets +export const getMissingWallets = (category?: 'ethereum' | 'starknet'): WalletInfo[] => { + const wallets = category + ? getAvailableWallets(category) + : getWalletInstallationDetails(); + + return wallets.filter(wallet => !wallet.isInstalled); +}; + +// Check if any wallets are installed for a category +export const hasAnyWalletsInstalled = (category: 'ethereum' | 'starknet'): boolean => { + return getInstalledWallets(category).length > 0; +}; + +// Get recommendation message based on installation status +export const getWalletRecommendation = (category: 'ethereum' | 'starknet'): string => { + const installedCount = getInstalledWallets(category).length; + const totalCount = getAvailableWallets(category).length; + + if (installedCount === 0) { + return `No ${category} wallets detected. Install a wallet to get started.`; + } + + if (installedCount === totalCount) { + return `All ${category} wallets are installed and ready to use.`; + } + + return `${installedCount} of ${totalCount} ${category} wallets installed.`; +}; \ No newline at end of file diff --git a/app/utils/walletErrors.ts b/app/utils/walletErrors.ts new file mode 100644 index 0000000..256d38b --- /dev/null +++ b/app/utils/walletErrors.ts @@ -0,0 +1,112 @@ +export enum WalletErrorType { + WALLET_NOT_INSTALLED = 'WALLET_NOT_INSTALLED', + CONNECTION_REJECTED = 'CONNECTION_REJECTED', + UNSUPPORTED_NETWORK = 'UNSUPPORTED_NETWORK', + CONNECTION_FAILED = 'CONNECTION_FAILED', + NETWORK_MISMATCH = 'NETWORK_MISMATCH', + UNKNOWN_ERROR = 'UNKNOWN_ERROR' +} + +export interface WalletError { + type: WalletErrorType; + message: string; + suggestedAction?: string; + retryable: boolean; +} + +export const createWalletError = (type: WalletErrorType, originalError?: any): WalletError => { + const errorMap: Record> = { + [WalletErrorType.WALLET_NOT_INSTALLED]: { + message: "Wallet extension not detected", + suggestedAction: "Please install the wallet extension and refresh the page", + retryable: true + }, + [WalletErrorType.CONNECTION_REJECTED]: { + message: "Connection was cancelled", + suggestedAction: "Please try connecting again and approve the connection", + retryable: true + }, + [WalletErrorType.UNSUPPORTED_NETWORK]: { + message: "Unsupported network", + suggestedAction: "Please switch to a supported network in your wallet", + retryable: true + }, + [WalletErrorType.CONNECTION_FAILED]: { + message: "Failed to connect to wallet", + suggestedAction: "Please check your wallet is unlocked and try again", + retryable: true + }, + [WalletErrorType.NETWORK_MISMATCH]: { + message: "Network mismatch", + suggestedAction: "Please switch to the correct network in your wallet", + retryable: true + }, + [WalletErrorType.UNKNOWN_ERROR]: { + message: "An unexpected error occurred", + suggestedAction: "Please refresh the page and try again", + retryable: true + } + }; + + return { + type, + ...errorMap[type] + }; +}; + +export const parseWalletError = (error: any): WalletError => { + if (!error) { + return createWalletError(WalletErrorType.UNKNOWN_ERROR); + } + + const code = (error as any)?.code; + const msg = (typeof error?.message === 'string' ? error.message : String(error || '')) + .toLowerCase(); + + // EIP-1193 / common codes + if (code === 4001) { // user rejected + return createWalletError(WalletErrorType.CONNECTION_REJECTED); + } + if (code === 4902) { // chain not added / unsupported + return createWalletError(WalletErrorType.UNSUPPORTED_NETWORK); + } + if (code === -32002) { // request already pending + return createWalletError(WalletErrorType.CONNECTION_FAILED); + } + + // Connection rejected by user + if (msg.includes('rejected') || msg.includes('denied') || msg.includes('canceled') || msg.includes('cancelled')) { + return createWalletError(WalletErrorType.CONNECTION_REJECTED); + } + + // Wallet not installed + if (msg.includes('not installed') || msg.includes('provider not found') || msg.includes('no provider')) { + return createWalletError(WalletErrorType.WALLET_NOT_INSTALLED); + } + + // Network issues + if (msg.includes('mismatch')) { + return createWalletError(WalletErrorType.NETWORK_MISMATCH); + } + if (msg.includes('unsupported network') || msg.includes('unsupported chain') || msg.includes('wrong chain')) { + return createWalletError(WalletErrorType.UNSUPPORTED_NETWORK); + } + + // Generic connection failure + if (msg.includes('connection') || msg.includes('connect')) { + return createWalletError(WalletErrorType.CONNECTION_FAILED); + } + + return createWalletError(WalletErrorType.UNKNOWN_ERROR); +}; + +export const getWalletInstallUrl = (walletName: string): string => { + const installUrls: Record = { + 'argentx': 'https://www.argent.xyz/download', + 'braavos': 'https://braavos.app/download', + 'metamask': 'https://metamask.io/download', + 'walletconnect': 'https://walletconnect.org' + }; + + return installUrls[walletName.toLowerCase()] || '#'; +}; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b421db2..cf40035 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9660,7 +9660,7 @@ importers: version: 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@rainbow-me/rainbowkit': specifier: ^2.2.8 - version: 2.2.8(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.16.5(@tanstack/query-core@5.85.5)(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + version: 2.2.8(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.16.4(@tanstack/query-core@5.85.5)(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) '@starknet-react/chains': specifier: ^3.1.2 version: 3.1.3 @@ -9675,10 +9675,10 @@ importers: version: 0.10.0(utf-8-validate@5.0.10) '@wagmi/connectors': specifier: ^5.9.1 - version: 5.9.5(@types/react@18.3.24)(@wagmi/core@2.20.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + version: 5.9.4(@types/react@18.3.24)(@wagmi/core@2.19.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) '@wagmi/core': specifier: ^2.18.1 - version: 2.20.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + version: 2.19.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -9703,6 +9703,9 @@ importers: next: specifier: ^15.1.7 version: 15.5.0(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-auth: + specifier: ^4.24.11 + version: 4.24.11(next@15.5.0(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -9721,6 +9724,9 @@ importers: recharts: specifier: ^2.15.1 version: 2.15.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + siwe: + specifier: ^3.0.0 + version: 3.0.0(ethers@6.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -9735,13 +9741,13 @@ importers: version: 3.3.1 viem: specifier: ^2.28.1 - version: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + version: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) wagmi: specifier: ^2.15.1 - version: 2.16.5(@tanstack/query-core@5.85.5)(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + version: 2.16.4(@tanstack/query-core@5.85.5)(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) zustand: specifier: ^5.0.6 - version: 5.0.8(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) + version: 5.0.8(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) devDependencies: '@chromatic-com/storybook': specifier: ^3.2.4 @@ -9775,13 +9781,13 @@ importers: version: 10.4.21(postcss@8.5.6) eslint: specifier: ^9.0.0 - version: 9.34.0(jiti@2.5.1) + version: 9.33.0(jiti@2.5.1) eslint-config-next: specifier: 15.1.7 - version: 15.1.7(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + version: 15.1.7(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) eslint-plugin-storybook: specifier: ^0.11.3 - version: 0.11.6(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + version: 0.11.6(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.19.11) @@ -10207,8 +10213,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.34.0': - resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==} + '@eslint/js@9.33.0': + resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -10732,6 +10738,9 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} + '@panva/hkdf@1.2.1': + resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==} + '@paulmillr/qr@0.2.1': resolution: {integrity: sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==} deprecated: 'The package is now available as "qr": npm install qr' @@ -11128,6 +11137,21 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@spruceid/siwe-parser@3.0.0': + resolution: {integrity: sha512-Y92k63ilw/8jH9Ry4G2e7lQd0jZAvb0d/Q7ssSD0D9mp/Zt2aCXIc3g0ny9yhplpAx1QXHsMz/JJptHK/zDGdw==} + + '@stablelib/binary@1.0.1': + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + + '@stablelib/int@1.0.1': + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + + '@stablelib/random@1.0.2': + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + + '@stablelib/wipe@1.0.1': + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + '@starknet-io/types-js@0.7.10': resolution: {integrity: sha512-1VtCqX4AHWJlRRSYGSn+4X1mqolI1Tdq62IwzoU2vUuEE72S1OlEeGhpvd6XsdqXcfHmVzYfj8k1XtKBQqwo9w==} @@ -11568,18 +11592,18 @@ packages: resolution: {integrity: sha512-fSD23DxGND40IzSkXjcFcxr53t3Tiym59Is0jSYIFpG4/0f0KO9SGtcp1sXiebvPaGe7N/tU05cH4yt2S6/IPg==} engines: {node: '>=18.14'} - '@wagmi/connectors@5.9.5': - resolution: {integrity: sha512-9gQvqcxY22Pcz196Zurc8SGUuYueocMf+z9pgWuxDURVqw+E+gU/hUL6LVq802981SvI7zvlrOCKd61ZhSQKjQ==} + '@wagmi/connectors@5.9.4': + resolution: {integrity: sha512-k/GSdYS6nuL0zLq5H7XasPmKr3Gnvplq+yQhTfRBu/o5Bh+B3aH3Jfq1lUh+t3z5kQcyKJIXw/bZIZ7lVS7UhA==} peerDependencies: - '@wagmi/core': 2.20.0 + '@wagmi/core': 2.19.0 typescript: '>=5.0.4' viem: 2.x peerDependenciesMeta: typescript: optional: true - '@wagmi/core@2.20.0': - resolution: {integrity: sha512-oKocFmaWvEEeccmb9+LtfXTO6XB0E2qmWgNK1ne0ruZWZwkcpUDJ/Fl39E6VLiz6O3n5KHA/dqT7efj2o4XOrA==} + '@wagmi/core@2.19.0': + resolution: {integrity: sha512-lI57q6refAtNU6xnk/oyOpbEtEiwQ6g4rR+C9FEx8Gn2hZlfoyyksndrl6hIKlMBK+UkkKso3VwR5DI65j/5XQ==} peerDependencies: '@tanstack/query-core': '>=5.0.0' typescript: '>=5.0.4' @@ -11762,6 +11786,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + apg-js@4.4.0: + resolution: {integrity: sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -11895,8 +11922,8 @@ packages: bn.js@5.2.2: resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} - bowser@2.12.1: - resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==} + bowser@2.12.0: + resolution: {integrity: sha512-HcOcTudTeEWgbHh0Y1Tyb6fdeR71m4b/QACf0D4KswGTsNeIJQmg38mRENZPAYPZvGFN3fk3604XbQEPdxXdKg==} brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -11956,8 +11983,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001737: - resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==} + caniuse-lite@1.0.30001735: + resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} @@ -12060,6 +12087,10 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -12524,8 +12555,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.34.0: - resolution: {integrity: sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==} + eslint@9.33.0: + resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -13284,6 +13315,9 @@ packages: resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true + jose@4.15.9: + resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -13490,6 +13524,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + lucide-react@0.475.0: resolution: {integrity: sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg==} peerDependencies: @@ -13605,6 +13643,20 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + next-auth@4.24.11: + resolution: {integrity: sha512-pCFXzIDQX7xmHFs4KVH4luCjaCbuPRtZ9oBUjUhOk84mZ9WVPf94n87TxYI4rSRf9HmfHEF8Yep3JrYDVOo3Cw==} + peerDependencies: + '@auth/core': 0.34.2 + next: ^12.2.5 || ^13 || ^14 || ^15 + nodemailer: ^6.6.5 + react: ^17.0.2 || ^18 || ^19 + react-dom: ^17.0.2 || ^18 || ^19 + peerDependenciesMeta: + '@auth/core': + optional: true + nodemailer: + optional: true + next-themes@0.4.6: resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: @@ -13675,6 +13727,9 @@ packages: nwsapi@2.2.21: resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==} + oauth@0.9.15: + resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==} + obj-multiplex@1.0.0: resolution: {integrity: sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==} @@ -13682,6 +13737,10 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-hash@2.2.0: + resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} + engines: {node: '>= 6'} + object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -13716,6 +13775,10 @@ packages: ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + oidc-token-hash@5.1.1: + resolution: {integrity: sha512-D7EmwxJV6DsEB6vOFLrBM2OzsVgQzgPWyHlV2OOAVj772n+WTXpudC9e9u5BVKQnYwaD30Ivhi9b+4UeBcGu9g==} + engines: {node: ^10.13.0 || >=12.0.0} + on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} @@ -13734,6 +13797,9 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + openid-client@5.7.1: + resolution: {integrity: sha512-jDBPgSVfTnkIh71Hg9pRvtJc6wTwqjRkN88+gCFtYWrlP4Yx2Dsrow8uPi3qLr/aeymPF3o2+dS+wOpglK04ew==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -13916,6 +13982,11 @@ packages: postgres-range@1.1.4: resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + preact-render-to-string@5.2.6: + resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} + peerDependencies: + preact: '>=10' + preact@10.24.2: resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} @@ -13934,6 +14005,9 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@3.8.0: + resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} + pretty-format@30.0.5: resolution: {integrity: sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -14286,6 +14360,11 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + siwe@3.0.0: + resolution: {integrity: sha512-P2/ry7dHYJA6JJ5+veS//Gn2XDwNb3JMvuD6xiXX8L/PJ1SNVD4a3a8xqEbmANx+7kNQcD8YAh1B9bNKKvRy/g==} + peerDependencies: + ethers: ^5.6.8 || ^6.0.8 + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -14620,8 +14699,8 @@ packages: unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - unstorage@1.17.0: - resolution: {integrity: sha512-l9Z7lBiwtNp8ZmcoZ/dmPkFXFdtEdZtTZafCSnEIj3YvtkXeGAtL2rN8MQFy/0cs4eOLpuRJMp9ivdug7TCvww==} + unstorage@1.16.1: + resolution: {integrity: sha512-gdpZ3guLDhz+zWIlYP1UwQ259tG5T5vYRzDaHMkQ1bBY1SQPutvZnrRjTFaWUUpseErJIgAZS51h6NOcZVZiqQ==} peerDependencies: '@azure/app-configuration': ^1.8.0 '@azure/cosmos': ^4.2.0 @@ -14635,7 +14714,6 @@ packages: '@planetscale/database': ^1.19.0 '@upstash/redis': ^1.34.3 '@vercel/blob': '>=0.27.1' - '@vercel/functions': ^2.2.12 '@vercel/kv': ^1.0.1 aws4fetch: ^1.0.20 db0: '>=0.2.1' @@ -14667,8 +14745,6 @@ packages: optional: true '@vercel/blob': optional: true - '@vercel/functions': - optional: true '@vercel/kv': optional: true aws4fetch: @@ -14724,11 +14800,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - use-sync-external-store@1.5.0: - resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} @@ -14774,8 +14845,8 @@ packages: typescript: optional: true - viem@2.35.0: - resolution: {integrity: sha512-u4D4PACHoVTBqfWEM1B3QsraZSP2Pe4rWLxTFRTn4PJbLqQl6IjQuFLMTjyRpw8VgmNw5c0lmCAZwLRgEMe6nw==} + viem@2.34.0: + resolution: {integrity: sha512-HJZG9Wt0DLX042MG0PK17tpataxtdAEhpta9/Q44FqKwy3xZMI5Lx4jF+zZPuXFuYjZ68R0PXqRwlswHs6r4gA==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -14790,8 +14861,8 @@ packages: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} - wagmi@2.16.5: - resolution: {integrity: sha512-jf/lGV+Y1rXtaREhy635RTEIpmDOFtAAnzDsjenI9638pdQRvh7BsJ3sz3DGMjNX931lR+OxzJcMqNArOO4/GQ==} + wagmi@2.16.4: + resolution: {integrity: sha512-HthfF/6g7qPnCttl9tLkKoJdWKqMH3Isx4DJ+mkn//Ubom0eKnXH2hr2SMVGTqNQUpsi1knYLUWDGJYkT4hoog==} peerDependencies: '@tanstack/react-query': '>=5.0.0' react: '>=18' @@ -14948,6 +15019,9 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@5.0.0: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} @@ -15244,7 +15318,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.9.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) transitivePeerDependencies: - '@types/react' @@ -15256,26 +15330,6 @@ snapshots: - utf-8-validate - zod - '@base-org/account@1.1.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76)': - dependencies: - '@noble/hashes': 1.4.0 - clsx: 1.2.1 - eventemitter3: 5.0.1 - idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.9.2)(zod@3.25.76) - preact: 10.24.2 - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.3(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) - transitivePeerDependencies: - - '@types/react' - - bufferutil - - immer - - react - - typescript - - use-sync-external-store - - utf-8-validate - - zod - '@bcoe/v8-coverage@0.2.3': {} '@chromatic-com/storybook@3.2.7(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(utf-8-validate@5.0.10))': @@ -15313,7 +15367,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.9.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) transitivePeerDependencies: - '@types/react' @@ -15325,26 +15379,6 @@ snapshots: - utf-8-validate - zod - '@coinbase/wallet-sdk@4.3.6(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76)': - dependencies: - '@noble/hashes': 1.4.0 - clsx: 1.2.1 - eventemitter3: 5.0.1 - idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.9.2)(zod@3.25.76) - preact: 10.24.2 - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.3(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) - transitivePeerDependencies: - - '@types/react' - - bufferutil - - immer - - react - - typescript - - use-sync-external-store - - utf-8-validate - - zod - '@ecies/ciphers@0.2.4(@noble/ciphers@1.3.0)': dependencies: '@noble/ciphers': 1.3.0 @@ -15445,9 +15479,9 @@ snapshots: '@esbuild/win32-x64@0.25.9': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.34.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.5.1))': dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.33.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -15480,7 +15514,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.34.0': {} + '@eslint/js@9.33.0': {} '@eslint/object-schema@2.1.6': {} @@ -15526,11 +15560,11 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@gemini-wallet/core@0.2.0(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@gemini-wallet/core@0.2.0(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: '@metamask/rpc-errors': 7.0.2 eventemitter3: 5.0.1 - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - supports-color @@ -15901,7 +15935,7 @@ snapshots: '@metamask/onboarding@1.0.1': dependencies: - bowser: 2.12.1 + bowser: 2.12.0 '@metamask/providers@16.1.0': dependencies: @@ -15965,7 +15999,7 @@ snapshots: '@metamask/sdk-communication-layer': 0.32.0(cross-fetch@4.1.0)(eciesjs@0.4.15)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@metamask/sdk-install-modal-web': 0.32.0 '@paulmillr/qr': 0.2.1 - bowser: 2.12.1 + bowser: 2.12.0 cross-fetch: 4.1.0 debug: 4.4.1 eciesjs: 0.4.15 @@ -16138,6 +16172,8 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} + '@panva/hkdf@1.2.1': {} + '@paulmillr/qr@0.2.1': {} '@radix-ui/primitive@1.1.3': {} @@ -16411,7 +16447,7 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@rainbow-me/rainbowkit@2.2.8(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.16.5(@tanstack/query-core@5.85.5)(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))': + '@rainbow-me/rainbowkit@2.2.8(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2)(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.16.4(@tanstack/query-core@5.85.5)(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))': dependencies: '@tanstack/react-query': 5.85.5(react@18.3.1) '@vanilla-extract/css': 1.17.3 @@ -16423,8 +16459,8 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.6.2(@types/react@18.3.24)(react@18.3.1) ua-parser-js: 1.0.41 - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.16.5(@tanstack/query-core@5.85.5)(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + wagmi: 2.16.4(@tanstack/query-core@5.85.5)(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - babel-plugin-macros @@ -16434,7 +16470,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript @@ -16445,7 +16481,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -16458,7 +16494,7 @@ snapshots: '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@18.3.24)(react@18.3.1) - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -16474,7 +16510,6 @@ snapshots: - '@types/react' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -16510,7 +16545,6 @@ snapshots: - '@types/react' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -16550,7 +16584,6 @@ snapshots: - '@types/react' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -16586,7 +16619,6 @@ snapshots: - '@types/react' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -16608,7 +16640,7 @@ snapshots: '@walletconnect/logger': 2.1.2 '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@18.3.24)(react@18.3.1) - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -16624,7 +16656,6 @@ snapshots: - '@types/react' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -16662,7 +16693,7 @@ snapshots: '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 valtio: 1.13.2(@types/react@18.3.24)(react@18.3.1) - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -16678,7 +16709,6 @@ snapshots: - '@types/react' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -16708,7 +16738,7 @@ snapshots: '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.23.1 - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -16775,6 +16805,24 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} + '@spruceid/siwe-parser@3.0.0': + dependencies: + '@noble/hashes': 1.8.0 + apg-js: 4.4.0 + + '@stablelib/binary@1.0.1': + dependencies: + '@stablelib/int': 1.0.1 + + '@stablelib/int@1.0.1': {} + + '@stablelib/random@1.0.2': + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + + '@stablelib/wipe@1.0.1': {} + '@starknet-io/types-js@0.7.10': {} '@starknet-react/chains@3.1.3': {} @@ -16789,7 +16837,7 @@ snapshots: get-starknet-core: 4.0.0 react: 18.3.1 starknet: 6.24.1 - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - bufferutil @@ -17064,15 +17112,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.40.0 - '@typescript-eslint/type-utils': 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.40.0 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.33.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -17081,14 +17129,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.40.0 '@typescript-eslint/types': 8.40.0 '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.40.0 debug: 4.4.1 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.33.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -17111,13 +17159,13 @@ snapshots: dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.40.0 '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.33.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: @@ -17141,13 +17189,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.40.0 '@typescript-eslint/types': 8.40.0 '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.33.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -17251,62 +17299,18 @@ snapshots: transitivePeerDependencies: - utf-8-validate - '@wagmi/connectors@5.9.5(@types/react@18.3.24)(@wagmi/core@2.20.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': + '@wagmi/connectors@5.9.4(@types/react@18.3.24)(@wagmi/core@2.19.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': dependencies: '@base-org/account': 1.1.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76) '@coinbase/wallet-sdk': 4.3.6(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76) - '@gemini-wallet/core': 0.2.0(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) - '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@wagmi/core': 2.20.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) - '@walletconnect/ethereum-provider': 2.21.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - optionalDependencies: - typescript: 5.9.2 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - encoding - - immer - - ioredis - - react - - supports-color - - uploadthing - - use-sync-external-store - - utf-8-validate - - zod - - '@wagmi/connectors@5.9.5(@types/react@18.3.24)(@wagmi/core@2.20.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': - dependencies: - '@base-org/account': 1.1.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76) - '@coinbase/wallet-sdk': 4.3.6(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76) - '@gemini-wallet/core': 0.2.0(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@gemini-wallet/core': 0.2.0(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@wagmi/core': 2.20.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/core': 2.19.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) '@walletconnect/ethereum-provider': 2.21.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -17324,7 +17328,6 @@ snapshots: - '@types/react' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -17339,11 +17342,11 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.20.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@wagmi/core@2.19.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.9.2) - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.0(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) optionalDependencies: '@tanstack/query-core': 5.85.5 @@ -17354,21 +17357,6 @@ snapshots: - react - use-sync-external-store - '@wagmi/core@2.20.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))': - dependencies: - eventemitter3: 5.0.1 - mipd: 0.0.7(typescript@5.9.2) - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - zustand: 5.0.0(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) - optionalDependencies: - '@tanstack/query-core': 5.85.5 - typescript: 5.9.2 - transitivePeerDependencies: - - '@types/react' - - immer - - react - - use-sync-external-store - '@walletconnect/core@2.21.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@walletconnect/heartbeat': 1.2.2 @@ -17402,7 +17390,6 @@ snapshots: - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -17446,7 +17433,6 @@ snapshots: - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -17489,7 +17475,6 @@ snapshots: - '@types/react' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -17553,7 +17538,7 @@ snapshots: dependencies: '@walletconnect/safe-json': 1.0.2 idb-keyval: 6.2.2 - unstorage: 1.17.0(idb-keyval@6.2.2) + unstorage: 1.16.1(idb-keyval@6.2.2) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -17567,7 +17552,6 @@ snapshots: - '@planetscale/database' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - db0 @@ -17620,7 +17604,6 @@ snapshots: - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -17656,7 +17639,6 @@ snapshots: - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -17693,7 +17675,6 @@ snapshots: - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - db0 @@ -17722,7 +17703,6 @@ snapshots: - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - db0 @@ -17757,7 +17737,6 @@ snapshots: - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -17797,7 +17776,6 @@ snapshots: - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -17842,7 +17820,6 @@ snapshots: - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -17886,7 +17863,6 @@ snapshots: - '@react-native-async-storage/async-storage' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -17981,6 +17957,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + apg-js@4.4.0: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -18083,7 +18061,7 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: browserslist: 4.25.3 - caniuse-lite: 1.0.30001737 + caniuse-lite: 1.0.30001735 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -18167,7 +18145,7 @@ snapshots: bn.js@5.2.2: {} - bowser@2.12.1: {} + bowser@2.12.0: {} brace-expansion@1.1.12: dependencies: @@ -18186,7 +18164,7 @@ snapshots: browserslist@4.25.3: dependencies: - caniuse-lite: 1.0.30001737 + caniuse-lite: 1.0.30001735 electron-to-chromium: 1.5.208 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.3) @@ -18233,7 +18211,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001737: {} + caniuse-lite@1.0.30001735: {} cardinal@2.1.1: dependencies: @@ -18317,6 +18295,8 @@ snapshots: cookie-es@1.2.2: {} + cookie@0.7.2: {} + core-util-is@1.0.3: {} crc-32@1.2.2: {} @@ -18749,19 +18729,19 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-next@15.1.7(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-config-next@15.1.7(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@next/eslint-plugin-next': 15.1.7 '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-react: 7.37.5(eslint@9.34.0(jiti@2.5.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-react: 7.37.5(eslint@9.33.0(jiti@2.5.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.33.0(jiti@2.5.1)) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -18777,33 +18757,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.33.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.33.0(jiti@2.5.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.33.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.33.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.33.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.33.0(jiti@2.5.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -18812,9 +18792,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.33.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.33.0(jiti@2.5.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -18826,13 +18806,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.33.0(jiti@2.5.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -18842,7 +18822,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.33.0(jiti@2.5.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -18851,11 +18831,11 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@5.2.0(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.33.0(jiti@2.5.1)): dependencies: - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.33.0(jiti@2.5.1) - eslint-plugin-react@7.37.5(eslint@9.34.0(jiti@2.5.1)): + eslint-plugin-react@7.37.5(eslint@9.33.0(jiti@2.5.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -18863,7 +18843,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.34.0(jiti@2.5.1) + eslint: 9.33.0(jiti@2.5.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -18877,11 +18857,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@0.11.6(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2): + eslint-plugin-storybook@0.11.6(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@storybook/csf': 0.1.13 - '@typescript-eslint/utils': 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color @@ -18896,15 +18876,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.34.0(jiti@2.5.1): + eslint@9.33.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.34.0 + '@eslint/js': 9.33.0 '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -19934,6 +19914,8 @@ snapshots: jiti@2.5.1: {} + jose@4.15.9: {} + joycon@3.1.1: {} js-tokens@4.0.0: {} @@ -20138,6 +20120,10 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + lucide-react@0.475.0(react@18.3.1): dependencies: react: 18.3.1 @@ -20223,6 +20209,21 @@ snapshots: natural-compare@1.4.0: {} + next-auth@4.24.11(next@15.5.0(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.28.3 + '@panva/hkdf': 1.2.1 + cookie: 0.7.2 + jose: 4.15.9 + next: 15.5.0(@babel/core@7.28.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + oauth: 0.9.15 + openid-client: 5.7.1 + preact: 10.27.1 + preact-render-to-string: 5.2.6(preact@10.27.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + uuid: 8.3.2 + next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 @@ -20232,7 +20233,7 @@ snapshots: dependencies: '@next/env': 15.5.0 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001737 + caniuse-lite: 1.0.30001735 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -20277,6 +20278,8 @@ snapshots: nwsapi@2.2.21: {} + oauth@0.9.15: {} + obj-multiplex@1.0.0: dependencies: end-of-stream: 1.4.5 @@ -20285,6 +20288,8 @@ snapshots: object-assign@4.1.1: {} + object-hash@2.2.0: {} + object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -20333,6 +20338,8 @@ snapshots: node-fetch-native: 1.6.7 ufo: 1.6.1 + oidc-token-hash@5.1.1: {} + on-exit-leak-free@0.2.0: {} on-exit-leak-free@2.1.2: {} @@ -20351,6 +20358,13 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + openid-client@5.7.1: + dependencies: + jose: 4.15.9 + lru-cache: 6.0.0 + object-hash: 2.2.0 + oidc-token-hash: 5.1.1 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -20369,11 +20383,11 @@ snapshots: ox@0.6.7(typescript@5.9.2)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.0 - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 - '@scure/bip32': 1.6.2 - '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.9.2)(zod@3.25.76) + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.0.9(typescript@5.9.2)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.9.2 @@ -20572,6 +20586,11 @@ snapshots: postgres-range@1.1.4: {} + preact-render-to-string@5.2.6(preact@10.27.1): + dependencies: + preact: 10.27.1 + pretty-format: 3.8.0 + preact@10.24.2: {} preact@10.27.1: {} @@ -20590,6 +20609,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + pretty-format@3.8.0: {} + pretty-format@30.0.5: dependencies: '@jest/schemas': 30.0.5 @@ -20998,6 +21019,12 @@ snapshots: sisteransi@1.0.5: {} + siwe@3.0.0(ethers@6.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + '@spruceid/siwe-parser': 3.0.0 + '@stablelib/random': 1.0.2 + ethers: 6.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + slash@3.0.0: {} socket.io-client@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): @@ -21199,7 +21226,7 @@ snapshots: dependencies: dequal: 2.0.3 react: 18.3.1 - use-sync-external-store: 1.5.0(react@18.3.1) + use-sync-external-store: 1.4.0(react@18.3.1) symbol-tree@3.2.4: {} @@ -21379,7 +21406,7 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unstorage@1.17.0(idb-keyval@6.2.2): + unstorage@1.16.1(idb-keyval@6.2.2): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -21430,10 +21457,6 @@ snapshots: dependencies: react: 18.3.1 - use-sync-external-store@1.5.0(react@18.3.1): - dependencies: - react: 18.3.1 - utf-8-validate@5.0.10: dependencies: node-gyp-build: 4.8.4 @@ -21501,7 +21524,7 @@ snapshots: - utf-8-validate - zod - viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: '@noble/curves': 1.9.6 '@noble/hashes': 1.8.0 @@ -21518,7 +21541,7 @@ snapshots: - utf-8-validate - zod - viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.6 '@noble/hashes': 1.8.0 @@ -21541,14 +21564,14 @@ snapshots: dependencies: xml-name-validator: 4.0.0 - wagmi@2.16.5(@tanstack/query-core@5.85.5)(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76): + wagmi@2.16.4(@tanstack/query-core@5.85.5)(@tanstack/react-query@5.85.5(react@18.3.1))(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76): dependencies: '@tanstack/react-query': 5.85.5(react@18.3.1) - '@wagmi/connectors': 5.9.5(@types/react@18.3.24)(@wagmi/core@2.20.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@18.3.1))(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) - '@wagmi/core': 2.20.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/connectors': 5.9.4(@types/react@18.3.24)(@wagmi/core@2.19.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + '@wagmi/core': 2.19.0(@tanstack/query-core@5.85.5)(@types/react@18.3.24)(react@18.3.1)(typescript@5.9.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76)) react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - viem: 2.35.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.34.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -21567,7 +21590,6 @@ snapshots: - '@types/react' - '@upstash/redis' - '@vercel/blob' - - '@vercel/functions' - '@vercel/kv' - aws4fetch - bufferutil @@ -21710,6 +21732,8 @@ snapshots: yallist@3.1.1: {} + yallist@4.0.0: {} + yallist@5.0.0: {} yargs-parser@18.1.3: @@ -21755,26 +21779,14 @@ snapshots: react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - zustand@5.0.0(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)): - optionalDependencies: - '@types/react': 18.3.24 - react: 18.3.1 - use-sync-external-store: 1.5.0(react@18.3.1) - zustand@5.0.3(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): optionalDependencies: '@types/react': 18.3.24 react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - zustand@5.0.3(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)): - optionalDependencies: - '@types/react': 18.3.24 - react: 18.3.1 - use-sync-external-store: 1.5.0(react@18.3.1) - - zustand@5.0.8(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)): + zustand@5.0.8(@types/react@18.3.24)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): optionalDependencies: '@types/react': 18.3.24 react: 18.3.1 - use-sync-external-store: 1.5.0(react@18.3.1) + use-sync-external-store: 1.4.0(react@18.3.1)