import React from 'react'; import { useEffect, useState } from 'react'; import { farcasterFrame } from '@farcaster/miniapp-wagmi-connector'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { createConfig, http, WagmiProvider } from 'wagmi'; import { useConnect, useAccount } from 'wagmi'; import { base, degen, mainnet, optimism, unichain, celo } from 'wagmi/chains'; import { coinbaseWallet, metaMask } from 'wagmi/connectors'; import { APP_NAME, APP_ICON_URL, APP_URL } from '~/lib/constants'; // Custom hook for Coinbase Wallet detection and auto-connection function useCoinbaseWalletAutoConnect() { const [isCoinbaseWallet, setIsCoinbaseWallet] = useState(false); const { connect, connectors } = useConnect(); const { isConnected } = useAccount(); useEffect(() => { // Check if we're running in Coinbase Wallet const checkCoinbaseWallet = () => { const isInCoinbaseWallet = window.ethereum?.isCoinbaseWallet || window.ethereum?.isCoinbaseWalletExtension || window.ethereum?.isCoinbaseWalletBrowser; setIsCoinbaseWallet(!!isInCoinbaseWallet); }; checkCoinbaseWallet(); window.addEventListener('ethereum#initialized', checkCoinbaseWallet); return () => { window.removeEventListener('ethereum#initialized', checkCoinbaseWallet); }; }, []); useEffect(() => { // Auto-connect if in Coinbase Wallet and not already connected if (isCoinbaseWallet && !isConnected) { connect({ connector: connectors[1] }); // Coinbase Wallet connector } }, [isCoinbaseWallet, isConnected, connect, connectors]); return isCoinbaseWallet; } export const config = createConfig({ chains: [base, optimism, mainnet, degen, unichain, celo], transports: { [base.id]: http(), [optimism.id]: http(), [mainnet.id]: http(), [degen.id]: http(), [unichain.id]: http(), [celo.id]: http(), }, connectors: [ farcasterFrame(), coinbaseWallet({ appName: APP_NAME, appLogoUrl: APP_ICON_URL, preference: 'all', }), metaMask({ dappMetadata: { name: APP_NAME, url: APP_URL, }, }), ], }); const queryClient = new QueryClient(); // Wrapper component that provides Coinbase Wallet auto-connection function CoinbaseWalletAutoConnect({ children, }: { children: React.ReactNode; }) { useCoinbaseWalletAutoConnect(); return <>{children}; } export default function Provider({ children }: { children: React.ReactNode }) { return ( {children} ); }