{"version":3,"sources":["../src/index.ts","../src/context/ThemeProvider.tsx","../src/context/AuthProvider.tsx","../src/supabase/index.ts","../src/context/GlobalProvider.tsx","../src/context/MoonProvider.tsx","../src/constants/AUTH_CONSTANTS.ts","../src/context/WagmiProvider.tsx","../src/hooks/auth/useAuth.ts","../src/hooks/auth/useOauth2.ts","../src/hooks/contracts/useErc1155.ts","../src/utils/parse.ts","../src/hooks/contracts/useErc20.ts","../src/hooks/contracts/useErc4626.ts","../src/hooks/contracts/useErc721.ts","../src/hooks/integrations/types.ts","../src/hooks/integrations/useAave.ts","../src/hooks/integrations/useJupiter.ts","../src/hooks/integrations/useLifi.ts","../src/hooks/integrations/useLynex.ts","../src/hooks/integrations/useMRP.ts","../src/hooks/integrations/useOdos.ts","../src/hooks/integrations/usePolyMarket.ts","../src/hooks/integrations/useRamses.ts","../src/hooks/integrations/useThena.ts","../src/hooks/integrations/useThorswap.ts","../src/hooks/integrations/useUniswap.ts","../src/hooks/integrations/useAllora.ts","../src/hooks/integrations/useCookiefun.ts","../src/hooks/integrations/useMakeFun.ts","../src/hooks/integrations/useFinancialDatasets.ts","../src/hooks/integrations/useOpensea.ts","../src/hooks/moon/useConnectToMoon.ts","../src/hooks/moon/useMoonAccount.ts","../src/hooks/moon/useMoonDataSDK.ts","../src/hooks/moon/useMoonSDK.ts","../src/hooks/moon/useChain.ts","../src/utils/react-coinghecko/index.ts","../src/utils/react-coinghecko/fetchNullable.ts","../src/hooks/web3/useMoonTokenManager.ts","../src/hooks/old/useMoonSDK.tsx","../src/hooks/web3/useMoonTransaction.ts","../src/hooks/web3/useTokenBalances.tsx","../src/utils/shortenAddress.ts","../src/hooks/web3/useWalletAlias.ts","../src/assets/icons.tsx","../src/hooks/web3/useWalletConnectors.tsx","../src/hooks/web3/useWalletGasBalances.tsx","../src/hooks/old/useMoonAccounts.ts","../src/components/Account/Account.tsx","../src/components/Auth/AuthModal/AuthModal.tsx","../src/components/Auth/SignUp/SignupForm.tsx","../src/components/Auth/AuthModal/AuthModal2.tsx","../src/components/Auth/AuthOptions/AuthOptions.tsx","../src/components/Auth/EmailLogin/EmailLogin.tsx","../src/components/Auth/SignInAnonymously/SignInAnonymously.tsx","../src/components/Auth/SocialLogins/SocialLogins.tsx","../src/components/Auth/WalletConnectorList/WalletConnectorList.tsx","../src/components/Auth/WebAuthnComponent/WebAuthnComponent.tsx","../src/components/Chat/ChatBot.tsx","../src/components/Chat/components/bubbles/ProtocolInfoBubble.tsx","../src/components/Chat/components/bubbles/PoolInfoBubble.tsx","../src/components/Chat/components/bubbles/TokenInfoBubble.tsx","../src/components/Chat/components/bubbles/WalletInfoBubble.tsx","../src/components/Chat/components/bubbles/TransactionResultBubble.tsx","../src/components/Chat/components/bubbles/PortfolioChangeBubble.tsx","../src/components/Chat/components/bubbles/HistoricalTransactionBubble.tsx","../src/components/Chat/components/bubbles/HistoricalPerformanceBubble.tsx","../src/components/Chat/components/bubbles/ChainInfoBubble.tsx","../src/components/Chat/components/bubbles/UserMessageBubble.tsx","../src/components/Chat/components/bubbles/MultiStepTransactionBubble.tsx","../src/components/Chat/components/MessageContainer.tsx","../src/components/Chat/components/ChatBubble.tsx","../src/components/Chat/testData/chatTestData.ts","../src/components/Contracts/ERC20/ERC20AllowanceDisplay/ERC20AllowanceDisplay.tsx","../src/components/Contracts/ERC20/ERC20ApprovalButton/ERC20ApprovalButton.tsx","../src/components/Contracts/ERC20/ERC20BalanceDisplay/ERC20BalanceDisplay.tsx","../src/components/Contracts/ERC20/ERC20TokenInfo/ERC20TokenInfo.tsx","../src/components/Contracts/ERC20/ERC20TotalSupplyDisplay/ERC20TotalSupplyDisplay.tsx","../src/components/Contracts/ERC20/ERC20TransferForm/ERC20TransferForm.tsx","../src/components/Contracts/ERC721/ERC721ApprovedDisplay/ERC721ApprovedDisplay.tsx","../src/components/Contracts/ERC721/ERC721BalanceDisplay/ERC721BalanceDisplay.tsx","../src/components/Contracts/ERC721/ERC721IsApprovedForAllDisplay/ERC721IsApprovedForAllDisplay.tsx","../src/components/Contracts/ERC721/ERC721NameDisplay/ERC721NameDisplay.tsx","../src/components/Contracts/ERC721/ERC721OwnerDisplay/ERC721OwnerDisplay.tsx","../src/components/Contracts/ERC721/ERC721SymbolDisplay/ERC721SymbolDisplay.tsx","../src/components/Core/Button/Button.tsx","../src/components/Core/Input/Input.tsx","../src/components/Core/Modal/Modal.tsx","../src/components/Core/Dropdown/Dropdown.tsx","../src/components/Core/ToolTip/ToolTip.tsx","../src/components/Core/Notifications/Notifications.tsx","../src/components/Integrations/Lifi/LifiSelectors/LifiTokenSelectorModal.tsx","../src/components/Integrations/Lifi/LifiSelectors/LifiChainSelectorModal.tsx","../src/components/Integrations/Lifi/LifiSwap.tsx","../src/components/Web3/Transactions/transactions.tsx","../src/components/Integrations/Lifi/TokenSelector.tsx","../src/components/Integrations/Lifi/TokenInput.tsx","../src/components/Integrations/Lifi/ChainSelector.tsx","../src/components/Integrations/Lifi/SlippageSettings.tsx","../src/components/Integrations/Lifi/SwapDetails.tsx","../src/components/Integrations/Odos/OdosTokenSelector/OdosTokenSelector.tsx","../src/components/Integrations/Odos/OdosTokenSelector/OdosTokenSelectorModal.tsx","../src/components/Integrations/Odos/SwapInterface/SwapInterface.tsx","../src/hooks/web3/useMoonChain.ts","../src/components/Web3/Chains/ChainSelectors/ChainSelectorModal.tsx","../src/components/Integrations/Odos/Swaps.tsx","../src/utils/combineWithArrays.ts","../src/components/Integrations/Odos/SlippageSettings.tsx","../src/components/Integrations/Odos/SwapDetails.tsx","../src/components/Integrations/Odos/TokenSelector.tsx","../src/components/Integrations/Odos/TokenInput.tsx","../src/components/Integrations/Thorswap/Thorswap.tsx","../src/components/Web3/AnyTokenSelector/AnyTokenSelectorModal.tsx","../src/components/Web3/Chains/ChainSelectors/ChainSelector.tsx","../src/components/Web3/Chains/Chain.tsx","../src/components/Web3/TokenInfoModal/TokenInfoModal.tsx","../src/database/LocalStorageAdapter.ts","../src/database/SupabaseAdapter.ts","../src/components/Web3/TokenManager/components/TokenContextMenu.tsx","../src/components/Web3/TokenManager/components/TokenListItem.tsx","../src/components/Web3/TokenManager/components/TokenModal.tsx","../src/components/Web3/TokenManager/UserTokenManager.tsx","../src/components/Web3/TokenManager/useTokenManagmentUIState.ts","../src/components/Web3/TransactionForm/TransactionForm.tsx","../src/components/Web3/TransactionReceipt/TransactionReceipt.tsx","../src/components/Web3/WalletSelectors/WalletSelector.tsx","../src/components/Web3/WalletSelectors/WalletSelectorModal.tsx","../src/components/Web3/AccountSelector/AccountSelector.tsx","../src/types/theme.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./constants\";\nexport * from \"./context\";\nexport * from \"./hooks\";\nexport * from \"./types\";\nexport * from \"./utils\";\n","// components/ThemeProvider.tsx\nimport type { Theme } from \"@/types\";\n// biome-ignore lint/style/useImportType: <explanation>\nimport React, { createContext, useContext } from \"react\";\n\nconst ThemeContext = createContext<Theme | undefined>(undefined);\n\nexport const useTheme = () => {\n\tconst context = useContext(ThemeContext);\n\tif (!context) throw new Error(\"useTheme must be used within a ThemeProvider\");\n\treturn context;\n};\n\n/**\n * ThemeProvider component that provides a theme context to its children.\n *\n * @param {Object} props - The properties object.\n * @param {Theme} props.theme - The theme object to be provided to the context.\n * @param {React.ReactNode} props.children - The child components that will receive the theme context.\n *\n * @returns {JSX.Element} The ThemeProvider component with the provided theme context.\n */\nexport const ThemeProvider: React.FC<{\n\ttheme: Theme;\n\tchildren: React.ReactNode;\n}> = ({ theme, children }) => (\n\t<ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n);\n","import React, { useMemo, useCallback } from \"react\";\nimport type { MoonSDKConfig } from \"@moonup/moon-sdk\";\nimport { MoonSDK } from \"@moonup/moon-sdk\";\nimport type { Session, SupabaseClient, User } from \"@supabase/supabase-js\";\nimport { supabase } from \"../supabase\";\n\nexport interface MoonAuthContextType {\n  session: Session | null;\n  user: User | null;\n  signOut: () => Promise<void>;\n  supabaseClient: SupabaseClient;\n  moon: MoonSDK | null;\n  isAuthenticated: boolean;\n  isLoading: boolean;\n  connect: ( accessToken?: string, refreshToken?: string ) => Promise<void>;\n  disconnect: () => Promise<void>;\n}\n\nexport const MoonAuthContext = React.createContext<MoonAuthContextType>( {\n  session: null,\n  user: null,\n  signOut: async () => { },\n  supabaseClient: supabase,\n  moon: null,\n  isAuthenticated: false,\n  isLoading: true,\n  connect: async (\n    accessToken?: string,\n    refreshToken?: string,\n  ): Promise<void> => {\n    console.log( \"connecting\" );\n    console.log( \"accessToken\", accessToken );\n    console.log( \"refreshToken\", refreshToken );\n  },\n  disconnect: async (): Promise<void> => { },\n} );\nexport type MoonAuthProviderProps = {\n  sdkConfig?: MoonSDKConfig;\n  children: React.ReactNode;\n};\n\nexport const MoonAuthProvider = ( {\n  children,\n  sdkConfig,\n}: MoonAuthProviderProps ) => {\n  const [ user, setUser ] = React.useState<User | null>( null );\n  const [ moon ] = React.useState<MoonSDK>(\n    new MoonSDK( {\n      authInstance: supabase,\n      ...sdkConfig,\n    } ),\n  );\n  const [ session, setSession ] = React.useState<Session | null>( null );\n  const [ isLoading, setIsLoading ] = React.useState( true );\n  const [ isAuthenticated, setIsAuthenticated ] = React.useState( false );\n\n  React.useEffect( () => {\n    setIsLoading( true );\n    const { data: authListener } = supabase.auth.onAuthStateChange(\n      async ( event, newSession ) => {\n        // console.log(\"Auth state change:\", event, newSession);\n\n        switch ( event ) {\n          case \"INITIAL_SESSION\":\n            // Initial session will always be null, so we don't need to do anything here\n            break;\n          case \"SIGNED_IN\":\n          case \"TOKEN_REFRESHED\":\n          case \"USER_UPDATED\":\n            if ( newSession ) {\n              setSession( newSession );\n              setUser( newSession.user );\n              setIsAuthenticated( true );\n              moon.moonAPIService.setSecurityData( newSession.access_token );\n            }\n            break;\n          case \"SIGNED_OUT\":\n            setSession( null );\n            setUser( null );\n            setIsAuthenticated( false );\n            await moon.disconnect();\n            break;\n          case \"PASSWORD_RECOVERY\":\n            // Handle password recovery if needed\n            break;\n          default:\n            // Handle any other events if needed\n            break;\n        }\n      },\n    );\n    const initializeAuth = async () => {\n      // Initialize Moon first\n\n      const {\n        data: { session: initialSession },\n        error,\n      } = await supabase.auth.getSession();\n      if ( error ) {\n        console.error( \"Error fetching session:\", error );\n        setIsLoading( false );\n        return;\n      }\n\n      if ( initialSession ) {\n        setSession( initialSession );\n        setUser( initialSession.user );\n        setIsAuthenticated( true );\n        moon.moonAPIService.setSecurityData( initialSession.access_token );\n      }\n\n      setIsLoading( false );\n\n      // Set up auth listener after Moon is initialized\n    };\n\n    initializeAuth();\n\n    return () => {\n      authListener?.subscription.unsubscribe();\n    };\n  }, [ moon ] );\n\n  const signOut = useCallback( async () => {\n    setIsLoading( true );\n    await supabase.auth.signOut( {} );\n\n    setSession( null );\n    setUser( null );\n    setIsAuthenticated( false );\n    setIsLoading( false );\n  }, [] );\n\n  const connect = useCallback(\n    async ( accessToken?: string, refreshToken?: string ): Promise<void> => {\n      if ( moon ) {\n        const session = await moon.connect( accessToken, refreshToken );\n        setSession( session );\n        setIsAuthenticated( true );\n        setUser( session.user );\n      }\n    },\n    [ moon ],\n  );\n\n  const disconnect = useCallback( async (): Promise<void> => {\n    if ( moon ) {\n      await moon.disconnect();\n      setSession( null );\n      setIsAuthenticated( false );\n      setUser( null );\n    }\n  }, [ moon ] );\n\n  const value = useMemo(\n    () => ( {\n      moon,\n      session,\n      user,\n      signOut,\n      supabaseClient: supabase,\n      isAuthenticated,\n      isLoading,\n      connect,\n      disconnect,\n    } ),\n    [\n      moon,\n      session,\n      user,\n      signOut,\n      isAuthenticated,\n      isLoading,\n      connect,\n      disconnect,\n    ],\n  );\n\n  return (\n    <MoonAuthContext.Provider value={ value }>\n      { !isLoading && children }\n    </MoonAuthContext.Provider>\n  );\n};\n\nexport const useMoonAuth = () => React.useContext( MoonAuthContext );\n","import { createClient } from \"@supabase/supabase-js\";\n\nexport const supabase = createClient(\n  \"https://api.usemoon.ai\",\n  \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogImFub24iLAogICJpc3MiOiAic3VwYWJhc2UiLAogICJpYXQiOiAxNzAzMTE2ODAwLAogICJleHAiOiAxODYwOTY5NjAwCn0.nA4p2oP7XNlo93VqnyOlwz_wy7pDXW3lUki1t_udpbA\"\n);\n","import type { MoonSDKConfig } from \"@moonup/moon-sdk\";\nimport {\n\tQueryCache,\n\tQueryClient,\n\tQueryClientProvider,\n} from \"@tanstack/react-query\";\nimport type { ReactNode } from \"react\";\nimport React from \"react\";\nimport { AuthModal, DEFAULT_AUTH_CONFIG, defaultTheme } from \"..\";\nimport type { AuthModalConfig } from \"../types/types\";\nimport { MoonAuthProvider } from \"./AuthProvider\";\nimport { MoonSDKProvider } from \"./MoonProvider\";\nimport { ThemeProvider } from \"./ThemeProvider\";\nimport { config } from \"./WagmiProvider\";\nimport type { Theme } from \"../types/theme\";\nimport { WagmiProvider } from \"wagmi\";\nimport { Config, reconnect } from \"@wagmi/core\";\n\nexport type GlobalStateProviderProps = {\n\tchildren: ReactNode;\n\tsdkConfig?: MoonSDKConfig;\n\tauthConfig?: AuthModalConfig;\n};\n\nexport const GlobalStateProvider: React.FC<GlobalStateProviderProps> = ({\n\tchildren,\n\tsdkConfig,\n\tauthConfig = DEFAULT_AUTH_CONFIG,\n}) => {\n\tconst theme: Theme = {\n\t\t...defaultTheme,\n\t\t...(authConfig.theming || {}),\n\t};\n\tconst [queryClient] = React.useState(\n\t\t() =>\n\t\t\tnew QueryClient({\n\t\t\t\tdefaultOptions: {\n\t\t\t\t\tqueries: {\n\t\t\t\t\t\trefetchOnWindowFocus: false,\n\t\t\t\t\t\tgcTime: 1000 * 60 * 60 * 24,\n\t\t\t\t\t\tstaleTime: 1000 * 60 * 60 * 24,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tqueryCache: new QueryCache({}),\n\t\t\t}),\n\t);\n\n\tReact.useEffect(() => {\n\t\tsetTimeout(() => {\n\t\t\treconnect(config as Config);\n\t\t});\n\t}, [queryClient]);\n\n\treturn (\n\t\t<QueryClientProvider client={queryClient}>\n\t\t\t<ThemeProvider theme={theme}>\n\t\t\t\t<MoonAuthProvider sdkConfig={sdkConfig}>\n\t\t\t\t\t<WagmiProvider config={config}>\n\t\t\t\t\t\t<MoonSDKProvider authConfig={authConfig}>\n\t\t\t\t\t\t\t<AuthModal config={authConfig}>{children}</AuthModal>\n\t\t\t\t\t\t</MoonSDKProvider>\n\t\t\t\t\t</WagmiProvider>\n\t\t\t\t</MoonAuthProvider>\n\t\t\t</ThemeProvider>\n\t\t</QueryClientProvider>\n\t);\n};\n","import { SupabaseAdapter } from \"@/components\";\nimport type { MoonSDK } from \"@moonup/moon-sdk\";\n// biome-ignore lint/style/useImportType: <explanation>\nimport React, { ReactNode, useEffect, useState } from \"react\";\nimport { DEFAULT_AUTH_CONFIG } from \"../constants/AUTH_CONSTANTS\";\nimport type { DBAdapterBase } from \"../database/DBAdapterBase\";\nimport type { AuthModalConfig } from \"../types/types\";\n\nimport type { Chains } from \"@moonup/moon-sdk\";\nimport type {\n\tAuthSession as Session,\n\tSupabaseClient,\n} from \"@supabase/supabase-js\";\nimport type { DbWalletAlias } from \"../database/DBAdapterBase\";\nimport { useChains, useMoonAccount } from \"../hooks\";\nimport type { TransactionResult } from \"../types/types\";\nimport { useMoonAuth } from \"./AuthProvider\";\n\nexport type State = {\n\tmoon: MoonSDK | null;\n\tdbAdapter: DBAdapterBase;\n\tauthConfig: AuthModalConfig;\n\tconnect: (accessToken?: string, refreshToken?: string) => Promise<void>;\n\tdisconnect: () => Promise<void>;\n\n\tisAuthenticated: boolean;\n\tsession: Session | null;\n\tsetIsAuthenticated: (value: boolean) => void;\n\tsetSession: (session: Session | null) => void;\n\n\tsupabase: SupabaseClient | null;\n\twallets: string[];\n\taliases: DbWalletAlias[];\n\tchains: Chains[];\n\tchain: Chains | null;\n\tloading: boolean;\n\twallet?: string;\n\tchatOpen: boolean;\n\ttransactionHistory: TransactionResult[];\n\tsignOut: () => Promise<void>;\n\tcreateWallet: () => Promise<void>;\n\tlistWallets: () => Promise<void>;\n\tfetchAliases: () => Promise<void>;\n\tsetWallet: (wallet: string) => Promise<void>;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tgetUserSession: () => Promise<any>;\n\tconnectEthers: () => Promise<void>;\n\tdisconnectEthers: () => Promise<void>;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\trequest: (args: any) => Promise<any>;\n\tlistChains: () => Promise<void>;\n\tsetChain: (chain: Chains) => Promise<void>;\n\tsetChatOpen: (isOpen: boolean) => Promise<void>;\n\taddTransactionResult: (result: TransactionResult) => void;\n};\nexport const MoonSDKContext = React.createContext<State | undefined>(undefined);\n\ntype MoonSDKProviderProps = {\n\tauthConfig?: AuthModalConfig;\n\tchildren: ReactNode;\n};\n\nexport const MoonSDKProvider: React.FC<MoonSDKProviderProps> = ({\n\tchildren,\n\tauthConfig = DEFAULT_AUTH_CONFIG,\n}) => {\n\tconst { supabaseClient, moon, isAuthenticated, session } = useMoonAuth();\n\tconst [dbAdapter, setDbAdapter] = useState<DBAdapterBase | null>(null);\n\tconst [aliases, setAliases] = useState<DbWalletAlias[]>([]);\n\tconst [chain, setChain] = useState<Chains | null>(null);\n\tconst [chatOpen, setChatOpen] = useState(false);\n\tconst [transactionHistory, setTransactionHistory] = useState<\n\t\tTransactionResult[]\n\t>([]);\n\tconst { fetchChains, chains } = useChains();\n\tconst {\n\t\taccounts: wallets,\n\t\tlistAccounts,\n\t\tcreateAccount,\n\t\taccount: wallet,\n\t\tsetAccount: setWallet,\n\t} = useMoonAccount();\n\tuseEffect(() => {\n\t\tif (supabaseClient) {\n\t\t\tsetDbAdapter(new SupabaseAdapter(supabaseClient));\n\t\t}\n\t}, [supabaseClient]);\n\n\t// useEffect(() => {\n\t// \tif (moon && isAuthenticated) {\n\t// \t\tlistWallets();\n\t// \t\tlistChains();\n\t// \t\tfetchAliases();\n\t// \t}\n\t// }, [moon, isAuthenticated]);\n\n\tconst connect = async (accessToken?: string, refreshToken?: string) => {\n\t\tif (moon) {\n\t\t\tawait moon.connect(accessToken, refreshToken);\n\t\t}\n\t};\n\n\tconst disconnect = async () => {\n\t\tif (moon) {\n\t\t\tawait moon.disconnect();\n\t\t}\n\t};\n\n\tconst createWallet = async () => {\n\t\treturn await createAccount({});\n\t};\n\n\tconst fetchAliases = async () => {\n\t\tif (dbAdapter) {\n\t\t\tconst fetchedAliases = await dbAdapter.getUserWalletAliases();\n\t\t\tsetAliases(fetchedAliases);\n\t\t}\n\t};\n\n\tconst listWallets = async () => {\n\t\treturn await listAccounts();\n\t};\n\n\tconst listChains = async () => {\n\t\treturn await fetchChains();\n\t};\n\n\tconst setActiveWallet = async (newWallet: string) => {\n\t\tsetWallet(newWallet);\n\t\tif (typeof window !== \"undefined\" && session?.user?.id) {\n\t\t\tlocalStorage.setItem(`moon_wallet_${session.user.id}`, newWallet);\n\t\t}\n\t};\n\n\tconst setActiveChain = async (newChain: Chains) => {\n\t\tsetChain(newChain);\n\t\tif (typeof window !== \"undefined\" && session?.user?.id) {\n\t\t\tlocalStorage.setItem(\n\t\t\t\t`moon_chain_${session.user.id}`,\n\t\t\t\tJSON.stringify(newChain),\n\t\t\t);\n\t\t}\n\t};\n\n\tconst addTransactionResult = (result: TransactionResult) => {\n\t\tsetTransactionHistory((prev) => [...prev, result]);\n\t};\n\n\tconst contextValue: State = {\n\t\tmoon,\n\t\t// biome-ignore lint/style/noNonNullAssertion: <explanation>\n\t\tdbAdapter: dbAdapter!,\n\t\tauthConfig,\n\t\tconnect,\n\t\tdisconnect,\n\t\tisAuthenticated,\n\t\tsession,\n\t\tsupabase: supabaseClient,\n\t\twallets,\n\t\taliases,\n\t\tchains,\n\t\tchain,\n\t\tloading: false,\n\t\twallet,\n\t\tchatOpen,\n\t\ttransactionHistory,\n\t\tsignOut: async () => {\n\t\t\t// This should be handled by the AuthProvider\n\t\t},\n\t\tcreateWallet,\n\t\tlistWallets,\n\t\tfetchAliases,\n\t\tsetWallet: setActiveWallet,\n\t\tgetUserSession: async () => {\n\t\t\t// This should be handled by the AuthProvider\n\t\t},\n\t\tconnectEthers: async () => {\n\t\t\t// Implement if needed\n\t\t},\n\t\tdisconnectEthers: async () => {\n\t\t\t// Implement if needed\n\t\t},\n\t\trequest: async (args: any) => {\n\t\t\tconsole.log(args);\n\t\t},\n\t\tlistChains,\n\t\tsetChain: setActiveChain,\n\t\tsetChatOpen: (isOpen: boolean): Promise<void> => {\n\t\t\tsetChatOpen(isOpen);\n\t\t\treturn Promise.resolve();\n\t\t},\n\t\taddTransactionResult,\n\t\tsetIsAuthenticated: (value: boolean): void => {\n\t\t\tconsole.log(value);\n\t\t},\n\t\tsetSession: (session: Session | null): void => {\n\t\t\tconsole.log(session);\n\t\t},\n\t};\n\n\treturn (\n\t\t<MoonSDKContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</MoonSDKContext.Provider>\n\t);\n};\n","import moonLogoLight from \"@/assets/moon-logo-light.png\";\nimport type { AuthModalConfig } from \"@/types\";\n\nexport const DEFAULT_AUTH_CONFIG: AuthModalConfig = {\n\tenabled: true,\n\tsocialLogins: [\"discord\", \"github\", \"twitter\", \"google\"],\n\twalletConnectEnabled: true,\n\tanonymousLoginEnabled: true,\n\tappearance: {\n\t\tlogo: {\n\t\t\t//done\n\t\t\tsrc: moonLogoLight,\n\t\t\theight: \"auto\",\n\t\t\twidth: \"150px\",\n\t\t\tposition: \"left\",\n\t\t\tenabled: true,\n\t\t},\n\t\twelcomeMessage: {\n\t\t\t//done\n\t\t\ttitle: \"Welcome back!\",\n\t\t\tsubtitle: \"Sign in to your account to continue\",\n\t\t\tposition: \"above\",\n\t\t\tenabled: true,\n\t\t},\n\t\tsignupMessage: {\n\t\t\t//done\n\t\t\ttitle: \"Sign up\",\n\t\t\tsubtitle: \"Enter your email and password to sign up\",\n\t\t},\n\t\tmodal: {\n\t\t\t//done\n\t\t\tborderRadius: \"3px\",\n\t\t\tpadding: \"8\",\n\t\t\twidth: \"450px\",\n\t\t},\n\t\tinput: {\n\t\t\t//done\n\t\t\tborderRadius: \"3px\",\n\t\t\tplaceholders: {\n\t\t\t\temail: \"eg. ILoveMoon@gmail.com\",\n\t\t\t\tpassword: \"******\",\n\t\t\t},\n\t\t},\n\t\tbutton: {\n\t\t\tborderRadius: \"3px\",\n\t\t\tpadding: \"2\",\n\t\t},\n\t\t// splashImage: {\n\t\t//   src: string,\n\t\t//   height: number,\n\t\t//   width: number,\n\t\t//   className: string,\n\t\t//   enabled: boolean,\n\t\t// },\n\t\t// font: string,\n\t},\n\ttheming: {\n\t\taccentColor: \"#3B82F6\",\n\t\tsuccessColor: \"#10B981\",\n\t\terrorColor: \"#EF4444\",\n\t\tinfoColor: \"#3B82F6\",\n\t\twarningColor: \"#F59E0B\",\n\t\tbackgroundColor: \"#FFFFFF\",\n\t\tbackgroundColorSecondary: \"#F3F4F6\",\n\t\ttextColor: \"#1F2937\",\n\t\ttextColorSecondary: \"#6B7280\",\n\t\tbuttonColor: \"#3B82F6\",\n\t\tbuttonColorSecondary: \"#E5E7EB\",\n\t\tfontFamily: \"Inter, sans-serif\",\n\t\tcolors: {\n\t\t\tprimary: \"#3B82F6\",\n\t\t\tsecondary: \"#6B7280\",\n\t\t\tbackground: \"#FFFFFF\",\n\t\t\tsurface: \"#F3F4F6\",\n\t\t\ttext: \"#1F2937\",\n\t\t\ttextSecondary: \"#6B7280\",\n\t\t\tborder: \"#E5E7EB\",\n\t\t\thover: \"#F3F4F6\",\n\t\t\tfocus: \"#3B82F6\",\n\t\t\tdisabled: \"#D1D5DB\",\n\t\t\tselected: \"#EBF5FF\",\n\t\t\tselectedText: \"#1E40AF\",\n\t\t},\n\t\tborderRadius: \"0.375rem\",\n\t\tboxShadow: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n\t\ttypography: {\n\t\t\tfontFamily: \"Inter, sans-serif\",\n\t\t\tfontSize: {\n\t\t\t\txs: \"0.75rem\",\n\t\t\t\tsm: \"0.875rem\",\n\t\t\t\tbase: \"1rem\",\n\t\t\t\tlg: \"1.125rem\",\n\t\t\t\txl: \"1.25rem\",\n\t\t\t\t\"2xl\": \"1.5rem\",\n\t\t\t},\n\t\t\tfontWeight: {\n\t\t\t\tlight: \"300\",\n\t\t\t\tnormal: \"400\",\n\t\t\t\tmedium: \"500\",\n\t\t\t\tsemibold: \"600\",\n\t\t\t\tbold: \"700\",\n\t\t\t},\n\t\t\tlineHeight: {\n\t\t\t\ttight: \"1.25\",\n\t\t\t\tnormal: \"1.5\",\n\t\t\t\trelaxed: \"1.75\",\n\t\t\t},\n\t\t},\n\t\tspacing: {\n\t\t\txs: \"0.25rem\",\n\t\t\tsm: \"0.5rem\",\n\t\t\tmd: \"1rem\",\n\t\t\tlg: \"1.5rem\",\n\t\t\txl: \"2rem\",\n\t\t},\n\t\ttransition: {\n\t\t\tfast: \"150ms\",\n\t\t\tnormal: \"300ms\",\n\t\t\tslow: \"500ms\",\n\t\t},\n\t},\n};\n","import type { ReactNode } from \"react\";\n// biome-ignore lint/style/useImportType: <explanation>\nimport React from \"react\";\nimport { WagmiProvider, createConfig } from \"wagmi\";\n\nimport {\n\tcoinbaseWallet,\n\tinjected,\n\tmetaMask,\n\tsafe,\n\twalletConnect,\n} from \"@wagmi/connectors\";\nimport { http } from \"@wagmi/core\";\nimport {\n\tarbitrum,\n\tarbitrumGoerli,\n\tarbitrumNova,\n\tarbitrumSepolia,\n\taurora,\n\tauroraTestnet,\n\tavalanche,\n\tavalancheFuji,\n\tbase,\n\tbaseGoerli,\n\tbaseSepolia,\n\tbsc,\n\tbscTestnet,\n\tcelo,\n\tceloAlfajores,\n\tclassic,\n\tcronos,\n\tcrossbell,\n\tevmos,\n\tevmosTestnet,\n\tfantom,\n\tfantomTestnet,\n\tfilecoin,\n\tfilecoinCalibration,\n\tfilecoinHyperspace,\n\tgnosis,\n\tgnosisChiado,\n\tgoerli,\n\tharmonyOne,\n\tholesky,\n\tlocalhost,\n\tmainnet,\n\tmetis,\n\tmetisGoerli,\n\tmoonbaseAlpha,\n\tmoonbeam,\n\tmoonriver,\n\tokc,\n\toptimism,\n\toptimismGoerli,\n\toptimismSepolia,\n\tpolygon,\n\tpolygonMumbai,\n\tpolygonZkEvm,\n\tpolygonZkEvmTestnet,\n\tpulsechain,\n\tpulsechainV4,\n\trollux,\n\tronin,\n\tscroll,\n\tscrollSepolia,\n\tsepolia,\n\tskaleBlockBrawlers,\n\tskaleCalypso,\n\tskaleCalypsoTestnet,\n\tskaleCryptoBlades,\n\tskaleCryptoColosseum,\n\tskaleEuropa,\n\tskaleEuropaTestnet,\n\tskaleExorde,\n\tskaleHumanProtocol,\n\tskaleNebula,\n\tskaleNebulaTestnet,\n\tskaleRazor,\n\tskaleTitan,\n\tskaleTitanTestnet,\n\tsongbird,\n\tsyscoin,\n\ttaraxa,\n\ttelos,\n\ttelosTestnet,\n\tthunderTestnet,\n\twanchain,\n\twanchainTestnet,\n\tzhejiang,\n\tzkSync,\n\tzora,\n\tzoraTestnet,\n} from \"wagmi/chains\";\nimport type { Config } from \"wagmi\";\n\nexport const config: Config = createConfig({\n\tssr: true,\n\tconnectors: [\n\t\tinjected(),\n\t\tmetaMask(),\n\t\twalletConnect({\n\t\t\tprojectId: \"822f4b6ba46adcf4ed01d5e24e68cc88\",\n\t\t}),\n\t\tsafe(),\n\t\tcoinbaseWallet(),\n\t],\n\tchains: [\n\t\tmainnet,\n\t\tsepolia,\n\t\tgoerli,\n\t\tarbitrum,\n\t\tarbitrumGoerli,\n\t\tarbitrumNova,\n\t\tarbitrumSepolia,\n\t\taurora,\n\t\tauroraTestnet,\n\t\tavalanche,\n\t\tavalancheFuji,\n\t\tbase,\n\t\tbaseGoerli,\n\t\tbaseSepolia,\n\t\tbsc,\n\t\tbscTestnet,\n\t\tcelo,\n\t\tceloAlfajores,\n\t\tclassic,\n\t\tcronos,\n\t\tcrossbell,\n\t\tevmos,\n\t\tevmosTestnet,\n\t\tfantom,\n\t\tfantomTestnet,\n\t\tfilecoin,\n\t\tfilecoinCalibration,\n\t\tfilecoinHyperspace,\n\t\tgnosis,\n\t\tgnosisChiado,\n\t\tharmonyOne,\n\t\tholesky,\n\t\tlocalhost,\n\t\tmetis,\n\t\tmetisGoerli,\n\t\tmoonbeam,\n\t\tmoonbaseAlpha,\n\t\tmoonriver,\n\t\tokc,\n\t\toptimism,\n\t\toptimismGoerli,\n\t\toptimismSepolia,\n\t\tpolygon,\n\t\tpolygonMumbai,\n\t\tpolygonZkEvm,\n\t\tpolygonZkEvmTestnet,\n\t\tpulsechain,\n\t\tpulsechainV4,\n\t\trollux,\n\t\tronin,\n\t\tscroll,\n\t\tscrollSepolia,\n\t\tskaleBlockBrawlers,\n\t\tskaleCalypso,\n\t\tskaleCalypsoTestnet,\n\t\tskaleCryptoBlades,\n\t\tskaleCryptoColosseum,\n\t\tskaleEuropa,\n\t\tskaleEuropaTestnet,\n\t\tskaleExorde,\n\t\tskaleHumanProtocol,\n\t\tskaleNebula,\n\t\tskaleNebulaTestnet,\n\t\tskaleRazor,\n\t\tskaleTitan,\n\t\tskaleTitanTestnet,\n\t\tsongbird,\n\t\tsyscoin,\n\t\ttaraxa,\n\t\ttelos,\n\t\ttelosTestnet,\n\t\tthunderTestnet,\n\t\twanchain,\n\t\twanchainTestnet,\n\t\tzhejiang,\n\t\tzkSync,\n\t\tzora,\n\t\tzoraTestnet,\n\t],\n\ttransports: {\n\t\t[mainnet.id]: http(),\n\t\t[sepolia.id]: http(),\n\t\t[goerli.id]: http(),\n\t\t[arbitrum.id]: http(),\n\t\t[arbitrumGoerli.id]: http(),\n\t\t[arbitrumNova.id]: http(),\n\t\t[arbitrumSepolia.id]: http(),\n\t\t[aurora.id]: http(),\n\t\t[auroraTestnet.id]: http(),\n\t\t[avalanche.id]: http(),\n\t\t[avalancheFuji.id]: http(),\n\t\t[base.id]: http(),\n\t\t[baseGoerli.id]: http(),\n\t\t[baseSepolia.id]: http(),\n\t\t[bsc.id]: http(),\n\t\t[bscTestnet.id]: http(),\n\t\t[celo.id]: http(),\n\t\t[celoAlfajores.id]: http(),\n\t\t[classic.id]: http(),\n\t\t[cronos.id]: http(),\n\t\t[crossbell.id]: http(),\n\t\t[evmos.id]: http(),\n\t\t[evmosTestnet.id]: http(),\n\t\t[fantom.id]: http(),\n\t\t[fantomTestnet.id]: http(),\n\t\t[filecoin.id]: http(),\n\t\t[filecoinCalibration.id]: http(),\n\t\t[filecoinHyperspace.id]: http(),\n\t\t[gnosis.id]: http(),\n\t\t[gnosisChiado.id]: http(),\n\t\t[harmonyOne.id]: http(),\n\t\t[holesky.id]: http(),\n\t\t[localhost.id]: http(),\n\t\t[metis.id]: http(),\n\t\t[metisGoerli.id]: http(),\n\t\t[moonbeam.id]: http(),\n\t\t[moonbaseAlpha.id]: http(),\n\t\t[moonriver.id]: http(),\n\t\t[okc.id]: http(),\n\t\t[optimism.id]: http(),\n\t\t[optimismGoerli.id]: http(),\n\t\t[optimismSepolia.id]: http(),\n\t\t[polygon.id]: http(),\n\t\t[polygonMumbai.id]: http(),\n\t\t[polygonZkEvm.id]: http(),\n\t\t[polygonZkEvmTestnet.id]: http(),\n\t\t[pulsechain.id]: http(),\n\t\t[pulsechainV4.id]: http(),\n\t\t[rollux.id]: http(),\n\t\t[ronin.id]: http(),\n\t\t[scroll.id]: http(),\n\t\t[scrollSepolia.id]: http(),\n\t\t[skaleBlockBrawlers.id]: http(),\n\t\t[skaleCalypso.id]: http(),\n\t\t[skaleCalypsoTestnet.id]: http(),\n\t\t[skaleCryptoBlades.id]: http(),\n\t\t[skaleCryptoColosseum.id]: http(),\n\t\t[skaleEuropa.id]: http(),\n\t\t[skaleEuropaTestnet.id]: http(),\n\t\t[skaleExorde.id]: http(),\n\t\t[skaleHumanProtocol.id]: http(),\n\t\t[skaleNebula.id]: http(),\n\t\t[skaleNebulaTestnet.id]: http(),\n\t\t[skaleRazor.id]: http(),\n\t\t[skaleTitan.id]: http(),\n\t\t[skaleTitanTestnet.id]: http(),\n\t\t[songbird.id]: http(),\n\t\t[syscoin.id]: http(),\n\t\t[taraxa.id]: http(),\n\t\t[telos.id]: http(),\n\t\t[telosTestnet.id]: http(),\n\t\t[thunderTestnet.id]: http(),\n\t\t[wanchain.id]: http(),\n\t\t[wanchainTestnet.id]: http(),\n\t\t[zhejiang.id]: http(),\n\t\t[zkSync.id]: http(),\n\t\t[zora.id]: http(),\n\t},\n});\n\ntype WagmiWrapperProps = {\n\tchildren: ReactNode;\n};\n\nexport const WagmiWrapper: React.FC<WagmiWrapperProps> = ({ children }) => {\n\t// const [queryClient] = React.useState(() => new QueryClient());\n\n\tReact.useEffect(() => {\n\t\tsetTimeout(() => {});\n\t}, []);\n\n\treturn <WagmiProvider config={config}>{children}</WagmiProvider>;\n};\n","import { useMoonAuth } from \"@/context\";\n// useAuth.ts\nimport type {\n\tAuthenticationResponseJSON,\n\tPublicKeyCredentialCreationOptionsJSON,\n\tPublicKeyCredentialRequestOptionsJSON,\n\tRegistrationResponseJSON,\n} from \"@simplewebauthn/typescript-types\";\nimport type { AuthSession as Session } from \"@supabase/supabase-js\";\nimport { useCallback } from \"react\";\nimport type { SiweMessage } from \"siwe\";\n\n/**\n * Custom hook to handle authentication using MoonSDK.\n *\n * @returns {object} - An object containing authentication methods and state.\n *\n * @throws {Error} - Throws an error if MoonSDK is not initialized.\n *\n * @property {boolean} isAuthenticated - State indicating if the user is authenticated.\n * @property {function} connect - Connects to the authentication service using access and refresh tokens.\n * @property {function} signUpWithEmail - Signs up a user using email and password.\n * @property {function} signInWithEmail - Signs in a user using email and password.\n * @property {function} signInAnonymously - Signs in a user anonymously.\n * @property {function} signInWithOAuth - Signs in a user using OAuth providers (google, github, discord).\n * @property {function} initiatePasskeyRegistration - Initiates passkey registration for a user.\n * @property {function} completePasskeyRegistration - Completes passkey registration for a user.\n * @property {function} initiatePasskeyLogin - Initiates passkey login for a user.\n * @property {function} completePasskeyLogin - Completes passkey login for a user.\n * @property {function} getSIWENonce - Retrieves a nonce for Sign-In with Ethereum (SIWE).\n * @property {function} verifySIWESignature - Verifies a SIWE signature.\n * @property {function} sendMagicLink - Sends a magic link to the user's email.\n * @property {function} getUserSession - Retrieves the current user session.\n * @property {function} logout - Logs out the current user.\n * @property {function} createEmbeddedAccount - Creates an embedded account for a user.\n * @property {function} getSession - Retrieves the current user session.\n */\nexport const useAuth = () => {\n\tconst { moon, connect: MoonConnect } = useMoonAuth();\n\n\tif (!moon) throw new Error(\"MoonSDK not initialized\");\n\n\t/**\n\t * Retrieves the current user session.\n\t *\n\t * This function uses the `moon.auth.getUserSession` method to fetch the user session.\n\t * It is memoized using `useCallback` to ensure that the function reference remains stable\n\t * across re-renders, only changing when the `moon` dependency changes.\n\t *\n\t * @returns {Promise<Session | null>} A promise that resolves to the current user session or null if no session exists.\n\t */\n\tconst getSession = useCallback(async (): Promise<Session | null> => {\n\t\treturn await moon.auth.getUserSession();\n\t}, [moon]);\n\n\t/**\n\t * Connects to the authentication service using the provided access and refresh tokens.\n\t *\n\t * @param {string} [accessToken] - The access token to use for authentication.\n\t * @param {string} [refreshToken] - The refresh token to use for authentication.\n\t * @returns {Promise<Session>} A promise that resolves when the connection is established.\n\t */\n\tconst connect = useCallback(\n\t\tasync (accessToken?: string, refreshToken?: string): Promise<Session> => {\n\t\t\treturn await moon.auth.connect(accessToken, refreshToken);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Signs up a user using their email and password.\n\t *\n\t * @param email - The email address of the user.\n\t * @param password - The password for the user's account.\n\t * @returns A promise that resolves to a Session object if the sign-up is successful, or null if it fails.\n\t */\n\tconst signUpWithEmail = useCallback(\n\t\tasync (email: string, password: string): Promise<Session | null> => {\n\t\t\tconst session = await moon.auth.signUpWithEmail(email, password);\n\t\t\treturn session;\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Signs in a user using their email and password.\n\t *\n\t * @param email - The email address of the user.\n\t * @param password - The password of the user.\n\t * @returns A promise that resolves to a `Session` object if the sign-in is successful, or `null` if it fails.\n\t */\n\tconst signInWithEmail = useCallback(\n\t\tasync (email: string, password: string): Promise<Session | null> => {\n\t\t\tconst session = await moon.auth.signInWithEmail(email, password);\n\t\t\treturn session;\n\t\t},\n\t\t[moon],\n\t);\n\t/**\n\t * Signs in a user anonymously using the moon authentication service.\n\t *\n\t * @returns {Promise<Session | null>} A promise that resolves to the session object if the sign-in is successful, or null if it fails.\n\t */\n\tconst signInAnonymously = useCallback(async (): Promise<Session | null> => {\n\t\tconst session = await moon.auth.signInAnonymously();\n\t\treturn session;\n\t}, [moon]);\n\n\t/**\n\t * Signs in a user using OAuth with the specified provider.\n\t *\n\t * @param provider - The OAuth provider to use for signing in. Can be 'google', 'github', or 'discord'.\n\t * @returns A promise that resolves when the sign-in process is complete.\n\t */\n\tconst signInWithOAuth = useCallback(\n\t\tasync (provider: \"google\" | \"github\" | \"discord\"): Promise<void> => {\n\t\t\tawait moon.auth.signInWithOAuth(provider);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Initiates the passkey registration process for a given email.\n\t *\n\t * @param {string} email - The email address to register the passkey for.\n\t * @returns {Promise<PublicKeyCredentialCreationOptionsJSON>} A promise that resolves to the public key credential creation options.\n\t */\n\tconst initiatePasskeyRegistration = useCallback(\n\t\tasync (email: string): Promise<PublicKeyCredentialCreationOptionsJSON> => {\n\t\t\treturn await moon.auth.initiatePasskeyRegistration(email);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Completes the passkey registration process for a given email.\n\t *\n\t * @param email - The email address associated with the registration.\n\t * @param credential - The registration response JSON containing the credential information.\n\t * @param options - The public key credential creation options JSON.\n\t * @returns A promise that resolves when the registration is complete.\n\t */\n\tconst completePasskeyRegistration = useCallback(\n\t\tasync (\n\t\t\temail: string,\n\t\t\tcredential: RegistrationResponseJSON,\n\t\t\toptions: PublicKeyCredentialCreationOptionsJSON,\n\t\t): Promise<void> => {\n\t\t\tawait moon.auth.completePasskeyRegistration(email, credential, options);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Initiates the passkey login process for the given email.\n\t *\n\t * @param email - The email address of the user attempting to log in.\n\t * @returns A promise that resolves to a `PublicKeyCredentialRequestOptionsJSON` object.\n\t */\n\tconst initiatePasskeyLogin = useCallback(\n\t\tasync (email: string): Promise<PublicKeyCredentialRequestOptionsJSON> => {\n\t\t\treturn await moon.auth.initiatePasskeyLogin(email);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Completes the passkey login process using the provided email and credential.\n\t *\n\t * @param email - The email address of the user attempting to log in.\n\t * @param credential - The authentication response JSON containing the credential information.\n\t * @returns A promise that resolves to a Session object upon successful authentication.\n\t */\n\tconst completePasskeyLogin = useCallback(\n\t\tasync (\n\t\t\temail: string,\n\t\t\tcredential: AuthenticationResponseJSON,\n\t\t): Promise<Session> => {\n\t\t\tconst session = await moon.auth.completePasskeyLogin(email, credential);\n\t\t\tawait MoonConnect(session.access_token, session.refresh_token);\n\n\t\t\treturn session;\n\t\t},\n\t\t[moon, MoonConnect],\n\t);\n\n\t/**\n\t * Retrieves a Sign-In with Ethereum (SIWE) nonce for the specified address.\n\t *\n\t * @param {string} address - The Ethereum address for which to get the SIWE nonce.\n\t * @returns {Promise<string>} A promise that resolves to the SIWE nonce.\n\t */\n\tconst getSIWENonce = useCallback(\n\t\tasync (address: string): Promise<string> => {\n\t\t\treturn await moon.auth.getSIWENonce(address);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Verifies the SIWE (Sign-In with Ethereum) signature and updates the authentication state.\n\t *\n\t * @param address - The Ethereum address of the user.\n\t * @param signedMessage - The signed message from the user.\n\t * @param nonce - The nonce used in the SIWE message.\n\t * @param message - The SIWE message object.\n\t * @returns A promise that resolves to a Session object upon successful verification.\n\t */\n\tconst verifySIWESignature = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tsignedMessage: string,\n\t\t\tnonce: string,\n\t\t\tmessage: SiweMessage,\n\t\t): Promise<Session> => {\n\t\t\tconst session = await moon.auth.verifySIWESignature(\n\t\t\t\taddress,\n\t\t\t\tsignedMessage,\n\t\t\t\tnonce,\n\t\t\t\tmessage,\n\t\t\t);\n\t\t\tawait MoonConnect(session.access_token, session.refresh_token);\n\t\t\treturn session;\n\t\t},\n\t\t[moon, MoonConnect],\n\t);\n\n\t/**\n\t * Sends a magic link to the specified email address for authentication.\n\t *\n\t * @param email - The email address to send the magic link to.\n\t * @param redirectTo - The URL to redirect to after the magic link is used.\n\t * @returns A promise that resolves when the magic link has been sent.\n\t */\n\tconst sendMagicLink = useCallback(\n\t\tasync (email: string, redirectTo: string): Promise<void> => {\n\t\t\tawait moon.auth.sendMagicLink(email, redirectTo);\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getUserSession = useCallback(async (): Promise<Session | null> => {\n\t\treturn await moon.auth.getUserSession();\n\t}, [moon]);\n\n\t/**\n\t * Logs out the current user by calling the `moon.auth.logout` method and updates the authentication state.\n\t *\n\t * @returns {Promise<void>} A promise that resolves when the logout process is complete.\n\t */\n\tconst logout = useCallback(async (): Promise<void> => {\n\t\tawait moon.auth.logout();\n\t}, [moon]);\n\n\t/**\n\t * Creates an embedded account using the provided email, uuid, and domain.\n\t *\n\t * @param email - The email address to associate with the new account.\n\t * @param uuid - The unique identifier for the new account.\n\t * @param domain - The domain associated with the new account.\n\t * @returns A promise that resolves to a Session object upon successful account creation.\n\t */\n\tconst createEmbeddedAccount = useCallback(\n\t\tasync (email: string, uuid: string, domain: string): Promise<Session> => {\n\t\t\tconst session = await moon.auth.createEmbeddedAccount(\n\t\t\t\temail,\n\t\t\t\tuuid,\n\t\t\t\tdomain,\n\t\t\t);\n\t\t\treturn session;\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\tconnect,\n\t\tsignUpWithEmail,\n\t\tsignInWithEmail,\n\t\tsignInAnonymously,\n\t\tsignInWithOAuth,\n\t\tinitiatePasskeyRegistration,\n\t\tcompletePasskeyRegistration,\n\t\tinitiatePasskeyLogin,\n\t\tcompletePasskeyLogin,\n\t\tgetSIWENonce,\n\t\tverifySIWESignature,\n\t\tsendMagicLink,\n\t\tgetUserSession,\n\t\tlogout,\n\t\tcreateEmbeddedAccount,\n\t\tgetSession,\n\t};\n};\n","// useOAuth2.ts\nimport { useMoonSDK } from '@/hooks';\nimport { AuthSession as Session } from '@supabase/supabase-js';\nimport { useCallback, useState } from 'react';\n\nexport type OAuthProvider = 'discord' | 'github' | 'google' | 'twitter';\n\n/**\n * Represents an OAuth token object.\n *\n * @interface OAuthToken\n *\n * @property {string} access_token - The access token provided by the OAuth provider.\n * @property {string} refresh_token - The refresh token provided by the OAuth provider.\n * @property {any} [key: string] - Any additional fields returned by the OAuth provider.\n */\nexport interface OAuthToken {\n  access_token: string;\n  refresh_token: string;\n  [key: string]: any;\n}\n\n/**\n * Represents an error that occurs during an OAuth2 authentication process.\n *\n * @interface OAuthError\n * @property {string} method - The method where the error occurred.\n * @property {Error} error - The error object containing details about the error.\n * @property {string} provider - The OAuth2 provider where the error occurred.\n */\nexport interface OAuthError {\n  method: string;\n  error: Error;\n  provider: string;\n}\n\n/**\n * Custom hook to handle OAuth2 authentication using MoonSDK.\n *\n * @returns {Object} An object containing various OAuth2 related methods and state.\n * @throws {Error} If MoonSDK is not initialized.\n *\n * @function\n * @name useOAuth2\n *\n * @property {boolean} isAuthenticated - State indicating if the user is authenticated.\n * @property {function} initiateOAuth - Function to initiate OAuth process with a given provider.\n * @property {function} exchangeCodeForToken - Function to exchange authorization code for an OAuth token.\n * @property {function} performOAuth - Function to perform OAuth process with a given provider.\n * @property {function} handleOAuthCallback - Function to handle OAuth callback and retrieve session.\n * @property {function} getSession - Function to get the current user session.\n * @property {function} logout - Function to log out the user.\n */\nexport const useOAuth2 = () => {\n  const { moon } = useMoonSDK();\n  const [isAuthenticated, setIsAuthenticated] = useState<boolean>(false);\n\n  if (!moon) throw new Error('MoonSDK not initialized');\n\n  /**\n   * Initiates the OAuth2 authentication process for the specified provider.\n   *\n   * @param provider - The OAuth provider to use for authentication.\n   * @returns void\n   */\n  const initiateOAuth = useCallback(\n    (provider: OAuthProvider): void => {\n      moon.getOAuth2Service().initiateOAuth(provider);\n    },\n    [moon]\n  );\n\n  /**\n   * Exchanges an authorization code for an OAuth token.\n   *\n   * @param provider - The OAuth provider (e.g., 'google', 'facebook').\n   * @param code - The authorization code received from the OAuth provider.\n   * @returns A promise that resolves to an `OAuthToken` object.\n   * @throws Will throw an error if the token exchange fails.\n   */\n  const exchangeCodeForToken = useCallback(\n    async (provider: OAuthProvider, code: string): Promise<OAuthToken> => {\n      try {\n        const token = await moon\n          .getOAuth2Service()\n          .exchangeCodeForToken(provider, code);\n        setIsAuthenticated(true);\n        return token;\n      } catch (error) {\n        throw error;\n      }\n    },\n    [moon]\n  );\n\n  /**\n   * Performs OAuth authentication using the specified provider.\n   *\n   * @param provider - The OAuth provider to use for authentication.\n   * @returns A promise that resolves when the authentication process is complete.\n   */\n  const performOAuth = useCallback(\n    async (provider: OAuthProvider): Promise<void> => {\n      await moon.getOAuth2Service().performOAuth(provider);\n    },\n    [moon]\n  );\n\n  /**\n   * Handles the OAuth callback by processing the provider and code, and returns a session.\n   *\n   * @param provider - The OAuth provider (e.g., 'google', 'facebook').\n   * @param code - The authorization code received from the OAuth provider.\n   * @returns A promise that resolves to a Session object.\n   * @throws Will throw an error if the OAuth callback handling fails.\n   */\n  const handleOAuthCallback = useCallback(\n    async (provider: OAuthProvider, code: string): Promise<OAuthToken> => {\n      try {\n        const session = await moon\n          .getOAuth2Service()\n          .handleOAuthCallback(provider, code);\n        setIsAuthenticated(true);\n        return session;\n      } catch (error) {\n        throw error;\n      }\n    },\n    [moon]\n  );\n\n  const getSession = useCallback(async (): Promise<Session | null> => {\n    return await moon.auth.getUserSession();\n  }, [moon]);\n\n  const logout = useCallback(async (): Promise<void> => {\n    await moon.auth.logout();\n    setIsAuthenticated(false);\n  }, [moon]);\n\n  // Event listeners\n  useCallback(() => {\n    const onOAuthCompleted = (data: {\n      provider: string;\n      token: OAuthToken;\n    }) => {\n      setIsAuthenticated(true);\n      // Handle successful OAuth completion\n      console.log('OAuth completed:', data);\n    };\n\n    const onError = (error: OAuthError) => {\n      // Handle OAuth errors\n      console.error('OAuth error:', error);\n    };\n\n    moon.on('oauthCompleted', onOAuthCompleted);\n    moon.on('error', onError);\n\n    return () => {\n      moon.off('oauthCompleted', onOAuthCompleted);\n      moon.off('error', onError);\n    };\n  }, [moon]);\n\n  return {\n    isAuthenticated,\n    initiateOAuth,\n    exchangeCodeForToken,\n    performOAuth,\n    handleOAuthCallback,\n    getSession,\n    logout,\n  };\n};\n","import { useMoonTransaction } from \"@/hooks\";\nimport type { Erc1155, InputBody, Transaction } from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\nimport { useMoonAuth } from \"../../context\";\n\n/**\n * Custom hook to interact with ERC-1155 contracts using the Moon SDK.\n *\n * @returns {Object} An object containing the following functions:\n * - `balanceOfErc1155`: A function to get the balance of an ERC-1155 token for a given account.\n * - `safeTransferFromErc1155`: A function to safely transfer an ERC-1155 token from one account to another.\n *\n * @throws {Error} If the Moon SDK is not initialized.\n *\n * @example\n * const { balanceOfErc1155, safeTransferFromErc1155 } = useErc1155();\n *\n * // Get balance of ERC-1155 token\n * const balance = await balanceOfErc1155({ accountName: '0x123...', transaction: {...} });\n *\n * // Transfer ERC-1155 token\n * const transaction = await safeTransferFromErc1155({ accountName: '0x123...', transaction: {...} });\n */\nexport const useErc1155 = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst { switchChain } = useSwitchChain();\n\tconst chainId = useChainId();\n\n\tconst prepareTransaction = (account: string, transaction: InputBody) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\tconst getErc1155SDK = (): Erc1155 => {\n\t\tconst erc1155SDK = moon?.getErc1155SDK();\n\t\tif (!erc1155SDK) throw new Error(\"Moon SDK not initialized\");\n\t\treturn erc1155SDK;\n\t};\n\n\t/**\n\t * Retrieves the balance of an ERC-1155 token for a given account.\n\t *\n\t * @param payload - The payload containing the account name and transaction details.\n\t * @param payload.accountName - The name of the account to query the balance for.\n\t * @param payload.transaction - The transaction details required for the balance query.\n\t * @returns A promise that resolves to an object containing the balance as a string.\n\t */\n\tconst balanceOfErc1155 = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\ttransaction: InputBody;\n\t\t}): Promise<{ balance: string }> => {\n\t\t\treturn handleTransaction(\"balanceOfErc1155\", async () => {\n\t\t\t\tconst erc1155SDK = getErc1155SDK();\n\t\t\t\tconst response = await erc1155SDK.erc1155Erc1155BalanceOf(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Executes a safe transfer of ERC-1155 tokens from one account to another.\n\t *\n\t * @param payload - The payload containing the account name and transaction details.\n\t * @param payload.accountName - The name of the account initiating the transfer.\n\t * @param payload.transaction - The transaction details for the transfer.\n\t * @returns A promise that resolves to the transaction result.\n\t */\n\tconst safeTransferFromErc1155 = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\ttransaction: InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"safeTransferFromErc1155\", async () => {\n\t\t\t\tconst erc1155SDK = getErc1155SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\tconst response = await erc1155SDK.erc1155Erc1155SafeTransferFrom(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\treturn {\n\t\tbalanceOfErc1155,\n\t\tsafeTransferFromErc1155,\n\t};\n};\n","import { BigNumber } from \"@ethersproject/bignumber\";\nimport { type BigNumberish, formatUnits, parseUnits } from \"ethers\";\n/**\n * Convert a BigInt to an int - useful when you are 'evolve'ing a response\n */\nexport const weiStringAsFloat = (\n\tnum: string | undefined,\n\tdecimalPoints = 18,\n) => {\n\tif (!num) return 0;\n\n\t// Convert num to BigNumber if it's not already\n\tconst bigNum = BigNumber.isBigNumber(num) ? num : BigNumber.from(num);\n\n\t// Use toString() to convert BigNumber to string, which is compatible with BigNumberish\n\treturn Number.parseFloat(formatUnits(bigNum.toString(), decimalPoints));\n};\n\nexport const bigNumAsInt = (num: BigNumberish) =>\n\tNumber.parseInt(num.toString());\n\nexport const weiBigNumAsFloat = (num: BigNumberish, decimalPoints = 18) =>\n\tNumber.parseFloat(formatUnits(num, decimalPoints));\n\nexport const safelyParseUnits = (num: string, decimalPoints = 18) => {\n\tif (!num) {\n\t\treturn parseUnits(\"0\", decimalPoints);\n\t}\n\tconst shortenedString = num.includes(\".\")\n\t\t? num.substring(0, num.indexOf(\".\") + decimalPoints + 1)\n\t\t: num;\n\n\treturn parseUnits(shortenedString, decimalPoints);\n};\n","import { useMoonTransaction } from \"@/hooks\";\nimport { safelyParseUnits, weiStringAsFloat } from \"@/utils/parse\";\nimport type {\n\tERC20InputBody,\n\tErc20,\n\tErc20GetErc20TokenAllowanceParams,\n\tErc20GetErc20TokenBalanceParams,\n\tErc20GetErc20TokenDecimalsParams,\n\tErc20GetErc20TokenNameParams,\n\tErc20GetErc20TokenSymbolParams,\n\tErc20GetErc20TokenTotalSupplyParams,\n\tTransaction,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\nimport { useMoonAuth } from \"../../context\";\n\n/**\n * Custom hook to interact with ERC20 tokens using the Moon SDK.\n *\n * @returns {Object} An object containing various functions to interact with ERC20 tokens:\n * - `approveErc20`: Approves a spender to spend a specified amount of tokens on behalf of the owner.\n * - `transferErc20`: Transfers tokens from the owner's account to another account.\n * - `transferFromErc20`: Transfers tokens from one account to another on behalf of the owner.\n * - `balanceOfErc20`: Retrieves the balance of tokens for a specified account.\n * - `allowanceErc20`: Retrieves the allowance of tokens that a spender is allowed to spend on behalf of the owner.\n * - `approveTokenSpendIfNeeded`: Approves token spend if the current allowance is less than the specified amount.\n * - `getDecimalsErc20`: Retrieves the number of decimals used by the token.\n * - `getNameErc20`: Retrieves the name of the token.\n * - `getSymbolErc20`: Retrieves the symbol of the token.\n * - `getTotalSupplyErc20`: Retrieves the total supply of the token.\n */\nexport const useErc20 = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst { switchChain } = useSwitchChain();\n\tconst chainId = useChainId();\n\n\tconst getErc20SDK = (): Erc20 => {\n\t\tconst erc20SDK = moon?.getErc20SDK();\n\t\tif (!erc20SDK) throw new Error(\"Moon SDK not initialized\");\n\t\treturn erc20SDK;\n\t};\n\n\tconst prepareTransaction = (account: string, transaction: ERC20InputBody) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t\treturn transactionData;\n\t};\n\t/**\n\t * Approves token spend if needed.\n\t *\n\t * This function checks the current allowance of a token for a given spender and owner.\n\t * If the current allowance is less than the specified amount, it approves the token spend.\n\t *\n\t * @param owner - The address of the token owner.\n\t * @param spender - The address of the spender.\n\t * @param tokenAddress - The address of the token contract.\n\t * @param amountDecimal - The amount to be approved in decimal format.\n\t * @param chainId - The chain ID where the token contract is deployed.\n\t * @returns A promise that resolves when the approval transaction is completed or rejects with an error.\n\t */\n\tconst approveTokenSpendIfNeeded = async (\n\t\towner: string,\n\t\tspender: string,\n\t\ttokenAddress: string,\n\t\tamountDecimal: number,\n\t\tchainId: string,\n\t) => {\n\t\ttry {\n\t\t\tconst allowance = await allowanceErc20({\n\t\t\t\taccount: owner,\n\t\t\t\taddress: tokenAddress,\n\t\t\t\towner: owner,\n\t\t\t\tspender: spender,\n\t\t\t\tchainId: chainId,\n\t\t\t});\n\t\t\tconst currAllowance = weiStringAsFloat(allowance);\n\t\t\tif (currAllowance < amountDecimal) {\n\t\t\t\tawait approveErc20({\n\t\t\t\t\taccountName: owner,\n\t\t\t\t\ttransaction: {\n\t\t\t\t\t\tto: spender,\n\t\t\t\t\t\tamount: safelyParseUnits(amountDecimal.toString()).toString(),\n\t\t\t\t\t\tcontract_address: tokenAddress,\n\t\t\t\t\t\tchain_id: chainId,\n\t\t\t\t\t\tbroadcast: true,\n\t\t\t\t\t\tvalue: \"0\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"approveTokenSpendIfNeeded: Error: \", error);\n\t\t\treturn error;\n\t\t}\n\t};\n\n\t/**\n\t * Approves an ERC20 transaction.\n\t *\n\t * @param payload - The payload containing the account name and transaction details.\n\t * @param payload.accountName - The name of the account initiating the transaction.\n\t * @param payload.transaction - The transaction details conforming to the ERC20InputBody interface.\n\t * @returns A promise that resolves to a Transaction object.\n\t */\n\tconst approveErc20 = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\ttransaction: ERC20InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"approveErc20\", async () => {\n\t\t\t\tconst erc20SDK = getErc20SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\tconst response = await erc20SDK.erc20ApproveErc20TokenSpending(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected],\n\t);\n\n\t/**\n\t * Transfers ERC20 tokens using the provided account name and transaction details.\n\t *\n\t * @param payload - The payload containing the account name and transaction details.\n\t * @param payload.accountName - The name of the account initiating the transfer.\n\t * @param payload.transaction - The transaction details for the ERC20 transfer.\n\t * @returns A promise that resolves to the transaction details.\n\t */\n\tconst transferErc20 = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\ttransaction: ERC20InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"transferErc20\", async () => {\n\t\t\t\tconst erc20SDK = getErc20SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\tconst response = await erc20SDK.erc20TransferErc20Token(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Transfers ERC20 tokens from one account to another.\n\t *\n\t * @param payload - The payload containing the account name and transaction details.\n\t * @param payload.accountName - The name of the account initiating the transfer.\n\t * @param payload.transaction - The transaction details for the ERC20 transfer.\n\t * @returns A promise that resolves to the transaction details.\n\t */\n\tconst transferFromErc20 = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\ttransaction: ERC20InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"transferFromErc20\", async () => {\n\t\t\t\tconst erc20SDK = getErc20SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\tconst response = await erc20SDK.erc20TransferFromErc20Token(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Fetches the balance of an ERC-20 token for a given address.\n\t *\n\t * @param payload - The parameters required to get the balance, including the token address and the user's address.\n\t * @returns A promise that resolves to an object containing the balance as a string.\n\t * @throws Will throw an error if the transaction fails or if the response indicates failure.\n\t */\n\tconst balanceOfErc20 = useCallback(\n\t\tasync (\n\t\t\tpayload: Erc20GetErc20TokenBalanceParams,\n\t\t): Promise<{ balance: string }> => {\n\t\t\treturn handleTransaction(\"balanceOfErc20\", async () => {\n\t\t\t\tconst erc20SDK = getErc20SDK();\n\t\t\t\tconst response = await erc20SDK.erc20GetErc20TokenBalance(payload);\n\t\t\t\tif (!response.success) {\n\t\t\t\t\tthrow new Error(response.message);\n\t\t\t\t}\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Asynchronously retrieves the allowance of an ERC-20 token.\n\t *\n\t * @param {GetAllowanceParams} payload - The parameters required to get the allowance.\n\t * @returns {Promise<string>} A promise that resolves to the allowance amount as a string.\n\t *\n\t * @example\n\t * const allowance = await allowanceErc20({ owner: '0x...', spender: '0x...' });\n\t * console.log(`Allowance: ${allowance}`);\n\t */\n\tconst allowanceErc20 = useCallback(\n\t\tasync (payload: Erc20GetErc20TokenAllowanceParams): Promise<string> => {\n\t\t\treturn handleTransaction(\"allowanceErc20\", async () => {\n\t\t\t\tconst erc20SDK = getErc20SDK();\n\t\t\t\tconst response = await erc20SDK.erc20GetErc20TokenAllowance(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the number of decimals for an ERC-20 token.\n\t *\n\t * @param payload - The parameters required to get the decimals, encapsulated in a `GetDecimalsParams` object.\n\t * @returns A promise that resolves to the number of decimals for the specified ERC-20 token.\n\t */\n\tconst getDecimalsErc20 = useCallback(\n\t\tasync (payload: Erc20GetErc20TokenDecimalsParams): Promise<number> => {\n\t\t\treturn handleTransaction(\"getDecimalsErc20\", async () => {\n\t\t\t\tconst erc20SDK = getErc20SDK();\n\t\t\t\tconst response = await erc20SDK.erc20GetErc20TokenDecimals(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the name of an ERC-20 token.\n\t *\n\t * @param payload - The parameters required to get the name of the ERC-20 token.\n\t * @returns A promise that resolves to the name of the ERC-20 token as a string.\n\t *\n\t * @example\n\t * ```typescript\n\t * const name = await getNameErc20({ contractAddress: '0x...' });\n\t * console.log(name); // Outputs the name of the ERC-20 token\n\t * ```\n\t */\n\tconst getNameErc20 = useCallback(\n\t\tasync (payload: Erc20GetErc20TokenNameParams): Promise<string> => {\n\t\t\treturn handleTransaction(\"getNameErc20\", async () => {\n\t\t\t\tconst erc20SDK = getErc20SDK();\n\t\t\t\tconst response = await erc20SDK.erc20GetErc20TokenName(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the symbol of an ERC20 token.\n\t *\n\t * @param {GetSymbolParams} payload - The parameters required to get the symbol of the ERC20 token.\n\t * @returns {Promise<string>} A promise that resolves to the symbol of the ERC20 token.\n\t *\n\t * @example\n\t * ```typescript\n\t * const symbol = await getSymbolErc20({ contractAddress: '0x...' });\n\t * console.log(symbol); // Outputs the symbol of the ERC20 token\n\t * ```\n\t */\n\tconst getSymbolErc20 = useCallback(\n\t\tasync (payload: Erc20GetErc20TokenSymbolParams): Promise<string> => {\n\t\t\treturn handleTransaction(\"getSymbolErc20\", async () => {\n\t\t\t\tconst erc20SDK = getErc20SDK();\n\t\t\t\tconst response = await erc20SDK.erc20GetErc20TokenSymbol(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the total supply of an ERC-20 token.\n\t *\n\t * @param payload - The parameters required to get the total supply.\n\t * @returns A promise that resolves to a string representing the total supply of the ERC-20 token.\n\t *\n\t * @example\n\t * ```typescript\n\t * const totalSupply = await getTotalSupplyErc20({ contractAddress: '0x...' });\n\t * console.log(totalSupply);\n\t * ```\n\t */\n\tconst getTotalSupplyErc20 = useCallback(\n\t\tasync (payload: Erc20GetErc20TokenTotalSupplyParams): Promise<string> => {\n\t\t\treturn handleTransaction(\"getTotalSupplyErc20\", async () => {\n\t\t\t\tconst erc20SDK = getErc20SDK();\n\t\t\t\tconst response = await erc20SDK.erc20GetErc20TokenTotalSupply(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\tapproveErc20,\n\t\ttransferErc20,\n\t\ttransferFromErc20,\n\t\tbalanceOfErc20,\n\t\tallowanceErc20,\n\t\tapproveTokenSpendIfNeeded,\n\t\tgetDecimalsErc20,\n\t\tgetNameErc20,\n\t\tgetSymbolErc20,\n\t\tgetTotalSupplyErc20,\n\t};\n};\n","import { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tErc4626,\n\tErc4626GetErc4626AllowanceData,\n\tErc4626GetErc4626AllowanceParams,\n\tErc4626GetErc4626AssetData,\n\tErc4626GetErc4626AssetParams,\n\tErc4626GetErc4626ConvertToAssetsData,\n\tErc4626GetErc4626ConvertToAssetsParams,\n\tErc4626GetErc4626ConvertToSharesData,\n\tErc4626GetErc4626ConvertToSharesParams,\n\tErc4626GetErc4626MaxDepositData,\n\tErc4626GetErc4626MaxDepositParams,\n\tErc4626GetErc4626MaxMintData,\n\tErc4626GetErc4626MaxMintParams,\n\tErc4626GetErc4626MaxRedeemData,\n\tErc4626GetErc4626MaxRedeemParams,\n\tErc4626GetErc4626MaxWithdrawData,\n\tErc4626GetErc4626MaxWithdrawParams,\n\tErc4626GetErc4626PreviewDepositData,\n\tErc4626GetErc4626PreviewDepositParams,\n\tErc4626GetErc4626PreviewMintData,\n\tErc4626GetErc4626PreviewMintParams,\n\tErc4626GetErc4626PreviewRedeemData,\n\tErc4626GetErc4626PreviewRedeemParams,\n\tErc4626GetErc4626PreviewWithdrawData,\n\tErc4626GetErc4626PreviewWithdrawParams,\n\tErc4626GetErc4626TotalAssetsData,\n\tErc4626GetErc4626TotalAssetsParams,\n\tErc4626GetErc4626TotalSupplyData,\n\tErc4626GetErc4626TotalSupplyParams,\n\tInputBody,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\nimport { useMoonAuth } from \"../../context\";\n\n/**\n * Custom hook to interact with ERC-4626 contracts using the Moon SDK.\n *\n * @returns {Object} An object containing various methods to interact with ERC-4626 contracts:\n * - `approve`: Approves a specified address to spend tokens.\n * - `deposit`: Deposits tokens into the ERC-4626 contract.\n * - `getAllowance`: Retrieves the allowance of a specified address.\n * - `getAsset`: Retrieves asset information.\n * - `getBalanceOf`: Retrieves the balance of a specified address.\n * - `getConvertToAssets`: Converts shares to assets.\n * - `getConvertToShares`: Converts assets to shares.\n * - `getMaxDeposit`: Retrieves the maximum deposit amount.\n * - `getMaxMint`: Retrieves the maximum mint amount.\n * - `getMaxRedeem`: Retrieves the maximum redeem amount.\n * - `getMaxWithdraw`: Retrieves the maximum withdraw amount.\n * - `getPreviewDeposit`: Previews the deposit amount.\n * - `getPreviewMint`: Previews the mint amount.\n * - `getPreviewRedeem`: Previews the redeem amount.\n * - `getPreviewWithdraw`: Previews the withdraw amount.\n * - `getTotalAssets`: Retrieves the total assets.\n * - `getTotalSupply`: Retrieves the total supply.\n * - `mint`: Mints new tokens.\n * - `redeem`: Redeems tokens.\n * - `transfer`: Transfers tokens to a specified address.\n * - `transferFrom`: Transfers tokens from a specified address.\n * - `withdraw`: Withdraws tokens from the ERC-4626 contract.\n */\nexport const useErc4626 = () => {\n\tconst { moon } = useMoonAuth();\n\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\n\tconst getErc4626SDK = (): Erc4626 => {\n\t\tconst erc4626SDK = moon?.getErc4626SDK();\n\t\tif (!erc4626SDK) throw new Error(\"Moon SDK not initialized\");\n\t\treturn erc4626SDK;\n\t};\n\n\t/**\n\t * Approves a transaction for the ERC-4626 contract.\n\t *\n\t * @param {string} address - The address to approve the transaction for.\n\t * @param {InputBody} data - The input data required for the approval.\n\t * @returns {Promise<ApproveResult>} - A promise that resolves to the result of the approval.\n\t */\n\tconst approve = useCallback(\n\t\tasync (address: string, data: InputBody) => {\n\t\t\treturn handleTransaction(\"approveErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(address, data);\n\t\t\t\tconst response = await erc4626SDK.erc4626ApproveErc4626(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst prepareTransaction = (account: string, transaction: InputBody) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\t/**\n\t * Deposits data into an ERC-4626 contract.\n\t *\n\t * @param {string} address - The address of the ERC-4626 contract.\n\t * @param {InputBody} data - The data to be deposited.\n\t * @returns {Promise<DepositData>} A promise that resolves to the deposit data.\n\t */\n\tconst deposit = useCallback(\n\t\tasync (address: string, data: InputBody) => {\n\t\t\treturn handleTransaction(\"depositErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(address, data);\n\t\t\t\tconst response = await erc4626SDK.erc4626DepositToErc4626(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Retrieves the allowance for a given set of parameters using the ERC-4626 SDK.\n\t *\n\t * @param {GetAllowanceParams2} params - The parameters required to get the allowance.\n\t * @returns {Promise<GetAllowanceResult>} A promise that resolves to the allowance result.\n\t *\n\t * @example\n\t * const params = { /* parameters here *\\/ };\n\t * const allowance = await getAllowance(params);\n\t */\n\tconst getAllowance = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626AllowanceParams,\n\t\t): Promise<Erc4626GetErc4626AllowanceData> => {\n\t\t\treturn handleTransaction(\"getAllowanceErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response = await erc4626SDK.erc4626GetErc4626Allowance(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves asset data using the ERC-4626 SDK.\n\t *\n\t * @param {GetAssetParams} params - The parameters required to fetch the asset data.\n\t * @returns {Promise<GetAssetData>} A promise that resolves to the asset data.\n\t *\n\t * @example\n\t * const assetData = await getAsset({ assetId: '123' });\n\t *\n\t * @remarks\n\t * This function uses the `handleTransaction` utility to manage the transaction process.\n\t * It relies on the `getErc4626SDK` function to obtain an instance of the ERC-4626 SDK.\n\t */\n\tconst getAsset = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626AssetParams,\n\t\t): Promise<Erc4626GetErc4626AssetData> => {\n\t\t\treturn handleTransaction(\"getAssetErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response = await erc4626SDK.erc4626GetErc4626Asset(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the balance of a specific ERC-4626 token for a given set of parameters.\n\t *\n\t * @param params - The parameters required to get the balance, encapsulated in a `GetBalanceOfParams2` object.\n\t * @returns A promise that resolves to a `GetBalanceOfResult` containing the balance data.\n\t *\n\t * @remarks\n\t * This function uses the `handleTransaction` utility to manage the transaction lifecycle and error handling.\n\t * It leverages the `erc4626SDK` to interact with the ERC-4626 token contract.\n\t *\n\t * @example\n\t * ```typescript\n\t * const params: GetBalanceOfParams2 = { /* parameters here *\\/ };\n\t * const balance = await getBalanceOf(params);\n\t * console.log(balance);\n\t * ```\n\t */\n\tconst getBalanceOf = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626AssetParams,\n\t\t): Promise<Erc4626GetErc4626AssetData> => {\n\t\t\treturn handleTransaction(\"getAssetErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response = await erc4626SDK.erc4626GetErc4626Asset(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the converted assets using the ERC-4626 SDK.\n\t *\n\t * @param params - The parameters required to get the converted assets.\n\t * @returns A promise that resolves to the data of the converted assets.\n\t *\n\t * @example\n\t * ```typescript\n\t * const params: GetConvertToAssetsParams = { /* parameters *\\/ };\n\t * const data = await getConvertToAssets(params);\n\t * console.log(data);\n\t * ```\n\t */\n\tconst getConvertToAssets = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626ConvertToAssetsParams,\n\t\t): Promise<Erc4626GetErc4626ConvertToAssetsData> => {\n\t\t\treturn handleTransaction(\"getConvertToAssetsErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait erc4626SDK.erc4626GetErc4626ConvertToAssets(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the conversion to shares data for the given parameters.\n\t *\n\t * @param params - The parameters required to get the conversion to shares data.\n\t * @returns A promise that resolves to the conversion to shares data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const params: GetConvertToSharesParams = { /* parameters *\\/ };\n\t * const data = await getConvertToShares(params);\n\t * console.log(data);\n\t * ```\n\t */\n\tconst getConvertToShares = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626ConvertToSharesParams,\n\t\t): Promise<Erc4626GetErc4626ConvertToSharesData> => {\n\t\t\treturn handleTransaction(\"getConvertToSharesErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait erc4626SDK.erc4626GetErc4626ConvertToShares(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the maximum deposit amount for an ERC-4626 contract.\n\t *\n\t * @param {GetMaxDepositParams} params - The parameters required to get the maximum deposit.\n\t * @returns {Promise<GetMaxDepositData>} A promise that resolves to the maximum deposit data.\n\t *\n\t * @example\n\t * const params = { /* parameters here *\\/ };\n\t * const maxDepositData = await getMaxDeposit(params);\n\t * console.log(maxDepositData);\n\t */\n\tconst getMaxDeposit = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626MaxDepositParams,\n\t\t): Promise<Erc4626GetErc4626MaxDepositData> => {\n\t\t\treturn handleTransaction(\"getMaxDepositErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response = await erc4626SDK.erc4626GetErc4626MaxDeposit(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the maximum amount of tokens that can be minted for a given set of parameters.\n\t *\n\t * @param {GetMaxMintParams} params - The parameters required to get the maximum mintable tokens.\n\t * @returns {Promise<GetMaxMintData>} A promise that resolves to the data containing the maximum mintable tokens.\n\t *\n\t * @example\n\t * const params = { /* parameters here *\\/ };\n\t * const maxMintData = await getMaxMint(params);\n\t * console.log(maxMintData);\n\t */\n\tconst getMaxMint = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626MaxMintParams,\n\t\t): Promise<Erc4626GetErc4626MaxMintData> => {\n\t\t\treturn handleTransaction(\"getMaxMintErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response = await erc4626SDK.erc4626GetErc4626MaxMint(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the maximum amount of tokens that can be redeemed from an ERC-4626 contract.\n\t *\n\t * @param {GetMaxRedeemParams} params - The parameters required to get the maximum redeemable amount.\n\t * @returns {Promise<GetMaxRedeemData>} A promise that resolves to the data containing the maximum redeemable amount.\n\t *\n\t * @example\n\t * const params = { /* parameters here *\\/ };\n\t * const maxRedeemData = await getMaxRedeem(params);\n\t * console.log(maxRedeemData);\n\t */\n\tconst getMaxRedeem = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626MaxRedeemParams,\n\t\t): Promise<Erc4626GetErc4626MaxRedeemData> => {\n\t\t\treturn handleTransaction(\"getMaxRedeemErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response = await erc4626SDK.erc4626GetErc4626MaxRedeem(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the maximum amount that can be withdrawn from an ERC-4626 contract.\n\t *\n\t * @param {GetMaxWithdrawParams} params - The parameters required to get the maximum withdrawable amount.\n\t * @returns {Promise<GetMaxWithdrawData>} A promise that resolves to the data containing the maximum withdrawable amount.\n\t *\n\t * @example\n\t * const params = { /* parameters here *\\/ };\n\t * const maxWithdrawData = await getMaxWithdraw(params);\n\t * console.log(maxWithdrawData);\n\t */\n\tconst getMaxWithdraw = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626MaxWithdrawParams,\n\t\t): Promise<Erc4626GetErc4626MaxWithdrawData> => {\n\t\t\treturn handleTransaction(\"getMaxWithdrawErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response = await erc4626SDK.erc4626GetErc4626MaxWithdraw(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches a preview of the deposit for ERC-4626 compliant tokens.\n\t *\n\t * @param params - The parameters required to get the preview deposit.\n\t * @returns A promise that resolves to the preview deposit data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const params: GetPreviewDepositParams = { /* parameters here *\\/ };\n\t * const previewData = await getPreviewDeposit(params);\n\t * console.log(previewData);\n\t * ```\n\t */\n\tconst getPreviewDeposit = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626PreviewDepositParams,\n\t\t): Promise<Erc4626GetErc4626PreviewDepositData> => {\n\t\t\treturn handleTransaction(\"getPreviewDepositErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait erc4626SDK.erc4626GetErc4626PreviewDeposit(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the preview mint data for ERC-4626 tokens.\n\t *\n\t * @param {GetPreviewMintParams} params - The parameters required to get the preview mint data.\n\t * @returns {Promise<GetPreviewMintData>} A promise that resolves to the preview mint data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const params: GetPreviewMintParams = { /* parameters here *\\/ };\n\t * const previewMintData = await getPreviewMint(params);\n\t * console.log(previewMintData);\n\t * ```\n\t */\n\tconst getPreviewMint = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626PreviewMintParams,\n\t\t): Promise<Erc4626GetErc4626PreviewMintData> => {\n\t\t\treturn handleTransaction(\"getPreviewMintErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response = await erc4626SDK.erc4626GetErc4626PreviewMint(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves a preview of the redeem operation for ERC-4626 tokens.\n\t *\n\t * @param {GetPreviewRedeemParams} params - The parameters required to get the preview redeem data.\n\t * @returns {Promise<GetPreviewRedeemData>} A promise that resolves to the preview redeem data.\n\t *\n\t * @example\n\t * const params = { /* parameters for preview redeem *\\/ };\n\t * const previewData = await getPreviewRedeem(params);\n\t * console.log(previewData);\n\t */\n\tconst getPreviewRedeem = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626PreviewRedeemParams,\n\t\t): Promise<Erc4626GetErc4626PreviewRedeemData> => {\n\t\t\treturn handleTransaction(\"getPreviewRedeemErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait erc4626SDK.erc4626GetErc4626PreviewRedeem(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves a preview of the withdrawal for ERC-4626 compliant tokens.\n\t *\n\t * @param params - The parameters required to get the preview withdrawal.\n\t * @returns A promise that resolves to the preview withdrawal data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const previewData = await getPreviewWithdraw({\n\t *   amount: 100,\n\t *   address: '0x...',\n\t * });\n\t * console.log(previewData);\n\t * ```\n\t */\n\tconst getPreviewWithdraw = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626PreviewWithdrawParams,\n\t\t): Promise<Erc4626GetErc4626PreviewWithdrawData> => {\n\t\t\treturn handleTransaction(\"getPreviewWithdrawErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait erc4626SDK.erc4626GetErc4626PreviewWithdraw(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the total assets for an ERC-4626 contract.\n\t *\n\t * @param {GetTotalAssetsParams} params - The parameters required to get the total assets.\n\t * @returns {Promise<GetTotalAssetsData>} A promise that resolves to the total assets data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const params: GetTotalAssetsParams = { /* parameters here *\\/ };\n\t * const totalAssets = await getTotalAssets(params);\n\t * console.log(totalAssets);\n\t * ```\n\t */\n\tconst getTotalAssets = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626TotalAssetsParams,\n\t\t): Promise<Erc4626GetErc4626TotalAssetsData> => {\n\t\t\treturn handleTransaction(\"getTotalAssetsErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response = await erc4626SDK.erc4626GetErc4626TotalAssets(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the total supply of the ERC-4626 token.\n\t *\n\t * @param {GetTotalSupplyParams2} params - The parameters required to get the total supply.\n\t * @returns {Promise<GetTotalSupplyResult>} A promise that resolves to the total supply result.\n\t *\n\t * @example\n\t * ```typescript\n\t * const params: GetTotalSupplyParams2 = { /* parameters *\\/ };\n\t * const totalSupply = await getTotalSupply(params);\n\t * console.log(totalSupply);\n\t * ```\n\t */\n\tconst getTotalSupply = useCallback(\n\t\tasync (\n\t\t\tparams: Erc4626GetErc4626TotalSupplyParams,\n\t\t): Promise<Erc4626GetErc4626TotalSupplyData> => {\n\t\t\treturn handleTransaction(\"getTotalSupplyErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst response = await erc4626SDK.erc4626GetErc4626TotalSupply(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Mints ERC-4626 tokens for a given address.\n\t *\n\t * @param {string} address - The address to mint tokens for.\n\t * @param {InputBody} data - The input data required for minting.\n\t * @returns {Promise<MintData>} A promise that resolves to the mint data.\n\t */\n\tconst mint = useCallback(\n\t\tasync (address: string, data: InputBody) => {\n\t\t\treturn handleTransaction(\"mintErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(address, data);\n\t\t\t\tconst response = await erc4626SDK.erc4626MintErc4626Shares(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Redeems ERC-4626 tokens for the specified address and input data.\n\t *\n\t * @param {string} address - The address to redeem tokens for.\n\t * @param {InputBody} data - The input data required for the redemption process.\n\t * @returns {Promise<RedeemData>} A promise that resolves to the redeemed data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const address = \"0x123...\";\n\t * const data = { amount: 100 };\n\t * const redeemedData = await redeem(address, data);\n\t * console.log(redeemedData);\n\t * ```\n\t */\n\tconst redeem = useCallback(\n\t\tasync (address: string, data: InputBody) => {\n\t\t\treturn handleTransaction(\"redeemErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(address, data);\n\t\t\t\tconst response = await erc4626SDK.erc4626RedeemErc4626Shares(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Transfers ERC-4626 tokens to a specified address.\n\t *\n\t * @param address - The address to which the tokens will be transferred.\n\t * @param data - The input data required for the transfer.\n\t * @returns A promise that resolves to the result of the transfer operation.\n\t */\n\tconst transfer = useCallback(\n\t\tasync (address: string, data: InputBody) => {\n\t\t\treturn handleTransaction(\"transferErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(address, data);\n\t\t\t\tconst response = await erc4626SDK.erc4626TransferErc4626(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Transfers tokens from one address to another using the ERC-4626 standard.\n\t *\n\t * @param address - The address from which tokens will be transferred.\n\t * @param data - The input data required for the transfer.\n\t * @returns A promise that resolves to the result of the transfer operation.\n\t */\n\tconst transferFrom = useCallback(\n\t\tasync (address: string, data: InputBody) => {\n\t\t\treturn handleTransaction(\"transferFromErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(address, data);\n\t\t\t\tconst response = await erc4626SDK.erc4626TransferFromErc4626(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Withdraws assets from an ERC-4626 contract.\n\t *\n\t * @param {string} address - The address of the ERC-4626 contract.\n\t * @param {InputBody} data - The input data required for the withdrawal.\n\t * @returns {Promise<WithdrawResult>} A promise that resolves to the result of the withdrawal.\n\t */\n\tconst withdraw = useCallback(\n\t\tasync (address: string, data: InputBody) => {\n\t\t\treturn handleTransaction(\"withdrawErc4626\", async () => {\n\t\t\t\tconst erc4626SDK = getErc4626SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(address, data);\n\t\t\t\tconst response = await erc4626SDK.erc4626WithdrawFromErc4626(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\treturn {\n\t\tapprove,\n\t\tdeposit,\n\t\tgetAllowance,\n\t\tgetAsset,\n\t\tgetBalanceOf,\n\t\tgetConvertToAssets,\n\t\tgetConvertToShares,\n\t\tgetMaxDeposit,\n\t\tgetMaxMint,\n\t\tgetMaxRedeem,\n\t\tgetMaxWithdraw,\n\t\tgetPreviewDeposit,\n\t\tgetPreviewMint,\n\t\tgetPreviewRedeem,\n\t\tgetPreviewWithdraw,\n\t\tgetTotalAssets,\n\t\tgetTotalSupply,\n\t\tmint,\n\t\tredeem,\n\t\ttransfer,\n\t\ttransferFrom,\n\t\twithdraw,\n\t};\n};\n","import { useMoonTransaction } from \"@/hooks\";\nimport type { Erc721, InputBody, Transaction } from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\nimport { useMoonAuth } from \"../../context\";\n\n/**\n * Custom hook to interact with ERC-721 contracts using the Moon SDK.\n *\n * @returns {Object} An object containing various functions to interact with ERC-721 contracts:\n * - `approveErc721`: Approves an ERC-721 token for transfer.\n * - `getErc721Approved`: Checks if an ERC-721 token is approved for transfer.\n * - `getErc721BalanceOf`: Retrieves the balance of ERC-721 tokens for a given account.\n * - `getErc721IsApprovedForAll`: Checks if an operator is approved to manage all of the owner's assets.\n * - `getErc721Name`: Retrieves the name of the ERC-721 token.\n * - `getErc721OwnerOf`: Retrieves the owner of a specific ERC-721 token.\n * - `getErc721Symbol`: Retrieves the symbol of the ERC-721 token.\n * - `getErc721TokenUri`: Retrieves the URI of a specific ERC-721 token.\n * - `safeTransferFromErc721`: Safely transfers an ERC-721 token from one address to another.\n * - `safeTransferFromWithDataErc721`: Safely transfers an ERC-721 token with additional data.\n * - `setApprovalForAllErc721`: Sets or unsets the approval of a given operator to manage all of the caller's assets.\n * - `transferFromErc721`: Transfers an ERC-721 token from one address to another.\n */\nexport const useErc721 = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst { switchChain } = useSwitchChain();\n\tconst chainId = useChainId();\n\n\tconst getErc721SDK = (): Erc721 => {\n\t\tconst erc721SDK = moon?.getErc721SDK();\n\t\tif (!erc721SDK) throw new Error(\"Moon SDK not initialized\");\n\t\treturn erc721SDK;\n\t};\n\tconst prepareTransaction = (account: string, transaction: InputBody) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\t/**\n\t * Approves an ERC721 transaction.\n\t *\n\t * @param payload - The payload containing the address and transaction details.\n\t * @param payload.address - The address to approve the transaction for.\n\t * @param payload.transaction - The transaction details.\n\t * @returns A promise that resolves to the transaction.\n\t */\n\tconst approveErc721 = useCallback(\n\t\tasync (payload: {\n\t\t\taddress: string;\n\t\t\ttransaction: InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"approveErc721\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\tconst response = await erc721SDK.erc721ApproveErc721(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Retrieves the approved address for a specific ERC-721 token.\n\t *\n\t * @param payload - The payload containing the necessary parameters.\n\t * @param payload.tokenId - The ID of the token to check approval for.\n\t * @param payload.address - The address of the token owner.\n\t * @param payload.chainId - The ID of the blockchain network.\n\t * @returns A promise that resolves to a Transaction object containing the approval details.\n\t */\n\tconst getErc721Approved = useCallback(\n\t\tasync (payload: {\n\t\t\ttokenId: string;\n\t\t\taddress: string;\n\t\t\tchainId: string;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"getErc721Approved\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst response = await erc721SDK.erc721GetErc721Approved(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the ERC-721 token balance for a specified account.\n\t *\n\t * @param payload - The payload containing the account, contract address, and chain ID.\n\t * @param payload.account - The account address to query the balance for.\n\t * @param payload.address - The contract address of the ERC-721 token.\n\t * @param payload.chainId - The chain ID where the contract is deployed.\n\t * @returns A promise that resolves to an object containing the balance as a string.\n\t */\n\tconst getErc721BalanceOf = useCallback(\n\t\tasync (payload: {\n\t\t\taccount: string;\n\t\t\taddress: string;\n\t\t\tchainId: string;\n\t\t}): Promise<{ balance: string }> => {\n\t\t\treturn handleTransaction(\"getErc721BalanceOf\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst response = await erc721SDK.erc721GetErc721BalanceOf(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Checks if an operator is approved to manage all assets of an ERC-721 token owner.\n\t *\n\t * @param payload - The payload containing the necessary parameters.\n\t * @param payload.owner - The address of the token owner.\n\t * @param payload.operator - The address of the operator.\n\t * @param payload.address - The contract address of the ERC-721 token.\n\t * @param payload.chainId - The chain ID where the contract is deployed.\n\t * @returns A promise that resolves to an object indicating whether the operator is approved.\n\t */\n\tconst getErc721IsApprovedForAll = useCallback(\n\t\tasync (payload: {\n\t\t\towner: string;\n\t\t\toperator: string;\n\t\t\taddress: string;\n\t\t\tchainId: string;\n\t\t}): Promise<{ isApproved: boolean }> => {\n\t\t\treturn handleTransaction(\"getErc721IsApprovedForAll\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait erc721SDK.erc721GetErc721IsApprovedForAll(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the name of an ERC-721 token.\n\t *\n\t * @param payload - The payload containing the address and chainId.\n\t * @param payload.address - The address of the ERC-721 contract.\n\t * @param payload.chainId - The chain ID where the ERC-721 contract is deployed.\n\t * @returns A promise that resolves to an object containing the name of the ERC-721 token.\n\t */\n\tconst getErc721Name = useCallback(\n\t\tasync (payload: {\n\t\t\taddress: string;\n\t\t\tchainId: string;\n\t\t}): Promise<{ name: string }> => {\n\t\t\treturn handleTransaction(\"getErc721Name\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst response = await erc721SDK.erc721GetErc721Name(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the owner of a specified ERC-721 token.\n\t *\n\t * @param payload - The payload containing the token ID, address, and chain ID.\n\t * @param payload.tokenId - The ID of the token to query.\n\t * @param payload.address - The address of the ERC-721 contract.\n\t * @param payload.chainId - The chain ID where the contract is deployed.\n\t * @returns A promise that resolves to an object containing the owner's address.\n\t *\n\t * @example\n\t * const owner = await getErc721OwnerOf({\n\t *   tokenId: '1',\n\t *   address: '0x1234567890abcdef1234567890abcdef12345678',\n\t *   chainId: '1'\n\t * });\n\t * console.log(owner); // { owner: '0xabcdef...' }\n\t */\n\tconst getErc721OwnerOf = useCallback(\n\t\tasync (payload: {\n\t\t\ttokenId: string;\n\t\t\taddress: string;\n\t\t\tchainId: string;\n\t\t}): Promise<{ owner: string }> => {\n\t\t\treturn handleTransaction(\"getErc721OwnerOf\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst response = await erc721SDK.erc721GetErc721OwnerOf(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the symbol of an ERC-721 token.\n\t *\n\t * @param payload - The payload containing the address and chainId.\n\t * @param payload.address - The address of the ERC-721 contract.\n\t * @param payload.chainId - The chain ID where the ERC-721 contract is deployed.\n\t * @returns A promise that resolves to an object containing the symbol of the ERC-721 token.\n\t *\n\t * @example\n\t * ```typescript\n\t * const symbol = await getErc721Symbol({ address: '0x...': '1' });\n\t * console.log(symbol); // { symbol: 'TOKEN_SYMBOL' }\n\t * ```\n\t */\n\tconst getErc721Symbol = useCallback(\n\t\tasync (payload: {\n\t\t\taddress: string;\n\t\t\tchainId: string;\n\t\t}): Promise<{ symbol: string }> => {\n\t\t\treturn handleTransaction(\"getErc721Symbol\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst response = await erc721SDK.erc721GetErc721Symbol(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the URI of an ERC-721 token.\n\t *\n\t * @param payload - The payload containing the token details.\n\t * @param payload.tokenId - The ID of the token.\n\t * @param payload.address - The address of the token contract.\n\t * @param payload.chainId - The ID of the blockchain network.\n\t * @returns A promise that resolves to an object containing the token URI.\n\t */\n\tconst getErc721TokenUri = useCallback(\n\t\tasync (payload: {\n\t\t\ttokenId: string;\n\t\t\taddress: string;\n\t\t\tchainId: string;\n\t\t}): Promise<{ tokenUri: string }> => {\n\t\t\treturn handleTransaction(\"getErc721TokenUri\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst response = await erc721SDK.erc721GetErc721TokenUri(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Safely transfers an ERC-721 token from one address to another.\n\t *\n\t * @param payload - The payload containing the address and transaction details.\n\t * @param payload.address - The address to transfer the token to.\n\t * @param payload.transaction - The transaction details.\n\t * @returns A promise that resolves to the transaction details.\n\t */\n\tconst safeTransferFromErc721 = useCallback(\n\t\tasync (payload: {\n\t\t\taddress: string;\n\t\t\ttransaction: InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"safeTransferFromErc721\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\tconst response = await erc721SDK.erc721SafeTransferFromErc721(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Safely transfers an ERC721 token with additional data.\n\t *\n\t * @param payload - The payload containing the address and transaction details.\n\t * @param payload.address - The address to transfer the token to.\n\t * @param payload.transaction - The transaction details.\n\t * @returns A promise that resolves to the transaction details.\n\t */\n\tconst safeTransferFromWithDataErc721 = useCallback(\n\t\tasync (payload: {\n\t\t\taddress: string;\n\t\t\ttransaction: InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"safeTransferFromWithDataErc721\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\tconst response = await erc721SDK.erc721SafeTransferFromWithDataErc721(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Sets approval for all ERC721 tokens for a given address.\n\t *\n\t * @param payload - The payload containing the address and transaction details.\n\t * @param payload.address - The address to set approval for.\n\t * @param payload.transaction - The transaction details.\n\t * @returns A promise that resolves to the transaction details.\n\t */\n\tconst setApprovalForAllErc721 = useCallback(\n\t\tasync (payload: {\n\t\t\taddress: string;\n\t\t\ttransaction: InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"setApprovalForAllErc721\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\tconst response = await erc721SDK.erc721SetApprovalForAllErc721(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\t/**\n\t * Transfers an ERC721 token from one address to another.\n\t *\n\t * @param payload - The payload containing the address and transaction details.\n\t * @param payload.address - The address to transfer the token from.\n\t * @param payload.transaction - The transaction details for the transfer.\n\t * @returns A promise that resolves to the transaction details.\n\t */\n\tconst transferFromErc721 = useCallback(\n\t\tasync (payload: {\n\t\t\taddress: string;\n\t\t\ttransaction: InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"transferFromErc721\", async () => {\n\t\t\t\tconst erc721SDK = getErc721SDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\tconst response = await erc721SDK.erc721TransferFromErc721(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\treturn {\n\t\tapproveErc721,\n\t\tgetErc721Approved,\n\t\tgetErc721BalanceOf,\n\t\tgetErc721IsApprovedForAll,\n\t\tgetErc721Name,\n\t\tgetErc721OwnerOf,\n\t\tgetErc721Symbol,\n\t\tgetErc721TokenUri,\n\t\tsafeTransferFromErc721,\n\t\tsafeTransferFromWithDataErc721,\n\t\tsetApprovalForAllErc721,\n\t\ttransferFromErc721,\n\t};\n};\n","export type AaveConfigType = {\n  [key: string]: {\n    pool: string;\n    poolAddressesProvider: string;\n    poolAddressesProviderRegistry: string;\n    aclManager?: string;\n    poolConfigurator?: string;\n    incentives?: string;\n    poolDataProvider?: string;\n    uiIncentiveDataProviderV3?: string;\n    uiPoolDataProviderV3?: string;\n    wrappedTokenGateway?: string;\n    walletBalanceProvider?: string;\n    aaveOracle?: string;\n    treasury?: string;\n    treasuryController?: string;\n    liquiditySwitchAdapter?: string;\n    repayWithCollateralAdapter?: string;\n    debtSwitchAdapter?: string;\n    withdrawSwitchAdapter?: string;\n    pullRewardsTransferStrategy?: string;\n    l2Encoder?: string;\n    migrationContract?: string;\n  };\n};\nexport const aaveConfig: AaveConfigType = {\n  '1': {\n    // Ethereum Mainnet\n    poolAddressesProvider: '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e',\n    poolAddressesProviderRegistry: '0xbaA999AC55EAce41CcAE355c77809e68Bb345170',\n    pool: '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2',\n    aclManager: '0xc2aaCf6553D20d1e9d78E365AAba8032af9c85b0',\n    poolConfigurator: '0x64b761D848206f447Fe2dd461b0c635Ec39EbB27',\n    incentives: '0x8164Cc65827dcFe994AB23944CBC90e0aa80bFcb',\n    poolDataProvider: '0x41393e5e337606dc3821075Af65AeE84D7688CBD',\n    uiIncentiveDataProviderV3: '0x5a40cDe2b76Da2beD545efB3ae15708eE56aAF9c',\n    uiPoolDataProviderV3: '0x194324C9Af7f56E22F1614dD82E18621cb9238E7',\n    wrappedTokenGateway: '0xA434D495249abE33E031Fe71a969B81f3c07950D',\n    walletBalanceProvider: '0xC7be5307ba715ce89b152f3Df0658295b3dbA8E2',\n    aaveOracle: '0x54586bE62E3c3580375aE3723C145253060Ca0C2',\n    treasury: '0x464c71f6c2f760dda6093dcb91c24c39e5d6e18c',\n    treasuryController: '0x3d569673dAa0575c936c7c67c4E6AedA69CC630C',\n    liquiditySwitchAdapter: '0xADC0A53095A0af87F3aa29FE0715B5c28016364e',\n    repayWithCollateralAdapter: '0x35bb522b102326ea3F1141661dF4626C87000e3E',\n    debtSwitchAdapter: '0xd7852E139a7097E119623de0751AE53a61efb442',\n    withdrawSwitchAdapter: '0x78F8Bd884C3D738B74B420540659c82f392820e0',\n    migrationContract: '0xb748952c7bc638f31775245964707bcc5ddfa',\n  },\n  '10': {\n    // optimism\n    poolAddressesProvider: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',\n    poolAddressesProviderRegistry: '0x770ef9f4fe897e59daCc474EF11238303F9552b6',\n    pool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',\n    aclManager: '0xa72636CbcAa8F5FF95B2cc47F3CDEe83F3294a0B',\n    poolConfigurator: '0x8145eddDf43f50276641b55bd3AD95944510021E',\n    incentives: '0x929EC64c34a17401F460460D4B9390518E5B473e',\n    poolDataProvider: '0x7F23D86Ee20D869112572136221e173428DD740B',\n    uiIncentiveDataProviderV3: '0xc0179321f0825c3e0F59Fe7Ca4E40557b97797a3',\n    uiPoolDataProviderV3: '0x86b0521f92a554057e54B93098BA2A6Aaa2f4ACB',\n    wrappedTokenGateway: '0x60eE8b61a13c67d0191c851BEC8F0bc850160710',\n    walletBalanceProvider: '0xBc790382B3686abffE4be14A030A96aC6154023a',\n    aaveOracle: '0xD81eb3728a631871a7eBBaD631b5f424909f0c77',\n    treasury: '0xB2289E329D2F85F1eD31Adbb30eA345278F21bcf',\n    treasuryController: '0xA77E4A084d7d4f064E326C0F6c0aCefd47A5Cb21',\n    liquiditySwitchAdapter: '0x830C5A67a0C95D69dA5fb7801Ac1773c6fB53857',\n    repayWithCollateralAdapter: '0x5d4D4007A4c6336550DdAa2a7c0d5e7972eebd16',\n    debtSwitchAdapter: '0xE28E2c8d240dd5eBd0adcab86fbD79df7a052034',\n    withdrawSwitchAdapter: '0x78F8Bd884C3D738B74B420540659c82f392820e0',\n    pullRewardsTransferStrategy: '0x9aE6d130Fa8a44C8f1487dD767Ab6bA33ca2b498',\n    l2Encoder: '0x9abADECD08572e0eA5aF4d47A9C7984a5AA503dC',\n  },\n  '42161': {\n    // Arbitrum\n    poolAddressesProvider: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',\n    poolAddressesProviderRegistry: '0x770ef9f4fe897e59daCc474EF11238303F9552b6',\n    pool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',\n    aclManager: '0xa72636CbcAa8F5FF95B2cc47F3CDEe83F3294a0B',\n    poolConfigurator: '0x8145eddDf43f50276641b55bd3AD95944510021E',\n    incentives: '0x929EC64c34a17401F460460D4B9390518E5B473e',\n    pullRewardsTransferStrategy: '0x2bB52F7779fA2A77Be64E199c18BD6437801caac',\n    poolDataProvider: '0x7F23D86Ee20D869112572136221e173428DD740B',\n    l2Encoder: '0x9abADECD08572e0eA5aF4d47A9C7984a5AA503dC',\n    uiIncentiveDataProviderV3: '0xE92cd6164CE7DC68e740765BC1f2a091B6CBc3e4',\n    uiPoolDataProviderV3: '0xc0179321f0825c3e0F59Fe7Ca4E40557b97797a3',\n    wrappedTokenGateway: '0x5760E34c4003752329bC77790B1De44C2799F8C3',\n    walletBalanceProvider: '0xBc790382B3686abffE4be14A030A96aC6154023a',\n    aaveOracle: '0xb56c2F0B653B2e0b10C9b928C8580Ac5Df02C7C7',\n    treasury: '0x053D55f9B5AF8694c503EB288a1B7E552f590710',\n    treasuryController: '0xC3301b30f4EcBfd59dE0d74e89690C1a70C6f21B',\n    liquiditySwitchAdapter: '0xF3C3F14dd7BDb7E03e6EBc3bc5Ffc6D66De12251',\n    repayWithCollateralAdapter: '0xE28E2c8d240dd5eBd0adcab86fbD79df7a052034',\n    debtSwitchAdapter: '0x63dfa7c09Dc2Ff4030d6B8Dc2ce6262BF898C8A4',\n    withdrawSwitchAdapter: '0x5598BbFA2f4fE8151f45bBA0a3edE1b54B51a0a9',\n  },\n  '137': {\n    // Polygon\n    poolAddressesProvider: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',\n    poolAddressesProviderRegistry: '0x770ef9f4fe897e59daCc474EF11238303F9552b6',\n    pool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',\n    aclManager: '0xa72636CbcAa8F5FF95B2cc47F3CDEe83F3294a0B',\n    poolConfigurator: '0x8145eddDf43f50276641b55bd3AD95944510021E',\n    incentives: '0x929EC64c34a17401F460460D4B9390518E5B473e',\n    pullRewardsTransferStrategy: '0xA1e255c216e0F7f1a54AeeA60BACB93CdE0FcF0D',\n    poolDataProvider: '0x7F23D86Ee20D869112572136221e173428DD740B',\n    uiIncentiveDataProviderV3: '0x5c5228aC8BC1528482514aF3e27E692495148717',\n    uiPoolDataProviderV3: '0xE92cd6164CE7DC68e740765BC1f2a091B6CBc3e4',\n    wrappedTokenGateway: '0xF5f61a1ab3488fCB6d86451846bcFa9cdc108eB0',\n    walletBalanceProvider: '0xBc790382B3686abffE4be14A030A96aC6154023a',\n    aaveOracle: '0xb023e699F5a33916Ea823A16485e259257cA8Bd1',\n    treasury: '0xe8599F3cc5D38a9aD6F3684cd5CEa72f10Dbc383',\n    treasuryController: '0x73D435AFc15e35A9aC63B2a81B5AA54f974eadFe',\n    liquiditySwitchAdapter: '0xC4aff49fCeD8ac1D818a6DCAB063f9f97E66ec5E',\n    repayWithCollateralAdapter: '0x5d4D4007A4c6336550DdAa2a7c0d5e7972eebd16',\n    debtSwitchAdapter: '0xE28E2c8d240dd5eBd0adcab86fbD79df7a052034',\n    withdrawSwitchAdapter: '0x78F8Bd884C3D738B74B420540659c82f392820e0',\n  },\n  '250': {\n    // Fantom\n    poolAddressesProvider: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',\n    poolAddressesProviderRegistry: '0x770ef9f4fe897e59daCc474EF11238303F9552b6',\n    pool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',\n    aclManager: '0xa72636CbcAa8F5FF95B2cc47F3CDEe83F3294a0B',\n    poolConfigurator: '0x8145eddDf43f50276641b55bd3AD95944510021E',\n    incentives: '0x929EC64c34a17401F460460D4B9390518E5B473e',\n    poolDataProvider: '0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654',\n    uiIncentiveDataProviderV3: '0x67Da261c14fd94cE7fDd77a0A8476E5b244089A9',\n    uiPoolDataProviderV3: '0xddf65434502E459C22263BE2ed7cF0f1FaFD44c0',\n    wrappedTokenGateway: '0x1DcDA4de2Bf6c7AD9a34788D22aE6b7d55016e1f',\n    walletBalanceProvider: '0xBc790382B3686abffE4be14A030A96aC6154023a',\n    aaveOracle: '0xfd6f3c1845604C8AE6c6E402ad17fb9885160754',\n    treasury: '0xBe85413851D195fC6341619cD68BfDc26a25b928',\n    treasuryController: '0xc0F0cFBbd0382BcE3B93234E4BFb31b2aABE36aD',\n    repayWithCollateralAdapter: '0x1408401B2A7E28cB747b3e258D0831Fc926bAC51',\n    liquiditySwitchAdapter: '0xE387c6053CE8EC9f8C3fa5cE085Af73114a695d3',\n    pullRewardsTransferStrategy: '0x84d85013035BbFF5DD106CA7828c8781af331b84',\n  },\n  '43114': {\n    // Avalanche\n    poolAddressesProvider: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',\n    poolAddressesProviderRegistry: '0x770ef9f4fe897e59daCc474EF11238303F9552b6',\n    pool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',\n    aclManager: '0xa72636CbcAa8F5FF95B2cc47F3CDEe83F3294a0B',\n    poolConfigurator: '0x8145eddDf43f50276641b55bd3AD95944510021E',\n    incentives: '0x929EC64c34a17401F460460D4B9390518E5B473e',\n    poolDataProvider: '0x374a2592f0265b3bb802d75809e61b1b5BbD85B7',\n    uiIncentiveDataProviderV3: '0xC81CCebEA6A14bA007b96C0a1600D0bA0Df383a8',\n    uiPoolDataProviderV3: '0x374a2592f0265b3bb802d75809e61b1b5BbD85B7',\n    wrappedTokenGateway: '0xCf3045a03F83ADfBCbA1f19Cb2cF4E19075F8668',\n    walletBalanceProvider: '0xBc790382B3686abffE4be14A030A96aC6154023a',\n    aaveOracle: '0xEBd36016B3eD09D4693Ed4251c67Bd858c3c7C9C',\n    treasury: '0x5ba7fd868c40c16f7aDfAe6CF87121E13FC2F7a0',\n    treasuryController: '0xaCbE7d574EF8dC39435577eb638167Aca74F79f0',\n    liquiditySwitchAdapter: '0x2Cf641F7C0eac2788A7924B82d6Ca8EB7bAa4E3A',\n    repayWithCollateralAdapter: '0x5d4D4007A4c6336550DdAa2a7c0d5e7972eebd16',\n    debtSwitchAdapter: '0xE28E2c8d240dd5eBd0adcab86fbD79df7a052034',\n    withdrawSwitchAdapter: '0x78F8Bd884C3D738B74B420540659c82f392820e0',\n    pullRewardsTransferStrategy: '0xA34205e73738f5C3443e8f8F7f13766adfF015eD',\n  },\n  '1666600000': {\n    // harmony\n    poolAddressesProvider: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',\n    poolAddressesProviderRegistry: '0x770ef9f4fe897e59daCc474EF11238303F9552b6',\n    pool: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',\n    aclManager: '0xa72636CbcAa8F5FF95B2cc47F3CDEe83F3294a0B',\n    poolConfigurator: '0x8145eddDf43f50276641b55bd3AD95944510021E',\n    incentives: '0x929EC64c34a17401F460460D4B9390518E5B473e',\n    poolDataProvider: '0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654',\n    uiIncentiveDataProviderV3: '0xf7a60467aBb8A3240A0382b22E1B03c7d4F59Da5',\n    uiPoolDataProviderV3: '0x1DcDA4de2Bf6c7AD9a34788D22aE6b7d55016e1f',\n    wrappedTokenGateway: '0xE387c6053CE8EC9f8C3fa5cE085Af73114a695d3',\n    walletBalanceProvider: '0xBc790382B3686abffE4be14A030A96aC6154023a',\n    aaveOracle: '0x3C90887Ede8D65ccb2777A5d577beAb2548280AD',\n    treasury: '0x8A020d92D6B119978582BE4d3EdFdC9F7b28BF31',\n    treasuryController: '0xeaC16519923774Fd7723d3D5E442a1e2E46BA962',\n    pullRewardsTransferStrategy: '0xbbe21588753Ff67D7E868D82c4b207A562E4294a',\n  },\n  '1088': {\n    // Metis\n    poolAddressesProvider: '0xB9FABd7500B2C6781c35Dd48d54f81fc2299D7AF',\n    poolAddressesProviderRegistry: '0x9E7B73ffD9D2026F3ff4212c29E209E09C8A91F5',\n    pool: '0x90df02551bB792286e8D4f13E0e357b4Bf1D6a57',\n    aclManager: '0xcDCb65fc657B701a5100a12eFB663978E7e8fFB8',\n    poolConfigurator: '0x69FEE8F261E004453BE0800BC9039717528645A6',\n    incentives: '0x30C1b8F0490fa0908863d6Cbd2E36400b4310A6B',\n    poolDataProvider: '0xC01372469A17b6716A38F00c277533917B6859c0',\n    uiIncentiveDataProviderV3: '0xE28E2c8d240dd5eBd0adcab86fbD79df7a052034',\n    uiPoolDataProviderV3: '0x5d4D4007A4c6336550DdAa2a7c0d5e7972eebd16',\n    walletBalanceProvider: '0x1df710eb1E2FD9C21494aF2BFb1F210a4185885b',\n    aaveOracle: '0x38D36e85E47eA6ff0d18B0adF12E5fC8984A6f8e',\n    treasury: '0xB5b64c7E00374e766272f8B442Cd261412D4b118',\n    l2Encoder: '0x9f3A1B399A9074eBA63Dc4fc274bE2A2b2d80cB9',\n  },\n  '8453': {\n    // Base\n    poolAddressesProvider: '0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D',\n    poolAddressesProviderRegistry: '0x2f6571d3Eb9a4e350C68C36bCD2afe39530078E2',\n    pool: '0xA238Dd80C259a72e81d7e4664a9801593F98d1c5',\n  },\n  '100': {\n    // Gnosis\n    poolAddressesProvider: '0x36616cf17557639614c1cdDb356b1B83fc0B2132',\n    poolAddressesProviderRegistry: '0x1236010CECea55998384e795B59815D871f5f94d',\n    pool: '0xb50201558B00496A145fE76f7424749556E326D8',\n  },\n  '56': {\n    // BNB\n    poolAddressesProvider: '0xff75B6da14FfbbfD355Daf7a2731456b3562Ba6D',\n    poolAddressesProviderRegistry: '0x117684358D990E42Eb1649E7e8C4691951dc1E71',\n    pool: '0x6807dc923806fE8Fd134338EABCA509979a7e0cB',\n  },\n  '534352': {\n    // Scroll\n    poolAddressesProvider: '0x69850D0B276776781C063771b161bd8894BCdD04',\n    poolAddressesProviderRegistry: '0xFBedc64AeE24921cb43004312B9eF367a4162b57',\n    pool: '0x11fCfe756c05AD438e312a7fd934381537D3cFfe',\n  },\n  '324': {\n    // zksync\n    poolAddressesProvider: '0x2A3948BB219D6B2Fa83D64100006391a96bE6cb7',\n    poolAddressesProviderRegistry: '0x0753E3637ddC6efc40759D9c347251046644F25F',\n    pool: '0x78e30497a3c7527d953c6B1E3541b021A98Ac43c',\n  },\n  // Add more networks as needed\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tAAVEv3RewardsAPIResponseAAVEv3RewardsExecuteFunctionResult,\n\tAAVEv3RewardsAPIResponseString,\n\tAAVEv3RewardsAPIResponseStringArray,\n\tAAVEv3RewardsInputBody,\n\tAAVEv3UiIncentiveDataProviderAPIResponseFullReservesIncentiveData,\n\tAAVEv3UiPoolDataProviderAPIResponseUserReserveDataArray,\n\tAavePoolAPIResponseAavePoolExecuteFunctionResult,\n\tAavePoolAPIResponseAny,\n\tAavePoolInputBody,\n\tGetReservesDataParams,\n\tPoolAddressProviderRegistryAPIResponseAnyArray,\n\tAave,\n\tAavEv3IncentiveDataProviderGetFullReservesDataParams,\n\tAavEv3IncentiveDataProviderGetUserReservesDataParams,\n\tAavev3PoolAddressProviderRegistryGetAllATokensParams,\n\tAavEv3RewardsGetUserRewardsParams,\n\tAavEv3RewardsGetRewardsDataParams,\n\tAavEv3RewardsGetRewardsByAssetParams,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\nimport { aaveConfig } from \"./types\";\n/**\n * Custom hook to interact with the Aave protocol using the Moon SDK.\n * Provides various functions to supply, withdraw, borrow, repay, and manage rewards on the Aave platform.\n *\n * @returns {Object} An object containing various functions to interact with Aave:\n * - `supply`: Supplies assets to the Aave protocol.\n * - `withdraw`: Withdraws assets from the Aave protocol.\n * - `borrow`: Borrows assets from the Aave protocol.\n * - `repay`: Repays borrowed assets to the Aave protocol.\n * - `claimAllRewards`: Claims all rewards for a user.\n * - `claimRewardsOnBehalf`: Claims rewards on behalf of another user.\n * - `claimRewardsToSelf`: Claims rewards to the user's own account.\n * - `getRewardsByAsset`: Retrieves rewards by asset.\n * - `getRewardsData`: Retrieves rewards data.\n * - `getUserRewards`: Retrieves user rewards.\n * - `getAaveV3PoolAddress`: Retrieves the Aave V3 pool address for a given account and chain ID.\n * - `getAllATokens`: Retrieves all Aave tokens.\n * - `getUserAccountData`: Retrieves user account data.\n * - `getReserveData`: Retrieves reserve data.\n * - `getUserReservesData`: Retrieves user reserves data.\n * - `aaveConfig`: Configuration object for Aave.\n */\nexport const useAave = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\n\tconst getAaveSDK = useCallback((): Aave => {\n\t\tconst aaveSDK = moon?.getAaveSDK();\n\t\tif (!aaveSDK) throw new Error(\"Moon aaveSDK not initialized\");\n\t\treturn aaveSDK;\n\t}, [moon]);\n\n\tconst prepareTransaction = (account: string, transaction: any) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\t/**\n\t * Retrieves the Aave V3 pool address for a given account and chain ID.\n\t *\n\t * @param accountName - The name of the account for which to retrieve the pool address.\n\t * @param chainId - The ID of the blockchain network.\n\t * @returns A promise that resolves to the pool address as a string, or undefined if not found.\n\t * @throws Will throw an error if the chain ID is unsupported or if the pool address retrieval fails.\n\t */\n\tconst getAaveV3PoolAddress = useCallback(\n\t\tasync (\n\t\t\taccountName: string,\n\t\t\tchainId: string,\n\t\t): Promise<string | undefined> => {\n\t\t\tconst config = aaveConfig[chainId];\n\t\t\tif (!config) {\n\t\t\t\tthrow new Error(`Unsupported chain ID: ${chainId}`);\n\t\t\t}\n\t\t\tconst avveSDK = getAaveSDK();\n\t\t\tconst poolAddress = await avveSDK.aavev3PoolAddressProviderGetPool({\n\t\t\t\taccount: accountName,\n\t\t\t\taddress: config.poolAddressesProvider,\n\t\t\t\tchainId,\n\t\t\t});\n\n\t\t\tif (!poolAddress.success) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`getAaveV3PoolAddress::Failed to get pool address: ${poolAddress.message}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn poolAddress.data;\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Supplies assets to the Aave protocol.\n\t *\n\t * @param payload - The payload containing the account name and data for the supply transaction.\n\t * @param payload.accountName - The name of the account supplying the assets.\n\t * @param payload.data - The data required for the Aave supply transaction.\n\t * @returns A promise that resolves to the result of the Aave supply transaction.\n\t */\n\tconst supply = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: AavePoolInputBody;\n\t\t}): Promise<AavePoolAPIResponseAavePoolExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"supply\", async () => {\n\t\t\t\tconst aaveSDK = getAaveSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await aaveSDK.aavev3PoolSupply(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Withdraws assets from the Aave protocol.\n\t *\n\t * @param payload - The payload containing the account name and data for the withdrawal.\n\t * @param payload.accountName - The name of the account from which to withdraw assets.\n\t * @param payload.data - The data required for the Aave pool input.\n\t * @returns A promise that resolves to the result of the Aave pool execute function.\n\t */\n\tconst withdraw = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: AavePoolInputBody;\n\t\t}): Promise<AavePoolAPIResponseAavePoolExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"withdraw\", async () => {\n\t\t\t\tconst aaveSDK = getAaveSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await aaveSDK.aavev3PoolWithdraw(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Borrow assets using the Aave protocol.\n\t *\n\t * @param payload - The payload containing the account name and data for the borrow transaction.\n\t * @param payload.accountName - The name of the account initiating the borrow transaction.\n\t * @param payload.data - The data required for the Aave borrow transaction.\n\t * @returns A promise that resolves to the result of the Aave borrow transaction.\n\t */\n\tconst borrow = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: AavePoolInputBody;\n\t\t}): Promise<AavePoolAPIResponseAavePoolExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"borrow\", async () => {\n\t\t\t\tconst aaveSDK = getAaveSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await aaveSDK.aavev3PoolBorrow(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Repays a loan using the Aave SDK.\n\t *\n\t * @param payload - The payload containing the account name and data for the repayment.\n\t * @param payload.accountName - The name of the account to repay from.\n\t * @param payload.data - The data required for the Aave pool input body.\n\t * @returns A promise that resolves to the result of the Aave pool execute function.\n\t */\n\tconst repay = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: AavePoolInputBody;\n\t\t}): Promise<AavePoolAPIResponseAavePoolExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"repay\", async () => {\n\t\t\t\tconst aaveSDK = getAaveSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await aaveSDK.aavev3PoolRepay(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Claims all rewards for a given account using the Aave SDK.\n\t *\n\t * @param payload - The payload containing the account name and data required for claiming rewards.\n\t * @param payload.accountName - The name of the account for which to claim rewards.\n\t * @param payload.data - The data required by the Aave SDK to claim rewards.\n\t * @returns A promise that resolves to the result of the claim rewards operation.\n\t */\n\tconst claimAllRewards = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: AAVEv3RewardsInputBody;\n\t\t}): Promise<AAVEv3RewardsAPIResponseAAVEv3RewardsExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"claimAllRewards\", async () => {\n\t\t\t\tconst aaveSDK = getAaveSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await aaveSDK.aavEv3RewardsClaimAllRewards(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Claims AAVE rewards on behalf of another account.\n\t *\n\t * @param payload - The payload containing the account name and reward data.\n\t * @param payload.accountName - The name of the account on whose behalf the rewards are being claimed.\n\t * @param payload.data - The data required to claim the rewards.\n\t * @returns A promise that resolves to the result of the AAVE rewards claim execution.\n\t */\n\tconst claimRewardsOnBehalf = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: AAVEv3RewardsInputBody;\n\t\t}): Promise<AAVEv3RewardsAPIResponseAAVEv3RewardsExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"claimRewardsOnBehalf\", async () => {\n\t\t\t\tconst aaveSDK = getAaveSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await aaveSDK.aavEv3RewardsClaimRewardsOnBehalf(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Claims AAVE rewards to the user's own account.\n\t *\n\t * @param payload - The payload containing the account name and reward data.\n\t * @param payload.accountName - The name of the account to claim rewards for.\n\t * @param payload.data - The data required to claim the rewards.\n\t * @returns A promise that resolves to the result of the AAVE rewards claim execution.\n\t */\n\tconst claimRewardsToSelf = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: AAVEv3RewardsInputBody;\n\t\t}): Promise<AAVEv3RewardsAPIResponseAAVEv3RewardsExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"claimRewardsToSelf\", async () => {\n\t\t\t\tconst aaveSDK = getAaveSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await aaveSDK.aavEv3RewardsClaimRewardsToSelf(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Retrieves rewards by asset using the AAVE SDK.\n\t *\n\t * @param payload - The parameters required to get rewards by asset.\n\t * @returns A promise that resolves to an array of AAVE v3 rewards API response strings.\n\t */\n\tconst getRewardsByAsset = useCallback(\n\t\tasync (\n\t\t\tpayload: AavEv3RewardsGetRewardsByAssetParams,\n\t\t): Promise<AAVEv3RewardsAPIResponseStringArray> => {\n\t\t\treturn handleTransaction(\"getRewardsByAsset\", async () => {\n\t\t\t\tconst avveSDK = getAaveSDK();\n\t\t\t\tconst response = await avveSDK.aavEv3RewardsGetRewardsByAsset(payload);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches rewards data from the AAVE SDK.\n\t *\n\t * @param payload - The parameters required to fetch the rewards data.\n\t * @returns A promise that resolves to an array of strings representing the rewards data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const rewardsData = await getRewardsData({\n\t *   user: '0x123...',\n\t *   assets: ['0xabc...', '0xdef...']\n\t * });\n\t * console.log(rewardsData);\n\t * ```\n\t */\n\tconst getRewardsData = useCallback(\n\t\tasync (\n\t\t\tpayload: AavEv3RewardsGetRewardsDataParams,\n\t\t): Promise<AAVEv3RewardsAPIResponseStringArray> => {\n\t\t\treturn handleTransaction(\"getRewardsData\", async () => {\n\t\t\t\tconst avveSDK = getAaveSDK();\n\t\t\t\tconst response = await avveSDK.aavEv3RewardsGetRewardsData(payload);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches user rewards from the AAVE protocol.\n\t *\n\t * @param payload - The parameters required to fetch user rewards.\n\t * @returns A promise that resolves to the AAVE v3 rewards API response as a string.\n\t */\n\tconst getUserRewards = useCallback(\n\t\tasync (\n\t\t\tpayload: AavEv3RewardsGetUserRewardsParams,\n\t\t): Promise<AAVEv3RewardsAPIResponseString> => {\n\t\t\treturn handleTransaction(\"getUserRewards\", async () => {\n\t\t\t\tconst avveSDK = getAaveSDK();\n\t\t\t\tconst response = await avveSDK.aavEv3RewardsGetUserRewards(payload);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches all Aave tokens using the provided payload.\n\t *\n\t * @param payload - The parameters required to fetch all Aave tokens.\n\t * @returns A promise that resolves to an array of Aave token information.\n\t */\n\tconst getAllATokens = useCallback(\n\t\tasync (\n\t\t\tpayload: Aavev3PoolAddressProviderRegistryGetAllATokensParams,\n\t\t): Promise<PoolAddressProviderRegistryAPIResponseAnyArray> => {\n\t\t\treturn handleTransaction(\"getAllATokens\", async () => {\n\t\t\t\tconst avveSDK = getAaveSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait avveSDK.aavev3PoolAddressProviderRegistryGetAllATokens(payload);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches user account data from the Aave protocol.\n\t *\n\t * @param payload - An object containing the account and chainId.\n\t * @param payload.account - The user's account address.\n\t * @param payload.chainId - The chain ID of the network.\n\t * @returns A promise that resolves to an AavePoolAPIResponseAny object containing the user's account data.\n\t * @throws Will throw an error if the market pool address is not found.\n\t */\n\tconst getUserAccountData = useCallback(\n\t\tasync (payload: {\n\t\t\taccount: string;\n\t\t\tchainId: string;\n\t\t}): Promise<AavePoolAPIResponseAny> => {\n\t\t\treturn handleTransaction(\"getUserAccountData\", async () => {\n\t\t\t\tconst avveSDK = getAaveSDK();\n\t\t\t\tconst poolAdd = await getAaveV3PoolAddress(\n\t\t\t\t\tpayload.account,\n\t\t\t\t\tpayload.chainId,\n\t\t\t\t);\n\t\t\t\tif (!poolAdd) {\n\t\t\t\t\tthrow new Error(\"Market pool Address not found\");\n\t\t\t\t}\n\t\t\t\tconst response = await avveSDK.aavev3PoolGetUserAccountData({\n\t\t\t\t\taccount: payload.account,\n\t\t\t\t\taddress: poolAdd,\n\t\t\t\t\tchainId: payload.chainId,\n\t\t\t\t\tuser: payload.account,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches reserve data from the Aave protocol.\n\t *\n\t * @param payload - The parameters required to fetch the reserve data.\n\t * @returns A promise that resolves to the Aave pool API response.\n\t *\n\t * @example\n\t * ```typescript\n\t * const payload = { /* parameters *\\/ };\n\t * const reserveData = await getReserveData(payload);\n\t * ```\n\t */\n\tconst getReserveData = useCallback(\n\t\tasync (payload: GetReservesDataParams): Promise<AavePoolAPIResponseAny> => {\n\t\t\treturn handleTransaction(\"getReserveData\", async () => {\n\t\t\t\tconst avveSDK = getAaveSDK();\n\n\t\t\t\tconst response = await avveSDK.getReservesData(payload);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the user's reserve data from the Aave protocol.\n\t *\n\t * @param payload - The parameters required to fetch the user's reserve data.\n\t * @returns A promise that resolves to an array of user reserve data from the AAVE v3 UI Pool Data Provider API.\n\t *\n\t * @example\n\t * ```typescript\n\t * const payload: GetUserReservesDataParams = { /* parameters *\\/ };\n\t * const userReservesData = await getUserReservesData(payload);\n\t * console.log(userReservesData);\n\t * ```\n\t */\n\tconst getUserReservesData = useCallback(\n\t\tasync (\n\t\t\tpayload: AavEv3IncentiveDataProviderGetUserReservesDataParams,\n\t\t): Promise<AAVEv3UiPoolDataProviderAPIResponseUserReserveDataArray> => {\n\t\t\treturn handleTransaction(\"getUserReservesData\", async () => {\n\t\t\t\tconst avveSDK = getAaveSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait avveSDK.aavEv3IncentiveDataProviderGetUserReservesData(payload);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getReservesData = useCallback(\n\t\tasync (payload: GetReservesDataParams): Promise<any> => {\n\t\t\treturn handleTransaction(\"getReservesData\", async () => {\n\t\t\t\tconst avveSDK = getAaveSDK();\n\t\t\t\tconst response = await avveSDK.getReservesData(payload);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getFullReservesIncentiveData = useCallback(\n\t\tasync (\n\t\t\tpayload: AavEv3IncentiveDataProviderGetFullReservesDataParams,\n\t\t): Promise<AAVEv3UiIncentiveDataProviderAPIResponseFullReservesIncentiveData> => {\n\t\t\treturn handleTransaction(\"getFullReservesIncentiveData\", async () => {\n\t\t\t\tconst avveSDK = getAaveSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait avveSDK.aavEv3IncentiveDataProviderGetFullReservesData(payload);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\tsupply,\n\t\twithdraw,\n\t\tborrow,\n\t\trepay,\n\t\tclaimAllRewards,\n\t\tclaimRewardsOnBehalf,\n\t\tclaimRewardsToSelf,\n\t\tgetRewardsByAsset,\n\t\tgetRewardsData,\n\t\tgetUserRewards,\n\t\tgetAaveV3PoolAddress,\n\t\tgetAllATokens,\n\t\tgetUserAccountData,\n\t\tgetReserveData,\n\t\tgetUserReservesData,\n\t\tgetReservesData,\n\t\tgetFullReservesIncentiveData,\n\t\taaveConfig,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tJupiterGetIndexedRouteMapParams,\n\tJupiterAPIResponseAny,\n\tJupiterAPIResponseRecordStringString,\n\tJupiterAPIResponseJupiterExecuteFunctionResult,\n\tJupiterAPIResponseStringArray,\n\tJupiter,\n\tOmitJupiterInputBodyAccountName,\n\tJupiterCancelLimitOrdersPayload,\n\tCreateLimitOrderBody,\n\tJupiterGetOpenOrdersParams,\n\tJupiterGetOrderHistoryParams,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\n/**\n * Custom hook to interact with the Jupiter SDK within the Moon SDK context.\n *\n * @returns {Object} An object containing methods to interact with the Jupiter SDK:\n * - `getIndexedRouteMap`: Fetches the indexed route map based on the provided query parameters.\n * - `getProgramIdToLabel`: Retrieves a mapping of program IDs to their respective labels.\n * - `getQuote`: Obtains a quote for a given account and data payload.\n * - `getSwapInstructions`: Fetches swap instructions for a given account and data payload.\n * - `getTokens`: Retrieves a list of tokens available in the Jupiter SDK.\n * - `swap`: Executes a swap operation for a given account and data payload.\n */\nexport const useJupiter = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\n\t/**\n\t * Retrieves the Jupiter SDK instance from the Moon SDK.\n\t *\n\t * @returns {Jupiter} The initialized Jupiter SDK instance.\n\t * @throws {Error} If the Jupiter SDK is not initialized.\n\t */\n\tconst getJupiterSDK = useCallback((): Jupiter => {\n\t\tconst jupiterSDK = moon?.getJupiterSDK();\n\t\tif (!jupiterSDK) throw new Error(\"Moon jupiterSDK not initialized\");\n\t\treturn jupiterSDK;\n\t}, [moon]);\n\n\t/**\n\t * Fetches the indexed route map using the Jupiter SDK.\n\t *\n\t * @param query - The parameters required to get the indexed route map.\n\t * @returns A promise that resolves to the indexed route map data.\n\t */\n\tconst getIndexedRouteMap = useCallback(\n\t\tasync (\n\t\t\tquery: JupiterGetIndexedRouteMapParams,\n\t\t): Promise<JupiterAPIResponseAny> => {\n\t\t\treturn handleTransaction(\"getIndexedRouteMap\", async () => {\n\t\t\t\tconst jupiterSDK = getJupiterSDK();\n\t\t\t\treturn jupiterSDK.jupiterGetIndexedRouteMap(query);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the mapping of program IDs to their corresponding labels using the Jupiter SDK.\n\t *\n\t * This function is memoized using `useCallback` and depends on the `moon` dependency.\n\t * It handles the transaction by calling `handleTransaction` with the action name 'getProgramIdToLabel'.\n\t *\n\t * @returns {Promise<GetProgramIdToLabelData>} A promise that resolves to the data containing the program ID to label mapping.\n\t */\n\tconst getProgramIdToLabel =\n\t\tuseCallback(async (): Promise<JupiterAPIResponseRecordStringString> => {\n\t\t\treturn handleTransaction(\"getProgramIdToLabel\", async () => {\n\t\t\t\tconst jupiterSDK = getJupiterSDK();\n\t\t\t\treturn jupiterSDK.jupiterGetProgramIdToLabel();\n\t\t\t});\n\t\t}, [moon]);\n\n\t/**\n\t * Fetches a quote using the Jupiter SDK.\n\t *\n\t * @param payload - The payload containing the account name and data.\n\t * @param payload.accountName - The name of the account for which to fetch the quote.\n\t * @param payload.data - The data required by the Jupiter SDK to fetch the quote.\n\t * @returns A promise that resolves to the quote data.\n\t */\n\tconst getQuote = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OmitJupiterInputBodyAccountName;\n\t\t}): Promise<JupiterAPIResponseJupiterExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"getQuote\", async () => {\n\t\t\t\tconst jupiterSDK = getJupiterSDK();\n\t\t\t\treturn jupiterSDK.jupiterGetQuote(payload.accountName, payload.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves swap instructions using the Jupiter SDK.\n\t *\n\t * @param payload - The payload containing the account name and data.\n\t * @param payload.accountName - The name of the account.\n\t * @param payload.data - The data required for the swap, excluding the account name.\n\t * @returns A promise that resolves to the swap instructions data.\n\t */\n\tconst getSwapInstructions = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OmitJupiterInputBodyAccountName;\n\t\t}): Promise<JupiterAPIResponseJupiterExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"getSwapInstructions\", async () => {\n\t\t\t\tconst jupiterSDK = getJupiterSDK();\n\t\t\t\treturn jupiterSDK.jupiterGetSwapInstructions(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches tokens using the Jupiter SDK.\n\t *\n\t * This function is memoized using `useCallback` and will only change if the `moon` dependency changes.\n\t * It handles the transaction by calling the `handleTransaction` function with the action name 'getTokens'.\n\t *\n\t * @returns {Promise<GetTokensData>} A promise that resolves to the data containing the tokens.\n\t */\n\tconst getTokens =\n\t\tuseCallback(async (): Promise<JupiterAPIResponseStringArray> => {\n\t\t\treturn handleTransaction(\"getTokens\", async () => {\n\t\t\t\tconst jupiterSDK = getJupiterSDK();\n\t\t\t\treturn jupiterSDK.jupiterGetTokens();\n\t\t\t});\n\t\t}, [moon]);\n\n\t/**\n\t * Executes a swap transaction using the Jupiter SDK.\n\t *\n\t * @param payload - The payload containing the account name and data for the swap.\n\t * @param payload.accountName - The name of the account initiating the swap.\n\t * @param payload.data - The data required for the swap, excluding the account name.\n\t * @returns A promise that resolves to the swap data.\n\t */\n\tconst swap = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OmitJupiterInputBodyAccountName;\n\t\t}): Promise<JupiterAPIResponseJupiterExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"swap\", async () => {\n\t\t\t\tconst jupiterSDK = getJupiterSDK();\n\t\t\t\treturn jupiterSDK.jupiterSwap(payload.accountName, payload.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst cancelLimitOrders = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: JupiterCancelLimitOrdersPayload;\n\t\t}): Promise<JupiterAPIResponseJupiterExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"cancelLimitOrders\", async () => {\n\t\t\t\tconst jupiterSDK = getJupiterSDK();\n\t\t\t\treturn jupiterSDK.jupiterCancelLimitOrders(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst createLimitOrder = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: CreateLimitOrderBody;\n\t\t}): Promise<JupiterAPIResponseJupiterExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"createLimitOrder\", async () => {\n\t\t\t\tconst jupiterSDK = getJupiterSDK();\n\t\t\t\treturn jupiterSDK.jupiterCreateLimitOrder(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getOpenOrders = useCallback(\n\t\tasync (\n\t\t\tquery: JupiterGetOpenOrdersParams,\n\t\t): Promise<JupiterAPIResponseJupiterExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"getOpenOrders\", async () => {\n\t\t\t\tconst jupiterSDK = getJupiterSDK();\n\t\t\t\treturn jupiterSDK.jupiterGetOpenOrders(query);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getOrderHistory = useCallback(\n\t\tasync (\n\t\t\tquery: JupiterGetOrderHistoryParams,\n\t\t): Promise<JupiterAPIResponseJupiterExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"getOrderHistory\", async () => {\n\t\t\t\tconst jupiterSDK = getJupiterSDK();\n\t\t\t\treturn jupiterSDK.jupiterGetOrderHistory(query);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\tgetIndexedRouteMap,\n\t\tgetProgramIdToLabel,\n\t\tgetQuote,\n\t\tgetSwapInstructions,\n\t\tgetTokens,\n\t\tswap,\n\t\tcancelLimitOrders,\n\t\tcreateLimitOrder,\n\t\tgetOpenOrders,\n\t\tgetOrderHistory,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport {\n\tApiResponseStatusResponse,\n\tGetToolsParams,\n\tLifiGetAllPossibleConnectionsParams,\n\tLifiGetConnectionsParams,\n\tLifiGetQuoteParams,\n\tLifiGetStatusParams,\n\tLifiGetTokenDetailsParams,\n\tLifiPostQuoteParams,\n\tLifi,\n\tOptionalChainTypesEnum,\n\tApiResponseQuote,\n\tApiResponseTokenDetails,\n\tApiResponseConnectionsResponse,\n\tApiResponseTokenInfoByChainId,\n\tApiResponseToolsResponse,\n\tTokensResponse,\n\tQuote,\n\tChainsResponse,\n\tPostQuote,\n} from \"@moonup/moon-api\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\n\n/**\n * Custom hook to interact with the Moon Lifi SDK.\n *\n * @returns {Object} An object containing various functions and queries to interact with the Lifi SDK.\n *\n * @property {Function} getStatus - Function to get the status of a transaction.\n * @property {Function} getQuoteLifi - Function to get a quote from Lifi.\n * @property {Function} postQuoteLifi - Function to post a quote to Lifi.\n * @property {Function} getSupportedTokens - Function to get supported tokens from Lifi.\n * @property {Function} getSupportedChains - Function to get supported chains from Lifi.\n * @property {Object} supportedTokensQuery - Query object to fetch supported tokens.\n * @property {Object} supportedChainsQuery - Query object to fetch supported chains.\n */\nexport const useLifi = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\n\tconst prepareTransaction = (account: string, transaction: any) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.signed.transaction.from) {\n\t\t\t\tif (\n\t\t\t\t\tchainId !==\n\t\t\t\t\tNumber.parseInt(transactionData.signed.transaction.chainId)\n\t\t\t\t) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(\n\t\t\t\t\t\t\ttransactionData.signed.transaction.chainId,\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.signed.transaction.to,\n\t\t\t\t\tdata: transactionData.signed.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.signed.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.signed.transaction.chain_id),\n\t\t\t\t});\n\t\t\t\treturn transactionData;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\t/**\n\t * Fetches the supported tokens using the Lifi SDK.\n\t *\n\t * This hook uses the `useQuery` hook from React Query to fetch the supported tokens\n\t * from the Lifi SDK. The query is identified by the key 'lifiGetSupportedTokens'.\n\t *\n\t * @throws {Error} If the Moon Lifi SDK is not initialized.\n\t *\n\t * @returns {ApiResponseTokensResponse} The response containing the supported tokens.\n\t *\n\t * @remarks\n\t * The query result is considered fresh for 24 hours (staleTime: 1000 * 60 * 60 * 24).\n\t */\n\tconst supportedTokensQuery = useQuery({\n\t\tqueryKey: [\"lifiGetTokens\"],\n\t\tqueryFn: async (): Promise<TokensResponse> => {\n\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\tconst response = await lifiSDK.lifiGetTokens();\n\t\t\tif (!response.data) {\n\t\t\t\tthrow new Error(\"Failed to fetch supported tokens\");\n\t\t\t}\n\t\t\treturn response.data;\n\t\t},\n\t\tstaleTime: 1000 * 60 * 60 * 24,\n\t});\n\n\t/**\n\t * Fetches the supported chains using the Lifi SDK.\n\t *\n\t * This hook uses the `useQuery` function to fetch the supported chains from the Lifi SDK.\n\t * It queries the `lifiGetSupportedChains` key and retrieves the chains of type `EVM`.\n\t *\n\t * @throws {Error} If the Moon Lifi SDK is not initialized.\n\t *\n\t * @returns {ApiResponseChainsResponse} The response containing the supported chains.\n\t *\n\t * @see {@link https://react-query.tanstack.com/reference/useQuery} for more information on `useQuery`.\n\t */\n\tconst supportedChainsQuery = useQuery({\n\t\tqueryKey: [\"lifiGetChains\"],\n\t\tqueryFn: async (): Promise<ChainsResponse> => {\n\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\tconst response = await lifiSDK.lifiGetChains({});\n\t\t\tif (!response.data) {\n\t\t\t\tthrow new Error(\"Failed to fetch supported chains\");\n\t\t\t}\n\t\t\treturn response.data;\n\t\t},\n\t\tstaleTime: 1000 * 60 * 60 * 24,\n\t});\n\n\t/**\n\t * Retrieves the Lifi SDK instance from the Moon SDK.\n\t *\n\t * @returns {Lifi} The initialized Lifi SDK instance.\n\t * @throws {Error} If the Moon Lifi SDK is not initialized.\n\t */\n\tconst getLifiSDK = (): Lifi => {\n\t\tconst lifiSDK = moon?.getLifiSDK();\n\t\tif (!lifiSDK) throw new Error(\"Moon Lifi SDK not initialized\");\n\t\treturn lifiSDK;\n\t};\n\n\t/**\n\t * Retrieves the status of a transaction using the provided payload.\n\t *\n\t * @param payload - The parameters required to get the status of the transaction.\n\t * @returns A promise that resolves to an ApiResponseStatusResponse object containing the status of the transaction.\n\t */\n\tconst getStatus = useCallback(\n\t\tasync (\n\t\t\tpayload: LifiGetStatusParams,\n\t\t): Promise<ApiResponseStatusResponse> => {\n\t\t\treturn handleTransaction(\"getStatus\", async () => {\n\t\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\t\treturn await lifiSDK.lifiGetStatus(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the supported tokens using the LiFi SDK.\n\t *\n\t * This function is memoized using `useCallback` and will only change if the `moon` dependency changes.\n\t * It handles the transaction by calling `handleTransaction` with the action name 'getSupportedTokens'.\n\t *\n\t * @returns {Promise<ApiResponseTokensResponse>} A promise that resolves to the response containing the supported tokens.\n\t */\n\tconst getSupportedTokens = useCallback(\n\t\tasync (payload: LifiGetQuoteParams): Promise<ApiResponseQuote> => {\n\t\t\treturn handleTransaction(\"getQuoteLifi\", async () => {\n\t\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\t\treturn await lifiSDK.lifiGetQuote(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the supported chains using the LiFi SDK.\n\t *\n\t * This function is memoized using `useCallback` and will only change if the `moon` dependency changes.\n\t * It handles the transaction by calling `handleTransaction` with the action name 'getSupportedChains'.\n\t * The LiFi SDK is used to get the chains with the optional chain type set to EVM.\n\t *\n\t * @returns {Promise<ApiResponseTokensResponse>} A promise that resolves to the response from the LiFi SDK, cast to `ApiResponseChainsResponse`.\n\t */\n\tconst getSupportedChains = useCallback(async (): Promise<ChainsResponse> => {\n\t\treturn handleTransaction(\"getSupportedChains\", async () => {\n\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\tconst response = await lifiSDK.lifiGetChains({\n\t\t\t\toptionalChainTypes: OptionalChainTypesEnum.EVM,\n\t\t\t});\n\t\t\treturn response.data;\n\t\t});\n\t}, [moon]);\n\n\t/**\n\t * Fetches a quote using the LiFi SDK.\n\t *\n\t * @param payload - The parameters required to get a quote.\n\t * @returns A promise that resolves to a Quote object.\n\t *\n\t * @example\n\t * ```typescript\n\t * const quoteParams: GetQuoteParams = { /* parameters *\\/ };\n\t * const quote = await getQuoteLifi(quoteParams);\n\t * console.log(quote);\n\t * ```\n\t */\n\tconst getQuoteLifi = useCallback(\n\t\tasync (payload: LifiGetQuoteParams): Promise<Quote> => {\n\t\t\treturn handleTransaction(\"getQuoteLifi\", async () => {\n\t\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\t\tconst response = await lifiSDK.lifiGetQuote(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Posts a quote to the LiFi SDK.\n\t *\n\t * This function uses the `handleTransaction` utility to manage the transaction\n\t * and ensure proper handling of the quote posting process. It retrieves the\n\t * LiFi SDK instance and sends the provided payload to the `postQuote` method\n\t * of the SDK. The response data is then returned.\n\t *\n\t * @param payload - The parameters required to post a quote.\n\t * @returns A promise that resolves to the posted quote.\n\t */\n\tconst postQuoteLifi = useCallback(\n\t\tasync (payload: LifiPostQuoteParams): Promise<PostQuote> => {\n\t\t\treturn handleTransaction(\"postQuoteLifi\", async () => {\n\t\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\t\tconst preparedPayload = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload,\n\t\t\t\t);\n\t\t\t\tconst response = await lifiSDK.lifiPostQuote(preparedPayload);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst getTools = useCallback(\n\t\tasync (payload: GetToolsParams): Promise<ApiResponseToolsResponse> => {\n\t\t\treturn handleTransaction(\"getTools\", async () => {\n\t\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\t\treturn await lifiSDK.getTools(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getAllPossibleConnections = useCallback(\n\t\tasync (\n\t\t\tpayload: LifiGetAllPossibleConnectionsParams,\n\t\t): Promise<ApiResponseTokenInfoByChainId> => {\n\t\t\treturn handleTransaction(\"getAllPossibleConnections\", async () => {\n\t\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\t\treturn await lifiSDK.lifiGetAllPossibleConnections(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getConnections = useCallback(\n\t\tasync (\n\t\t\tpayload: LifiGetConnectionsParams,\n\t\t): Promise<ApiResponseConnectionsResponse> => {\n\t\t\treturn handleTransaction(\"getConnections\", async () => {\n\t\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\t\treturn await lifiSDK.lifiGetConnections(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTokenDetails = useCallback(\n\t\tasync (\n\t\t\tpayload: LifiGetTokenDetailsParams,\n\t\t): Promise<ApiResponseTokenDetails> => {\n\t\t\treturn handleTransaction(\"getTokenDetails\", async () => {\n\t\t\t\tconst lifiSDK = getLifiSDK();\n\t\t\t\treturn await lifiSDK.lifiGetTokenDetails(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\tgetStatus,\n\t\tgetQuoteLifi,\n\t\tpostQuoteLifi,\n\t\tsupportedTokensQuery,\n\t\tsupportedChainsQuery,\n\t\tgetTools,\n\t\tgetAllPossibleConnections,\n\t\tgetConnections,\n\t\tgetTokenDetails,\n\t\tgetSupportedChains,\n\t\tgetSupportedTokens,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tAddLiquidityData,\n\tAddLiquidityEthData,\n\tApproveOutput,\n\tBurnData,\n\tCalculateOptimalVoteDistributionData,\n\tCalculateOptimalVoteDistributionParams,\n\tCheckpointData,\n\tCheckpointDelegateeData,\n\tClaimBribesData,\n\tClaimData,\n\tClaimFeesData,\n\tClaimRewardsResult,\n\tCreateDelegatedLockForData,\n\tCreateGaugeData,\n\tCreateLockData,\n\tCreateLockForData,\n\tDelegateBySigData,\n\tDelegateData,\n\tDistributeData,\n\tGetAmountOutData,\n\tGetAmountOutParams,\n\tGetAmountsOutData,\n\tGetAmountsOutParams,\n\tGetApprovedData,\n\tGetApprovedParams,\n\tGetAssetByAddressData,\n\tGetAssetsData,\n\tGetBalanceOfNftAtData,\n\tGetBalanceOfNftAtParams,\n\tGetBalanceOfNftData,\n\tGetBalanceOfNftParams,\n\tGetBalanceOfOutput,\n\tGetBalanceOfParams,\n\tGetDelegatesData,\n\tGetDelegatesParams,\n\tGetFactoryData,\n\tGetFactoryParams,\n\tGetLastVotedData,\n\tGetLastVotedParams,\n\tGetLockDetailsData,\n\tGetLockDetailsParams,\n\tGetNameParams,\n\tGetOwnerOfData,\n\tGetOwnerOfParams,\n\tGetPastVotesData,\n\tGetPastVotesParams,\n\tGetPoolByAddressData,\n\tGetPoolVoteLengthData,\n\tGetPoolVoteLengthParams,\n\tGetPoolsByTypeData,\n\tGetPoolsData,\n\tGetSymbolParams,\n\tGetTokenByIndexData,\n\tGetTokenByIndexParams,\n\tGetTokenOfOwnerByIndexData,\n\tGetTokenOfOwnerByIndexParams,\n\tGetTokenUriData,\n\tGetTokenUriParams,\n\tGetTopAprPoolsData,\n\tGetTopAprPoolsParams,\n\tGetTotalNftsMintedData,\n\tGetTotalNftsMintedParams,\n\tGetTotalSupplyOutput,\n\tGetTotalSupplyParams4,\n\tGetTotalValueLockedData,\n\tGetTotalWeightData,\n\tGetTotalWeightParams,\n\tGetVestedPayoutAtTimeData,\n\tGetVestedPayoutAtTimeParams,\n\tGetVestedPayoutData,\n\tGetVestedPayoutParams,\n\tGetVestingPayoutData,\n\tGetVestingPayoutParams,\n\tGetVestingPeriodData,\n\tGetVestingPeriodParams,\n\tGetVotesData,\n\tGetVotesParams,\n\tGetWeightsData,\n\tGetWeightsParams,\n\tGetWethParams2,\n\tGetWethResult,\n\tGlobalCheckpointData,\n\tIncreaseLockAmountData,\n\tIncreaseUnlockTimeData,\n\tIsApprovedForAllParams,\n\tIsGaugeData,\n\tIsGaugeParams,\n\tIsWhitelistedData,\n\tIsWhitelistedParams,\n\tKillGaugeData,\n\tLynex,\n\tLynexNFTInputBody,\n\tLynexRouterInputBody,\n\tLynexVoterInputBody,\n\tMergeData,\n\tNotifyRewardAmountData,\n\tPokeData,\n\tResetData,\n\tReviveGaugeData,\n\tSafeTransferFromResult,\n\tSetApprovalForAllResult,\n\tSetClaimApprovalData,\n\tSetClaimApprovalForAllData,\n\tSplitData,\n\tSwapExactEthForTokensData,\n\tSwapExactTokensForEthData,\n\tSwapExactTokensForTokensData,\n\tTransferFromOutput,\n\tUnlockPermanentData,\n\tVoteData,\n\tVoteWithOptimalDistributionData,\n\tVoteWithOptimalDistributionPayload,\n\tWhitelistData,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\n\n/**\n * A custom hook that provides various functionalities for interacting with the Lynex SDK.\n *\n * @returns An object containing functions to interact with the Lynex SDK, including:\n * - `addLiquidity`: Adds liquidity to the Lynex protocol.\n * - `addLiquidityEth`: Adds liquidity to the ETH pool using the Lynex SDK.\n * - `approve`: Approves a transaction using the Lynex SDK.\n * - `burn`: Burns a Lynex NFT.\n * - `calculateOptimalVoteDistribution`: Calculates the optimal vote distribution using the Lynex SDK.\n * - `checkpoint`: Performs a checkpoint operation using the Lynex SDK.\n * - `checkpointDelegatee`: Checkpoints a delegatee using the Lynex SDK.\n * - `claim`: Claims an NFT using the Lynex SDK.\n * - `claimBribes`: Claims bribes for a given address using the Lynex SDK.\n * - `claimFees`: Claims fees for a given address using the Lynex SDK.\n * - `claimRewards`: Claims rewards for a given address using the Lynex SDK.\n * - `createDelegatedLockFor`: Creates a delegated lock for a given address and data.\n * - `createGauge`: Creates a gauge using the Lynex SDK.\n * - `createLock`: Creates a lock using the Lynex SDK.\n * - `createLockFor`: Creates a lock for a given address using the Lynex SDK.\n * - `delegate`: Delegates a transaction to the Lynex SDK.\n * - `delegateBySig`: Delegates by signature using the Lynex SDK.\n * - `distribute`: Distributes data to a specified address using the Lynex SDK.\n * - `getAmountOut`: Retrieves the output amount for a given set of parameters using the Lynex SDK.\n * - `getAmountsOut`: Retrieves the output amounts for a given set of input parameters using the Lynex SDK.\n * - `getApproved`: Retrieves the approved data using the Lynex SDK.\n * - `getAssetByAddress`: Retrieves asset information by its address using the Lynex SDK.\n * - `getAssets`: Fetches assets using the Lynex SDK.\n * - `getBalanceOf`: Retrieves the balance of a specified account using the Lynex SDK.\n * - `getBalanceOfNft`: Retrieves the balance of a specific NFT using the Lynex SDK.\n * - `getBalanceOfNftAt`: Retrieves the balance of an NFT at a specific point in time.\n * - `getDelegates`: Fetches delegate data using the Lynex SDK.\n * - `getFactory`: Retrieves factory data using the Lynex SDK.\n * - `getLastVoted`: Retrieves the last voted data using the Lynex SDK.\n * - `getLockDetails`: Retrieves lock details using the Lynex SDK.\n * - `getName`: Retrieves the name using the Lynex SDK.\n * - `getOwnerOf`: Retrieves the owner of a specified entity using the Lynex SDK.\n * - `getPastVotes`: Fetches past votes using the Lynex SDK.\n * - `getPoolByAddress`: Retrieves pool data by its address using the Lynex SDK.\n * - `getPools`: Fetches the pool data using the Lynex SDK.\n * - `getPoolsByType`: Fetches pools by the specified type using the Lynex SDK.\n * - `getPoolVoteLength`: Retrieves the length of the pool vote using the Lynex SDK.\n * - `getSymbol`: Fetches the symbol information using the Lynex SDK.\n * - `getTokenByIndex`: Retrieves a token by its index using the Lynex SDK.\n * - `getTokenOfOwnerByIndex`: Retrieves the token of an owner by index using the Lynex SDK.\n * - `getTokenUri`: Retrieves the token URI using the Lynex SDK.\n * - `getTopAprPools`: Fetches the top APR pools using the Lynex SDK.\n * - `getTotalNftsMinted`: Retrieves the total number of NFTs minted using the Lynex SDK.\n * - `getTotalSupply`: Retrieves the total supply using the Lynex SDK.\n * - `getTotalValueLocked`: Retrieves the total value locked (TVL) from the Lynex SDK.\n * - `getTotalWeight`: Retrieves the total weight using the Lynex SDK.\n * - `getVestedPayout`: Retrieves the vested payout data using the Lynex SDK.\n * - `getVestedPayoutAtTime`: Retrieves the vested payout at a specific time using the Lynex SDK.\n * - `getVestingPayout`: Retrieves the vesting payout data using the Lynex SDK.\n * - `getVestingPeriod`: Retrieves the vesting period data using the Lynex SDK.\n * - `getVotes`: Fetches votes data using the Lynex SDK.\n * - `getWeights`: Fetches weight data using the Lynex SDK.\n * - `getWeth`: Retrieves WETH (Wrapped Ether) using the Lynex SDK.\n * - `globalCheckpoint`: Executes a global checkpoint transaction using the Lynex SDK.\n * - `increaseLockAmount`: Increases the lock amount for a given address using the Lynex SDK.\n * - `increaseUnlockTime`: Increases the unlock time for a given address using the Lynex SDK.\n * - `isApprovedForAll`: Checks if the given parameters are approved for all using the Lynex SDK.\n * - `isGauge`: Determines if the given parameters correspond to a gauge using the Lynex SDK.\n * - `isWhitelisted`: Checks if the given parameters are whitelisted using the Lynex SDK.\n * - `killGauge`: Asynchronously kills a gauge using the Lynex SDK.\n * - `merge`: Merges data with the specified address using the Lynex SDK.\n * - `notifyRewardAmount`: Notifies the reward amount using the Lynex SDK.\n * - `poke`: Pokes a specified address with the provided data using the Lynex SDK.\n * - `reset`: Resets the Lynex voter data for a given address.\n * - `reviveGauge`: Revives a gauge for a given address using the Lynex SDK.\n * - `safeTransferFrom`: Safely transfers an NFT from one address to another using the Lynex SDK.\n * - `setApprovalForAll`: Sets approval for all NFTs for a given address.\n * - `setClaimApproval`: Sets the claim approval for a given address and data.\n * - `setClaimApprovalForAll`: Sets claim approval for all NFTs for a given address.\n * - `split`: Splits an NFT using the Lynex SDK.\n * - `swapExactEthForTokens`: Executes a swap of exact ETH for tokens using the Lynex SDK.\n * - `swapExactTokensForEth`: Swaps an exact amount of tokens for ETH using the Lynex SDK.\n * - `swapExactTokensForTokens`: Executes a token swap transaction using the Lynex SDK.\n * - `transferFrom`: Transfers an NFT from one address to another using the Lynex SDK.\n * - `unlockPermanent`: Unlocks a permanent feature for a given address using the Lynex SDK.\n * - `vote`: Asynchronously casts a vote using the Lynex SDK.\n * - `voteWithOptimalDistribution`: Votes with optimal distribution using the Lynex SDK.\n * - `whitelist`: Whitelists an address using the Lynex SDK.\n */\nexport const useLynex = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\n\tconst prepareTransaction = (account: string, transaction: any) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\tconst getLynexSDK = useCallback((): Lynex => {\n\t\tconst lynexSDK = moon?.getLynexSDK();\n\t\tif (!lynexSDK) throw new Error(\"Moon lynexSDK not initialized\");\n\t\treturn lynexSDK;\n\t}, [moon]);\n\n\t/**\n\t * Adds liquidity to the Lynex protocol.\n\t *\n\t * @param address - The address to which liquidity is being added.\n\t * @param data - The input data required by the Lynex router.\n\t * @returns A promise that resolves to the data of the added liquidity.\n\t */\n\tconst addLiquidity = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexRouterInputBody,\n\t\t): Promise<AddLiquidityData> => {\n\t\t\treturn handleTransaction(\"addLiquidity\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await lynexSDK.addLiquidity(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Adds liquidity to the ETH pool using the Lynex SDK.\n\t *\n\t * @param address - The address to which the liquidity will be added.\n\t * @param data - The input data required by the Lynex router.\n\t * @returns A promise that resolves to the data returned by the addLiquidityEth function of the Lynex SDK.\n\t */\n\n\tconst addLiquidityEth = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexRouterInputBody,\n\t\t): Promise<AddLiquidityEthData> => {\n\t\t\treturn handleTransaction(\"addLiquidityEth\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await lynexSDK.addLiquidityEth(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Executes a swap of exact ETH for tokens using the Lynex SDK.\n\t *\n\t * @param address - The address to which the tokens will be sent.\n\t * @param data - The input data required by the Lynex router for the swap.\n\t * @returns A promise that resolves to the data of the swap transaction.\n\t */\n\tconst swapExactEthForTokens = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexRouterInputBody,\n\t\t): Promise<SwapExactEthForTokensData> => {\n\t\t\treturn handleTransaction(\"swapExactEthForTokens\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await lynexSDK.swapExactEthForTokens(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Swaps an exact amount of tokens for ETH using the Lynex SDK.\n\t *\n\t * @param address - The address to send the swapped ETH to.\n\t * @param data - The input data required by the Lynex router for the swap.\n\t * @returns A promise that resolves to the data of the swap transaction.\n\t */\n\tconst swapExactTokensForEth = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexRouterInputBody,\n\t\t): Promise<SwapExactTokensForEthData> => {\n\t\t\treturn handleTransaction(\"swapExactTokensForEth\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await lynexSDK.swapExactTokensForEth(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Executes a token swap transaction using the Lynex SDK.\n\t *\n\t * @param address - The address to perform the swap for.\n\t * @param data - The input data required for the Lynex router.\n\t * @returns A promise that resolves to the data of the swap transaction.\n\t */\n\n\tconst swapExactTokensForTokens = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexRouterInputBody,\n\t\t): Promise<SwapExactTokensForTokensData> => {\n\t\t\treturn handleTransaction(\"swapExactTokensForTokens\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await lynexSDK.swapExactTokensForTokens(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Approves a transaction using the Lynex SDK.\n\t *\n\t * @param address - The address to approve the transaction for.\n\t * @param data - The data required for the Lynex NFT input body.\n\t * @returns A promise that resolves to the approval output.\n\t */\n\tconst approve = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<ApproveOutput> => {\n\t\t\treturn handleTransaction(\"approve\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await lynexSDK.approve(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Burns a Lynex NFT.\n\t *\n\t * @param {string} address - The address of the NFT to burn.\n\t * @param {LynexNFTInputBody} data - The data required to burn the NFT.\n\t * @returns {Promise<BurnData>} A promise that resolves to the burn data.\n\t */\n\tconst burn = useCallback(\n\t\tasync (address: string, data: LynexNFTInputBody): Promise<BurnData> => {\n\t\t\treturn handleTransaction(\"burn\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.burn(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * A hook that provides a function to perform a checkpoint operation using the Lynex SDK.\n\t *\n\t * @param address - The address to perform the checkpoint on.\n\t * @param data - The data required for the checkpoint operation.\n\t * @returns A promise that resolves to the checkpoint data.\n\t */\n\tconst checkpoint = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<CheckpointData> => {\n\t\t\treturn handleTransaction(\"checkpoint\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.checkpoint(address, preparedData);\n\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Asynchronously checkpoints a delegatee using the Lynex SDK.\n\t *\n\t * @param address - The address of the delegatee.\n\t * @param data - The data required for the Lynex NFT input body.\n\t * @returns A promise that resolves to the checkpoint delegatee data.\n\t */\n\tconst checkpointDelegatee = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<CheckpointDelegateeData> => {\n\t\t\treturn handleTransaction(\"checkpointDelegatee\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await lynexSDK.checkpointDelegatee(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Claims an NFT using the Lynex SDK.\n\t *\n\t * @param {string} address - The address to which the NFT will be claimed.\n\t * @param {LynexNFTInputBody} data - The data required to claim the NFT.\n\t * @returns {Promise<ClaimData>} A promise that resolves to the claim data.\n\t */\n\tconst claim = useCallback(\n\t\tasync (address: string, data: LynexNFTInputBody): Promise<ClaimData> => {\n\t\t\treturn handleTransaction(\"claim\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.claim(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Creates a delegated lock for a given address and data.\n\t *\n\t * @param address - The address for which the delegated lock is to be created.\n\t * @param data - The data required to create the delegated lock.\n\t * @returns A promise that resolves to the data of the created delegated lock.\n\t */\n\tconst createDelegatedLockFor = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<CreateDelegatedLockForData> => {\n\t\t\treturn handleTransaction(\"createDelegatedLockFor\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.createDelegatedLockFor(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Creates a lock using the Lynex SDK.\n\t *\n\t * @param address - The address to create the lock for.\n\t * @param data - The data required to create the lock, conforming to the LynexNFTInputBody interface.\n\t * @returns A promise that resolves to the created lock data.\n\t */\n\tconst createLock = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<CreateLockData> => {\n\t\t\treturn handleTransaction(\"createLock\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.createLock(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Creates a lock for a given address using the Lynex SDK.\n\t *\n\t * @param address - The address for which the lock is to be created.\n\t * @param data - The data required to create the lock, adhering to the LynexNFTInputBody interface.\n\t * @returns A promise that resolves to CreateLockForData.\n\t *\n\t * @remarks\n\t * This function uses the `handleTransaction` utility to manage the transaction process.\n\t * It prepares the transaction data and then calls the `createLockFor` method of the Lynex SDK.\n\t * The response is then processed using the `handleWagmiTransaction` function.\n\t *\n\t * @example\n\t * ```typescript\n\t * const address = \"0x123...\";\n\t * const data = { /* LynexNFTInputBody data *\\/ };\n\t * const result = await createLockFor(address, data);\n\t * console.log(result);\n\t * ```\n\t */\n\tconst createLockFor = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<CreateLockForData> => {\n\t\t\treturn handleTransaction(\"createLockFor\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.createLockFor(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Delegates a transaction to the Lynex SDK.\n\t *\n\t * @param {string} address - The address to which the transaction is delegated.\n\t * @param {LynexNFTInputBody} data - The data required for the Lynex NFT transaction.\n\t * @returns {Promise<DelegateData>} - A promise that resolves to the delegate data.\n\t *\n\t * @example\n\t * const address = \"0x123...\";\n\t * const data = { /* LynexNFTInputBody data *\\/ };\n\t * const result = await delegate(address, data);\n\t * console.log(result);\n\t */\n\tconst delegate = useCallback(\n\t\tasync (address: string, data: LynexNFTInputBody): Promise<DelegateData> => {\n\t\t\treturn handleTransaction(\"delegate\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.delegate(address, preparedData);\n\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * A hook that provides a function to delegate by signature using the Lynex SDK.\n\t *\n\t * @param address - The address to delegate to.\n\t * @param data - The data required for the Lynex NFT input body.\n\t * @returns A promise that resolves to the DelegateBySigData.\n\t *\n\t * @example\n\t * ```typescript\n\t * const { delegateBySig } = useLynex();\n\t *\n\t * const address = \"0x123...\";\n\t * const data = {\n\t *   // LynexNFTInputBody data\n\t * };\n\t *\n\t * delegateBySig(address, data)\n\t *   .then((result) => {\n\t *     console.log(\"Delegation successful:\", result);\n\t *   })\n\t *   .catch((error) => {\n\t *     console.error(\"Delegation failed:\", error);\n\t *   });\n\t * ```\n\t */\n\tconst delegateBySig = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<DelegateBySigData> => {\n\t\t\treturn handleTransaction(\"delegateBySig\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.delegateBySig(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Executes a global checkpoint transaction using the Lynex SDK.\n\t *\n\t * @param address - The address to perform the global checkpoint on.\n\t * @param data - The data required for the Lynex NFT input body.\n\t * @returns A promise that resolves to the global checkpoint data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const checkpointData = await globalCheckpoint(\"0x123...\", {\n\t *   // LynexNFTInputBody data\n\t * });\n\t * ```\n\t */\n\tconst globalCheckpoint = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<GlobalCheckpointData> => {\n\t\t\treturn handleTransaction(\"globalCheckpoint\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.globalCheckpoint(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Increases the lock amount for a given address using the Lynex SDK.\n\t *\n\t * @param address - The address for which the lock amount is to be increased.\n\t * @param data - The data required for the Lynex NFT input body.\n\t * @returns A promise that resolves to the data of the increased lock amount.\n\t */\n\tconst increaseLockAmount = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<IncreaseLockAmountData> => {\n\t\t\treturn handleTransaction(\"increaseLockAmount\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.increaseLockAmount(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Increases the unlock time for a given address using the Lynex SDK.\n\t *\n\t * @param address - The address for which the unlock time is to be increased.\n\t * @param data - The input data required for the Lynex NFT transaction.\n\t * @returns A promise that resolves to the data of the increased unlock time transaction.\n\t */\n\tconst increaseUnlockTime = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<IncreaseUnlockTimeData> => {\n\t\t\treturn handleTransaction(\"increaseUnlockTime\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.increaseUnlockTime(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Merges data with the specified address using the Lynex SDK.\n\t *\n\t * @param {string} address - The address to merge the data with.\n\t * @param {LynexNFTInputBody} data - The data to be merged.\n\t * @returns {Promise<MergeData>} - A promise that resolves to the merged data.\n\t */\n\tconst merge = useCallback(\n\t\tasync (address: string, data: LynexNFTInputBody): Promise<MergeData> => {\n\t\t\treturn handleTransaction(\"merge\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.merge(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Safely transfers an NFT from one address to another using the Lynex SDK.\n\t *\n\t * @param address - The address to transfer the NFT to.\n\t * @param data - The data required for the NFT transfer.\n\t * @returns A promise that resolves to the result of the safe transfer operation.\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await safeTransferFrom(\"0xRecipientAddress\", {\n\t *   tokenId: \"123\",\n\t *   from: \"0xSenderAddress\",\n\t *   to: \"0xRecipientAddress\",\n\t *   data: \"0x\"\n\t * });\n\t * ```\n\t */\n\tconst safeTransferFrom = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<SafeTransferFromResult> => {\n\t\t\treturn handleTransaction(\"safeTransferFrom\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.safeTransferFrom(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Sets approval for all NFTs for a given address.\n\t *\n\t * @param address - The address to set approval for.\n\t * @param data - The data required for the Lynex NFT transaction.\n\t * @returns A promise that resolves to the result of the setApprovalForAll transaction.\n\t */\n\tconst setApprovalForAll = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<SetApprovalForAllResult> => {\n\t\t\treturn handleTransaction(\"setApprovalForAll\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.setApprovalForAll(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Sets the claim approval for a given address and data.\n\t *\n\t * @param address - The address for which the claim approval is being set.\n\t * @param data - The data required for the Lynex NFT input body.\n\t * @returns A promise that resolves to the data of the set claim approval.\n\t *\n\t * @example\n\t * ```typescript\n\t * const address = \"0x123...\";\n\t * const data = { /* LynexNFTInputBody data *\\/ };\n\t * const result = await setClaimApproval(address, data);\n\t * ```\n\t */\n\tconst setClaimApproval = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<SetClaimApprovalData> => {\n\t\t\treturn handleTransaction(\"setClaimApproval\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.setClaimApproval(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Sets claim approval for all NFTs for a given address.\n\t *\n\t * @param address - The address for which to set claim approval.\n\t * @param data - The data required for the Lynex NFT input body.\n\t * @returns A promise that resolves to the data of the set claim approval transaction.\n\t */\n\tconst setClaimApprovalForAll = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<SetClaimApprovalForAllData> => {\n\t\t\treturn handleTransaction(\"setClaimApprovalForAll\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.setClaimApprovalForAll(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Splits an NFT using the Lynex SDK.\n\t *\n\t * @param address - The address of the NFT owner.\n\t * @param data - The input data required for the Lynex NFT split operation.\n\t * @returns A promise that resolves to the split data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const splitData = await split(\"0x123...\", { tokenId: \"1\", amount: 2 });\n\t * ```\n\t */\n\tconst split = useCallback(\n\t\tasync (address: string, data: LynexNFTInputBody): Promise<SplitData> => {\n\t\t\treturn handleTransaction(\"split\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.split(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Transfers an NFT from one address to another using the Lynex SDK.\n\t *\n\t * @param address - The address to transfer the NFT from.\n\t * @param data - The data required for the transfer, encapsulated in a LynexNFTInputBody object.\n\t * @returns A promise that resolves to a TransferFromOutput object.\n\t *\n\t * @example\n\t * ```typescript\n\t * const address = \"0x123...\";\n\t * const data = { /* LynexNFTInputBody data *\\/ };\n\t * const result = await transferFrom(address, data);\n\t * ```\n\t */\n\tconst transferFrom = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<TransferFromOutput> => {\n\t\t\treturn handleTransaction(\"transferFrom\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.transferFrom(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Unlocks a permanent feature for a given address using the Lynex SDK.\n\t *\n\t * @param address - The address for which the permanent feature is to be unlocked.\n\t * @param data - The data required to unlock the permanent feature, conforming to the LynexNFTInputBody interface.\n\t * @returns A promise that resolves to an UnlockPermanentData object.\n\t *\n\t * @example\n\t * ```typescript\n\t * const address = \"0x123...\";\n\t * const data = { /* LynexNFTInputBody data *\\/ };\n\t * const result = await unlockPermanent(address, data);\n\t * ```\n\t */\n\tconst unlockPermanent = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexNFTInputBody,\n\t\t): Promise<UnlockPermanentData> => {\n\t\t\treturn handleTransaction(\"unlockPermanent\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.unlockPermanent(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\t/**\n\t * Claims fees for a given address using the Lynex SDK.\n\t *\n\t * @param address - The address for which to claim fees.\n\t * @param data - The input data required by the Lynex SDK to claim fees.\n\t * @returns A promise that resolves to the data returned by the claim fees transaction.\n\t */\n\tconst claimFees = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexVoterInputBody,\n\t\t): Promise<ClaimFeesData> => {\n\t\t\treturn handleTransaction(\"claimFees\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.claimFees(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Claims bribes for a given address using the Lynex SDK.\n\t *\n\t * @param address - The address to claim bribes for.\n\t * @param data - The input data required by the Lynex voter.\n\t * @returns A promise that resolves to the data of the claimed bribes.\n\t */\n\tconst claimBribes = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexVoterInputBody,\n\t\t): Promise<ClaimBribesData> => {\n\t\t\treturn handleTransaction(\"claimBribes\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.claimBribes(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Claims rewards for a given address using the Lynex SDK.\n\t *\n\t * @param address - The address to claim rewards for.\n\t * @param data - The input data required for the Lynex voter.\n\t * @returns A promise that resolves to the result of the claim rewards transaction.\n\t */\n\tconst claimRewards = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexVoterInputBody,\n\t\t): Promise<ClaimRewardsResult> => {\n\t\t\treturn handleTransaction(\"claimRewards\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.claimRewards(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Creates a gauge using the Lynex SDK.\n\t *\n\t * @param address - The address to create the gauge for.\n\t * @param data - The data required to create the gauge, conforming to the LynexVoterInputBody interface.\n\t * @returns A promise that resolves to CreateGaugeData.\n\t *\n\t * @example\n\t * ```typescript\n\t * const address = \"0x123...\";\n\t * const data: LynexVoterInputBody = { /* ... *\\/ };\n\t * const result = await createGauge(address, data);\n\t * ```\n\t */\n\tconst createGauge = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexVoterInputBody,\n\t\t): Promise<CreateGaugeData> => {\n\t\t\treturn handleTransaction(\"createGauge\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.createGauge(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Distributes data to a specified address using the Lynex SDK.\n\t *\n\t * @param address - The address to which the data will be distributed.\n\t * @param data - The data to be distributed, formatted as a LynexVoterInputBody.\n\t * @returns A promise that resolves to the distributed data.\n\t */\n\tconst distribute = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexVoterInputBody,\n\t\t): Promise<DistributeData> => {\n\t\t\treturn handleTransaction(\"distribute\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.distribute(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Asynchronously kills a gauge using the Lynex SDK.\n\t *\n\t * @param address - The address of the gauge to be killed.\n\t * @param data - The input data required for the Lynex voter.\n\t * @returns A promise that resolves to the KillGaugeData.\n\t */\n\tconst killGauge = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexVoterInputBody,\n\t\t): Promise<KillGaugeData> => {\n\t\t\treturn handleTransaction(\"killGauge\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.killGauge(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst notifyRewardAmount = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexVoterInputBody,\n\t\t): Promise<NotifyRewardAmountData> => {\n\t\t\treturn handleTransaction(\"notifyRewardAmount\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.notifyRewardAmount(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Pokes a specified address with the provided data using the Lynex SDK.\n\t *\n\t * @param {string} address - The address to poke.\n\t * @param {LynexVoterInputBody} data - The data to send with the poke.\n\t * @returns {Promise<PokeData>} A promise that resolves to the poke data.\n\t */\n\tconst poke = useCallback(\n\t\tasync (address: string, data: LynexVoterInputBody): Promise<PokeData> => {\n\t\t\treturn handleTransaction(\"poke\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.poke(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Resets the Lynex voter data for a given address.\n\t *\n\t * @param {string} address - The address of the voter to reset.\n\t * @param {LynexVoterInputBody} data - The data to be used for the reset operation.\n\t * @returns {Promise<ResetData>} A promise that resolves to the reset data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const address = \"0x123...\";\n\t * const data = { /* Lynex voter input body data *\\/ };\n\t * const resetData = await reset(address, data);\n\t * ```\n\t */\n\tconst reset = useCallback(\n\t\tasync (address: string, data: LynexVoterInputBody): Promise<ResetData> => {\n\t\t\treturn handleTransaction(\"reset\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.reset(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Revives a gauge for a given address using the Lynex SDK.\n\t *\n\t * @param {string} address - The address for which the gauge is to be revived.\n\t * @param {LynexVoterInputBody} data - The data required to revive the gauge.\n\t * @returns {Promise<ReviveGaugeData>} - A promise that resolves to the revived gauge data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const address = \"0x123...\";\n\t * const data = { /* LynexVoterInputBody data *\\/ };\n\t * const revivedGauge = await reviveGauge(address, data);\n\t * ```\n\t */\n\tconst reviveGauge = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexVoterInputBody,\n\t\t): Promise<ReviveGaugeData> => {\n\t\t\treturn handleTransaction(\"reviveGauge\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.reviveGauge(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Asynchronously casts a vote using the Lynex SDK.\n\t *\n\t * @param {string} address - The address of the voter.\n\t * @param {LynexVoterInputBody} data - The data required for voting.\n\t * @returns {Promise<VoteData>} A promise that resolves to the vote data.\n\t *\n\t * @example\n\t * const voteData = await vote(\"0x123...\", { candidateId: \"abc123\", amount: 10 });\n\t *\n\t * @function\n\t * @name vote\n\t */\n\tconst vote = useCallback(\n\t\tasync (address: string, data: LynexVoterInputBody): Promise<VoteData> => {\n\t\t\treturn handleTransaction(\"vote\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.vote(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * A hook that provides a function to vote with optimal distribution using the Lynex SDK.\n\t *\n\t * @param address - The address of the voter.\n\t * @param data - The payload containing the voting data.\n\t * @returns A promise that resolves to the voting result data.\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await voteWithOptimalDistribution(\"0x123...\", {\n\t *   proposalId: \"proposal-1\",\n\t *   votes: [\n\t *     { option: \"yes\", weight: 70 },\n\t *     { option: \"no\", weight: 30 },\n\t *   ],\n\t * });\n\t * ```\n\t */\n\tconst voteWithOptimalDistribution = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: VoteWithOptimalDistributionPayload,\n\t\t): Promise<VoteWithOptimalDistributionData> => {\n\t\t\treturn handleTransaction(\"voteWithOptimalDistribution\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.voteWithOptimalDistribution(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Whitelists an address using the Lynex SDK.\n\t *\n\t * @param address - The address to be whitelisted.\n\t * @param data - The data required for the Lynex voter input.\n\t * @returns A promise that resolves to the whitelisted data.\n\t */\n\tconst whitelist = useCallback(\n\t\tasync (\n\t\t\taddress: string,\n\t\t\tdata: LynexVoterInputBody,\n\t\t): Promise<WhitelistData> => {\n\t\t\treturn handleTransaction(\"whitelist\", async () => {\n\t\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await lynexSDK.whitelist(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Calculates the optimal vote distribution using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to calculate the optimal vote distribution.\n\t * @returns A promise that resolves to the calculated optimal vote distribution data.\n\t */\n\tconst calculateOptimalVoteDistribution = useCallback(\n\t\tasync (\n\t\t\tparams: CalculateOptimalVoteDistributionParams,\n\t\t): Promise<CalculateOptimalVoteDistributionData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.calculateOptimalVoteDistribution(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the output amount for a given set of parameters using the Lynex SDK.\n\t *\n\t * @param {GetAmountOutParams} params - The parameters required to calculate the output amount.\n\t * @returns {Promise<GetAmountOutData>} A promise that resolves to the output amount data.\n\t */\n\tconst getAmountOut = useCallback(\n\t\tasync (params: GetAmountOutParams): Promise<GetAmountOutData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getAmountOut(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the output amounts for a given set of input parameters using the Lynex SDK.\n\t *\n\t * @param {GetAmountsOutParams} params - The parameters required to get the output amounts.\n\t * @returns {Promise<GetAmountsOutData>} A promise that resolves to the output amounts data.\n\t */\n\tconst getAmountsOut = useCallback(\n\t\tasync (params: GetAmountsOutParams): Promise<GetAmountsOutData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getAmountsOut(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the approved data using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to get the approved data.\n\t * @returns A promise that resolves to the approved data.\n\t */\n\tconst getApproved = useCallback(\n\t\tasync (params: GetApprovedParams): Promise<GetApprovedData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getApproved(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves asset information by its address using the Lynex SDK.\n\t *\n\t * @param address - The address of the asset to retrieve.\n\t * @returns A promise that resolves to the asset data.\n\t */\n\tconst getAssetByAddress = useCallback(\n\t\tasync (address: string): Promise<GetAssetByAddressData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getAssetByAddress(address);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches assets using the Lynex SDK.\n\t *\n\t * This function is memoized using `useCallback` and will only change if the `moon` dependency changes.\n\t *\n\t * @returns {Promise<GetAssetsData>} A promise that resolves to the assets data.\n\t */\n\tconst getAssets = useCallback(async (): Promise<GetAssetsData> => {\n\t\tconst lynexSDK = getLynexSDK();\n\t\treturn lynexSDK.getAssets();\n\t}, [moon]);\n\n\t/**\n\t * Retrieves the balance of a specified account using the Lynex SDK.\n\t *\n\t * @param {GetBalanceOfParams4} params - The parameters required to get the balance.\n\t * @returns {Promise<GetBalanceOfOutput>} A promise that resolves to the balance of the specified account.\n\t */\n\tconst getBalanceOf = useCallback(\n\t\tasync (params: GetBalanceOfParams): Promise<GetBalanceOfOutput> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getBalanceOf(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the balance of a specific NFT using the Lynex SDK.\n\t *\n\t * @param {GetBalanceOfNftParams} params - The parameters required to get the balance of the NFT.\n\t * @returns {Promise<GetBalanceOfNftData>} A promise that resolves to the balance data of the NFT.\n\t */\n\tconst getBalanceOfNft = useCallback(\n\t\tasync (params: GetBalanceOfNftParams): Promise<GetBalanceOfNftData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getBalanceOfNft(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the balance of an NFT at a specific point in time.\n\t *\n\t * @param params - The parameters required to get the balance of the NFT.\n\t * @returns A promise that resolves to the balance data of the NFT.\n\t */\n\tconst getBalanceOfNftAt = useCallback(\n\t\tasync (params: GetBalanceOfNftAtParams): Promise<GetBalanceOfNftAtData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getBalanceOfNftAt(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches delegate data using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to fetch the delegates.\n\t * @returns A promise that resolves to the delegate data.\n\t */\n\tconst getDelegates = useCallback(\n\t\tasync (params: GetDelegatesParams): Promise<GetDelegatesData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getDelegates(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves factory data using the Lynex SDK.\n\t *\n\t * @param {GetFactoryParams} params - The parameters required to get the factory data.\n\t * @returns {Promise<GetFactoryData>} A promise that resolves to the factory data.\n\t */\n\tconst getFactory = useCallback(\n\t\tasync (params: GetFactoryParams): Promise<GetFactoryData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getFactory(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the last voted data using the Lynex SDK.\n\t *\n\t * @param {GetLastVotedParams} params - The parameters required to fetch the last voted data.\n\t * @returns {Promise<GetLastVotedData>} A promise that resolves to the last voted data.\n\t */\n\tconst getLastVoted = useCallback(\n\t\tasync (params: GetLastVotedParams): Promise<GetLastVotedData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getLastVoted(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves lock details using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to get lock details.\n\t * @returns A promise that resolves to the lock details data.\n\t */\n\tconst getLockDetails = useCallback(\n\t\tasync (params: GetLockDetailsParams): Promise<GetLockDetailsData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getLockDetails(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the name using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to get the name.\n\t * @returns A promise that resolves to the result of the getName operation.\n\t */\n\tconst getName = useCallback(\n\t\tasync (params: GetNameParams) => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getName(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the owner of a specified entity using the Lynex SDK.\n\t *\n\t * @param {GetOwnerOfParams} params - The parameters required to get the owner information.\n\t * @returns {Promise<GetOwnerOfData>} A promise that resolves to the owner data.\n\t */\n\tconst getOwnerOf = useCallback(\n\t\tasync (params: GetOwnerOfParams): Promise<GetOwnerOfData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getOwnerOf(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches past votes using the Lynex SDK.\n\t *\n\t * @param {GetPastVotesParams} params - The parameters required to fetch past votes.\n\t * @returns {Promise<GetPastVotesData>} A promise that resolves to the past votes data.\n\t */\n\tconst getPastVotes = useCallback(\n\t\tasync (params: GetPastVotesParams): Promise<GetPastVotesData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getPastVotes(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves pool data by its address using the Lynex SDK.\n\t *\n\t * @param address - The address of the pool to retrieve.\n\t * @returns A promise that resolves to the pool data.\n\t */\n\tconst getPoolByAddress = useCallback(\n\t\tasync (address: string): Promise<GetPoolByAddressData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getPoolByAddress(address);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the pool data using the Lynex SDK.\n\t *\n\t * @returns {Promise<GetPoolsData>} A promise that resolves to the pool data.\n\t */\n\tconst getPools = useCallback(async (): Promise<GetPoolsData> => {\n\t\tconst lynexSDK = getLynexSDK();\n\t\treturn lynexSDK.getPools();\n\t}, [moon]);\n\n\t/**\n\t * Fetches pools by the specified type using the Lynex SDK.\n\t *\n\t * @param type - The type of pools to fetch.\n\t * @returns A promise that resolves to the data of the pools of the specified type.\n\t */\n\tconst getPoolsByType = useCallback(\n\t\tasync (type: string): Promise<GetPoolsByTypeData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getPoolsByType(type);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the length of the pool vote using the Lynex SDK.\n\t *\n\t * @param {GetPoolVoteLengthParams} params - The parameters required to get the pool vote length.\n\t * @returns {Promise<GetPoolVoteLengthData>} A promise that resolves to the pool vote length data.\n\t */\n\tconst getPoolVoteLength = useCallback(\n\t\tasync (params: GetPoolVoteLengthParams): Promise<GetPoolVoteLengthData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getPoolVoteLength(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the symbol information using the Lynex SDK.\n\t *\n\t * @param {GetSymbolParams2} params - The parameters required to fetch the symbol.\n\t * @returns {Promise<>} A promise that resolves to the symbol result.\n\t */\n\tconst getSymbol = useCallback(\n\t\tasync (params: GetSymbolParams) => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getSymbol(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves a token by its index using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to get the token by index.\n\t * @returns A promise that resolves to the token data.\n\t */\n\tconst getTokenByIndex = useCallback(\n\t\tasync (params: GetTokenByIndexParams): Promise<GetTokenByIndexData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getTokenByIndex(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the token of an owner by index using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to get the token of an owner by index.\n\t * @returns A promise that resolves to the data of the token of the owner by index.\n\t */\n\tconst getTokenOfOwnerByIndex = useCallback(\n\t\tasync (\n\t\t\tparams: GetTokenOfOwnerByIndexParams,\n\t\t): Promise<GetTokenOfOwnerByIndexData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getTokenOfOwnerByIndex(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the token URI using the Lynex SDK.\n\t *\n\t * @param {GetTokenUriParams} params - The parameters required to get the token URI.\n\t * @returns {Promise<GetTokenUriData>} A promise that resolves to the token URI data.\n\t */\n\tconst getTokenUri = useCallback(\n\t\tasync (params: GetTokenUriParams): Promise<GetTokenUriData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getTokenUri(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the top APR pools using the Lynex SDK.\n\t *\n\t * @param {GetTopAprPoolsParams} params - The parameters required to fetch the top APR pools.\n\t * @returns {Promise<GetTopAprPoolsData>} A promise that resolves to the data of the top APR pools.\n\t */\n\tconst getTopAprPools = useCallback(\n\t\tasync (params: GetTopAprPoolsParams): Promise<GetTopAprPoolsData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getTopAprPools(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the total number of NFTs minted using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to get the total number of NFTs minted.\n\t * @returns A promise that resolves to the data containing the total number of NFTs minted.\n\t */\n\tconst getTotalNftsMinted = useCallback(\n\t\tasync (\n\t\t\tparams: GetTotalNftsMintedParams,\n\t\t): Promise<GetTotalNftsMintedData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getTotalNftsMinted(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the total supply using the Lynex SDK.\n\t *\n\t * @param {GetTotalSupplyParams4} params - The parameters required to get the total supply.\n\t * @returns {Promise<GetTotalSupplyOutput>} A promise that resolves to the total supply output.\n\t */\n\tconst getTotalSupply = useCallback(\n\t\tasync (params: GetTotalSupplyParams4): Promise<GetTotalSupplyOutput> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getTotalSupply(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the total value locked (TVL) from the Lynex SDK.\n\t *\n\t * @returns {Promise<GetTotalValueLockedData>} A promise that resolves to the total value locked data.\n\t */\n\tconst getTotalValueLocked =\n\t\tuseCallback(async (): Promise<GetTotalValueLockedData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getTotalValueLocked();\n\t\t}, [moon]);\n\n\t/**\n\t * Retrieves the total weight using the Lynex SDK.\n\t *\n\t * @param {GetTotalWeightParams} params - The parameters required to get the total weight.\n\t * @returns {Promise<GetTotalWeightData>} A promise that resolves to the total weight data.\n\t */\n\tconst getTotalWeight = useCallback(\n\t\tasync (params: GetTotalWeightParams): Promise<GetTotalWeightData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getTotalWeight(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the vested payout data using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to get the vested payout.\n\t * @returns A promise that resolves to the vested payout data.\n\t */\n\tconst getVestedPayout = useCallback(\n\t\tasync (params: GetVestedPayoutParams): Promise<GetVestedPayoutData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getVestedPayout(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the vested payout at a specific time using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to get the vested payout at a specific time.\n\t * @returns A promise that resolves to the vested payout data.\n\t */\n\tconst getVestedPayoutAtTime = useCallback(\n\t\tasync (\n\t\t\tparams: GetVestedPayoutAtTimeParams,\n\t\t): Promise<GetVestedPayoutAtTimeData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getVestedPayoutAtTime(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the vesting payout data using the Lynex SDK.\n\t *\n\t * @param {GetVestingPayoutParams} params - The parameters required to get the vesting payout.\n\t * @returns {Promise<GetVestingPayoutData>} A promise that resolves to the vesting payout data.\n\t */\n\tconst getVestingPayout = useCallback(\n\t\tasync (params: GetVestingPayoutParams): Promise<GetVestingPayoutData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getVestingPayout(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the vesting period data using the Lynex SDK.\n\t *\n\t * @param {GetVestingPeriodParams} params - The parameters required to get the vesting period.\n\t * @returns {Promise<GetVestingPeriodData>} A promise that resolves to the vesting period data.\n\t */\n\tconst getVestingPeriod = useCallback(\n\t\tasync (params: GetVestingPeriodParams): Promise<GetVestingPeriodData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getVestingPeriod(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches votes data using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to fetch the votes.\n\t * @returns A promise that resolves to the votes data.\n\t */\n\tconst getVotes = useCallback(\n\t\tasync (params: GetVotesParams): Promise<GetVotesData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getVotes(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches weight data using the Lynex SDK.\n\t *\n\t * @param {GetWeightsParams} params - The parameters required to fetch the weights.\n\t * @returns {Promise<GetWeightsData>} A promise that resolves to the weight data.\n\t */\n\tconst getWeights = useCallback(\n\t\tasync (params: GetWeightsParams): Promise<GetWeightsData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getWeights(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves WETH (Wrapped Ether) using the Lynex SDK.\n\t *\n\t * @param {GetWethParams2} params - The parameters required to get WETH.\n\t * @returns {Promise<GetWethResult>} A promise that resolves to the result of the WETH retrieval.\n\t */\n\tconst getWeth = useCallback(\n\t\tasync (params: GetWethParams2): Promise<GetWethResult> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.getWeth(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Checks if the given parameters are approved for all using the Lynex SDK.\n\t *\n\t * @param params - The parameters required to check approval status.\n\t * @returns A promise that resolves to the result of the approval check.\n\t */\n\tconst isApprovedForAll = useCallback(\n\t\tasync (params: IsApprovedForAllParams) => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.isApprovedForAll(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Determines if the given parameters correspond to a gauge using the Lynex SDK.\n\t *\n\t * @param {IsGaugeParams} params - The parameters to check if they correspond to a gauge.\n\t * @returns {Promise<IsGaugeData>} A promise that resolves to the data indicating if the parameters correspond to a gauge.\n\t */\n\tconst isGauge = useCallback(\n\t\tasync (params: IsGaugeParams): Promise<IsGaugeData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.isGauge(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Checks if the given parameters are whitelisted using the Lynex SDK.\n\t *\n\t * @param params - The parameters to check for whitelisting.\n\t * @returns A promise that resolves to the whitelisted data.\n\t */\n\tconst isWhitelisted = useCallback(\n\t\tasync (params: IsWhitelistedParams): Promise<IsWhitelistedData> => {\n\t\t\tconst lynexSDK = getLynexSDK();\n\t\t\treturn lynexSDK.isWhitelisted(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\taddLiquidity,\n\t\taddLiquidityEth,\n\t\tapprove,\n\t\tburn,\n\t\tcalculateOptimalVoteDistribution,\n\t\tcheckpoint,\n\t\tcheckpointDelegatee,\n\t\tclaim,\n\t\tclaimBribes,\n\t\tclaimFees,\n\t\tclaimRewards,\n\t\tcreateDelegatedLockFor,\n\t\tcreateGauge,\n\t\tcreateLock,\n\t\tcreateLockFor,\n\t\tdelegate,\n\t\tdelegateBySig,\n\t\tdistribute,\n\t\tgetAmountOut,\n\t\tgetAmountsOut,\n\t\tgetApproved,\n\t\tgetAssetByAddress,\n\t\tgetAssets,\n\t\tgetBalanceOf,\n\t\tgetBalanceOfNft,\n\t\tgetBalanceOfNftAt,\n\t\tgetDelegates,\n\t\tgetFactory,\n\t\tgetLastVoted,\n\t\tgetLockDetails,\n\t\tgetName,\n\t\tgetOwnerOf,\n\t\tgetPastVotes,\n\t\tgetPoolByAddress,\n\t\tgetPools,\n\t\tgetPoolsByType,\n\t\tgetPoolVoteLength,\n\t\tgetSymbol,\n\t\tgetTokenByIndex,\n\t\tgetTokenOfOwnerByIndex,\n\t\tgetTokenUri,\n\t\tgetTopAprPools,\n\t\tgetTotalNftsMinted,\n\t\tgetTotalSupply,\n\t\tgetTotalValueLocked,\n\t\tgetTotalWeight,\n\t\tgetVestedPayout,\n\t\tgetVestedPayoutAtTime,\n\t\tgetVestingPayout,\n\t\tgetVestingPeriod,\n\t\tgetVotes,\n\t\tgetWeights,\n\t\tgetWeth,\n\t\tglobalCheckpoint,\n\t\tincreaseLockAmount,\n\t\tincreaseUnlockTime,\n\t\tisApprovedForAll,\n\t\tisGauge,\n\t\tisWhitelisted,\n\t\tkillGauge,\n\t\tmerge,\n\t\tnotifyRewardAmount,\n\t\tpoke,\n\t\treset,\n\t\treviveGauge,\n\t\tsafeTransferFrom,\n\t\tsetApprovalForAll,\n\t\tsetClaimApproval,\n\t\tsetClaimApprovalForAll,\n\t\tsplit,\n\t\tswapExactEthForTokens,\n\t\tswapExactTokensForEth,\n\t\tswapExactTokensForTokens,\n\t\ttransferFrom,\n\t\tunlockPermanent,\n\t\tvote,\n\t\tvoteWithOptimalDistribution,\n\t\twhitelist,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tLendingPool,\n\tLendingPoolGetAddressesProviderParams,\n\tLendingPoolGetFlashLoanPremiumTotalParams,\n\tLendingPoolGetLendingPoolRevisionParams,\n\tLendingPoolGetMaxNumberReservesParams,\n\tLendingPoolGetMaxStableRateBorrowSizePercentParams,\n\tLendingPoolGetReserveDataParams,\n\tLendingPoolGetReservesListParams,\n\tLendingPoolGetUserAccountDataParams,\n\tLendingPoolInputBody,\n\tLendingPoolIsPausedParams,\n\tLeverager,\n\tLeveragerGetAddressesProviderParams,\n\tLeveragerGetDefaultAdminRoleParams,\n\tLeveragerGetLendingPoolParams,\n\tLeveragerGetMinHfParams,\n\tLeveragerGetRoleAdminParams,\n\tLeveragerGetWethParams,\n\tLeveragerHasRoleParams,\n\tLeveragerInputBody,\n\tLeveragerIsPausedParams,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\nexport type MrpContractMapping = {\n\t[key: string]: {\n\t\tlendingPool: string;\n\t\tleverager: string;\n\t};\n};\n\n/**\n * A mapping of MRP (Moon React Protocol) contract addresses for different network IDs.\n * Each network ID maps to an object containing the addresses for the lending pool and leverager contracts.\n *\n * @type {MrpContractMapping}\n *\n * @property {Object} 34443 - Contract addresses for network ID 34443.\n * @property {string} 34443.lendingPool - The address of the lending pool contract.\n * @property {string} 34443.leverager - The address of the leverager contract.\n *\n * @property {Object} 56 - Contract addresses for network ID 56.\n * @property {string} 56.lendingPool - The address of the lending pool contract.\n * @property {string} 56.leverager - The address of the leverager contract.\n *\n * @property {Object} 5000 - Contract addresses for network ID 5000.\n * @property {string} 5000.lendingPool - The address of the lending pool contract.\n * @property {string} 5000.leverager - The address of the leverager contract.\n *\n * @property {Object} 534352 - Contract addresses for network ID 534352.\n * @property {string} 534352.lendingPool - The address of the lending pool contract.\n * @property {string} 534352.leverager - The address of the leverager contract.\n */\nexport const mrpContractMapping: MrpContractMapping = {\n\t// mode\n\t\"34443\": {\n\t\tlendingPool: \"0xB702cE183b4E1Faa574834715E5D4a6378D0eEd3\",\n\t\tleverager: \"0x9A6Add057603d3366ac3cA97Fe80126b7f96af05\",\n\t},\n\t\"56\": {\n\t\tlendingPool: \"0xf5Ab6C920af8f1bd4b16fDa9e7EF3173ffb616f7\",\n\t\tleverager: \"0x895103307f051e38Bca5113AaC4D53b262C1efb7\",\n\t},\n\t\"5000\": {\n\t\tlendingPool: \"0x7c9C6F5BEd9Cfe5B9070C7D3322CF39eAD2F9492\",\n\t\tleverager: \"0xEDc83309549e36f3c7FD8c2C5C54B4c8e5FA00FC\",\n\t},\n\t\"534352\": {\n\t\tlendingPool: \"0x4cE1A1eC13DBd9084B1A741b036c061b2d58dABf\",\n\t\tleverager: \"0x9df4Ac62F9E435DbCD85E06c990a7f0ea32739a\",\n\t},\n};\n\n/**\n * Custom hook that provides various functionalities related to leveraging and lending using the Moon SDK.\n *\n * This hook includes methods for leveraging ERC20 tokens and native assets, deleveraging, executing operations,\n * and interacting with the lending pool. It also provides utility functions for fetching data and managing roles.\n *\n * @returns {Object} An object containing various methods for leveraging, lending, and managing roles.\n *\n * @example\n * ```typescript\n * const {\n *   leverageErc20,\n *   leverageNative,\n *   deleverageErc20,\n *   deleverageNative,\n *   executeOperation,\n *   getAddressesProvider,\n *   getDefaultAdminRole,\n *   getLendingPool,\n *   getMinHf,\n *   getRoleAdmin,\n *   getWeth,\n *   grantRole,\n *   hasRole,\n *   isPaused,\n *   supportsInterface,\n *   pause,\n *   renounceRole,\n *   revokeRole,\n *   unpause,\n *   getLendingPoolAddressesProvider,\n *   getFlashLoanPremiumTotal,\n *   getLendingPoolRevision,\n *   getMaxNumberReserves,\n *   getMaxStableRateBorrowSizePercent,\n *   getReserveData,\n *   getReservesList,\n *   getUserAccountData,\n *   borrow,\n *   deposit,\n *   flashLoan,\n *   liquidationCall,\n *   repay,\n *   isLendingPoolPaused,\n *   setUserUseReserveAsCollateral,\n *   swapBorrowRateMode\n * } = useMRP();\n *\n * // Example usage:\n * leverageErc20({ accountName: 'exampleAccount', data: { /* LeveragerInputBody data *\\/ } });\n * ```\n */\nexport const useMRP = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\n\tconst prepareTransaction = (\n\t\taccount: string,\n\t\ttransaction: LeveragerInputBody | LendingPoolInputBody,\n\t) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\t/**\n\t * Retrieves the Leverager SDK instance from the Moon object.\n\t * Utilizes the `useCallback` hook to memoize the function.\n\t * Throws an error if the Leverager SDK is not initialized.\n\t *\n\t * @returns {Leverager} The Leverager SDK instance.\n\t * @throws {Error} If the Leverager SDK is not initialized.\n\t */\n\tconst getLeveragerSDK = useCallback((): Leverager => {\n\t\tconst leveragerSDK = moon?.getLeveragerSDK();\n\t\tif (!leveragerSDK) throw new Error(\"Moon LeveragerSDK not initialized\");\n\t\treturn leveragerSDK;\n\t}, [moon]);\n\n\t/**\n\t * Retrieves the LendingPool SDK instance from the Moon object.\n\t *\n\t * @returns {LendingPool} The LendingPool SDK instance.\n\t * @throws {Error} If the LendingPool SDK is not initialized.\n\t */\n\tconst getLendingPoolSDK = useCallback((): LendingPool => {\n\t\tconst lendingPoolSDK = moon?.getLendingPoolSDK();\n\t\tif (!lendingPoolSDK) throw new Error(\"Moon LendingPoolSDK not initialized\");\n\t\treturn lendingPoolSDK;\n\t}, [moon]);\n\n\t/**\n\t * Leverages ERC20 tokens using the provided payload.\n\t *\n\t * @param payload - An object containing the account name and data required for the leverage operation.\n\t * @param payload.accountName - The name of the account to leverage.\n\t * @param payload.data - The data required for the leverage operation.\n\t *\n\t * @returns A promise that resolves with the result of the leverage operation.\n\t */\n\tconst leverageErc20 = useCallback(\n\t\tasync (payload: { accountName: string; data: LeveragerInputBody }) => {\n\t\t\treturn handleTransaction(\"leverageErc20\", async () => {\n\t\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await leveragerSDK.leveragerLeverageErc20(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LeveragerInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\t/**\n\t * Leverages native assets using the provided payload.\n\t *\n\t * @param payload - An object containing the account name and data required for leveraging.\n\t * @param payload.accountName - The name of the account to leverage.\n\t * @param payload.data - The data required for the leveraging process.\n\t * @returns A promise that resolves with the result of the leveraging transaction.\n\t */\n\tconst leverageNative = useCallback(\n\t\tasync (payload: { accountName: string; data: LeveragerInputBody }) => {\n\t\t\treturn handleTransaction(\"leverageNative\", async () => {\n\t\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await leveragerSDK.leveragerLeverageNative(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LeveragerInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * A hook that provides a function to deleverage an ERC20 token.\n\t *\n\t * @param payload - The payload containing the account name and data for the deleverage transaction.\n\t * @param payload.accountName - The name of the account to perform the deleverage operation on.\n\t * @param payload.data - The data required for the deleverage transaction.\n\t *\n\t * @returns A promise that resolves with the result of the deleverage transaction.\n\t *\n\t * @example\n\t * ```typescript\n\t * const payload = {\n\t *   accountName: 'exampleAccount',\n\t *   data: {\n\t *     // LeveragerInputBody data here\n\t *   }\n\t * };\n\t *\n\t * deleverageErc20(payload).then(response => {\n\t *   console.log('Deleverage successful:', response);\n\t * }).catch(error => {\n\t *   console.error('Deleverage failed:', error);\n\t * });\n\t * ```\n\t */\n\tconst deleverageErc20 = useCallback(\n\t\tasync (payload: { accountName: string; data: LeveragerInputBody }) => {\n\t\t\treturn handleTransaction(\"deleverageErc20\", async () => {\n\t\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await leveragerSDK.leveragerDeleverageErc20(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LeveragerInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Handles the deleveraging of native assets for a given account.\n\t *\n\t * @param payload - The payload containing the account name and data for the deleveraging transaction.\n\t * @param payload.accountName - The name of the account to deleverage.\n\t * @param payload.data - The data required for the deleveraging transaction.\n\t * @returns A promise that resolves with the result of the deleveraging transaction.\n\t */\n\tconst deleverageNative = useCallback(\n\t\tasync (payload: { accountName: string; data: LeveragerInputBody }) => {\n\t\t\treturn handleTransaction(\"deleverageNative\", async () => {\n\t\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await leveragerSDK.leveragerDeleverageNative(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LeveragerInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Executes a leverager operation using the provided payload.\n\t *\n\t * @param payload - An object containing the account name and data for the operation.\n\t * @param payload.accountName - The name of the account to execute the operation on.\n\t * @param payload.data - The data required for the leverager operation.\n\t *\n\t * @returns A promise that resolves with the result of the leverager operation.\n\t */\n\tconst executeOperation = useCallback(\n\t\tasync (payload: { accountName: string; data: LeveragerInputBody }) => {\n\t\t\treturn handleTransaction(\"executeOperation\", async () => {\n\t\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await leveragerSDK.leveragerExecuteOperation(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LeveragerInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the addresses provider using the Leverager SDK.\n\t *\n\t * @param {GetAddressesProviderParams4} params - The parameters required to get the addresses provider.\n\t * @returns {Promise<AddressesProvider>} A promise that resolves to the addresses provider.\n\t */\n\tconst getAddressesProvider = useCallback(\n\t\tasync (params: LeveragerGetAddressesProviderParams) => {\n\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\treturn leveragerSDK.leveragerGetAddressesProvider(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the default admin role using the Leverager SDK.\n\t *\n\t * @param params - The parameters required to get the default admin role.\n\t * @returns A promise that resolves to the default admin role.\n\t */\n\tconst getDefaultAdminRole = useCallback(\n\t\tasync (params: LeveragerGetDefaultAdminRoleParams) => {\n\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\treturn leveragerSDK.leveragerGetDefaultAdminRole(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the lending pool details using the Leverager SDK.\n\t *\n\t * @param {GetLendingPoolParams} params - The parameters required to get the lending pool.\n\t * @returns {Promise<LendingPool>} A promise that resolves to the lending pool details.\n\t */\n\tconst getLendingPool = useCallback(\n\t\tasync (params: LeveragerGetLendingPoolParams) => {\n\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\treturn leveragerSDK.leveragerGetLendingPool(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the minimum health factor using the Leverager SDK.\n\t *\n\t * @param params - The parameters required to get the minimum health factor.\n\t * @returns A promise that resolves to the minimum health factor.\n\t */\n\tconst getMinHf = useCallback(\n\t\tasync (params: LeveragerGetMinHfParams) => {\n\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\treturn leveragerSDK.leveragerGetMinHf(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the role admin using the Leverager SDK.\n\t *\n\t * @param {GetRoleAdminParams} params - The parameters required to get the role admin.\n\t * @returns {Promise<any>} A promise that resolves to the role admin data.\n\t */\n\tconst getRoleAdmin = useCallback(\n\t\tasync (params: LeveragerGetRoleAdminParams) => {\n\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\treturn leveragerSDK.leveragerGetRoleAdmin(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves WETH (Wrapped Ether) using the Leverager SDK.\n\t *\n\t * @param {GetWethParams} params - The parameters required to get WETH.\n\t * @returns {Promise<any>} A promise that resolves to the WETH data.\n\t */\n\tconst getWeth = useCallback(\n\t\tasync (params: LeveragerGetWethParams) => {\n\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\treturn leveragerSDK.leveragerGetWeth(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Grants a role to a specified account using the Leverager SDK.\n\t *\n\t * @param payload - An object containing the account name and the data required for the transaction.\n\t * @param payload.accountName - The name of the account to which the role will be granted.\n\t * @param payload.data - The data required for the Leverager SDK transaction.\n\t * @returns A promise that resolves with the result of the transaction.\n\t */\n\tconst grantRole = useCallback(\n\t\tasync (payload: { accountName: string; data: LeveragerInputBody }) => {\n\t\t\treturn handleTransaction(\"grantRole\", async () => {\n\t\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await leveragerSDK.leveragerGrantRole(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LeveragerInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Checks if a user has a specific role using the Leverager SDK.\n\t *\n\t * @param {HasRoleParams} params - The parameters required to check the role.\n\t * @returns {Promise<boolean>} - A promise that resolves to a boolean indicating if the user has the role.\n\t */\n\tconst hasRole = useCallback(\n\t\tasync (params: LeveragerHasRoleParams) => {\n\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\treturn leveragerSDK.leveragerHasRole(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Checks if the leverager SDK is paused based on the provided parameters.\n\t *\n\t * @param {IsPausedParams2} params - The parameters to check if the SDK is paused.\n\t * @returns {Promise<boolean>} A promise that resolves to a boolean indicating if the SDK is paused.\n\t */\n\tconst isPaused = useCallback(\n\t\tasync (params: LeveragerIsPausedParams) => {\n\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\treturn leveragerSDK.leveragerIsPaused(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Pauses a transaction for a given account using the Leverager SDK.\n\t *\n\t * @param payload - The payload containing the account name and data for the transaction.\n\t * @param payload.accountName - The name of the account for which the transaction is to be paused.\n\t * @param payload.data - The data required for the Leverager transaction.\n\t * @returns A promise that resolves with the result of the transaction handling.\n\t */\n\tconst pause = useCallback(\n\t\tasync (payload: { accountName: string; data: LeveragerInputBody }) => {\n\t\t\treturn handleTransaction(\"pause\", async () => {\n\t\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await leveragerSDK.leveragerPause(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LeveragerInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Renounces a role for a given account using the Leverager SDK.\n\t *\n\t * @param payload - The payload containing the account name and data.\n\t * @param payload.accountName - The name of the account renouncing the role.\n\t * @param payload.data - The data required for the transaction.\n\t * @returns A promise that resolves with the transaction response.\n\t */\n\tconst renounceRole = useCallback(\n\t\tasync (payload: { accountName: string; data: LeveragerInputBody }) => {\n\t\t\treturn handleTransaction(\"renounceRole\", async () => {\n\t\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await leveragerSDK.leveragerRenounceRole(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LeveragerInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Revokes a role for a specified account using the Leverager SDK.\n\t *\n\t * @param payload - The payload containing the account name and data for the transaction.\n\t * @param payload.accountName - The name of the account from which the role will be revoked.\n\t * @param payload.data - The data required for the Leverager SDK transaction.\n\t * @returns A promise that resolves with the result of the transaction.\n\t */\n\tconst revokeRole = useCallback(\n\t\tasync (payload: { accountName: string; data: LeveragerInputBody }) => {\n\t\t\treturn handleTransaction(\"revokeRole\", async () => {\n\t\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await leveragerSDK.leveragerRevokeRole(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LeveragerInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Unpauses a transaction for a given account using the Leverager SDK.\n\t *\n\t * @param payload - The payload containing the account name and data for the transaction.\n\t * @param payload.accountName - The name of the account to unpause the transaction for.\n\t * @param payload.data - The data required for the Leverager SDK to unpause the transaction.\n\t * @returns A promise that resolves with the result of the unpause transaction.\n\t *\n\t * @example\n\t * ```typescript\n\t * const payload = {\n\t *   accountName: 'exampleAccount',\n\t *   data: {\n\t *     // LeveragerInputBody data here\n\t *   }\n\t * };\n\t * await unpause(payload);\n\t * ```\n\t */\n\tconst unpause = useCallback(\n\t\tasync (payload: { accountName: string; data: LeveragerInputBody }) => {\n\t\t\treturn handleTransaction(\"unpause\", async () => {\n\t\t\t\tconst leveragerSDK = getLeveragerSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await leveragerSDK.leveragerUnpause(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LeveragerInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the lending pool addresses provider using the provided parameters.\n\t *\n\t * @param {GetAddressesProviderParams2} params - The parameters required to get the addresses provider.\n\t * @returns {Promise<AddressesProvider>} A promise that resolves to the addresses provider.\n\t */\n\tconst getLendingPoolAddressesProvider = useCallback(\n\t\tasync (params: LendingPoolGetAddressesProviderParams) => {\n\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\treturn lendingPoolSDK.lendingPoolGetAddressesProvider(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the total premium for a flash loan.\n\t *\n\t * @param {GetFlashLoanPremiumTotalParams} params - The parameters required to get the flash loan premium total.\n\t * @returns {Promise<number>} - A promise that resolves to the total premium amount.\n\t */\n\tconst getFlashLoanPremiumTotal = useCallback(\n\t\tasync (params: LendingPoolGetFlashLoanPremiumTotalParams) => {\n\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\treturn lendingPoolSDK.lendingPoolGetFlashLoanPremiumTotal(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the lending pool revision using the provided parameters.\n\t *\n\t * @param {GetLendingPoolRevisionParams} params - The parameters required to get the lending pool revision.\n\t * @returns {Promise<any>} A promise that resolves to the lending pool revision.\n\t */\n\tconst getLendingPoolRevision = useCallback(\n\t\tasync (params: LendingPoolGetLendingPoolRevisionParams) => {\n\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\treturn lendingPoolSDK.lendingPoolGetLendingPoolRevision(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the maximum number of reserves using the lending pool SDK.\n\t *\n\t * @param params - The parameters required to get the maximum number of reserves.\n\t * @returns A promise that resolves to the maximum number of reserves.\n\t */\n\tconst getMaxNumberReserves = useCallback(\n\t\tasync (params: LendingPoolGetMaxNumberReservesParams) => {\n\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\treturn lendingPoolSDK.lendingPoolGetMaxNumberReserves(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves the maximum stable rate borrow size percentage.\n\t *\n\t * @param {GetMaxStableRateBorrowSizePercentParams} params - The parameters required to get the maximum stable rate borrow size percentage.\n\t * @returns {Promise<number>} A promise that resolves to the maximum stable rate borrow size percentage.\n\t */\n\tconst getMaxStableRateBorrowSizePercent = useCallback(\n\t\tasync (params: LendingPoolGetMaxStableRateBorrowSizePercentParams) => {\n\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\treturn lendingPoolSDK.lendingPoolGetMaxStableRateBorrowSizePercent(\n\t\t\t\tparams,\n\t\t\t);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches reserve data using the lending pool SDK.\n\t *\n\t * @param {GetReserveDataParams2} params - The parameters required to get the reserve data.\n\t * @returns {Promise<any>} A promise that resolves with the reserve data.\n\t */\n\tconst getReserveData = useCallback(\n\t\tasync (params: LendingPoolGetReserveDataParams) => {\n\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\treturn lendingPoolSDK.lendingPoolGetReserveData(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the list of reserves using the Lending Pool SDK.\n\t *\n\t * @param params - The parameters required to get the reserves list.\n\t * @returns A promise that resolves to the list of reserves.\n\t */\n\tconst getReservesList = useCallback(\n\t\tasync (params: LendingPoolGetReservesListParams) => {\n\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\treturn lendingPoolSDK.lendingPoolGetReservesList(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches user account data from the lending pool SDK.\n\t *\n\t * @param params - The parameters required to get user account data.\n\t * @returns A promise that resolves to the user account data.\n\t */\n\tconst getUserAccountData = useCallback(\n\t\tasync (params: LendingPoolGetUserAccountDataParams) => {\n\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\treturn lendingPoolSDK.lendingPoolGetUserAccountData(params);\n\t\t},\n\t\t[moon],\n\t);\n\t/**\n\t * Borrow funds from the lending pool.\n\t *\n\t * @param payload - The payload containing account information and lending pool input data.\n\t * @param payload.accountName - The name of the account borrowing the funds.\n\t * @param payload.data - The input data required for the lending pool transaction.\n\t * @returns A promise that resolves with the result of the borrowing transaction.\n\t */\n\tconst borrow = useCallback(\n\t\tasync (payload: { accountName: string; data: LendingPoolInputBody }) => {\n\t\t\treturn handleTransaction(\"borrow\", async () => {\n\t\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await lendingPoolSDK.lendingPoolBorrow(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LendingPoolInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Handles the deposit transaction using the LendingPool SDK.\n\t *\n\t * @param payload - An object containing the account name and the data for the lending pool input.\n\t * @param payload.accountName - The name of the account making the deposit.\n\t * @param payload.data - The data required for the lending pool input.\n\t * @returns A promise that resolves with the result of the transaction.\n\t */\n\tconst deposit = useCallback(\n\t\tasync (payload: { accountName: string; data: LendingPoolInputBody }) => {\n\t\t\treturn handleTransaction(\"deposit\", async () => {\n\t\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await lendingPoolSDK.lendingPoolDeposit(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LendingPoolInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Executes a flash loan transaction using the LendingPool SDK.\n\t *\n\t * @param payload - The payload containing the account name and lending pool input data.\n\t * @param payload.accountName - The name of the account initiating the flash loan.\n\t * @param payload.data - The input data required for the lending pool transaction.\n\t *\n\t * @returns A promise that resolves with the result of the flash loan transaction.\n\t */\n\tconst flashLoan = useCallback(\n\t\tasync (payload: { accountName: string; data: LendingPoolInputBody }) => {\n\t\t\treturn handleTransaction(\"flashLoan\", async () => {\n\t\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await lendingPoolSDK.lendingPoolFlashLoan(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LendingPoolInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Handles the liquidation call transaction.\n\t *\n\t * @param payload - The payload containing the account name and lending pool input data.\n\t * @param payload.accountName - The name of the account to be liquidated.\n\t * @param payload.data - The input data for the lending pool transaction.\n\t * @returns A promise that resolves with the result of the handled transaction.\n\t */\n\tconst liquidationCall = useCallback(\n\t\tasync (payload: { accountName: string; data: LendingPoolInputBody }) => {\n\t\t\treturn handleTransaction(\"liquidationCall\", async () => {\n\t\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await lendingPoolSDK.lendingPoolLiquidationCall(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LendingPoolInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Handles the repayment transaction using the LendingPool SDK.\n\t *\n\t * @param payload - The payload containing the account name and lending pool input data.\n\t * @param payload.accountName - The name of the account to repay from.\n\t * @param payload.data - The data required for the lending pool transaction.\n\t * @returns A promise that resolves with the result of the transaction handling.\n\t */\n\tconst repay = useCallback(\n\t\tasync (payload: { accountName: string; data: LendingPoolInputBody }) => {\n\t\t\treturn handleTransaction(\"repay\", async () => {\n\t\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await lendingPoolSDK.lendingPoolRepay(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LendingPoolInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Checks if the lending pool is paused.\n\t *\n\t * @param {IsPausedParams} params - The parameters required to check if the lending pool is paused.\n\t * @returns {Promise<boolean>} A promise that resolves to a boolean indicating whether the lending pool is paused.\n\t */\n\tconst isLendingPoolPaused = useCallback(\n\t\tasync (params: LendingPoolIsPausedParams) => {\n\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\treturn lendingPoolSDK.lendingPoolIsPaused(params);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Sets the user's preference to use a reserve as collateral in the lending pool.\n\t *\n\t * @param payload - The payload containing the account name and lending pool input data.\n\t * @param payload.accountName - The name of the user's account.\n\t * @param payload.data - The input data for the lending pool.\n\t * @returns A promise that resolves when the transaction is handled.\n\t */\n\tconst setUserUseReserveAsCollateral = useCallback(\n\t\tasync (payload: { accountName: string; data: LendingPoolInputBody }) => {\n\t\t\treturn handleTransaction(\"setUserUseReserveAsCollateral\", async () => {\n\t\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\t\treturn lendingPoolSDK.lendingPoolSetUserUseReserveAsCollateral(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Swaps the borrow rate mode for a given account and lending pool data.\n\t *\n\t * @param payload - The payload containing the account name and lending pool input data.\n\t * @param payload.accountName - The name of the account for which the borrow rate mode is to be swapped.\n\t * @param payload.data - The lending pool input data required for the swap operation.\n\t * @returns A promise that resolves when the transaction is handled.\n\t */\n\tconst swapBorrowRateMode = useCallback(\n\t\tasync (payload: { accountName: string; data: LendingPoolInputBody }) => {\n\t\t\treturn handleTransaction(\"swapBorrowRateMode\", async () => {\n\t\t\t\tconst lendingPoolSDK = getLendingPoolSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\n\t\t\t\tconst response = await lendingPoolSDK.lendingPoolSwapBorrowRateMode(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData as LendingPoolInputBody,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\t// Leverager functions\n\t\tleverageErc20,\n\t\tleverageNative,\n\t\tdeleverageErc20,\n\t\tdeleverageNative,\n\t\texecuteOperation,\n\t\tgetAddressesProvider,\n\t\tgetDefaultAdminRole,\n\t\tgetLendingPool,\n\t\tgetMinHf,\n\t\tgetRoleAdmin,\n\t\tgetWeth,\n\t\tgrantRole,\n\t\thasRole,\n\t\tisPaused,\n\t\tpause,\n\t\trenounceRole,\n\t\trevokeRole,\n\t\tunpause,\n\n\t\t// LendingPool functions\n\t\tborrow,\n\t\tdeposit,\n\t\tflashLoan,\n\t\tgetLendingPoolAddressesProvider,\n\t\tgetFlashLoanPremiumTotal,\n\t\tgetLendingPoolRevision,\n\t\tgetMaxNumberReserves,\n\t\tgetMaxStableRateBorrowSizePercent,\n\t\tgetReserveData,\n\t\tgetReservesList,\n\t\tgetUserAccountData,\n\t\tisLendingPoolPaused,\n\t\tliquidationCall,\n\t\trepay,\n\t\tsetUserUseReserveAsCollateral,\n\t\tswapBorrowRateMode,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useChains, useMoonTransaction } from \"@/hooks\";\nimport type {\n\tOdos,\n\tOdosAPIResponseOdosExecuteFunctionResult,\n\tOdosGetRouterAddressParams,\n\tOdosGetSupportedTokensParams,\n\tOdosSwapInputBody,\n\tOdosAssembleLimitOrderPayload,\n\tOdosCreateLimitOrderPayload,\n\tOdosCancelLimitOrderParams,\n\tOdosGetLimitOrdersParams,\n} from \"@moonup/moon-api\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\n\n/**\n * Custom hook to interact with the Odos SDK.\n *\n * @param {number} [chainId] - Optional chain ID to use. Defaults to the chain ID from the context or 1 if not provided.\n * @returns {Object} - An object containing functions and queries to interact with the Odos SDK.\n * @property {Function} getRouterAddress - Function to get the router address from the Odos SDK.\n * @property {Function} getQuoteOdos - Function to get a quote from the Odos SDK.\n * @property {Function} swapOdos - Function to perform a swap using the Odos SDK.\n * @property {Function} getSupportedTokens - Function to get supported tokens from the Odos SDK.\n * @property {Object} supportedTokensQuery - React Query object to fetch supported tokens.\n */\nexport const useOdos = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\tconst { selectedChain } = useChains();\n\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\n\tconst prepareTransaction = (account: string, transaction: any) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn transactionData;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\t/**\n\t * Fetches the supported tokens for the selected chain using the Odos SDK.\n\t *\n\t * @constant\n\t * @type {QueryObserverResult<OdosAPIResponseOdosExecuteFunctionResult, Error>}\n\t *\n\t * @param {Array} queryKey - The key for the query, consisting of 'odosGetSupportedTokens' and the selected chain ID.\n\t * @param {Function} queryFn - The function to fetch the supported tokens from the Odos SDK.\n\t * @param {number} staleTime - The time in milliseconds for which the query result is considered fresh. Defaults to 24 hours.\n\t *\n\t * @throws {Error} If the Moon Lifi SDK is not initialized.\n\t *\n\t * @returns {OdosAPIResponseOdosExecuteFunctionResult} The response data containing the supported tokens.\n\t */\n\tconst supportedTokensQuery = useQuery({\n\t\tqueryKey: [\"odosGetSupportedTokens\", selectedChain?.chain_id],\n\t\tqueryFn: async () => {\n\t\t\tconst odosSDK = moon?.getOdosSDK();\n\t\t\tif (!odosSDK) throw new Error(\"Moon Lifi SDK not initialized\");\n\t\t\tconst response = await odosSDK.odosGetSupportedTokens({\n\t\t\t\tchainId: selectedChain?.chain_id || 1,\n\t\t\t});\n\t\t\tconsole.log(\"response\", response);\n\t\t\tconst tokensFilteredForChain = (response.data as any).data.tokenMap;\n\t\t\tconsole.log(\"tokensFilteredForChain\", tokensFilteredForChain);\n\t\t\tconst kek = Object.keys(tokensFilteredForChain).map((address) => ({\n\t\t\t\taddress,\n\t\t\t\t...tokensFilteredForChain[address],\n\t\t\t}));\n\t\t\tconsole.log(\"odosGetSupportedTokens\", kek);\n\t\t\treturn kek;\n\t\t},\n\t\tstaleTime: 1000 * 60 * 60 * 24,\n\t});\n\n\t/**\n\t * Retrieves the Odos SDK instance.\n\t *\n\t * This function attempts to get the Odos SDK instance from the `moon` object.\n\t * If the SDK is not initialized, it throws an error.\n\t *\n\t * @returns {Odos} The initialized Odos SDK instance.\n\t * @throws {Error} If the Moon Lifi SDK is not initialized.\n\t */\n\tconst getOdosSDK = (): Odos => {\n\t\tconst odosSDK = moon?.getOdosSDK();\n\t\tif (!odosSDK) throw new Error(\"Moon Lifi SDK not initialized\");\n\t\treturn odosSDK;\n\t};\n\n\t/**\n\t * Retrieves the router address using the Odos SDK.\n\t *\n\t * @param payload - The parameters required to get the router address.\n\t * @returns A promise that resolves to the result of the Odos execute function.\n\t */\n\tconst getRouterAddress = useCallback(\n\t\tasync (\n\t\t\tpayload: OdosGetRouterAddressParams,\n\t\t): Promise<OdosAPIResponseOdosExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"getRouterAddressOdos\", async () => {\n\t\t\t\tconst odosSDK = getOdosSDK();\n\t\t\t\tconst response = await odosSDK.odosGetRouterAddress(payload);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the supported tokens using the Odos SDK.\n\t *\n\t * @param payload - The parameters required to get the supported tokens.\n\t * @returns A promise that resolves to the result of the Odos API response.\n\t */\n\tconst getSupportedTokens = useCallback(\n\t\tasync (\n\t\t\tpayload: OdosGetSupportedTokensParams,\n\t\t): Promise<OdosAPIResponseOdosExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"getQuoteLifi\", async () => {\n\t\t\t\tconst odosSDK = getOdosSDK() as Odos;\n\t\t\t\tconst response = await odosSDK.odosGetSupportedTokens(payload);\n\t\t\t\treturn response.data as OdosAPIResponseOdosExecuteFunctionResult;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches a quote from the Odos SDK.\n\t *\n\t * @param payload - The payload containing the account name and data for the quote request.\n\t * @param payload.accountName - The name of the account requesting the quote.\n\t * @param payload.data - The data required for the Odos swap input.\n\t * @returns A promise that resolves to the Odos API response for the execute function result.\n\t */\n\tconst getQuoteOdos = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OdosSwapInputBody;\n\t\t}): Promise<any> => {\n\t\t\treturn handleTransaction(\"getQuoteLifi\", async () => {\n\t\t\t\tconst odosSDK = getOdosSDK();\n\t\t\t\tconst response = await odosSDK.odosGetQuote(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\treturn response.data as any;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Executes a swap operation using the Odos SDK.\n\t *\n\t * @param payload - The payload containing the account name and swap data.\n\t * @param payload.accountName - The name of the account performing the swap.\n\t * @param payload.data - The data required for the swap operation.\n\t * @returns A promise that resolves to the result of the Odos API response.\n\t */\n\tconst swapOdos = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OdosSwapInputBody;\n\t\t}): Promise<OdosAPIResponseOdosExecuteFunctionResult> => {\n\t\t\tconst odosSDK = getOdosSDK();\n\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\tpayload.accountName,\n\t\t\t\tpayload.data,\n\t\t\t);\n\t\t\tconst response = await odosSDK.odosSwapTokens(\n\t\t\t\tpayload.accountName,\n\t\t\t\tpreparedTransaction,\n\t\t\t);\n\t\t\treturn handleWagmiTransaction(response.data);\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Assembles a limit order using the Odos SDK.\n\t *\n\t * @param payload - The payload containing the account name and limit order data.\n\t * @returns A promise that resolves to the result of the Odos API response.\n\t */\n\tconst assembleLimitOrder = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OdosAssembleLimitOrderPayload;\n\t\t}): Promise<any> => {\n\t\t\treturn handleTransaction(\"assembleLimitOrder\", async () => {\n\t\t\t\tconst odosSDK = getOdosSDK();\n\t\t\t\tconst response = await odosSDK.odosAssembleLimitOrder(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Creates a limit order using the Odos SDK.\n\t *\n\t * @param payload - The payload containing the account name and limit order data.\n\t * @returns A promise that resolves to the result of the Odos API response.\n\t */\n\tconst createLimitOrder = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OdosCreateLimitOrderPayload;\n\t\t}): Promise<any> => {\n\t\t\treturn handleTransaction(\"createLimitOrder\", async () => {\n\t\t\t\tconst odosSDK = getOdosSDK();\n\t\t\t\tconst response = await odosSDK.odosCreateLimitOrder(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Cancels a limit order using the Odos SDK.\n\t *\n\t * @param payload - The parameters required to cancel a limit order.\n\t * @returns A promise that resolves to the result of the Odos API response.\n\t */\n\tconst cancelLimitOrder = useCallback(\n\t\tasync (payload: OdosCancelLimitOrderParams): Promise<any> => {\n\t\t\treturn handleTransaction(\"cancelLimitOrder\", async () => {\n\t\t\t\tconst odosSDK = getOdosSDK();\n\t\t\t\tconst response = await odosSDK.odosCancelLimitOrder(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves limit orders using the Odos SDK.\n\t *\n\t * @param payload - The parameters required to get limit orders.\n\t * @returns A promise that resolves to the result of the Odos API response.\n\t */\n\tconst getLimitOrders = useCallback(\n\t\tasync (payload: OdosGetLimitOrdersParams): Promise<any> => {\n\t\t\treturn handleTransaction(\"getLimitOrders\", async () => {\n\t\t\t\tconst odosSDK = getOdosSDK();\n\t\t\t\tconst response = await odosSDK.odosGetLimitOrders(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\tgetRouterAddress,\n\t\tgetQuoteOdos,\n\t\tswapOdos,\n\t\tgetSupportedTokens,\n\t\tsupportedTokensQuery,\n\t\tassembleLimitOrder,\n\t\tcreateLimitOrder,\n\t\tcancelLimitOrder,\n\t\tgetLimitOrders,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tApproveForPolymarketBody,\n\tApproveForPolymarketData,\n\tCancelMarketOrdersBody,\n\tCancelMarketOrdersData,\n\tCancelOrderBody,\n\tCancelOrderData,\n\tCancelOrdersBody,\n\tCancelOrdersData,\n\tCreateMarketBuyOrderBody,\n\tCreateMarketBuyOrderData,\n\tCreateOrderBody,\n\tCreateOrderData,\n\tDropNotificationsBody,\n\tDropNotificationsData,\n\tGetBalanceAllowanceData,\n\tGetBalanceAllowanceParams,\n\tGetMarketData,\n\tGetMarketParams,\n\tGetMarketTradeEventsData,\n\tGetMarketTradeEventsParams,\n\tGetMarketsData,\n\tGetMarketsParams,\n\tGetNotificationsParams1,\n\tGetNotificationsResult,\n\tGetOpenOrdersData,\n\tGetOpenOrdersParams,\n\tGetOrderBookData,\n\tGetOrderBookParams,\n\tGetOrderData,\n\tGetOrderParams,\n\tGetPricesHistoryData,\n\tGetPricesHistoryParams,\n\tGetTradesData,\n\tGetTradesParams,\n\tPolymarket,\n\tPostOrderBody,\n\tPostOrderData,\n\tUpdateBalanceAllowanceBody,\n\tUpdateBalanceAllowanceData,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\n\n/**\n * Custom hook to interact with the Polymarket SDK.\n *\n * This hook provides various functions to interact with the Polymarket SDK, including\n * approving tokens, canceling orders, creating orders, getting market data, and more.\n *\n * @returns An object containing functions to interact with the Polymarket SDK:\n * - `approveForPolymarket`: Approves tokens for use in Polymarket.\n * - `cancelMarketOrders`: Cancels all orders for a specific market.\n * - `cancelOrder`: Cancels a specific order.\n * - `cancelOrders`: Cancels multiple orders.\n * - `createMarketBuyOrder`: Creates a market buy order.\n * - `createOrder`: Creates an order.\n * - `dropNotifications`: Drops notifications.\n * - `getBalanceAllowance`: Gets the balance and allowance for a specific account.\n * - `getMarket`: Gets market data.\n * - `getMarkets`: Gets data for multiple markets.\n * - `getMarketTradeEvents`: Gets market trade events.\n * - `getNotifications`: Gets notifications.\n * - `getOpenOrders`: Gets open orders.\n * - `getOrder`: Gets a specific order.\n * - `getOrderBook`: Gets the order book.\n * - `getPricesHistory`: Gets price history.\n * - `getTrades`: Gets trades.\n * - `postOrder`: Posts an order.\n * - `updateBalanceAllowance`: Updates balance allowance.\n */\nexport const usePolymarket = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\n\tconst getPolymarketSDK = useCallback((): Polymarket => {\n\t\tconst polymarketSDK = moon?.getPolymarketSDK();\n\t\tif (!polymarketSDK) throw new Error(\"Moon Polymarket SDK not initialized\");\n\t\treturn polymarketSDK;\n\t}, [moon]);\n\n\tconst prepareTransaction = (account: string, transaction: any) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\t/**\n\t * Approves tokens for use in Polymarket.\n\t *\n\t * @param payload - The payload containing the account name and data for the approval transaction.\n\t * @param payload.accountName - The name of the account approving the tokens.\n\t * @param payload.data - The data required for the Polymarket approval transaction.\n\t * @returns A promise that resolves to the result of the Polymarket approval transaction.\n\t */\n\tconst approveForPolymarket = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: ApproveForPolymarketBody;\n\t\t}): Promise<ApproveForPolymarketData> => {\n\t\t\treturn handleTransaction(\"approveForPolymarket\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await polymarketSDK.approveForPolymarket(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Cancels all orders for a specific market.\n\t *\n\t * @param payload - The payload containing the account name and data for canceling market orders.\n\t * @param payload.accountName - The name of the account canceling the orders.\n\t * @param payload.data - The data required for canceling market orders.\n\t * @returns A promise that resolves to the result of canceling market orders.\n\t */\n\tconst cancelMarketOrders = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: CancelMarketOrdersBody;\n\t\t}): Promise<CancelMarketOrdersData> => {\n\t\t\treturn handleTransaction(\"cancelMarketOrders\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await polymarketSDK.cancelMarketOrders(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Cancels a specific order.\n\t *\n\t * @param payload - The payload containing the account name and data for canceling an order.\n\t * @param payload.accountName - The name of the account canceling the order.\n\t * @param payload.data - The data required for canceling an order.\n\t * @returns A promise that resolves to the result of canceling the order.\n\t */\n\tconst cancelOrder = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: CancelOrderBody;\n\t\t}): Promise<CancelOrderData> => {\n\t\t\treturn handleTransaction(\"cancelOrder\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await polymarketSDK.cancelOrder(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Cancels multiple orders.\n\t *\n\t * @param payload - The payload containing the account name and data for canceling orders.\n\t * @param payload.accountName - The name of the account canceling the orders.\n\t * @param payload.data - The data required for canceling orders.\n\t * @returns A promise that resolves to the result of canceling the orders.\n\t */\n\tconst cancelOrders = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: CancelOrdersBody;\n\t\t}): Promise<CancelOrdersData> => {\n\t\t\treturn handleTransaction(\"cancelOrders\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await polymarketSDK.cancelOrders(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Creates a market buy order.\n\t *\n\t * @param payload - The payload containing the account name and data for creating a market buy order.\n\t * @param payload.accountName - The name of the account creating the order.\n\t * @param payload.data - The data required for creating a market buy order.\n\t * @returns A promise that resolves to the result of creating the market buy order.\n\t */\n\tconst createMarketBuyOrder = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: CreateMarketBuyOrderBody;\n\t\t}): Promise<CreateMarketBuyOrderData> => {\n\t\t\treturn handleTransaction(\"createMarketBuyOrder\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await polymarketSDK.createMarketBuyOrder(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Creates an order.\n\t *\n\t * @param payload - The payload containing the account name and data for creating an order.\n\t * @param payload.accountName - The name of the account creating the order.\n\t * @param payload.data - The data required for creating an order.\n\t * @returns A promise that resolves to the result of creating the order.\n\t */\n\tconst createOrder = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: CreateOrderBody;\n\t\t}): Promise<CreateOrderData> => {\n\t\t\treturn handleTransaction(\"createOrder\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await polymarketSDK.createOrder(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Drops notifications.\n\t *\n\t * @param payload - The payload containing the account name and data for dropping notifications.\n\t * @param payload.accountName - The name of the account dropping notifications.\n\t * @param payload.data - The data required for dropping notifications.\n\t * @returns A promise that resolves to the result of dropping notifications.\n\t */\n\tconst dropNotifications = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: DropNotificationsBody;\n\t\t}): Promise<DropNotificationsData> => {\n\t\t\treturn handleTransaction(\"dropNotifications\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await polymarketSDK.dropNotifications(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Gets the balance and allowance for a specific account.\n\t *\n\t * @param params - The parameters for getting balance and allowance.\n\t * @returns A promise that resolves to the balance and allowance data.\n\t */\n\tconst getBalanceAllowance = useCallback(\n\t\tasync (\n\t\t\tparams: GetBalanceAllowanceParams,\n\t\t): Promise<GetBalanceAllowanceData> => {\n\t\t\treturn handleTransaction(\"getBalanceAllowance\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst response = await polymarketSDK.getBalanceAllowance(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Gets market data.\n\t *\n\t * @param params - The parameters for getting market data.\n\t * @returns A promise that resolves to the market data.\n\t */\n\tconst getMarket = useCallback(\n\t\tasync (params: GetMarketParams): Promise<GetMarketData> => {\n\t\t\treturn handleTransaction(\"getMarket\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst response = await polymarketSDK.getMarket(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Gets data for multiple markets.\n\t *\n\t * @param params - The parameters for getting markets data.\n\t * @returns A promise that resolves to the markets data.\n\t */\n\tconst getMarkets = useCallback(\n\t\tasync (params: GetMarketsParams): Promise<GetMarketsData> => {\n\t\t\treturn handleTransaction(\"getMarkets\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst response = await polymarketSDK.getMarkets(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Gets market trade events.\n\t *\n\t * @param params - The parameters for getting market trade events.\n\t * @returns A promise that resolves to the market trade events data.\n\t */\n\tconst getMarketTradeEvents = useCallback(\n\t\tasync (\n\t\t\tparams: GetMarketTradeEventsParams,\n\t\t): Promise<GetMarketTradeEventsData> => {\n\t\t\treturn handleTransaction(\"getMarketTradeEvents\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst response = await polymarketSDK.getMarketTradeEvents(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Gets notifications.\n\t *\n\t * @param params - The parameters for getting notifications.\n\t * @returns A promise that resolves to the notifications data.\n\t */\n\tconst getNotifications = useCallback(\n\t\tasync (\n\t\t\tparams: GetNotificationsParams1,\n\t\t): Promise<GetNotificationsResult> => {\n\t\t\treturn handleTransaction(\"getNotifications\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst response = await polymarketSDK.getNotifications(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t// ... previously refactored functions ...\n\n\t/**\n\t * Gets open orders.\n\t *\n\t * @param params - The parameters for getting open orders.\n\t * @returns A promise that resolves to the open orders data.\n\t */\n\tconst getOpenOrders = useCallback(\n\t\tasync (params: GetOpenOrdersParams): Promise<GetOpenOrdersData> => {\n\t\t\treturn handleTransaction(\"getOpenOrders\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst response = await polymarketSDK.getOpenOrders(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Gets a specific order.\n\t *\n\t * @param params - The parameters for getting an order.\n\t * @returns A promise that resolves to the order data.\n\t */\n\tconst getOrder = useCallback(\n\t\tasync (params: GetOrderParams): Promise<GetOrderData> => {\n\t\t\treturn handleTransaction(\"getOrder\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst response = await polymarketSDK.getOrder(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Gets the order book.\n\t *\n\t * @param params - The parameters for getting the order book.\n\t * @returns A promise that resolves to the order book data.\n\t */\n\tconst getOrderBook = useCallback(\n\t\tasync (params: GetOrderBookParams): Promise<GetOrderBookData> => {\n\t\t\treturn handleTransaction(\"getOrderBook\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst response = await polymarketSDK.getOrderBook(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Gets price history.\n\t *\n\t * @param params - The parameters for getting price history.\n\t * @returns A promise that resolves to the price history data.\n\t */\n\tconst getPricesHistory = useCallback(\n\t\tasync (params: GetPricesHistoryParams): Promise<GetPricesHistoryData> => {\n\t\t\treturn handleTransaction(\"getPricesHistory\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst response = await polymarketSDK.getPricesHistory(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Gets trades.\n\t *\n\t * @param params - The parameters for getting trades.\n\t * @returns A promise that resolves to the trades data.\n\t */\n\tconst getTrades = useCallback(\n\t\tasync (params: GetTradesParams): Promise<GetTradesData> => {\n\t\t\treturn handleTransaction(\"getTrades\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst response = await polymarketSDK.getTrades(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Posts an order.\n\t *\n\t * @param payload - The payload containing the account name and data for posting an order.\n\t * @param payload.accountName - The name of the account posting the order.\n\t * @param payload.data - The data required for posting an order.\n\t * @returns A promise that resolves to the result of posting the order.\n\t */\n\tconst postOrder = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: PostOrderBody;\n\t\t}): Promise<PostOrderData> => {\n\t\t\treturn handleTransaction(\"postOrder\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await polymarketSDK.postOrder(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Updates balance allowance.\n\t *\n\t * @param payload - The payload containing the account name and data for updating balance allowance.\n\t * @param payload.accountName - The name of the account updating the balance allowance.\n\t * @param payload.data - The data required for updating balance allowance.\n\t * @returns A promise that resolves to the result of updating the balance allowance.\n\t */\n\tconst updateBalanceAllowance = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UpdateBalanceAllowanceBody;\n\t\t}): Promise<UpdateBalanceAllowanceData> => {\n\t\t\treturn handleTransaction(\"updateBalanceAllowance\", async () => {\n\t\t\t\tconst polymarketSDK = getPolymarketSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await polymarketSDK.updateBalanceAllowance(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\treturn {\n\t\tapproveForPolymarket,\n\t\tcancelMarketOrders,\n\t\tcancelOrder,\n\t\tcancelOrders,\n\t\tcreateMarketBuyOrder,\n\t\tcreateOrder,\n\t\tdropNotifications,\n\t\tgetBalanceAllowance,\n\t\tgetMarket,\n\t\tgetMarkets,\n\t\tgetMarketTradeEvents,\n\t\tgetNotifications,\n\t\tgetOpenOrders,\n\t\tgetOrder,\n\t\tgetOrderBook,\n\t\tgetPricesHistory,\n\t\tgetTrades,\n\t\tpostOrder,\n\t\tupdateBalanceAllowance,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tCalculateOptimalVoteDistributionParams2,\n\tGetAmountOutParams2,\n\tGetAmountsOutParams2,\n\tGetBalanceOfNftParams2,\n\tGetBalanceOfParams2,\n\tGetDelegatesParams2,\n\tGetFactoryParams2,\n\tGetLastVotedParams2,\n\tGetLockedParams,\n\tGetOwnerOfParams2,\n\tGetPastVotesParams2,\n\tGetReservesParams,\n\tGetTokenUriParams2,\n\tGetTopAprPoolsParams2,\n\tGetTotalSupplyParams2,\n\tGetTotalWeightParams2,\n\tGetVotesParams2,\n\tGetWeightsParams2,\n\tGetWethParams4,\n\tIsGaugeParams2,\n\tIsPairParams,\n\tIsWhitelistedParams2,\n\tPairForParams,\n\tQuoteAddLiquidityParams,\n\tQuoteRemoveLiquidityParams,\n\tRamses,\n\tRamsesNFTInputBody,\n\tRamsesRouterInputBody,\n\tRamsesVoterInputBody,\n\tSortTokensParams,\n\tVoteWithOptimalDistributionBody,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\n\n/**\n * Custom hook to interact with the Ramses SDK.\n *\n * @returns {Object} An object containing various methods to interact with the Ramses SDK.\n *\n * @function abstain - Abstain from voting.\n * @function addLiquidity - Add liquidity to a pool.\n * @function addLiquidityEth - Add liquidity to a pool using ETH.\n * @function approve - Approve a transaction.\n * @function attach - Attach an NFT.\n * @function attachTokenToGauge - Attach a token to a gauge.\n * @function calculateOptimalVoteDistribution - Calculate the optimal vote distribution.\n * @function claimBribes - Claim bribes.\n * @function claimFees - Claim fees.\n * @function claimRewards - Claim rewards.\n * @function createGauge - Create a gauge.\n * @function createLock - Create a lock.\n * @function delegate - Delegate voting power.\n * @function detach - Detach an NFT.\n * @function detachTokenFromGauge - Detach a token from a gauge.\n * @function distribute - Distribute rewards.\n * @function getAmountOut - Get the amount out for a swap.\n * @function getAmountsOut - Get the amounts out for a swap.\n * @function getBalanceOf - Get the balance of a token.\n * @function getBalanceOfNft - Get the balance of an NFT.\n * @function getDelegates - Get the delegates.\n * @function getFactory - Get the factory information.\n * @function getInfo - Get general information.\n * @function getLastVoted - Get the last voted information.\n * @function getLocked - Get the locked tokens.\n * @function getOwnerOf - Get the owner of a token.\n * @function getPastVotes - Get past votes.\n * @function getPoolByAddress - Get a pool by its address.\n * @function getPools - Get all pools.\n * @function getPoolsByType - Get pools by type.\n * @function getReserves - Get the reserves of a pool.\n * @function getTokens - Get all tokens.\n * @function getTokenUri - Get the URI of a token.\n * @function getTopAprPools - Get the top APR pools.\n * @function getTotalSupply - Get the total supply of a token.\n * @function getTotalValueLocked - Get the total value locked.\n * @function getTotalWeight - Get the total weight.\n * @function getVotes - Get the votes.\n * @function getWeights - Get the weights.\n * @function getWeth - Get the WETH token.\n * @function increaseAmount - Increase the amount of a lock.\n * @function increaseUnlockTime - Increase the unlock time of a lock.\n * @function isGauge - Check if an address is a gauge.\n * @function isPair - Check if an address is a pair.\n * @function isWhitelisted - Check if an address is whitelisted.\n * @function killGauge - Kill a gauge.\n * @function merge - Merge NFTs.\n * @function notifyRewardAmount - Notify the reward amount.\n * @function pairFor - Get the pair for a token.\n * @function poke - Poke a gauge.\n * @function quoteAddLiquidity - Quote the amount of liquidity to add.\n * @function quoteRemoveLiquidity - Quote the amount of liquidity to remove.\n * @function removeLiquidity - Remove liquidity from a pool.\n * @function removeLiquidityEth - Remove liquidity from a pool using ETH.\n * @function reset - Reset a gauge.\n * @function reviveGauge - Revive a gauge.\n * @function sortTokens - Sort tokens.\n * @function split - Split an NFT.\n * @function swapExactEthForTokens - Swap exact ETH for tokens.\n * @function swapExactTokensForEth - Swap exact tokens for ETH.\n * @function swapExactTokensForTokens - Swap exact tokens for tokens.\n * @function transferFrom - Transfer a token from one address to another.\n * @function unsafeSwapExactTokensForTokens - Unsafely swap exact tokens for tokens.\n * @function vote - Vote on a proposal.\n * @function voteWithOptimalDistribution - Vote with optimal distribution.\n * @function whitelist - Whitelist an address.\n * @function withdraw - Withdraw tokens.\n */\nexport const useRamses = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\n\tconst getRamsesSDK = useCallback((): Ramses => {\n\t\tconst ramsesSDK = moon?.getRamsesSDK();\n\t\tif (!ramsesSDK) throw new Error(\"Moon Ramses SDK not initialized\");\n\t\treturn ramsesSDK;\n\t}, [moon]);\n\n\tconst prepareTransaction = (account: string, transaction: any) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\t/**\n\t * Abstains from a transaction using the Ramses SDK.\n\t *\n\t * @param payload - The payload containing the address and data for the transaction.\n\t * @param payload.address - The address to abstain from.\n\t * @param payload.data - The data required for the Ramses NFT input body.\n\t * @returns A promise that resolves when the transaction is handled.\n\t */\n\tconst abstain = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"abstain\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.abstain(payload.address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Adds liquidity to the Ramses protocol.\n\t *\n\t * @param payload - The payload containing the address and data for the transaction.\n\t * @param payload.address - The address to which liquidity is being added.\n\t * @param payload.data - The data required by the Ramses router for the transaction.\n\t * @returns A promise that resolves with the result of the transaction.\n\t *\n\t * @example\n\t * ```typescript\n\t * const payload = {\n\t *   address: \"0x123...\",\n\t *   data: {\n\t *     // RamsesRouterInputBody data\n\t *   }\n\t * };\n\t * await addLiquidity(payload);\n\t * ```\n\t */\n\tconst addLiquidity = useCallback(\n\t\tasync (payload: { address: string; data: RamsesRouterInputBody }) =>\n\t\t\thandleTransaction(\"addLiquidity\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.addLiquidity(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Adds liquidity to the ETH pool using the Ramses SDK.\n\t *\n\t * @param payload - The payload containing the address and data for the transaction.\n\t * @param payload.address - The address to which liquidity is being added.\n\t * @param payload.data - The data required for the Ramses router input.\n\t * @returns A promise that resolves with the transaction response.\n\t *\n\t * @example\n\t * ```typescript\n\t * const payload = {\n\t *   address: \"0x123...\",\n\t *   data: {\n\t *     // RamsesRouterInputBody data\n\t *   }\n\t * };\n\t * await addLiquidityEth(payload);\n\t * ```\n\t */\n\tconst addLiquidityEth = useCallback(\n\t\tasync (payload: { address: string; data: RamsesRouterInputBody }) =>\n\t\t\thandleTransaction(\"addLiquidityEth\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.addLiquidityEth(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Approves a transaction using the Ramses SDK.\n\t *\n\t * @param payload - An object containing the address and data for the transaction.\n\t * @param payload.address - The address to approve the transaction for.\n\t * @param payload.data - The data required for the Ramses NFT input body.\n\t * @returns A promise that resolves with the result of the transaction.\n\t */\n\tconst approve = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"approve\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.approve(payload.address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t/**\n\t * Attaches a Ramses NFT to a specified address.\n\t *\n\t * @param payload - The payload containing the address and data for the Ramses NFT.\n\t * @param payload.address - The address to which the Ramses NFT will be attached.\n\t * @param payload.data - The data required for the Ramses NFT attachment.\n\t * @returns A promise that resolves with the result of the transaction.\n\t *\n\t * @remarks\n\t * This function uses the `handleTransaction` utility to manage the transaction process.\n\t * It prepares the transaction data and then calls the `attach` method from the Ramses SDK.\n\t * The response is then handled by the `handleWagmiTransaction` function.\n\t *\n\t * @example\n\t * ```typescript\n\t * const payload = {\n\t *   address: \"0x123...\",\n\t *   data: { /* RamsesNFTInputBody data *\\/ }\n\t * };\n\t * await attach(payload);\n\t * ```\n\t */\n\tconst attach = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"attach\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.attach(payload.address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst attachTokenToGauge = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"attachTokenToGauge\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.attachTokenToGauge(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst calculateOptimalVoteDistribution = useCallback(\n\t\tasync (query: CalculateOptimalVoteDistributionParams2) =>\n\t\t\thandleTransaction(\"calculateOptimalVoteDistribution\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait ramsesSDK.calculateOptimalVoteDistribution(query);\n\t\t\t\treturn response;\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst claimBribes = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"claimBribes\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.claimBribes(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst claimFees = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"claimFees\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.claimFees(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst claimRewards = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"claimRewards\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.claimRewards(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst createGauge = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"createGauge\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.createGauge(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst createLock = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"createLock\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.createLock(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst delegate = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"delegate\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.delegate(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst detach = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"detach\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.detach(payload.address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst detachTokenFromGauge = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"detachTokenFromGauge\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.detachTokenFromGauge(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst distribute = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"distribute\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.distribute(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst getAmountOut = useCallback(\n\t\tasync (query: GetAmountOutParams2) =>\n\t\t\thandleTransaction(\"getAmountOut\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getAmountOut(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getAmountsOut = useCallback(\n\t\tasync (query: GetAmountsOutParams2) =>\n\t\t\thandleTransaction(\"getAmountsOut\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getAmountsOut(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getBalanceOf = useCallback(\n\t\tasync (query: GetBalanceOfParams2) =>\n\t\t\thandleTransaction(\"getBalanceOf\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getBalanceOf(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getBalanceOfNft = useCallback(\n\t\tasync (query: GetBalanceOfNftParams2) =>\n\t\t\thandleTransaction(\"getBalanceOfNft\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getBalanceOfNft(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getDelegates = useCallback(\n\t\tasync (query: GetDelegatesParams2) =>\n\t\t\thandleTransaction(\"getDelegates\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getDelegates(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getFactory = useCallback(\n\t\tasync (query: GetFactoryParams2) =>\n\t\t\thandleTransaction(\"getFactory\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getFactory(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getInfo = useCallback(\n\t\tasync () =>\n\t\t\thandleTransaction(\"getInfo\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getInfo();\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getLastVoted = useCallback(\n\t\tasync (query: GetLastVotedParams2) =>\n\t\t\thandleTransaction(\"getLastVoted\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getLastVoted(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getLocked = useCallback(\n\t\tasync (query: GetLockedParams) =>\n\t\t\thandleTransaction(\"getLocked\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getLocked(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getOwnerOf = useCallback(\n\t\tasync (query: GetOwnerOfParams2) =>\n\t\t\thandleTransaction(\"getOwnerOf\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getOwnerOf(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getPastVotes = useCallback(\n\t\tasync (query: GetPastVotesParams2) =>\n\t\t\thandleTransaction(\"getPastVotes\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getPastVotes(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getPoolByAddress = useCallback(\n\t\tasync (address: string) =>\n\t\t\thandleTransaction(\"getPoolByAddress\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getPoolByAddress(address);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getPools = useCallback(\n\t\tasync () =>\n\t\t\thandleTransaction(\"getPools\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getPools();\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getPoolsByType = useCallback(\n\t\tasync (type: string) =>\n\t\t\thandleTransaction(\"getPoolsByType\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getPoolsByType(type);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getReserves = useCallback(\n\t\tasync (query: GetReservesParams) =>\n\t\t\thandleTransaction(\"getReserves\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getReserves(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getTokens = useCallback(\n\t\tasync () =>\n\t\t\thandleTransaction(\"getTokens\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getTokens();\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getTokenUri = useCallback(\n\t\tasync (query: GetTokenUriParams2) =>\n\t\t\thandleTransaction(\"getTokenUri\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getTokenUri(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getTopAprPools = useCallback(\n\t\tasync (query: GetTopAprPoolsParams2) =>\n\t\t\thandleTransaction(\"getTopAprPools\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getTopAprPools(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getTotalSupply = useCallback(\n\t\tasync (query: GetTotalSupplyParams2) =>\n\t\t\thandleTransaction(\"getTotalSupply\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getTotalSupply(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getTotalValueLocked = useCallback(\n\t\tasync () =>\n\t\t\thandleTransaction(\"getTotalValueLocked\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getTotalValueLocked();\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getTotalWeight = useCallback(\n\t\tasync (query: GetTotalWeightParams2) =>\n\t\t\thandleTransaction(\"getTotalWeight\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getTotalWeight(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getVotes = useCallback(\n\t\tasync (query: GetVotesParams2) =>\n\t\t\thandleTransaction(\"getVotes\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getVotes(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getWeights = useCallback(\n\t\tasync (query: GetWeightsParams2) =>\n\t\t\thandleTransaction(\"getWeights\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getWeights(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst getWeth = useCallback(\n\t\tasync (query: GetWethParams4) =>\n\t\t\thandleTransaction(\"getWeth\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.getWeth(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst increaseAmount = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"increaseAmount\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.increaseAmount(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst increaseUnlockTime = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"increaseUnlockTime\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.increaseUnlockTime(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst isGauge = useCallback(\n\t\tasync (query: IsGaugeParams2) =>\n\t\t\thandleTransaction(\"isGauge\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.isGauge(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst isPair = useCallback(\n\t\tasync (query: IsPairParams) =>\n\t\t\thandleTransaction(\"isPair\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.isPair(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst isWhitelisted = useCallback(\n\t\tasync (query: IsWhitelistedParams2) =>\n\t\t\thandleTransaction(\"isWhitelisted\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.isWhitelisted(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst killGauge = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"killGauge\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.killGauge(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst merge = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"merge\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.merge(payload.address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst notifyRewardAmount = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"notifyRewardAmount\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.notifyRewardAmount(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst pairFor = useCallback(\n\t\tasync (query: PairForParams) =>\n\t\t\thandleTransaction(\"pairFor\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.pairFor(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst poke = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"poke\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.poke(payload.address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst quoteAddLiquidity = useCallback(\n\t\tasync (query: QuoteAddLiquidityParams) =>\n\t\t\thandleTransaction(\"quoteAddLiquidity\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.quoteAddLiquidity(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst quoteRemoveLiquidity = useCallback(\n\t\tasync (query: QuoteRemoveLiquidityParams) =>\n\t\t\thandleTransaction(\"quoteRemoveLiquidity\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.quoteRemoveLiquidity(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst removeLiquidity = useCallback(\n\t\tasync (payload: { address: string; data: RamsesRouterInputBody }) =>\n\t\t\thandleTransaction(\"removeLiquidity\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.removeLiquidity(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst removeLiquidityEth = useCallback(\n\t\tasync (payload: { address: string; data: RamsesRouterInputBody }) =>\n\t\t\thandleTransaction(\"removeLiquidityEth\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.removeLiquidityEth(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst reset = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"reset\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.reset(payload.address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst reviveGauge = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"reviveGauge\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.reviveGauge(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst sortTokens = useCallback(\n\t\tasync (query: SortTokensParams) =>\n\t\t\thandleTransaction(\"sortTokens\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\treturn ramsesSDK.sortTokens(query);\n\t\t\t}),\n\t\t[moon],\n\t);\n\n\tconst split = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"split\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.split(payload.address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapExactEthForTokens = useCallback(\n\t\tasync (payload: { address: string; data: RamsesRouterInputBody }) =>\n\t\t\thandleTransaction(\"swapExactEthForTokens\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.swapExactEthForTokens(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapExactTokensForEth = useCallback(\n\t\tasync (payload: { address: string; data: RamsesRouterInputBody }) =>\n\t\t\thandleTransaction(\"swapExactTokensForEth\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.swapExactTokensForEth(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapExactTokensForTokens = useCallback(\n\t\tasync (payload: { address: string; data: RamsesRouterInputBody }) =>\n\t\t\thandleTransaction(\"swapExactTokensForTokens\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.swapExactTokensForTokens(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst transferFrom = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"transferFrom\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.transferFrom(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst unsafeSwapExactTokensForTokens = useCallback(\n\t\tasync (payload: { address: string; data: RamsesRouterInputBody }) =>\n\t\t\thandleTransaction(\"unsafeSwapExactTokensForTokens\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.unsafeSwapExactTokensForTokens(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst vote = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"vote\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.vote(payload.address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst voteWithOptimalDistribution = useCallback(\n\t\tasync (payload: {\n\t\t\taddress: string;\n\t\t\tdata: VoteWithOptimalDistributionBody;\n\t\t}) =>\n\t\t\thandleTransaction(\"voteWithOptimalDistribution\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.voteWithOptimalDistribution(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst whitelist = useCallback(\n\t\tasync (payload: { address: string; data: RamsesVoterInputBody }) =>\n\t\t\thandleTransaction(\"whitelist\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.whitelist(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst withdraw = useCallback(\n\t\tasync (payload: { address: string; data: RamsesNFTInputBody }) =>\n\t\t\thandleTransaction(\"withdraw\", async () => {\n\t\t\t\tconst ramsesSDK = getRamsesSDK();\n\t\t\t\tconst preparedData = prepareTransaction(payload.address, payload.data);\n\t\t\t\tconst response = await ramsesSDK.withdraw(\n\t\t\t\t\tpayload.address,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t}),\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\treturn {\n\t\tabstain,\n\t\taddLiquidity,\n\t\taddLiquidityEth,\n\t\tapprove,\n\t\tattach,\n\t\tattachTokenToGauge,\n\t\tcalculateOptimalVoteDistribution,\n\t\tclaimBribes,\n\t\tclaimFees,\n\t\tclaimRewards,\n\t\tcreateGauge,\n\t\tcreateLock,\n\t\tdelegate,\n\t\tdetach,\n\t\tdetachTokenFromGauge,\n\t\tdistribute,\n\t\tgetAmountOut,\n\t\tgetAmountsOut,\n\t\tgetBalanceOf,\n\t\tgetBalanceOfNft,\n\t\tgetDelegates,\n\t\tgetFactory,\n\t\tgetInfo,\n\t\tgetLastVoted,\n\t\tgetLocked,\n\t\tgetOwnerOf,\n\t\tgetPastVotes,\n\t\tgetPoolByAddress,\n\t\tgetPools,\n\t\tgetPoolsByType,\n\t\tgetReserves,\n\t\tgetTokens,\n\t\tgetTokenUri,\n\t\tgetTopAprPools,\n\t\tgetTotalSupply,\n\t\tgetTotalValueLocked,\n\t\tgetTotalWeight,\n\t\tgetVotes,\n\t\tgetWeights,\n\t\tgetWeth,\n\t\tincreaseAmount,\n\t\tincreaseUnlockTime,\n\t\tisGauge,\n\t\tisPair,\n\t\tisWhitelisted,\n\t\tkillGauge,\n\t\tmerge,\n\t\tnotifyRewardAmount,\n\t\tpairFor,\n\t\tpoke,\n\t\tquoteAddLiquidity,\n\t\tquoteRemoveLiquidity,\n\t\tremoveLiquidity,\n\t\tremoveLiquidityEth,\n\t\treset,\n\t\treviveGauge,\n\t\tsortTokens,\n\t\tsplit,\n\t\tswapExactEthForTokens,\n\t\tswapExactTokensForEth,\n\t\tswapExactTokensForTokens,\n\t\ttransferFrom,\n\t\tunsafeSwapExactTokensForTokens,\n\t\tvote,\n\t\tvoteWithOptimalDistribution,\n\t\twhitelist,\n\t\twithdraw,\n\t};\n};\n","import { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tAbstainResult,\n\tApproveData,\n\tAttachResult,\n\tAttachTokenToGaugeResult,\n\tCalculateOptimalVoteDistributionOutput,\n\tCalculateOptimalVoteDistributionParams4,\n\tCheckpointResult,\n\tClaimBribesOutput,\n\tClaimFeesOutput,\n\tClaimRewardsData,\n\tCreateGaugeOutput,\n\tCreateLockForResult,\n\tCreateLockOutput,\n\tDelegateBySigResult,\n\tDelegateOutput,\n\tDepositForData,\n\tDetachResult,\n\tDetachTokenFromGaugeResult,\n\tDistributeOutput,\n\tGetApprovedOutput,\n\tGetApprovedParams4,\n\tGetBalanceOfAtNftData,\n\tGetBalanceOfAtNftParams,\n\tGetBalanceOfData,\n\tGetBalanceOfNftOutput,\n\tGetBalanceOfNftParams4,\n\tGetBalanceOfParams4,\n\tGetDelegatesOutput,\n\tGetDelegatesParams4,\n\tGetFusionByAddressData,\n\tGetFusionsByTypeData,\n\tGetFusionsData,\n\tGetLastUserSlopeData,\n\tGetLastUserSlopeParams,\n\tGetLockedEndData,\n\tGetLockedEndParams,\n\tGetLockedParams2,\n\tGetLockedResult,\n\tGetOwnerOfOutput,\n\tGetOwnerOfParams4,\n\tGetPastTotalSupplyData,\n\tGetPastTotalSupplyParams,\n\tGetPastVotesOutput,\n\tGetPastVotesParams4,\n\tGetTokenUriOutput,\n\tGetTokenUriParams4,\n\tGetTopAprFusionsData,\n\tGetTopAprFusionsParams,\n\tGetTopPairsData,\n\tGetTopPairsParams,\n\tGetTopTokensData,\n\tGetTopTokensParams,\n\tGetTotalSupplyAtData,\n\tGetTotalSupplyAtParams,\n\tGetTotalSupplyAtTData,\n\tGetTotalSupplyAtTParams,\n\tGetTotalSupplyParams4,\n\tGetTotalSupplyResult,\n\tGetTotalValueLockedOutput,\n\tGetTotalWeightOutput,\n\tGetTotalWeightParams4,\n\tGetUserPointHistoryData,\n\tGetUserPointHistoryParams,\n\tGetUserPointHistoryTsData,\n\tGetUserPointHistoryTsParams,\n\tGetVotesOutput,\n\tGetVotesParams4,\n\tGetWeightsOutput,\n\tGetWeightsParams4,\n\tIncreaseLockAmountResult,\n\tIncreaseUnlockTimeOutput,\n\tIsApprovedForAllData,\n\tIsApprovedForAllParams4,\n\tIsGaugeOutput,\n\tIsGaugeParams4,\n\tIsWhitelistedOutput,\n\tIsWhitelistedParams4,\n\tKillGaugeOutput,\n\tLastVotedData,\n\tLastVotedParams,\n\tMergeOutput,\n\tNotifyRewardAmountOutput,\n\tPokeOutput,\n\tPoolVoteLengthData,\n\tPoolVoteLengthParams,\n\tResetOutput,\n\tReviveGaugeOutput,\n\tSetApprovalForAllResult,\n\tSplitOutput,\n\tTransferFromResult,\n\tVeNFTInputBody,\n\tVeTheNftVoterInputBody,\n\tVoteOutput,\n\tVoteWithOptimalDistributionInput,\n\tVoteWithOptimalDistributionOutput,\n\tVotingData,\n\tWhitelistOutput,\n\tWithdrawData,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\nimport { useMoonAuth } from \"../../context\";\nexport const useThena = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\tconst prepareTransaction = (account: string, transaction: any) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\tconst getThenaSDK = () => {\n\t\tconst thenaSDK = moon?.getThenaSDK();\n\t\tif (!thenaSDK) throw new Error(\"Moon Thena SDK not initialized\");\n\t\treturn thenaSDK;\n\t};\n\n\tconst abstain = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<AbstainResult> => {\n\t\t\treturn handleTransaction(\"abstain\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.abstain(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst approve = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<ApproveData> => {\n\t\t\treturn handleTransaction(\"approve\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.approve(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst attach = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<AttachResult> => {\n\t\t\treturn handleTransaction(\"attach\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.attach(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst attachTokenToGauge = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<AttachTokenToGaugeResult> => {\n\t\t\treturn handleTransaction(\"attachTokenToGauge\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.attachTokenToGauge(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst calculateOptimalVoteDistribution = useCallback(\n\t\t(\n\t\t\tquery: CalculateOptimalVoteDistributionParams4,\n\t\t): Promise<CalculateOptimalVoteDistributionOutput> => {\n\t\t\treturn handleTransaction(\"calculateOptimalVoteDistribution\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.calculateOptimalVoteDistribution(query);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst checkpoint = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<CheckpointResult> => {\n\t\t\treturn handleTransaction(\"checkpoint\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.checkpoint(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst claimBribes = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<ClaimBribesOutput> => {\n\t\t\treturn handleTransaction(\"claimBribes\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.claimBribes(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst claimFees = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<ClaimFeesOutput> => {\n\t\t\treturn handleTransaction(\"claimFees\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.claimFees(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst claimRewards = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<ClaimRewardsData> => {\n\t\t\treturn handleTransaction(\"claimRewards\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.claimRewards(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst createGauge = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<CreateGaugeOutput> => {\n\t\t\treturn handleTransaction(\"createGauge\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.createGauge(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst createLock = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<CreateLockOutput> => {\n\t\t\treturn handleTransaction(\"createLock\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.createLock(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst createLockFor = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<CreateLockForResult> => {\n\t\t\treturn handleTransaction(\"createLockFor\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.createLockFor(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst delegate = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<DelegateOutput> => {\n\t\t\treturn handleTransaction(\"delegate\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.delegate(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst delegateBySig = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<DelegateBySigResult> => {\n\t\t\treturn handleTransaction(\"delegateBySig\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.delegateBySig(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst depositFor = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<DepositForData> => {\n\t\t\treturn handleTransaction(\"depositFor\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.depositFor(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst detach = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<DetachResult> => {\n\t\t\treturn handleTransaction(\"detach\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.detach(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst detachTokenFromGauge = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<DetachTokenFromGaugeResult> => {\n\t\t\treturn handleTransaction(\"detachTokenFromGauge\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.detachTokenFromGauge(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst distribute = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<DistributeOutput> => {\n\t\t\treturn handleTransaction(\"distribute\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.distribute(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getApproved = useCallback(\n\t\t(params: GetApprovedParams4): Promise<GetApprovedOutput> => {\n\t\t\treturn handleTransaction(\"getApproved\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getApproved(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getBalanceOf = useCallback(\n\t\t(params: GetBalanceOfParams4): Promise<GetBalanceOfData> => {\n\t\t\treturn handleTransaction(\"getBalanceOf\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getBalanceOf(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getBalanceOfAtNft = useCallback(\n\t\t(params: GetBalanceOfAtNftParams): Promise<GetBalanceOfAtNftData> => {\n\t\t\treturn handleTransaction(\"getBalanceOfAtNft\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getBalanceOfAtNft(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getBalanceOfNft = useCallback(\n\t\t(params: GetBalanceOfNftParams4): Promise<GetBalanceOfNftOutput> => {\n\t\t\treturn handleTransaction(\"getBalanceOfNft\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getBalanceOfNft(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getDelegates = useCallback(\n\t\t(params: GetDelegatesParams4): Promise<GetDelegatesOutput> => {\n\t\t\treturn handleTransaction(\"getDelegates\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getDelegates(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getFusionByAddress = useCallback(\n\t\t(address: string): Promise<GetFusionByAddressData> => {\n\t\t\treturn handleTransaction(\"getFusionByAddress\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getFusionByAddress(address);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getFusions = useCallback((): Promise<GetFusionsData> => {\n\t\treturn handleTransaction(\"getFusions\", async () => {\n\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\tconst response = await thenaSDK.getFusions();\n\t\t\treturn response.data;\n\t\t});\n\t}, [moon]);\n\n\tconst getFusionsByType = useCallback(\n\t\t(type: string): Promise<GetFusionsByTypeData> => {\n\t\t\treturn handleTransaction(\"getFusionsByType\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getFusionsByType(type);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getLastUserSlope = useCallback(\n\t\t(params: GetLastUserSlopeParams): Promise<GetLastUserSlopeData> => {\n\t\t\treturn handleTransaction(\"getLastUserSlope\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getLastUserSlope(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getLocked = useCallback(\n\t\t(params: GetLockedParams2): Promise<GetLockedResult> => {\n\t\t\treturn handleTransaction(\"getLocked\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getLocked(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getLockedEnd = useCallback(\n\t\t(params: GetLockedEndParams): Promise<GetLockedEndData> => {\n\t\t\treturn handleTransaction(\"getLockedEnd\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getLockedEnd(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getOwnerOf = useCallback(\n\t\t(params: GetOwnerOfParams4): Promise<GetOwnerOfOutput> => {\n\t\t\treturn handleTransaction(\"getOwnerOf\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getOwnerOf(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getPastTotalSupply = useCallback(\n\t\t(params: GetPastTotalSupplyParams): Promise<GetPastTotalSupplyData> => {\n\t\t\treturn handleTransaction(\"getPastTotalSupply\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getPastTotalSupply(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getPastVotes = useCallback(\n\t\t(params: GetPastVotesParams4): Promise<GetPastVotesOutput> => {\n\t\t\treturn handleTransaction(\"getPastVotes\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getPastVotes(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTokenUri = useCallback(\n\t\t(params: GetTokenUriParams4): Promise<GetTokenUriOutput> => {\n\t\t\treturn handleTransaction(\"getTokenUri\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getTokenUri(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTopAprFusions = useCallback(\n\t\t(params: GetTopAprFusionsParams): Promise<GetTopAprFusionsData> => {\n\t\t\treturn handleTransaction(\"getTopAprFusions\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getTopAprFusions(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTopPairs = useCallback(\n\t\t(params: GetTopPairsParams): Promise<GetTopPairsData> => {\n\t\t\treturn handleTransaction(\"getTopPairs\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getTopPairs(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTopTokens = useCallback(\n\t\t(params: GetTopTokensParams): Promise<GetTopTokensData> => {\n\t\t\treturn handleTransaction(\"getTopTokens\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getTopTokens(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTotalSupply = useCallback(\n\t\t(params: GetTotalSupplyParams4): Promise<GetTotalSupplyResult> => {\n\t\t\treturn handleTransaction(\"getTotalSupply\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getTotalSupply(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTotalSupplyAt = useCallback(\n\t\t(params: GetTotalSupplyAtParams): Promise<GetTotalSupplyAtData> => {\n\t\t\treturn handleTransaction(\"getTotalSupplyAt\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getTotalSupplyAt(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTotalSupplyAtT = useCallback(\n\t\t(params: GetTotalSupplyAtTParams): Promise<GetTotalSupplyAtTData> => {\n\t\t\treturn handleTransaction(\"getTotalSupplyAtT\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getTotalSupplyAtT(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTotalValueLocked =\n\t\tuseCallback((): Promise<GetTotalValueLockedOutput> => {\n\t\t\treturn handleTransaction(\"getTotalValueLocked\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getTotalValueLocked();\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t}, [moon]);\n\n\tconst getTotalWeight = useCallback(\n\t\t(params: GetTotalWeightParams4): Promise<GetTotalWeightOutput> => {\n\t\t\treturn handleTransaction(\"getTotalWeight\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getTotalWeight(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getUserPointHistory = useCallback(\n\t\t(params: GetUserPointHistoryParams): Promise<GetUserPointHistoryData> => {\n\t\t\treturn handleTransaction(\"getUserPointHistory\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getUserPointHistory(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getUserPointHistoryTs = useCallback(\n\t\t(\n\t\t\tparams: GetUserPointHistoryTsParams,\n\t\t): Promise<GetUserPointHistoryTsData> => {\n\t\t\treturn handleTransaction(\"getUserPointHistoryTs\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getUserPointHistoryTs(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getVotes = useCallback(\n\t\t(params: GetVotesParams4): Promise<GetVotesOutput> => {\n\t\t\treturn handleTransaction(\"getVotes\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getVotes(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getWeights = useCallback(\n\t\t(params: GetWeightsParams4): Promise<GetWeightsOutput> => {\n\t\t\treturn handleTransaction(\"getWeights\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.getWeights(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst increaseLockAmount = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeNFTInputBody,\n\t\t): Promise<IncreaseLockAmountResult> => {\n\t\t\treturn handleTransaction(\"increaseLockAmount\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\t\t\t\tconst response = await thenaSDK.increaseLockAmount(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst increaseUnlockTime = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeNFTInputBody,\n\t\t): Promise<IncreaseUnlockTimeOutput> => {\n\t\t\treturn handleTransaction(\"increaseUnlockTime\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.increaseUnlockTime(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst isApprovedForAll = useCallback(\n\t\t(params: IsApprovedForAllParams4): Promise<IsApprovedForAllData> => {\n\t\t\treturn handleTransaction(\"isApprovedForAll\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.isApprovedForAll(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst isGauge = useCallback(\n\t\t(params: IsGaugeParams4): Promise<IsGaugeOutput> => {\n\t\t\treturn handleTransaction(\"isGauge\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.isGauge(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst isWhitelisted = useCallback(\n\t\t(params: IsWhitelistedParams4): Promise<IsWhitelistedOutput> => {\n\t\t\treturn handleTransaction(\"isWhitelisted\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.isWhitelisted(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst killGauge = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<KillGaugeOutput> => {\n\t\t\treturn handleTransaction(\"killGauge\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.killGauge(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst lastVoted = useCallback(\n\t\t(params: LastVotedParams): Promise<LastVotedData> => {\n\t\t\treturn handleTransaction(\"lastVoted\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.lastVoted(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst merge = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<MergeOutput> => {\n\t\t\treturn handleTransaction(\"merge\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.merge(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst notifyRewardAmount = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<NotifyRewardAmountOutput> => {\n\t\t\treturn handleTransaction(\"notifyRewardAmount\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.notifyRewardAmount(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst poke = useCallback(\n\t\t(address: string, data: VeTheNftVoterInputBody): Promise<PokeOutput> => {\n\t\t\treturn handleTransaction(\"poke\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.poke(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst poolVoteLength = useCallback(\n\t\t(params: PoolVoteLengthParams): Promise<PoolVoteLengthData> => {\n\t\t\treturn handleTransaction(\"poolVoteLength\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst response = await thenaSDK.poolVoteLength(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst reset = useCallback(\n\t\t(address: string, data: VeTheNftVoterInputBody): Promise<ResetOutput> => {\n\t\t\treturn handleTransaction(\"reset\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.reset(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst reviveGauge = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<ReviveGaugeOutput> => {\n\t\t\treturn handleTransaction(\"reviveGauge\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.reviveGauge(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst safeTransferFrom = useCallback(\n\t\t(address: string, data: VeNFTInputBody) => {\n\t\t\treturn handleTransaction(\"safeTransferFrom\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.safeTransferFrom(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst setApprovalForAll = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeNFTInputBody,\n\t\t): Promise<SetApprovalForAllResult> => {\n\t\t\treturn handleTransaction(\"setApprovalForAll\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.setApprovalForAll(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst split = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<SplitOutput> => {\n\t\t\treturn handleTransaction(\"split\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.split(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst transferFrom = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<TransferFromResult> => {\n\t\t\treturn handleTransaction(\"transferFrom\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.transferFrom(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst vote = useCallback(\n\t\t(address: string, data: VeTheNftVoterInputBody): Promise<VoteOutput> => {\n\t\t\treturn handleTransaction(\"vote\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.vote(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst voteWithOptimalDistribution = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VoteWithOptimalDistributionInput,\n\t\t): Promise<VoteWithOptimalDistributionOutput> => {\n\t\t\treturn handleTransaction(\"voteWithOptimalDistribution\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.voteWithOptimalDistribution(\n\t\t\t\t\taddress,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst voting = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<VotingData> => {\n\t\t\treturn handleTransaction(\"voting\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.voting(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst whitelist = useCallback(\n\t\t(\n\t\t\taddress: string,\n\t\t\tdata: VeTheNftVoterInputBody,\n\t\t): Promise<WhitelistOutput> => {\n\t\t\treturn handleTransaction(\"whitelist\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.whitelist(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst withdraw = useCallback(\n\t\t(address: string, data: VeNFTInputBody): Promise<WithdrawData> => {\n\t\t\treturn handleTransaction(\"withdraw\", async () => {\n\t\t\t\tconst thenaSDK = getThenaSDK();\n\t\t\t\tconst preparedData = prepareTransaction(address, data);\n\n\t\t\t\tconst response = await thenaSDK.withdraw(address, preparedData);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\tabstain,\n\t\tapprove,\n\t\tattach,\n\t\tattachTokenToGauge,\n\t\tcalculateOptimalVoteDistribution,\n\t\tcheckpoint,\n\t\tclaimBribes,\n\t\tclaimFees,\n\t\tclaimRewards,\n\t\tcreateGauge,\n\t\tcreateLock,\n\t\tcreateLockFor,\n\t\tdelegate,\n\t\tdelegateBySig,\n\t\tdepositFor,\n\t\tdetach,\n\t\tdetachTokenFromGauge,\n\t\tdistribute,\n\t\tgetApproved,\n\t\tgetBalanceOf,\n\t\tgetBalanceOfAtNft,\n\t\tgetBalanceOfNft,\n\t\tgetDelegates,\n\t\tgetFusionByAddress,\n\t\tgetFusions,\n\t\tgetFusionsByType,\n\t\tgetLastUserSlope,\n\t\tgetLocked,\n\t\tgetLockedEnd,\n\t\tgetOwnerOf,\n\t\tgetPastTotalSupply,\n\t\tgetPastVotes,\n\t\tgetTokenUri,\n\t\tgetTopAprFusions,\n\t\tgetTopPairs,\n\t\tgetTopTokens,\n\t\tgetTotalSupply,\n\t\tgetTotalSupplyAt,\n\t\tgetTotalSupplyAtT,\n\t\tgetTotalValueLocked,\n\t\tgetTotalWeight,\n\t\tgetUserPointHistory,\n\t\tgetUserPointHistoryTs,\n\t\tgetVotes,\n\t\tgetWeights,\n\t\tincreaseLockAmount,\n\t\tincreaseUnlockTime,\n\t\tisApprovedForAll,\n\t\tisGauge,\n\t\tisWhitelisted,\n\t\tkillGauge,\n\t\tlastVoted,\n\t\tmerge,\n\t\tnotifyRewardAmount,\n\t\tpoke,\n\t\tpoolVoteLength,\n\t\treset,\n\t\treviveGauge,\n\t\tsafeTransferFrom,\n\t\tsetApprovalForAll,\n\t\tsplit,\n\t\ttransferFrom,\n\t\tvote,\n\t\tvoteWithOptimalDistribution,\n\t\tvoting,\n\t\twhitelist,\n\t\twithdraw,\n\t};\n};\n","import { useMoonSDK, useMoonTransaction } from \"@/hooks\";\nimport type {\n\tGetGasPriceParams,\n\tGetQuoteParams,\n\tGetSupportedChainsParams,\n\tGetSupportedProvidersParams,\n\tSwapPayload,\n\tThorSwapAPIResponseGasPrice,\n\tThorSwapAPIResponseQuote,\n\tThorSwapAPIResponseString,\n\tThorSwapAPIResponseStringArray,\n\tThorswap,\n} from \"@moonup/moon-api\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\n\n/**\n * Custom hook to interact with the Thorswap SDK.\n *\n * @returns {Object} An object containing various functions to interact with Thorswap:\n * - `getGasPrice`: Fetches the gas price for a given payload.\n * - `getQuote`: Fetches a quote for a given payload.\n * - `getSupportedChains`: Fetches supported chains for a given payload.\n * - `getSupportedProviders`: Fetches supported providers for a given payload.\n * - `swap`: Executes a swap transaction for a given payload.\n * - `getSupportedChainsQuery`: React Query hook to fetch supported chains for a given address and chain ID.\n * - `getSupportedProvidersQuery`: React Query hook to fetch supported providers for a given address and chain ID.\n */\nexport const useThorswap = () => {\n\tconst context = useMoonSDK();\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = context;\n\t/**\n\t * Fetches the supported chains for a given address and chain ID using the Thorswap SDK.\n\t *\n\t * @param address - The address for which to fetch supported chains.\n\t * @param chainId - The chain ID for which to fetch supported chains.\n\t * @returns A query object that can be used to track the status and result of the fetch operation.\n\t */\n\tconst getSupportedChainsQuery = (address: string, chainId: string) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"thorswapGetSupportedChains\", address, chainId],\n\t\t\tqueryFn: async ({ queryKey }) => {\n\t\t\t\tconst [_key, address, chainId] = queryKey;\n\t\t\t\tconst thorswapSDK = getThorswapSDK();\n\t\t\t\tconst response = await thorswapSDK.getSupportedChains({\n\t\t\t\t\taddress,\n\t\t\t\t\tchainId,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t},\n\t\t});\n\n\t/**\n\t * Fetches the supported providers for a given address and chain ID using the Thorswap SDK.\n\t *\n\t * @param address - The address for which to fetch supported providers.\n\t * @param chainId - The chain ID for which to fetch supported providers.\n\t * @returns A query object that can be used to access the supported providers data.\n\t *\n\t * @remarks\n\t * This hook uses the `useQuery` hook from React Query to fetch the data asynchronously.\n\t * The data is considered stale after 24 hours.\n\t *\n\t * @example\n\t * ```typescript\n\t * const { data, error, isLoading } = getSupportedProvidersQuery('0x123...', '1');\n\t * ```\n\t */\n\tconst getSupportedProvidersQuery = (address: string, chainId: string) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"thorswapGetSupportedProviders\", address, chainId],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst thorswapSDK = getThorswapSDK();\n\t\t\t\tconst response = await thorswapSDK.getSupportedProviders({\n\t\t\t\t\taddress,\n\t\t\t\t\tchainId,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t},\n\t\t\tstaleTime: 1000 * 60 * 60 * 24,\n\t\t});\n\n\t/**\n\t * Retrieves the Thorswap SDK instance from the Moon object.\n\t *\n\t * @returns {Thorswap} The initialized Thorswap SDK instance.\n\t * @throws {Error} If the Thorswap SDK is not initialized.\n\t */\n\tconst getThorswapSDK = (): Thorswap => {\n\t\tconst thorswapSDK = moon?.getThorswapSDK();\n\t\tif (!thorswapSDK) throw new Error(\"Moon Thorswap SDK not initialized\");\n\t\treturn thorswapSDK;\n\t};\n\n\t/**\n\t * Fetches the gas price using the Thorswap SDK.\n\t *\n\t * @param payload - The parameters required to get the gas price.\n\t * @returns A promise that resolves to the gas price data.\n\t */\n\tconst getGasPrice = useCallback(\n\t\tasync (\n\t\t\tpayload: GetGasPriceParams,\n\t\t): Promise<ThorSwapAPIResponseGasPrice> => {\n\t\t\treturn handleTransaction(\"getGasPrice\", async () => {\n\t\t\t\tconst thorswapSDK = getThorswapSDK();\n\t\t\t\treturn await thorswapSDK.getGasPrice(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Retrieves a quote using the Thorswap SDK.\n\t *\n\t * @param payload - The parameters required to get a quote.\n\t * @returns A promise that resolves to the quote result.\n\t */\n\tconst getQuote = useCallback(\n\t\tasync (payload: GetQuoteParams): Promise<ThorSwapAPIResponseQuote> => {\n\t\t\treturn handleTransaction(\"getQuote\", async () => {\n\t\t\t\tconst thorswapSDK = getThorswapSDK();\n\t\t\t\treturn await thorswapSDK.getQuote(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the supported chains using the Thorswap SDK.\n\t *\n\t * @param payload - The parameters required to get the supported chains.\n\t * @returns A promise that resolves to the result of the supported chains.\n\t */\n\tconst getSupportedChains = useCallback(\n\t\tasync (\n\t\t\tpayload: GetSupportedChainsParams,\n\t\t): Promise<ThorSwapAPIResponseStringArray> => {\n\t\t\treturn handleTransaction(\"getSupportedChains\", async () => {\n\t\t\t\tconst thorswapSDK = getThorswapSDK();\n\t\t\t\treturn await thorswapSDK.getSupportedChains(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Fetches the supported providers using the Thorswap SDK.\n\t *\n\t * @param payload - The parameters required to get the supported providers.\n\t * @returns A promise that resolves to the data of supported providers.\n\t */\n\tconst getSupportedProviders = useCallback(\n\t\tasync (\n\t\t\tpayload: GetSupportedProvidersParams,\n\t\t): Promise<ThorSwapAPIResponseStringArray> => {\n\t\t\treturn handleTransaction(\"getSupportedProviders\", async () => {\n\t\t\t\tconst thorswapSDK = getThorswapSDK();\n\t\t\t\treturn await thorswapSDK.getSupportedProviders(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t/**\n\t * Executes a swap transaction using the Thorswap SDK.\n\t *\n\t * @param payload - The input parameters required for the swap operation.\n\t * @returns A promise that resolves to the output of the swap operation.\n\t */\n\tconst swap = useCallback(\n\t\tasync (payload: SwapPayload): Promise<ThorSwapAPIResponseString> => {\n\t\t\treturn handleTransaction(\"swap\", async () => {\n\t\t\t\tconst thorswapSDK = getThorswapSDK();\n\t\t\t\treturn await thorswapSDK.swap(payload);\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\tgetGasPrice,\n\t\tgetQuote,\n\t\tgetSupportedChains,\n\t\tgetSupportedProviders,\n\t\tswap,\n\t\tgetSupportedChainsQuery,\n\t\tgetSupportedProvidersQuery,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tAddLiquidityEthOutput,\n\tAddLiquidityOutput,\n\tApproveOutput,\n\tBalanceOfParams,\n\tBaseUriData,\n\tBaseUriParams,\n\tBurnResult,\n\tCollectData,\n\tCreateAndInitializePoolIfNecessaryData,\n\tDecreaseLiquidityData,\n\tDomainSeparatorData,\n\tDomainSeparatorParams,\n\tExactInputData,\n\tExactInputSingleData,\n\tExactOutputData,\n\tExactOutputSingleData,\n\tGetAmountInData,\n\tGetAmountOutOutput,\n\tGetAmountsInData,\n\tGetAmountsOutOutput,\n\tGetApprovedParams2,\n\tGetApprovedResult,\n\tGetWethParams4,\n\tIncreaseLiquidityData,\n\tIsApprovedForAllParams2,\n\tMulticall2Data,\n\tMulticallData,\n\tNameData,\n\tNameParams,\n\tOwnerOfData,\n\tOwnerOfParams,\n\tPermitData,\n\tPermitTypehashData,\n\tPermitTypehashParams,\n\tPositionsData,\n\tPositionsParams,\n\tQuoteData,\n\tRefundEth2Data,\n\tRefundEthData,\n\tRemoveLiquidityEthResult,\n\tRemoveLiquidityEthSupportingFeeOnTransferTokensData,\n\tRemoveLiquidityEthWithPermitData,\n\tRemoveLiquidityEthWithPermitSupportingFeeOnTransferTokensData,\n\tRemoveLiquidityResult,\n\tRemoveLiquidityWithPermitData,\n\tSelfPermitAllowedData,\n\tSelfPermitAllowedIfNecessaryData,\n\tSelfPermitData,\n\tSelfPermitIfNecessaryData,\n\tSetApprovalForAllOutput,\n\tSwapEthForExactTokensData,\n\tSwapExactEthForTokensOutput,\n\tSwapExactEthForTokensSupportingFeeOnTransferTokensData,\n\tSwapExactTokensForEthOutput,\n\tSwapExactTokensForEthSupportingFeeOnTransferTokensData,\n\tSwapExactTokensForTokensOutput,\n\tSwapExactTokensForTokensSupportingFeeOnTransferTokensData,\n\tSwapTokensForExactEthData,\n\tSwapTokensForExactTokensData,\n\tSweepToken2Data,\n\tSweepTokenData,\n\tSweepTokenWithFeeData,\n\tSymbolData,\n\tSymbolParams,\n\tTokenByIndexData,\n\tTokenByIndexParams,\n\tTokenOfOwnerByIndexData,\n\tTokenOfOwnerByIndexParams,\n\tTokenUriData,\n\tTokenUriParams,\n\tTotalSupplyData,\n\tTotalSupplyParams,\n\tUniswapV2InputBody,\n\tUniswapV3APIResponseUniswapV3ExecuteFunctionResult,\n\tUniswapV3InputBody,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\n\n/**\n * Custom hook to interact with Uniswap SDK.\n *\n * This hook provides various methods to interact with Uniswap V2 and V3 contracts,\n * including adding liquidity, swapping tokens, and managing NFTs.\n *\n * @returns {Object} An object containing methods for Uniswap V2 and V3 interactions.\n *\n * @method addLiquidity - Adds liquidity to a Uniswap V2 pool.\n * @method addLiquidityEth - Adds liquidity to a Uniswap V2 pool with ETH.\n * @method getAmountIn - Gets the input amount required for a given output amount.\n * @method getAmountOut - Gets the output amount for a given input amount.\n * @method getAmountsIn - Gets the input amounts required for a given output amount.\n * @method getAmountsOut - Gets the output amounts for a given input amount.\n * @method getWeth - Gets the address of the WETH token.\n * @method quote - Gets the quote for a given input amount.\n * @method removeLiquidity - Removes liquidity from a Uniswap V2 pool.\n * @method removeLiquidityEth - Removes liquidity from a Uniswap V2 pool with ETH.\n * @method removeLiquidityEthSupportingFeeOnTransferTokens - Removes liquidity with fee on transfer tokens.\n * @method removeLiquidityEthWithPermit - Removes liquidity with permit.\n * @method removeLiquidityEthWithPermitSupportingFeeOnTransferTokens - Removes liquidity with permit and fee on transfer tokens.\n * @method removeLiquidityWithPermit - Removes liquidity with permit.\n * @method swapEthForExactTokens - Swaps ETH for exact tokens.\n * @method swapExactEthForTokens - Swaps exact ETH for tokens.\n * @method swapExactEthForTokensSupportingFeeOnTransferTokens - Swaps exact ETH for tokens with fee on transfer tokens.\n * @method swapExactTokensForEth - Swaps exact tokens for ETH.\n * @method swapExactTokensForEthSupportingFeeOnTransferTokens - Swaps exact tokens for ETH with fee on transfer tokens.\n * @method swapExactTokensForTokens - Swaps exact tokens for tokens.\n * @method swapExactTokensForTokensSupportingFeeOnTransferTokens - Swaps exact tokens for tokens with fee on transfer tokens.\n * @method swapTokensForExactEth - Swaps tokens for exact ETH.\n * @method swapTokensForExactTokens - Swaps tokens for exact tokens.\n *\n * @method approve - Approves a Uniswap V3 NFT.\n * @method balanceOf - Gets the balance of a Uniswap V3 NFT.\n * @method baseUri - Gets the base URI of a Uniswap V3 NFT.\n * @method burn - Burns a Uniswap V3 NFT.\n * @method collect - Collects fees from a Uniswap V3 position.\n * @method createAndInitializePoolIfNecessary - Creates and initializes a Uniswap V3 pool if necessary.\n * @method decreaseLiquidity - Decreases liquidity in a Uniswap V3 position.\n * @method domainSeparator - Gets the domain separator for a Uniswap V3 NFT.\n * @method exactInput - Executes an exact input swap on Uniswap V3.\n * @method exactInputSingle - Executes an exact input single swap on Uniswap V3.\n * @method exactOutput - Executes an exact output swap on Uniswap V3.\n * @method exactOutputSingle - Executes an exact output single swap on Uniswap V3.\n * @method getApproved - Gets the approved address for a Uniswap V3 NFT.\n * @method increaseLiquidity - Increases liquidity in a Uniswap V3 position.\n * @method isApprovedForAll - Checks if an address is approved for all Uniswap V3 NFTs.\n * @method mint - Mints a new Uniswap V3 NFT.\n * @method multicall - Executes multiple calls in a single transaction on Uniswap V3.\n * @method multicall2 - Executes multiple calls in a single transaction on Uniswap V3 (alternative method).\n * @method name - Gets the name of a Uniswap V3 NFT.\n * @method ownerOf - Gets the owner of a Uniswap V3 NFT.\n * @method permit - Permits a Uniswap V3 NFT.\n * @method permitTypehash - Gets the permit typehash for a Uniswap V3 NFT.\n * @method positions - Gets the positions of a Uniswap V3 NFT.\n * @method refundEth - Refunds ETH from a Uniswap V3 position.\n * @method refundEth2 - Refunds ETH from a Uniswap V3 position (alternative method).\n * @method selfPermit - Self permits a Uniswap V3 NFT.\n * @method selfPermitAllowed - Self permits a Uniswap V3 NFT with allowance.\n * @method selfPermitAllowedIfNecessary - Self permits a Uniswap V3 NFT with allowance if necessary.\n * @method selfPermitIfNecessary - Self permits a Uniswap V3 NFT if necessary.\n * @method setApprovalForAll - Sets approval for all Uniswap V3 NFTs.\n * @method supportsInterface - Checks if a Uniswap V3 NFT supports a given interface.\n * @method sweepToken - Sweeps tokens from a Uniswap V3 position.\n * @method sweepToken2 - Sweeps tokens from a Uniswap V3 position (alternative method).\n * @method sweepTokenWithFee - Sweeps tokens with fee from a Uniswap V3 position.\n * @method symbol - Gets the symbol of a Uniswap V3 NFT.\n * @method tokenByIndex - Gets a token by index from a Uniswap V3 NFT.\n * @method tokenOfOwnerByIndex - Gets a token of owner by index from a Uniswap V3 NFT.\n * @method tokenUri - Gets the URI of a Uniswap V3 NFT.\n * @method totalSupply - Gets the total supply of a Uniswap V3 NFT.\n * @method transferFrom - Transfers a Uniswap V3 NFT.\n *\n * @method getUniswapSDK - Gets the Uniswap SDK instance.\n */\nexport const useUniswap = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\n\tconst getUniswapSDK = useCallback(() => {\n\t\tconst uniswapSDK = moon?.getUniswapSDK();\n\t\tif (!uniswapSDK) throw new Error(\"Moon Uniswap SDK not initialized\");\n\t\treturn uniswapSDK;\n\t}, [moon]);\n\n\tconst prepareTransaction = (account: string, transaction: any) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\t// UniswapV2Router methods\n\tconst addLiquidity = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<AddLiquidityOutput> => {\n\t\t\treturn handleTransaction(\"addLiquidity\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.addLiquidity(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst addLiquidityEth = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<AddLiquidityEthOutput> => {\n\t\t\treturn handleTransaction(\"addLiquidityEth\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.addLiquidityEth(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\t// UniswapV3NFT methods\n\tconst approve = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<ApproveOutput> => {\n\t\t\treturn handleTransaction(\"approve\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.approve(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t// UniswapV2Router methods (continued)\n\tconst getAmountIn = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<GetAmountInData> => {\n\t\t\treturn handleTransaction(\"getAmountIn\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.getAmountIn(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst getAmountOut = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<GetAmountOutOutput> => {\n\t\t\treturn handleTransaction(\"getAmountOut\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.getAmountOut(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst getAmountsIn = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<GetAmountsInData> => {\n\t\t\treturn handleTransaction(\"getAmountsIn\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.getAmountsIn(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst getAmountsOut = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<GetAmountsOutOutput> => {\n\t\t\treturn handleTransaction(\"getAmountsOut\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.getAmountsOut(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\t// UniswapV3NFT methods (continued)\n\tconst balanceOf = useCallback(\n\t\tasync (payload: {\n\t\t\tquery: BalanceOfParams;\n\t\t}) => {\n\t\t\treturn handleTransaction(\"balanceOf\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.balanceOf(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst baseUri = useCallback(\n\t\tasync (payload: { query: BaseUriParams }): Promise<BaseUriData> => {\n\t\t\treturn handleTransaction(\"baseUri\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.baseUri(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst burn = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<BurnResult> => {\n\t\t\treturn handleTransaction(\"burn\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.burn(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst collect = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<CollectData> => {\n\t\t\treturn handleTransaction(\"collect\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.collect(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst createAndInitializePoolIfNecessary = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<CreateAndInitializePoolIfNecessaryData> => {\n\t\t\treturn handleTransaction(\n\t\t\t\t\"createAndInitializePoolIfNecessary\",\n\t\t\t\tasync () => {\n\t\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\tpayload.data,\n\t\t\t\t\t);\n\t\t\t\t\tconst response = await uniswapSDK.createAndInitializePoolIfNecessary(\n\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\tpreparedData,\n\t\t\t\t\t);\n\t\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst decreaseLiquidity = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<DecreaseLiquidityData> => {\n\t\t\treturn handleTransaction(\"decreaseLiquidity\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.decreaseLiquidity(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst domainSeparator = useCallback(\n\t\tasync (payload: {\n\t\t\tquery: DomainSeparatorParams;\n\t\t}): Promise<DomainSeparatorData> => {\n\t\t\treturn handleTransaction(\"domainSeparator\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.domainSeparator(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst exactInput = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<ExactInputData> => {\n\t\t\treturn handleTransaction(\"exactInput\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.exactInput(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst exactInputSingle = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<ExactInputSingleData> => {\n\t\t\treturn handleTransaction(\"exactInputSingle\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.exactInputSingle(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst exactOutput = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<ExactOutputData> => {\n\t\t\treturn handleTransaction(\"exactOutput\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.exactOutput(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst exactOutputSingle = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<ExactOutputSingleData> => {\n\t\t\treturn handleTransaction(\"exactOutputSingle\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.exactOutputSingle(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst getApproved = useCallback(\n\t\tasync (payload: {\n\t\t\tquery: GetApprovedParams2;\n\t\t}): Promise<GetApprovedResult> => {\n\t\t\treturn handleTransaction(\"getApproved\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.getApproved(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst increaseLiquidity = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<IncreaseLiquidityData> => {\n\t\t\treturn handleTransaction(\"increaseLiquidity\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.increaseLiquidity(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst isApprovedForAll = useCallback(\n\t\tasync (payload: {\n\t\t\tquery: IsApprovedForAllParams2;\n\t\t}) => {\n\t\t\treturn handleTransaction(\"isApprovedForAll\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.isApprovedForAll(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst mint = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}) => {\n\t\t\treturn handleTransaction(\"mint\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.mint(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst multicall = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<MulticallData> => {\n\t\t\treturn handleTransaction(\"multicall\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.multicall(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst multicall2 = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<Multicall2Data> => {\n\t\t\treturn handleTransaction(\"multicall2\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.multicall2(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst name = useCallback(\n\t\tasync (payload: { query: NameParams }): Promise<NameData> => {\n\t\t\treturn handleTransaction(\"name\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.name(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst ownerOf = useCallback(\n\t\tasync (payload: { query: OwnerOfParams }): Promise<OwnerOfData> => {\n\t\t\treturn handleTransaction(\"ownerOf\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.ownerOf(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst permit = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<PermitData> => {\n\t\t\treturn handleTransaction(\"permit\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.permit(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst permitTypehash = useCallback(\n\t\tasync (payload: {\n\t\t\tquery: PermitTypehashParams;\n\t\t}): Promise<PermitTypehashData> => {\n\t\t\treturn handleTransaction(\"permitTypehash\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.permitTypehash(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst positions = useCallback(\n\t\tasync (payload: { query: PositionsParams }): Promise<PositionsData> => {\n\t\t\treturn handleTransaction(\"positions\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.positions(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst refundEth = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<RefundEthData> => {\n\t\t\treturn handleTransaction(\"refundEth\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.refundEth(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst refundEth2 = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<RefundEth2Data> => {\n\t\t\treturn handleTransaction(\"refundEth2\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.refundEth2(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst selfPermit = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<SelfPermitData> => {\n\t\t\treturn handleTransaction(\"selfPermit\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.selfPermit(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst selfPermitAllowed = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<SelfPermitAllowedData> => {\n\t\t\treturn handleTransaction(\"selfPermitAllowed\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.selfPermitAllowed(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst selfPermitAllowedIfNecessary = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<SelfPermitAllowedIfNecessaryData> => {\n\t\t\treturn handleTransaction(\"selfPermitAllowedIfNecessary\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.selfPermitAllowedIfNecessary(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst selfPermitIfNecessary = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<SelfPermitIfNecessaryData> => {\n\t\t\treturn handleTransaction(\"selfPermitIfNecessary\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.selfPermitIfNecessary(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst setApprovalForAll = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<SetApprovalForAllOutput> => {\n\t\t\treturn handleTransaction(\"setApprovalForAll\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.setApprovalForAll(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst sweepToken = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<SweepTokenData> => {\n\t\t\treturn handleTransaction(\"sweepToken\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.sweepToken(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst sweepToken2 = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<SweepToken2Data> => {\n\t\t\treturn handleTransaction(\"sweepToken2\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.sweepToken2(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst sweepTokenWithFee = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<SweepTokenWithFeeData> => {\n\t\t\treturn handleTransaction(\"sweepTokenWithFee\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.sweepTokenWithFee(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst symbol = useCallback(\n\t\tasync (payload: { query: SymbolParams }): Promise<SymbolData> => {\n\t\t\treturn handleTransaction(\"symbol\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.symbol(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst tokenByIndex = useCallback(\n\t\tasync (payload: {\n\t\t\tquery: TokenByIndexParams;\n\t\t}): Promise<TokenByIndexData> => {\n\t\t\treturn handleTransaction(\"tokenByIndex\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.tokenByIndex(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst tokenOfOwnerByIndex = useCallback(\n\t\tasync (payload: {\n\t\t\tquery: TokenOfOwnerByIndexParams;\n\t\t}): Promise<TokenOfOwnerByIndexData> => {\n\t\t\treturn handleTransaction(\"tokenOfOwnerByIndex\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.tokenOfOwnerByIndex(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst tokenUri = useCallback(\n\t\tasync (payload: { query: TokenUriParams }): Promise<TokenUriData> => {\n\t\t\treturn handleTransaction(\"tokenUri\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.tokenUri(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst totalSupply = useCallback(\n\t\tasync (payload: {\n\t\t\tquery: TotalSupplyParams;\n\t\t}): Promise<TotalSupplyData> => {\n\t\t\treturn handleTransaction(\"totalSupply\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.totalSupply(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst transferFrom = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV3InputBody;\n\t\t}): Promise<UniswapV3APIResponseUniswapV3ExecuteFunctionResult> => {\n\t\t\treturn handleTransaction(\"transferFrom\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.transferFrom(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst getWeth = useCallback(\n\t\tasync (payload: { query: GetWethParams4 }) => {\n\t\t\treturn handleTransaction(\"getWeth\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst response = await uniswapSDK.getWeth(payload.query);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst quote = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<QuoteData> => {\n\t\t\treturn handleTransaction(\"quote\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.quote(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst removeLiquidity = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<RemoveLiquidityResult> => {\n\t\t\treturn handleTransaction(\"removeLiquidity\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.removeLiquidity(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst removeLiquidityEth = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<RemoveLiquidityEthResult> => {\n\t\t\treturn handleTransaction(\"removeLiquidityEth\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.removeLiquidityEth(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst removeLiquidityEthSupportingFeeOnTransferTokens = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<RemoveLiquidityEthSupportingFeeOnTransferTokensData> => {\n\t\t\treturn handleTransaction(\n\t\t\t\t\"removeLiquidityEthSupportingFeeOnTransferTokens\",\n\t\t\t\tasync () => {\n\t\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\tpayload.data,\n\t\t\t\t\t);\n\t\t\t\t\tconst response =\n\t\t\t\t\t\tawait uniswapSDK.removeLiquidityEthSupportingFeeOnTransferTokens(\n\t\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\t\tpreparedData,\n\t\t\t\t\t\t);\n\t\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst removeLiquidityEthWithPermit = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<RemoveLiquidityEthWithPermitData> => {\n\t\t\treturn handleTransaction(\"removeLiquidityEthWithPermit\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.removeLiquidityEthWithPermit(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst removeLiquidityEthWithPermitSupportingFeeOnTransferTokens = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<RemoveLiquidityEthWithPermitSupportingFeeOnTransferTokensData> => {\n\t\t\treturn handleTransaction(\n\t\t\t\t\"removeLiquidityEthWithPermitSupportingFeeOnTransferTokens\",\n\t\t\t\tasync () => {\n\t\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\tpayload.data,\n\t\t\t\t\t);\n\t\t\t\t\tconst response =\n\t\t\t\t\t\tawait uniswapSDK.removeLiquidityEthWithPermitSupportingFeeOnTransferTokens(\n\t\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\t\tpreparedData,\n\t\t\t\t\t\t);\n\t\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst removeLiquidityWithPermit = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<RemoveLiquidityWithPermitData> => {\n\t\t\treturn handleTransaction(\"removeLiquidityWithPermit\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.removeLiquidityWithPermit(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapEthForExactTokens = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<SwapEthForExactTokensData> => {\n\t\t\treturn handleTransaction(\"swapEthForExactTokens\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.swapEthForExactTokens(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapExactEthForTokens = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<SwapExactEthForTokensOutput> => {\n\t\t\treturn handleTransaction(\"swapExactEthForTokens\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.swapExactEthForTokens(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapExactEthForTokensSupportingFeeOnTransferTokens = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<SwapExactEthForTokensSupportingFeeOnTransferTokensData> => {\n\t\t\treturn handleTransaction(\n\t\t\t\t\"swapExactEthForTokensSupportingFeeOnTransferTokens\",\n\t\t\t\tasync () => {\n\t\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\tpayload.data,\n\t\t\t\t\t);\n\t\t\t\t\tconst response =\n\t\t\t\t\t\tawait uniswapSDK.swapExactEthForTokensSupportingFeeOnTransferTokens(\n\t\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\t\tpreparedData,\n\t\t\t\t\t\t);\n\t\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapExactTokensForEth = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<SwapExactTokensForEthOutput> => {\n\t\t\treturn handleTransaction(\"swapExactTokensForEth\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.swapExactTokensForEth(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapExactTokensForEthSupportingFeeOnTransferTokens = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<SwapExactTokensForEthSupportingFeeOnTransferTokensData> => {\n\t\t\treturn handleTransaction(\n\t\t\t\t\"swapExactTokensForEthSupportingFeeOnTransferTokens\",\n\t\t\t\tasync () => {\n\t\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\tpayload.data,\n\t\t\t\t\t);\n\t\t\t\t\tconst response =\n\t\t\t\t\t\tawait uniswapSDK.swapExactTokensForEthSupportingFeeOnTransferTokens(\n\t\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\t\tpreparedData,\n\t\t\t\t\t\t);\n\t\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapExactTokensForTokens = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<SwapExactTokensForTokensOutput> => {\n\t\t\treturn handleTransaction(\"swapExactTokensForTokens\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.swapExactTokensForTokens(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapExactTokensForTokensSupportingFeeOnTransferTokens = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<SwapExactTokensForTokensSupportingFeeOnTransferTokensData> => {\n\t\t\treturn handleTransaction(\n\t\t\t\t\"swapExactTokensForTokensSupportingFeeOnTransferTokens\",\n\t\t\t\tasync () => {\n\t\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\tpayload.data,\n\t\t\t\t\t);\n\t\t\t\t\tconst response =\n\t\t\t\t\t\tawait uniswapSDK.swapExactTokensForTokensSupportingFeeOnTransferTokens(\n\t\t\t\t\t\t\tpayload.accountName,\n\t\t\t\t\t\t\tpreparedData,\n\t\t\t\t\t\t);\n\t\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapTokensForExactEth = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<SwapTokensForExactEthData> => {\n\t\t\treturn handleTransaction(\"swapTokensForExactEth\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.swapTokensForExactEth(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\tconst swapTokensForExactTokens = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UniswapV2InputBody;\n\t\t}): Promise<SwapTokensForExactTokensData> => {\n\t\t\treturn handleTransaction(\"swapTokensForExactTokens\", async () => {\n\t\t\t\tconst uniswapSDK = getUniswapSDK();\n\t\t\t\tconst preparedData = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await uniswapSDK.swapTokensForExactTokens(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedData,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, sendTransactionAsync],\n\t);\n\n\treturn {\n\t\t// UniswapV2Router methods\n\t\taddLiquidity,\n\t\taddLiquidityEth,\n\t\tgetAmountIn,\n\t\tgetAmountOut,\n\t\tgetAmountsIn,\n\t\tgetAmountsOut,\n\t\tgetWeth,\n\t\tquote,\n\t\tremoveLiquidity,\n\t\tremoveLiquidityEth,\n\t\tremoveLiquidityEthSupportingFeeOnTransferTokens,\n\t\tremoveLiquidityEthWithPermit,\n\t\tremoveLiquidityEthWithPermitSupportingFeeOnTransferTokens,\n\t\tremoveLiquidityWithPermit,\n\t\tswapEthForExactTokens,\n\t\tswapExactEthForTokens,\n\t\tswapExactEthForTokensSupportingFeeOnTransferTokens,\n\t\tswapExactTokensForEth,\n\t\tswapExactTokensForEthSupportingFeeOnTransferTokens,\n\t\tswapExactTokensForTokens,\n\t\tswapExactTokensForTokensSupportingFeeOnTransferTokens,\n\t\tswapTokensForExactEth,\n\t\tswapTokensForExactTokens,\n\n\t\t// UniswapV3NFT methods\n\t\tapprove,\n\t\tbalanceOf,\n\t\tbaseUri,\n\t\tburn,\n\t\tcollect,\n\t\tcreateAndInitializePoolIfNecessary,\n\t\tdecreaseLiquidity,\n\t\tdomainSeparator,\n\t\texactInput,\n\t\texactInputSingle,\n\t\texactOutput,\n\t\texactOutputSingle,\n\t\tgetApproved,\n\t\tincreaseLiquidity,\n\t\tisApprovedForAll,\n\t\tmint,\n\t\tmulticall,\n\t\tmulticall2,\n\t\tname,\n\t\townerOf,\n\t\tpermit,\n\t\tpermitTypehash,\n\t\tpositions,\n\t\trefundEth,\n\t\trefundEth2,\n\t\tselfPermit,\n\t\tselfPermitAllowed,\n\t\tselfPermitAllowedIfNecessary,\n\t\tselfPermitIfNecessary,\n\t\tsetApprovalForAll,\n\t\tsweepToken,\n\t\tsweepToken2,\n\t\tsweepTokenWithFee,\n\t\tsymbol,\n\t\ttokenByIndex,\n\t\ttokenOfOwnerByIndex,\n\t\ttokenUri,\n\t\ttotalSupply,\n\t\ttransferFrom,\n\n\t\t// Utility functions\n\t\tgetUniswapSDK,\n\t};\n};\n\nexport default useUniswap;\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tAllora,\n\tGetPriceInferenceParams,\n\tAlloraInferenceResponse,\n\tImpliedFuturePriceParams,\n\tImpliedFuturePriceData,\n\tLogReturnToPercentageParams,\n\tLogReturnToPercentageData,\n} from \"@moonup/moon-api\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\n\nexport const useAllora = () => {\n\tconst { moon } = useMoonAuth();\n\tconst { handleTransaction } = useMoonTransaction();\n\n\tconst getAlloraSDK = (): Allora => {\n\t\tconst alloraSDK = moon?.getAlloraSDK();\n\t\tif (!alloraSDK) throw new Error(\"Allora SDK not initialized\");\n\t\treturn alloraSDK;\n\t};\n\n\t// Callbacks\n\n\tconst getPriceInference = useCallback(\n\t\tasync (\n\t\t\tquery: GetPriceInferenceParams,\n\t\t): Promise<AlloraInferenceResponse> => {\n\t\t\treturn handleTransaction(\"getPriceInference\", async () => {\n\t\t\t\tconst alloraSDK = getAlloraSDK();\n\t\t\t\tconst response = await alloraSDK.getPriceInference(query);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getImpliedFuturePrice = useCallback(\n\t\tasync (\n\t\t\tquery: ImpliedFuturePriceParams,\n\t\t): Promise<ImpliedFuturePriceData> => {\n\t\t\treturn handleTransaction(\"getImpliedFuturePrice\", async () => {\n\t\t\t\tconst alloraSDK = getAlloraSDK();\n\t\t\t\tconst response = await alloraSDK.impliedFuturePrice(query);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getLogReturnToPercentage = useCallback(\n\t\tasync (\n\t\t\tquery: LogReturnToPercentageParams,\n\t\t): Promise<LogReturnToPercentageData> => {\n\t\t\treturn handleTransaction(\"getLogReturnToPercentage\", async () => {\n\t\t\t\tconst alloraSDK = getAlloraSDK();\n\t\t\t\tconst response = await alloraSDK.logReturnToPercentage(query);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t// React Query Hooks\n\n\tconst usePriceInferenceQuery = (query: GetPriceInferenceParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"priceInference\", query],\n\t\t\tqueryFn: () => getPriceInference(query),\n\t\t});\n\n\tconst useImpliedFuturePriceQuery = (query: ImpliedFuturePriceParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"impliedFuturePrice\", query],\n\t\t\tqueryFn: () => getImpliedFuturePrice(query),\n\t\t});\n\n\tconst useLogReturnToPercentageQuery = (query: LogReturnToPercentageParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"logReturnToPercentage\", query],\n\t\t\tqueryFn: () => getLogReturnToPercentage(query),\n\t\t});\n\n\treturn {\n\t\t// Callbacks\n\t\tgetPriceInference,\n\t\tgetImpliedFuturePrice,\n\t\tgetLogReturnToPercentage,\n\n\t\t// React Query Hooks\n\t\tusePriceInferenceQuery,\n\t\tuseImpliedFuturePriceQuery,\n\t\tuseLogReturnToPercentageQuery,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tCookiefun,\n\tCookieFunGetKolCommunityParams,\n\tCommunityMetricsAPIResponse,\n\tCookieFunGetKolListParams,\n\tKOLListAPIResponse,\n\tCookieFunGetKolNetworkParams,\n\tKOLNetworkAPIResponse,\n\tCookieFunGetPredictiveMetricsParams,\n\tPredictiveMetricsAPIResponse,\n\tCookieFunGetTokenAnalyticsParams,\n\tTokenAnalyticsAPIResponse,\n\tCookieFunGetTrendingNarrativesParams,\n\tNarrativeTrendsAPIResponse,\n\tCookieFunGetTrendingTokensParams,\n\tTrendingTokensAPIResponse,\n\tCookieFunGetTrendingTweetsParams,\n\tTrendingTweetsAPIResponse,\n} from \"@moonup/moon-api\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\n\nexport const useCookieFun = () => {\n\tconst { moon } = useMoonAuth();\n\tconst { handleTransaction } = useMoonTransaction();\n\n\tconst getCookieFunSDK = (): Cookiefun => {\n\t\tconst cookieFunSDK = moon?.getCookiefunSDK();\n\t\tif (!cookieFunSDK) throw new Error(\"CookieFun SDK not initialized\");\n\t\treturn cookieFunSDK;\n\t};\n\n\t// Callbacks\n\n\tconst getKolCommunity = useCallback(\n\t\tasync (\n\t\t\tparams: CookieFunGetKolCommunityParams,\n\t\t): Promise<CommunityMetricsAPIResponse> => {\n\t\t\treturn handleTransaction(\"getKolCommunity\", async () => {\n\t\t\t\tconst cookieFunSDK = getCookieFunSDK();\n\t\t\t\tconst response = await cookieFunSDK.cookieFunGetKolCommunity(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getKolList = useCallback(\n\t\tasync (params: CookieFunGetKolListParams): Promise<KOLListAPIResponse> => {\n\t\t\treturn handleTransaction(\"getKolList\", async () => {\n\t\t\t\tconst cookieFunSDK = getCookieFunSDK();\n\t\t\t\tconst response = await cookieFunSDK.cookieFunGetKolList(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getKolNetwork = useCallback(\n\t\tasync (\n\t\t\tparams: CookieFunGetKolNetworkParams,\n\t\t): Promise<KOLNetworkAPIResponse> => {\n\t\t\treturn handleTransaction(\"getKolNetwork\", async () => {\n\t\t\t\tconst cookieFunSDK = getCookieFunSDK();\n\t\t\t\tconst response = await cookieFunSDK.cookieFunGetKolNetwork(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getPredictiveMetrics = useCallback(\n\t\tasync (\n\t\t\tparams: CookieFunGetPredictiveMetricsParams,\n\t\t): Promise<PredictiveMetricsAPIResponse> => {\n\t\t\treturn handleTransaction(\"getPredictiveMetrics\", async () => {\n\t\t\t\tconst cookieFunSDK = getCookieFunSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait cookieFunSDK.cookieFunGetPredictiveMetrics(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTokenAnalytics = useCallback(\n\t\tasync (\n\t\t\tparams: CookieFunGetTokenAnalyticsParams,\n\t\t): Promise<TokenAnalyticsAPIResponse> => {\n\t\t\treturn handleTransaction(\"getTokenAnalytics\", async () => {\n\t\t\t\tconst cookieFunSDK = getCookieFunSDK();\n\t\t\t\tconst response = await cookieFunSDK.cookieFunGetTokenAnalytics(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTrendingNarratives = useCallback(\n\t\tasync (\n\t\t\tparams: CookieFunGetTrendingNarrativesParams,\n\t\t): Promise<NarrativeTrendsAPIResponse> => {\n\t\t\treturn handleTransaction(\"getTrendingNarratives\", async () => {\n\t\t\t\tconst cookieFunSDK = getCookieFunSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait cookieFunSDK.cookieFunGetTrendingNarratives(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTrendingTokens = useCallback(\n\t\tasync (\n\t\t\tparams: CookieFunGetTrendingTokensParams,\n\t\t): Promise<TrendingTokensAPIResponse> => {\n\t\t\treturn handleTransaction(\"getTrendingTokens\", async () => {\n\t\t\t\tconst cookieFunSDK = getCookieFunSDK();\n\t\t\t\tconst response = await cookieFunSDK.cookieFunGetTrendingTokens(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTrendingTweets = useCallback(\n\t\tasync (\n\t\t\tparams: CookieFunGetTrendingTweetsParams,\n\t\t): Promise<TrendingTweetsAPIResponse> => {\n\t\t\treturn handleTransaction(\"getTrendingTweets\", async () => {\n\t\t\t\tconst cookieFunSDK = getCookieFunSDK();\n\t\t\t\tconst response = await cookieFunSDK.cookieFunGetTrendingTweets(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t// React Query Hooks\n\n\tconst useKolCommunityQuery = (params: CookieFunGetKolCommunityParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"kolCommunity\", params],\n\t\t\tqueryFn: () => getKolCommunity(params),\n\t\t});\n\n\tconst useKolListQuery = (params: CookieFunGetKolListParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"kolList\", params],\n\t\t\tqueryFn: () => getKolList(params),\n\t\t});\n\n\tconst useKolNetworkQuery = (params: CookieFunGetKolNetworkParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"kolNetwork\", params],\n\t\t\tqueryFn: () => getKolNetwork(params),\n\t\t});\n\n\tconst usePredictiveMetricsQuery = (\n\t\tparams: CookieFunGetPredictiveMetricsParams,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"predictiveMetrics\", params],\n\t\t\tqueryFn: () => getPredictiveMetrics(params),\n\t\t});\n\n\tconst useTokenAnalyticsQuery = (params: CookieFunGetTokenAnalyticsParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"tokenAnalytics\", params],\n\t\t\tqueryFn: () => getTokenAnalytics(params),\n\t\t});\n\n\tconst useTrendingNarrativesQuery = (\n\t\tparams: CookieFunGetTrendingNarrativesParams,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"trendingNarratives\", params],\n\t\t\tqueryFn: () => getTrendingNarratives(params),\n\t\t});\n\n\tconst useTrendingTokensQuery = (params: CookieFunGetTrendingTokensParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"trendingTokens\", params],\n\t\t\tqueryFn: () => getTrendingTokens(params),\n\t\t});\n\n\tconst useTrendingTweetsQuery = (params: CookieFunGetTrendingTweetsParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"trendingTweets\", params],\n\t\t\tqueryFn: () => getTrendingTweets(params),\n\t\t});\n\n\treturn {\n\t\t// Callbacks\n\t\tgetKolCommunity,\n\t\tgetKolList,\n\t\tgetKolNetwork,\n\t\tgetPredictiveMetrics,\n\t\tgetTokenAnalytics,\n\t\tgetTrendingNarratives,\n\t\tgetTrendingTokens,\n\t\tgetTrendingTweets,\n\n\t\t// React Query Hooks\n\t\tuseKolCommunityQuery,\n\t\tuseKolListQuery,\n\t\tuseKolNetworkQuery,\n\t\tusePredictiveMetricsQuery,\n\t\tuseTokenAnalyticsQuery,\n\t\tuseTrendingNarrativesQuery,\n\t\tuseTrendingTokensQuery,\n\t\tuseTrendingTweetsQuery,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n  Makefuntoken,\n  MakeFunTokenGetClFactoryParams,\n  MakeFunTokenGetMaxTickParams,\n  MakeFunTokenGetMinTickParams,\n  MakeFunTokenHelperInputBody,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport {\n  useAccount,\n  useChainId,\n  useSendTransaction,\n  useSwitchChain,\n} from \"wagmi\";\n\n/**\n * Custom hook that provides functionalities related to the MakeFun token using the Moon SDK.\n *\n * @returns {Object} An object containing various methods for interacting with MakeFun tokens.\n */\nexport const useMakeFun = () => {\n  const { handleTransaction } = useMoonTransaction();\n  const { moon } = useMoonAuth();\n  const { isConnected, address } = useAccount();\n  const { sendTransactionAsync } = useSendTransaction();\n  const chainId = useChainId();\n  const { switchChain } = useSwitchChain();\n\n  const prepareTransaction = (\n    account: string,\n    transaction: MakeFunTokenHelperInputBody\n  ) => {\n    if ( isConnected && address === account ) {\n      return {\n        ...transaction,\n        broadcast: false,\n        dryrun: true,\n      };\n    }\n    return transaction;\n  };\n\n  const handleWagmiTransaction = async ( transactionData: any ) => {\n    try {\n      if ( isConnected && address === transactionData.transaction.from ) {\n        if ( chainId !== Number.parseInt( transactionData.transaction.chainId ) ) {\n          await switchChain( {\n            chainId: Number.parseInt( transactionData.transaction.chainId ),\n          } );\n        }\n        await sendTransactionAsync( {\n          to: transactionData.transaction.to,\n          data: transactionData.transaction.data,\n          value: BigInt( transactionData.transaction.value ),\n          chainId: Number.parseInt( transactionData.transaction.chain_id ),\n        } );\n      }\n    } catch ( error ) {\n      console.error( \"handleWagmiTransaction: Error: \", error );\n      return transactionData;\n    }\n  };\n\n  const getMakeFunTokenSDK = useCallback( (): Makefuntoken => {\n    const makeFunTokenSDK = moon?.getMakeFunTokenSDK();\n    if ( !makeFunTokenSDK ) throw new Error( \"Moon MakeFunTokenSDK not initialized\" );\n    return makeFunTokenSDK;\n  }, [ moon ] );\n\n  const getClFactory = useCallback(\n    async ( params: MakeFunTokenGetClFactoryParams ) => {\n      const makeFunTokenSDK = getMakeFunTokenSDK();\n      return makeFunTokenSDK.makeFunTokenGetClFactory( params );\n    },\n    [ moon ]\n  );\n\n  const getMaxTick = useCallback(\n    async ( params: MakeFunTokenGetMaxTickParams ) => {\n      const makeFunTokenSDK = getMakeFunTokenSDK();\n      return makeFunTokenSDK.makeFunTokenGetMaxTick( params );\n    },\n    [ moon ]\n  );\n\n  const getMinTick = useCallback(\n    async ( params: MakeFunTokenGetMinTickParams ) => {\n      const makeFunTokenSDK = getMakeFunTokenSDK();\n      return makeFunTokenSDK.makeFunTokenGetMinTick( params );\n    },\n    [ moon ]\n  );\n\n  const makeToken = useCallback(\n    async ( payload: { address: string; data: MakeFunTokenHelperInputBody; } ) => {\n      return handleTransaction( \"makeToken\", async () => {\n        const makeFunTokenSDK = getMakeFunTokenSDK();\n        const preparedData = prepareTransaction( payload.address, payload.data );\n\n        const response = await makeFunTokenSDK.makeFunTokenMakeToken(\n          payload.address,\n          preparedData as MakeFunTokenHelperInputBody\n        );\n        return handleWagmiTransaction( response );\n      } );\n    },\n    [ moon ]\n  );\n\n  const setSupplyLimits = useCallback(\n    async ( payload: { address: string; data: MakeFunTokenHelperInputBody; } ) => {\n      return handleTransaction( \"setSupplyLimits\", async () => {\n        const makeFunTokenSDK = getMakeFunTokenSDK();\n        const preparedData = prepareTransaction( payload.address, payload.data );\n\n        const response = await makeFunTokenSDK.makeFunTokenSetSupplyLimits(\n          payload.address,\n          preparedData as MakeFunTokenHelperInputBody\n        );\n        return handleWagmiTransaction( response );\n      } );\n    },\n    [ moon ]\n  );\n\n  const setTickLimits = useCallback(\n    async ( payload: { address: string; data: MakeFunTokenHelperInputBody; } ) => {\n      return handleTransaction( \"setTickLimits\", async () => {\n        const makeFunTokenSDK = getMakeFunTokenSDK();\n        const preparedData = prepareTransaction( payload.address, payload.data );\n\n        const response = await makeFunTokenSDK.makeFunTokenSetTickLimits(\n          payload.address,\n          preparedData as MakeFunTokenHelperInputBody\n        );\n        return handleWagmiTransaction( response );\n      } );\n    },\n    [ moon ]\n  );\n\n  return {\n    getClFactory,\n    getMaxTick,\n    getMinTick,\n    makeToken,\n    setSupplyLimits,\n    setTickLimits,\n  };\n};","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tFinancialDatasets,\n\tFinancialDatasetsGetAllFinancialsParams,\n\tFinancialDatasetsGetBalanceSheetsParams,\n\tFinancialDatasetsGetCashFlowStatementsParams,\n\tFinancialDatasetsGetIncomeStatementsParams,\n\tFinancialDatasetsGetInsiderTransactionsParams,\n\tFinancialDatasetsGetOptionsChainParams,\n\tFinancialDatasetsGetPricesParams,\n\tFinancialDatasetsGetSegmentedRevenuesParams,\n\tSearchRequest,\n\tFinancialDatasetsSearchFinancialsByLineItemsPayload,\n} from \"@moonup/moon-api\";\n\nimport { useCallback } from \"react\";\n\nexport const useFinancialDatasets = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\n\tconst getFinancialDatasetsSDK = (): FinancialDatasets => {\n\t\tconst financialDatasetsSDK = moon?.getFinancialDatasetsSDK();\n\t\tif (!financialDatasetsSDK)\n\t\t\tthrow new Error(\"Moon Financial Datasets SDK not initialized\");\n\t\treturn financialDatasetsSDK;\n\t};\n\n\tconst getAllFinancials = useCallback(\n\t\tasync (params: FinancialDatasetsGetAllFinancialsParams) => {\n\t\t\treturn handleTransaction(\"getAllFinancials\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetAllFinancials(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getAvailableTickers = useCallback(async () => {\n\t\treturn handleTransaction(\"getAvailableTickers\", async () => {\n\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\tconst response =\n\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetAvailableTickers();\n\t\t\treturn response.data;\n\t\t});\n\t}, [moon]);\n\n\tconst getBalanceSheets = useCallback(\n\t\tasync (params: FinancialDatasetsGetBalanceSheetsParams) => {\n\t\t\treturn handleTransaction(\"getBalanceSheets\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetBalanceSheets(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getCashFlowStatements = useCallback(\n\t\tasync (params: FinancialDatasetsGetCashFlowStatementsParams) => {\n\t\t\treturn handleTransaction(\"getCashFlowStatements\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetCashFlowStatements(\n\t\t\t\t\t\tparams,\n\t\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getCompanyFacts = useCallback(\n\t\tasync (ticker: string) => {\n\t\t\treturn handleTransaction(\"getCompanyFacts\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetCompanyFacts(ticker);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getIncomeStatements = useCallback(\n\t\tasync (params: FinancialDatasetsGetIncomeStatementsParams) => {\n\t\t\treturn handleTransaction(\"getIncomeStatements\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetIncomeStatements(\n\t\t\t\t\t\tparams,\n\t\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getInsiderTransactions = useCallback(\n\t\tasync (params: FinancialDatasetsGetInsiderTransactionsParams) => {\n\t\t\treturn handleTransaction(\"getInsiderTransactions\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetInsiderTransactions(\n\t\t\t\t\t\tparams,\n\t\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getOptionsChain = useCallback(\n\t\tasync (params: FinancialDatasetsGetOptionsChainParams) => {\n\t\t\treturn handleTransaction(\"getOptionsChain\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetOptionsChain(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getPrices = useCallback(\n\t\tasync (params: FinancialDatasetsGetPricesParams) => {\n\t\t\treturn handleTransaction(\"getPrices\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetPrices(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getPriceSnapshot = useCallback(\n\t\tasync (ticker: string) => {\n\t\t\treturn handleTransaction(\"getPriceSnapshot\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetPriceSnapshot(ticker);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getSegmentedRevenues = useCallback(\n\t\tasync (params: FinancialDatasetsGetSegmentedRevenuesParams) => {\n\t\t\treturn handleTransaction(\"getSegmentedRevenues\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsGetSegmentedRevenues(\n\t\t\t\t\t\tparams,\n\t\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst searchFinancials = useCallback(\n\t\tasync (data: SearchRequest) => {\n\t\t\treturn handleTransaction(\"searchFinancials\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsSearchFinancials(data);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst searchFinancialsByLineItems = useCallback(\n\t\tasync (data: FinancialDatasetsSearchFinancialsByLineItemsPayload) => {\n\t\t\treturn handleTransaction(\"searchFinancialsByLineItems\", async () => {\n\t\t\t\tconst financialDatasetsSDK = getFinancialDatasetsSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait financialDatasetsSDK.financialDatasetsSearchFinancialsByLineItems(\n\t\t\t\t\t\tdata,\n\t\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\tgetAllFinancials,\n\t\tgetAvailableTickers,\n\t\tgetBalanceSheets,\n\t\tgetCashFlowStatements,\n\t\tgetCompanyFacts,\n\t\tgetIncomeStatements,\n\t\tgetInsiderTransactions,\n\t\tgetOptionsChain,\n\t\tgetPrices,\n\t\tgetPriceSnapshot,\n\t\tgetSegmentedRevenues,\n\t\tsearchFinancials,\n\t\tsearchFinancialsByLineItems,\n\t};\n};\n","import { useMoonAuth } from \"@/context\";\nimport { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tCancelOrderData,\n\tCancelOrderPayload,\n\tCreateCollectionOfferData,\n\tCreateListingData,\n\tCreateOfferData,\n\tFulfillOrderData,\n\tFulfillOrderPayload,\n\tGetAccountParams,\n\tGetAllListingsParams,\n\tGetAllOffersParams,\n\tGetBestListingParams,\n\tGetBestOfferParams,\n\tGetCollectionData,\n\tGetCollectionParams,\n\tGetCollectionStatsParams,\n\tGetCollectionsParams,\n\tGetNfTsByAccountParams,\n\tGetNfTsByCollectionParams,\n\tGetNfTsByContractParams,\n\tGetNftData,\n\tGetNftParams,\n\tGetOrdersParams,\n\tGetPaymentTokenParams,\n\tOffchainCancelOrderData,\n\tOffchainCancelOrderPayload,\n\tOpenSeaCollectionInputBody,\n\tOpenSeaNFTInputBody,\n\tUnwrapWethData,\n\tUnwrapWethPayload,\n\tWrapEthData,\n\tWrapEthPayload,\n} from \"@moonup/moon-api\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport {\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSwitchChain,\n} from \"wagmi\";\nexport const useOpensea = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon } = useMoonAuth();\n\tconst chainId = useChainId();\n\tconst { switchChain } = useSwitchChain();\n\tconst { isConnected, address } = useAccount();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\n\tconst getOpenseaSDK = () => {\n\t\tconst openseaSDK = moon?.getOpenseaSDK();\n\t\tif (!openseaSDK) throw new Error(\"Moon Opensea SDK not initialized\");\n\t\treturn openseaSDK;\n\t};\n\n\tconst prepareTransaction = (account: string, transaction: any) => {\n\t\tif (isConnected && address === account) {\n\t\t\treturn {\n\t\t\t\t...transaction,\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tconst handleWagmiTransaction = async (transactionData: any) => {\n\t\ttry {\n\t\t\tif (isConnected && address === transactionData.transaction.from) {\n\t\t\t\tif (chainId !== Number.parseInt(transactionData.transaction.chainId)) {\n\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chainId),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\tto: transactionData.transaction.to,\n\t\t\t\t\tdata: transactionData.transaction.data,\n\t\t\t\t\tvalue: BigInt(transactionData.transaction.value),\n\t\t\t\t\tchainId: Number.parseInt(transactionData.transaction.chain_id),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn transactionData;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"handleWagmiTransaction: Error: \", error);\n\t\t\treturn transactionData;\n\t\t}\n\t};\n\n\tconst createCollectionOffer = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OpenSeaCollectionInputBody;\n\t\t}): Promise<CreateCollectionOfferData> => {\n\t\t\treturn handleTransaction(\"createCollectionOffer\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await openseaSDK.createCollectionOffer(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, address, chainId, switchChain, sendTransactionAsync],\n\t);\n\n\tconst createOffer = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OpenSeaNFTInputBody;\n\t\t}): Promise<CreateOfferData> => {\n\t\t\treturn handleTransaction(\"createOffer\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await openseaSDK.createOffer(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, address, chainId, switchChain, sendTransactionAsync],\n\t);\n\n\tconst getCollection = useCallback(\n\t\tasync (params: GetCollectionParams): Promise<GetCollectionData> => {\n\t\t\treturn handleTransaction(\"getCollection\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getCollection(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, address, chainId, switchChain, sendTransactionAsync],\n\t);\n\n\tconst getNft = useCallback(\n\t\tasync (params: GetNftParams): Promise<GetNftData> => {\n\t\t\treturn handleTransaction(\"getNft\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getNft(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, address, chainId, switchChain, sendTransactionAsync],\n\t);\n\n\tconst useGetCollection = (params: GetCollectionParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetCollection\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getCollection(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetNft = (params: GetNftParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetNft\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getNft(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst unwrapWeth = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: UnwrapWethPayload;\n\t\t}): Promise<UnwrapWethData> => {\n\t\t\treturn handleTransaction(\"unwrapWeth\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await openseaSDK.unwrapWeth(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, address, chainId, switchChain, sendTransactionAsync],\n\t);\n\n\tconst wrapEth = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: WrapEthPayload;\n\t\t}): Promise<WrapEthData> => {\n\t\t\treturn handleTransaction(\"wrapEth\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await openseaSDK.wrapEth(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, address, chainId, switchChain, sendTransactionAsync],\n\t);\n\n\tconst cancelOrder = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: CancelOrderPayload;\n\t\t}): Promise<CancelOrderData> => {\n\t\t\treturn handleTransaction(\"cancelOrder\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await openseaSDK.cancelOrder(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, address, chainId, switchChain, sendTransactionAsync],\n\t);\n\n\tconst createListing = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OpenSeaNFTInputBody;\n\t\t}): Promise<CreateListingData> => {\n\t\t\treturn handleTransaction(\"createListing\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await openseaSDK.createListing(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, address, chainId, switchChain, sendTransactionAsync],\n\t);\n\n\tconst fulfillOrder = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: FulfillOrderPayload;\n\t\t}): Promise<FulfillOrderData> => {\n\t\t\treturn handleTransaction(\"fulfillOrder\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await openseaSDK.fulfillOrder(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, address, chainId, switchChain, sendTransactionAsync],\n\t);\n\n\tconst useGetAccount = (params: GetAccountParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetAccount\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getAccount(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetAllListings = (params: GetAllListingsParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetAllListings\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getAllListings(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetAllOffers = (params: GetAllOffersParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetAllOffers\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getAllOffers(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetBestListing = (params: GetBestListingParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetBestListing\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getBestListing(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetBestOffer = (params: GetBestOfferParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetBestOffer\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getBestOffer(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetCollections = (params: GetCollectionsParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetCollections\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getCollections(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetCollectionStats = (params: GetCollectionStatsParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetCollectionStats\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getCollectionStats(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetNfTsByAccount = (params: GetNfTsByAccountParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetNfTsByAccount\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getNfTsByAccount(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetNfTsByCollection = (params: GetNfTsByCollectionParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetNfTsByCollection\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getNfTsByCollection(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetNfTsByContract = (params: GetNfTsByContractParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetNfTsByContract\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getNfTsByContract(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetOrders = (params: GetOrdersParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetOrders\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getOrders(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst useGetPaymentToken = (params: GetPaymentTokenParams) => {\n\t\treturn useQuery({\n\t\t\tqueryKey: [\"openseaGetPaymentToken\", params],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getPaymentToken(params);\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tenabled: !!moon,\n\t\t});\n\t};\n\n\tconst offchainCancelOrder = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tdata: OffchainCancelOrderPayload;\n\t\t}): Promise<OffchainCancelOrderData> => {\n\t\t\treturn handleTransaction(\"offchainCancelOrder\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst preparedTransaction = prepareTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.data,\n\t\t\t\t);\n\t\t\t\tconst response = await openseaSDK.offchainCancelOrder(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpreparedTransaction,\n\t\t\t\t);\n\t\t\t\treturn handleWagmiTransaction(response.data);\n\t\t\t});\n\t\t},\n\t\t[moon, isConnected, address, chainId, switchChain, sendTransactionAsync],\n\t);\n\n\tconst getAccount = useCallback(\n\t\tasync (params: GetAccountParams) => {\n\t\t\treturn handleTransaction(\"getAccount\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getAccount(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getAllListings = useCallback(\n\t\tasync (params: GetAllListingsParams) => {\n\t\t\treturn handleTransaction(\"getAllListings\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getAllListings(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getAllOffers = useCallback(\n\t\tasync (params: GetAllOffersParams) => {\n\t\t\treturn handleTransaction(\"getAllOffers\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getAllOffers(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getBestListing = useCallback(\n\t\tasync (params: GetBestListingParams) => {\n\t\t\treturn handleTransaction(\"getBestListing\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getBestListing(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getBestOffer = useCallback(\n\t\tasync (params: GetBestOfferParams) => {\n\t\t\treturn handleTransaction(\"getBestOffer\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getBestOffer(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getCollections = useCallback(\n\t\tasync (params: GetCollectionsParams) => {\n\t\t\treturn handleTransaction(\"getCollections\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getCollections(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getCollectionStats = useCallback(\n\t\tasync (params: GetCollectionStatsParams) => {\n\t\t\treturn handleTransaction(\"getCollectionStats\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getCollectionStats(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getNfTsByAccount = useCallback(\n\t\tasync (params: GetNfTsByAccountParams) => {\n\t\t\treturn handleTransaction(\"getNfTsByAccount\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getNfTsByAccount(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getNfTsByCollection = useCallback(\n\t\tasync (params: GetNfTsByCollectionParams) => {\n\t\t\treturn handleTransaction(\"getNfTsByCollection\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getNfTsByCollection(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getNfTsByContract = useCallback(\n\t\tasync (params: GetNfTsByContractParams) => {\n\t\t\treturn handleTransaction(\"getNfTsByContract\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getNfTsByContract(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getOrders = useCallback(\n\t\tasync (params: GetOrdersParams) => {\n\t\t\treturn handleTransaction(\"getOrders\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getOrders(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getPaymentToken = useCallback(\n\t\tasync (params: GetPaymentTokenParams) => {\n\t\t\treturn handleTransaction(\"getPaymentToken\", async () => {\n\t\t\t\tconst openseaSDK = getOpenseaSDK();\n\t\t\t\tconst response = await openseaSDK.getPaymentToken(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\treturn {\n\t\tcreateCollectionOffer,\n\t\tcreateOffer,\n\t\tuseGetCollection,\n\t\tuseGetNft,\n\t\tunwrapWeth,\n\t\twrapEth,\n\t\tgetCollection,\n\t\tgetNft,\n\t\tcancelOrder,\n\t\tcreateListing,\n\t\tfulfillOrder,\n\t\tuseGetAccount,\n\t\tuseGetAllListings,\n\t\tuseGetAllOffers,\n\t\tuseGetBestListing,\n\t\tuseGetBestOffer,\n\t\tuseGetCollections,\n\t\tuseGetCollectionStats,\n\t\tuseGetNfTsByAccount,\n\t\tuseGetNfTsByCollection,\n\t\tuseGetNfTsByContract,\n\t\tuseGetOrders,\n\t\tuseGetPaymentToken,\n\t\toffchainCancelOrder,\n\t\tgetAccount,\n\t\tgetAllListings,\n\t\tgetAllOffers,\n\t\tgetBestListing,\n\t\tgetBestOffer,\n\t\tgetCollections,\n\t\tgetCollectionStats,\n\t\tgetNfTsByAccount,\n\t\tgetNfTsByCollection,\n\t\tgetNfTsByContract,\n\t\tgetOrders,\n\t\tgetPaymentToken,\n\t};\n};\n","import { useAuth, useMoonSDK } from \"@/hooks\";\nimport { useState } from \"react\";\nimport { SiweMessage } from \"siwe\";\nimport { useChainId } from \"wagmi\";\n\nexport interface ConnectToMoonProps {\n\taddress: string;\n\tsignMessageAsync: any;\n}\n\nexport const useConnectToMoon = ({\n\taddress,\n\tsignMessageAsync,\n}: ConnectToMoonProps) => {\n\t// wagmi get chainId\n\tconst { connect } = useMoonSDK();\n\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst chainId = useChainId();\n\n\tconst { verifySIWESignature, getSIWENonce } = useAuth();\n\n\tconst connectToMoonSiwe = async () => {\n\t\tif (!address) return;\n\n\t\tsetIsLoading(true);\n\n\t\ttry {\n\t\t\tconst nonce = await getSIWENonce(address);\n\t\t\tif (!nonce) return;\n\t\t\tconst message = new SiweMessage({\n\t\t\t\tdomain: window.location.host,\n\t\t\t\taddress,\n\t\t\t\tstatement: \"Sign in with Ethereum to the app.\",\n\t\t\t\turi: window.location.origin,\n\t\t\t\tversion: \"1\",\n\t\t\t\tchainId: chainId,\n\t\t\t\tnonce: nonce,\n\t\t\t});\n\t\t\tconst signedMessage = await signMessageAsync({\n\t\t\t\tmessage: message.prepareMessage(),\n\t\t\t});\n\n\t\t\tconst session = await verifySIWESignature(\n\t\t\t\taddress,\n\t\t\t\tsignedMessage,\n\t\t\t\tnonce,\n\t\t\t\tmessage,\n\t\t\t);\n\t\t\tif (!session) return;\n\t\t\tconnect(session.access_token, session.refresh_token);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"An error occurred:\", err);\n\t\t} finally {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t};\n\n\treturn { connectToMoonSiwe, isLoading };\n};\n","// useMoon.ts\nimport type { ChainType, INetwork } from \"@moonup/moon-sdk\";\nimport type { TransactionRequest } from \"ethers\";\nimport { useCallback, useEffect } from \"react\";\nimport { useLocalStorage } from \"usehooks-ts\";\nimport {\n\tuseEstimateGas as estimateGasWagmi,\n\tuseAccount,\n\tuseChainId,\n\tuseSendTransaction,\n\tuseSignMessage,\n\tuseSignTypedData,\n\tuseSwitchChain,\n} from \"wagmi\";\nimport { useMoonAuth } from \"../../context\";\nimport { useReconnect } from \"wagmi\";\n// useMoon.ts\n\n/**\n * Custom hook to interact with MoonSDK for managing accounts and transactions.\n *\n * @returns {INetwork & {\n *   chainType: ChainType;\n *   changeChainType: (newChainType: ChainType) => void;\n * }} An object containing the current chain type, a function to change the chain type,\n * and various functions to manage accounts and transactions.\n *\n * @throws {Error} If MoonSDK is not initialized.\n *\n * @function createAccount\n * @description Creates a new account.\n * @param {any} input - The input data for creating the account.\n * @returns {Promise<any>} A promise that resolves with the created account data.\n *\n * @function deleteAccount\n * @description Deletes an existing account.\n * @param {string} accountName - The name of the account to delete.\n * @returns {Promise<any>} A promise that resolves when the account is deleted.\n *\n * @function exportAccount\n * @description Exports an existing account.\n * @param {string} accountName - The name of the account to export.\n * @returns {Promise<any>} A promise that resolves with the exported account data.\n *\n * @function getAccount\n * @description Retrieves an existing account.\n * @param {string} accountName - The name of the account to retrieve.\n * @returns {Promise<any>} A promise that resolves with the account data.\n *\n * @function listAccounts\n * @description Lists all existing accounts.\n * @returns {Promise<any>} A promise that resolves with the list of accounts.\n *\n * @function signTransaction\n * @description Signs a transaction with a specified account.\n * @param {string} accountName - The name of the account to sign the transaction.\n * @param {any} transaction - The transaction data to sign.\n * @returns {Promise<any>} A promise that resolves with the signed transaction data.\n *\n * @function getBalance\n * @description Retrieves the balance of a specified address.\n * @param {string} address - The address to get the balance for.\n * @returns {Promise<any>} A promise that resolves with the balance data.\n *\n * @function getTransaction\n * @description Retrieves a transaction by its hash.\n * @param {string} hash - The hash of the transaction to retrieve.\n * @returns {Promise<any>} A promise that resolves with the transaction data.\n *\n * @function sendTransaction\n * @description Sends a transaction.\n * @param {any} transaction - The transaction data to send.\n * @returns {Promise<any>} A promise that resolves with the sent transaction data.\n *\n * @function signMessage\n * @description Signs a message with a specified account.\n * @param {string} accountName - The name of the account to sign the message.\n * @param {string} message - The message to sign.\n * @returns {Promise<any>} A promise that resolves with the signed message data.\n *\n * @function signTypedData\n * @description Signs typed data with a specified account.\n * @param {string} accountName - The name of the account to sign the typed data.\n * @param {any} domain - The domain data for the typed data.\n * @param {any} types - The types data for the typed data.\n * @param {any} value - The value data for the typed data.\n * @returns {Promise<any>} A promise that resolves with the signed typed data.\n *\n * @function changeChainType\n * @description Changes the current chain type.\n * @param {ChainType} newChainType - The new chain type to set.\n */\nexport const useMoonAccount = (): INetwork & {\n\tchainType: ChainType;\n\tchangeChainType: (newChainType: ChainType) => void;\n\taccounts: string[];\n\taccount: string;\n\tsetAccount: (account: string) => void;\n\twatchTransactionStatus: (txHash: string) => Promise<any>;\n} => {\n\tconst { moon } = useMoonAuth();\n\tconst [chainType, setChainType] = useLocalStorage<ChainType>(\n\t\t\"chainType\",\n\t\t\"ethereum\",\n\t);\n\tconst [accounts, setAccounts] = useLocalStorage<string[]>(\"accounts\", []);\n\tconst [account, setAccount] = useLocalStorage<string>(\"account\", \"\");\n\tconst reconnect = useReconnect();\n\n\tconst { address, isConnected, status } = useAccount();\n\tconst { signMessageAsync } = useSignMessage();\n\tconst { signTypedDataAsync } = useSignTypedData();\n\tconst { sendTransactionAsync } = useSendTransaction();\n\tconst { switchChain } = useSwitchChain();\n\tconst chainId = useChainId();\n\tuseEffect(() => {\n\t\tconst init = async () => {\n\t\t\tawait reconnect.reconnectAsync();\n\t\t};\n\t\tinit();\n\t}, []);\n\tuseEffect(() => {\n\t\tif (status === \"connected\" && address) {\n\t\t\tif (!accounts.includes(address)) {\n\t\t\t\tsetAccounts([...accounts, address]);\n\t\t\t\tif (!account) {\n\t\t\t\t\tsetAccount(address);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [status, isConnected, address]);\n\n\tif (!moon) throw new Error(\"MoonSDK not initialized\");\n\n\t/**\n\t * Creates a new account using the provided input.\n\t *\n\t * @param input - The input data required to create the account.\n\t * @returns A promise that resolves to the result of the account creation.\n\t */\n\tconst createAccount = useCallback(\n\t\tasync (input?: any): Promise<any> => {\n\t\t\treturn await moon.getTransactionService().createAccount(chainType, input);\n\t\t},\n\t\t[moon, chainType],\n\t);\n\n\t/**\n\t * Deletes an account with the specified account name.\n\t *\n\t * @param {string} accountName - The name of the account to be deleted.\n\t * @returns {Promise<any>} A promise that resolves when the account is deleted.\n\t */\n\tconst deleteAccount = useCallback(\n\t\tasync (accountName: string): Promise<any> => {\n\t\t\treturn await moon\n\t\t\t\t.getTransactionService()\n\t\t\t\t.deleteAccount(chainType, accountName);\n\t\t},\n\t\t[moon, chainType],\n\t);\n\n\t/**\n\t * Exports the account details for a given account name.\n\t *\n\t * @param {string} accountName - The name of the account to export.\n\t * @returns {Promise<any>} A promise that resolves with the exported account details.\n\t */\n\tconst exportAccount = useCallback(\n\t\tasync (accountName: string): Promise<any> => {\n\t\t\treturn await moon\n\t\t\t\t.getTransactionService()\n\t\t\t\t.exportAccount(chainType, accountName);\n\t\t},\n\t\t[moon, chainType],\n\t);\n\n\t/**\n\t * Retrieves the account information for a given account name.\n\t *\n\t * @param accountName - The name of the account to retrieve.\n\t * @returns A promise that resolves to the account information.\n\t */\n\tconst getAccount = useCallback(\n\t\tasync (accountName: string): Promise<any> => {\n\t\t\treturn await moon\n\t\t\t\t.getTransactionService()\n\t\t\t\t.getAccount(chainType, accountName);\n\t\t},\n\t\t[moon, chainType],\n\t);\n\n\t/**\n\t * Fetches a list of accounts from the transaction service and updates the state.\n\t *\n\t * @returns {Promise<void>} A promise that resolves when the accounts are fetched and state is updated.\n\t */\n\n\tconst listAccounts = useCallback(async (): Promise<any> => {\n\t\ttry {\n\t\t\tconst accountList = await moon\n\t\t\t\t.getTransactionService()\n\t\t\t\t.listAccounts(chainType);\n\n\t\t\tconst updatedAccountList = [...accountList];\n\n\t\t\tif (address && !updatedAccountList.includes(address)) {\n\t\t\t\tupdatedAccountList.push(address);\n\t\t\t}\n\n\t\t\tsetAccounts([...updatedAccountList]);\n\t\t\tif (!account && updatedAccountList.length > 0) {\n\t\t\t\tsetAccount(updatedAccountList[0]);\n\t\t\t}\n\t\t\treturn updatedAccountList;\n\t\t} catch (error) {\n\t\t\tconst updatedAccountList = [];\n\t\t\tconsole.error(\"Error fetching accounts:\", error);\n\t\t\tif (address) {\n\t\t\t\tupdatedAccountList.push(address);\n\t\t\t}\n\t\t\tsetAccounts([...updatedAccountList]);\n\t\t\tif (!account && updatedAccountList.length > 0) {\n\t\t\t\tsetAccount(updatedAccountList[0]);\n\t\t\t}\n\t\t\treturn updatedAccountList;\n\t\t}\n\t}, [moon, chainType, address, isConnected]);\n\n\t/**\n\t * Retrieves the balance for a given address.\n\t *\n\t * @param address - The address to retrieve the balance for.\n\t * @returns A promise that resolves to the balance of the given address.\n\t */\n\tconst getBalance = useCallback(\n\t\tasync (address: string): Promise<any> => {\n\t\t\treturn await moon.getTransactionService().getBalance(chainType, address);\n\t\t},\n\t\t[moon, chainType],\n\t);\n\n\t/**\n\t * Retrieves a transaction by its hash.\n\t *\n\t * @param hash - The hash of the transaction to retrieve.\n\t * @returns A promise that resolves to the transaction details.\n\t */\n\tconst getTransaction = useCallback(\n\t\tasync (hash: string): Promise<any> => {\n\t\t\treturn await moon.getTransactionService().getTransaction(chainType, hash);\n\t\t},\n\t\t[moon, chainType],\n\t);\n\n\t/**\n\t * Estimates the gas required for a given transaction.\n\t *\n\t * @param transaction - The transaction object for which to estimate gas.\n\t * @returns A promise that resolves to the estimated gas as a bigint.\n\t */\n\n\tconst estimateGas = useCallback(\n\t\tasync (transaction: Partial<TransactionRequest>): Promise<bigint> => {\n\t\t\tif (isConnected && address) {\n\t\t\t\t// Use wagmi's estimateGas if a wagmi account is connected\n\t\t\t\tconst estimate = await estimateGasWagmi({\n\t\t\t\t\tchainId: Number.parseInt(transaction.chainId as string),\n\t\t\t\t\tto: transaction.to as `0x${string}`,\n\t\t\t\t\tdata: transaction.data as `0x${string}` | undefined,\n\t\t\t\t\tvalue: transaction.value\n\t\t\t\t\t\t? BigInt(transaction.value.toString())\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\t\t\t\treturn BigInt(estimate.toString());\n\t\t\t}\n\t\t\t// Fall back to Moon API if no wagmi account is connected\n\t\t\tconst response = await moon\n\t\t\t\t.getTransactionService()\n\t\t\t\t.estimateGas(chainType, transaction);\n\t\t\treturn BigInt(response.toString());\n\t\t},\n\t\t[moon, chainType, isConnected, address, estimateGasWagmi],\n\t);\n\n\t/**\n\t * Signs a transaction using either the connected wagmi account or the Moon API.\n\t *\n\t * @param {string} accountName - The name of the account to sign the transaction with.\n\t * @param {any} transaction - The transaction object to be signed.\n\t * @returns {Promise<any>} - A promise that resolves to the signed transaction.\n\t *\n\t * @remarks\n\t * If a wagmi account is connected and an address is available, the transaction will be signed using wagmi's `sendTransactionAsync` method.\n\t * Otherwise, the transaction will be signed using the Moon API's `signTransaction` method.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = await signTransaction('myAccount', transactionData);\n\t * console.log(signedTx);\n\t * ```\n\t */\n\tconst signTransaction = useCallback(\n\t\tasync (accountName: string, transaction: any): Promise<any> => {\n\t\t\ttry {\n\t\t\t\tif (\n\t\t\t\t\t!transaction.dryrun &&\n\t\t\t\t\t!transaction.simulate &&\n\t\t\t\t\tisConnected &&\n\t\t\t\t\taddress === accountName\n\t\t\t\t) {\n\t\t\t\t\tif (isConnected && address) {\n\t\t\t\t\t\tif (chainId !== Number.parseInt(transaction.chain_id)) {\n\t\t\t\t\t\t\tawait switchChain({\n\t\t\t\t\t\t\t\tchainId: Number.parseInt(transaction.chain_id),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\t\t\tawait sendTransactionAsync({\n\t\t\t\t\t\t\tto: transaction.to,\n\t\t\t\t\t\t\tdata: transaction.data,\n\t\t\t\t\t\t\tvalue: BigInt(transaction.value),\n\t\t\t\t\t\t\tchainId: Number.parseInt(transaction.chain_id),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Fall back to Moon API if no wagmi account is connected\n\t\t\t\treturn await moon\n\t\t\t\t\t.getTransactionService()\n\t\t\t\t\t.signTransaction(chainType, accountName, transaction);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Error signing transaction:\", error);\n\t\t\t\treturn error;\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tmoon,\n\t\t\tchainType,\n\t\t\tisConnected,\n\t\t\taddress,\n\t\t\tsendTransactionAsync,\n\t\t\tswitchChain,\n\t\t\tchainId,\n\t\t],\n\t);\n\n\t/**\n\t * Sends a transaction and provides status updates.\n\t *\n\t * @param transaction - The transaction object to be sent.\n\t * @returns A promise that resolves to the final transaction receipt and emits status updates.\n\t */\n\n\tconst sendTransaction = useCallback(\n\t\tasync (transaction: any): Promise<any> => {\n\t\t\ttry {\n\t\t\t\tlet txHash: string;\n\t\t\t\tlet txResponse: any;\n\n\t\t\t\tif (isConnected && address === transaction.from) {\n\t\t\t\t\tif (chainId !== transaction.chainId) {\n\t\t\t\t\t\tawait switchChain({ chainId: transaction.chainId as number });\n\t\t\t\t\t}\n\t\t\t\t\t// Use wagmi's sendTransaction if a wagmi account is connected\n\t\t\t\t\ttxHash = await sendTransactionAsync({\n\t\t\t\t\t\tto: transaction.to as `0x${string}`,\n\t\t\t\t\t\tdata: transaction.data as `0x${string}` | undefined,\n\t\t\t\t\t\tvalue: transaction.value\n\t\t\t\t\t\t\t? BigInt(transaction.value.toString())\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tchainId: transaction.chainId as number | undefined,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Fall back to Moon API if no wagmi account is connected\n\t\t\t\t\ttxResponse = await moon\n\t\t\t\t\t\t.getTransactionService()\n\t\t\t\t\t\t.signTransaction(chainType, transaction.from, {\n\t\t\t\t\t\t\t...transaction,\n\t\t\t\t\t\t\tbroadcast: true,\n\t\t\t\t\t\t});\n\t\t\t\t\tconsole.log(\"txResponse\", txResponse);\n\t\t\t\t\ttxHash = txResponse.transactions.at(0).transaction_hash;\n\t\t\t\t\tconsole.log(\"txHash\", txHash);\n\t\t\t\t}\n\t\t\t\treturn txResponse;\n\n\t\t\t\t// return new Promise((resolve, reject) => {\n\t\t\t\t// \tresolve({\n\t\t\t\t// \t\tstatus: \"pending\",\n\t\t\t\t// \t\thash: txHash,\n\t\t\t\t// \t\tmessage: \"Transaction sent. Waiting for confirmation...\",\n\t\t\t\t// \t\tdata: txResponse ? txResponse : null,\n\t\t\t\t// \t});\n\n\t\t\t\t// \tconst checkStatus = setInterval(async () => {\n\t\t\t\t// \t\ttry {\n\t\t\t\t// \t\t\tif (txHash) {\n\t\t\t\t// \t\t\t\tconst status = await moon\n\t\t\t\t// \t\t\t\t\t.getTransactionService()\n\t\t\t\t// \t\t\t\t\t.getTransaction(chainType, txHash);\n\t\t\t\t// \t\t\t\tif (status.blockHash) {\n\t\t\t\t// \t\t\t\t\tclearInterval(checkStatus);\n\t\t\t\t// \t\t\t\t\tresolve({\n\t\t\t\t// \t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t// \t\t\t\t\t\thash: txHash,\n\t\t\t\t// \t\t\t\t\t\treceipt: status,\n\t\t\t\t// \t\t\t\t\t\tmessage: \"Transaction confirmed\",\n\t\t\t\t// \t\t\t\t\t\tdata: txResponse ? txResponse : null,\n\t\t\t\t// \t\t\t\t\t});\n\t\t\t\t// \t\t\t\t} else if (status.status === \"failed\") {\n\t\t\t\t// \t\t\t\t\tclearInterval(checkStatus);\n\t\t\t\t// \t\t\t\t\treject({\n\t\t\t\t// \t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t// \t\t\t\t\t\thash: txHash,\n\t\t\t\t// \t\t\t\t\t\terror: status.error,\n\t\t\t\t// \t\t\t\t\t\tmessage: \"Transaction failed\",\n\t\t\t\t// \t\t\t\t\t\tdata: txResponse ? txResponse : null,\n\t\t\t\t// \t\t\t\t\t});\n\t\t\t\t// \t\t\t\t}\n\t\t\t\t// \t\t\t} else {\n\t\t\t\t// \t\t\t\tconsole.log(\"Transaction hash is null, retrying...\");\n\t\t\t\t// \t\t\t}\n\t\t\t\t// \t\t} catch (error) {\n\t\t\t\t// \t\t\tconsole.error(\"Error checking transaction status:\", error);\n\t\t\t\t// \t\t}\n\t\t\t\t// \t}, 5000); // Check every 5 seconds\n\t\t\t\t// });\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Error sending transaction:\", error);\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: error,\n\t\t\t\t\tmessage: \"Error sending transaction\",\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tmoon,\n\t\t\tchainType,\n\t\t\tisConnected,\n\t\t\taddress,\n\t\t\tsendTransactionAsync,\n\t\t\tswitchChain,\n\t\t\tchainId,\n\t\t],\n\t);\n\n\tconst watchTransactionStatus = useCallback(\n\t\tasync (txHash: string): Promise<any> => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst checkStatus = setInterval(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst status = await moon\n\t\t\t\t\t\t\t.getTransactionService()\n\t\t\t\t\t\t\t.getTransaction(chainType, txHash);\n\t\t\t\t\t\tif (status.blockHash) {\n\t\t\t\t\t\t\tclearInterval(checkStatus);\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\t\t\thash: txHash,\n\t\t\t\t\t\t\t\treceipt: status,\n\t\t\t\t\t\t\t\tmessage: \"Transaction confirmed\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (status.status === \"failed\") {\n\t\t\t\t\t\t\tclearInterval(checkStatus);\n\t\t\t\t\t\t\treject({\n\t\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\t\thash: txHash,\n\t\t\t\t\t\t\t\terror: status.error,\n\t\t\t\t\t\t\t\tmessage: \"Transaction failed\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\"Error checking transaction status:\", error);\n\t\t\t\t\t}\n\t\t\t\t}, 5000); // Check every 5 seconds\n\t\t\t});\n\t\t},\n\t\t[moon, chainType],\n\t);\n\n\t/**\n\t * Signs a message using either the connected wagmi account or the Moon API.\n\t *\n\t * @param accountName - The name of the account to sign the message with.\n\t * @param message - The message to be signed.\n\t * @returns A promise that resolves to the signed message.\n\t *\n\t * @remarks\n\t * If a wagmi account is connected, it uses wagmi's `signMessageAsync` method.\n\t * Otherwise, it falls back to using the Moon API's `signMessage` method.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedMessage = await signMessage('myAccount', 'Hello, World!');\n\t * console.log(signedMessage);\n\t * ```\n\t */\n\tconst signMessage = useCallback(\n\t\tasync (accountName: string, message: string): Promise<any> => {\n\t\t\tif (isConnected && address === accountName) {\n\t\t\t\t// Use wagmi's signMessage if a wagmi account is connected\n\t\t\t\treturn await signMessageAsync({ message });\n\t\t\t}\n\t\t\t// Fall back to Moon API if no wagmi account is connected\n\t\t\treturn await moon\n\t\t\t\t.getTransactionService()\n\t\t\t\t.signMessage(chainType, accountName, message);\n\t\t},\n\t\t[moon, chainType, isConnected, address, signMessageAsync],\n\t);\n\n\t/**\n\t * Signs typed data using either wagmi's signTypedDataAsync or Moon API's signTypedData method.\n\t *\n\t * @param accountName - The name of the account to sign the data with.\n\t * @param domain - The domain information for the typed data.\n\t * @param types - The types definition for the typed data.\n\t * @param value - The actual data to be signed.\n\t * @returns A promise that resolves to the signed data.\n\t *\n\t * The function first checks if a wagmi account is connected and uses wagmi's signTypedDataAsync method.\n\t * If no wagmi account is connected, it falls back to using the Moon API's signTypedData method.\n\t */\n\tconst signTypedData = useCallback(\n\t\tasync (\n\t\t\taccountName: string,\n\t\t\tdomain: any,\n\t\t\ttypes: any,\n\t\t\tvalue: any,\n\t\t): Promise<any> => {\n\t\t\tif (isConnected && address === accountName) {\n\t\t\t\t// Use wagmi's signTypedData if a wagmi account is connected\n\t\t\t\treturn await signTypedDataAsync({\n\t\t\t\t\tdomain: domain,\n\t\t\t\t\ttypes: types,\n\t\t\t\t\tprimaryType: Object.keys(types)[0], // Assuming the first key is the primary type\n\t\t\t\t\tmessage: value,\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Fall back to Moon API if no wagmi account is connected\n\t\t\treturn await moon\n\t\t\t\t.getTransactionService()\n\t\t\t\t.signTypedData(chainType, accountName, domain, types, value);\n\t\t},\n\t\t[moon, chainType, isConnected, address, signTypedDataAsync],\n\t);\n\n\t/**\n\t * Changes the current chain type to the specified new chain type.\n\t *\n\t * @param newChainType - The new chain type to set.\n\t */\n\tconst changeChainType = useCallback((newChainType: ChainType) => {\n\t\tsetChainType(newChainType);\n\t}, []);\n\n\treturn {\n\t\taccount,\n\t\tsetAccount,\n\t\taccounts,\n\t\tchainType,\n\t\tchangeChainType,\n\t\tcreateAccount,\n\t\tdeleteAccount,\n\t\texportAccount,\n\t\tgetTransaction,\n\t\tlistAccounts,\n\t\tsignTransaction,\n\t\tgetBalance,\n\t\tgetAccount,\n\t\tsendTransaction,\n\t\tsignMessage,\n\t\tsignTypedData,\n\t\testimateGas,\n\t\twatchTransactionStatus,\n\t};\n};\n","import { useChains, useMoonAccount, useMoonTransaction } from \"@/hooks\";\nimport type {\n\tData,\n\tDataGetWalletTokenBalancesParams,\n\tDataGetWalletTransactionHistoryParams,\n\tWalletBalanceAPIResponse,\n\tWalletHistoryAPIResponse,\n\tNFTsAPIResponse,\n\tChartAnalysisAPIResponse,\n\tChartsGetChartAnalysisParamsEnum,\n\tDataExecuteCustomSupabaseQueryPayload,\n\tPortfolioAPIResponse,\n\tTokenMetadataAPIResponse,\n\tDataGetTokensMetadataParams,\n\tDataGetUserDebankComplexProtocolListParams,\n\tDebankPortfolioAPIResponse,\n\tDataGetUserDebankTokenListParams,\n\tDataGetUserWalletPortfolioParams,\n\tDataGetWalletNfTsParams,\n\tDataGetBitcoinBalanceData,\n\tDataGetBitcoinTransactionsParams,\n\tDataGetBitcoinTransactionsData,\n\tDataGetDogecoinBalanceData,\n\tDataGetDogecoinTransactionsParams,\n\tDataGetDogecoinTransactionsData,\n\tDataGetLitecoinBalanceData,\n\tDataGetLitecoinTransactionsParams,\n\tDataGetLitecoinTransactionsData,\n\tDataGetTronBalanceData,\n\tDataGetTronTransactionsParams,\n\tDataGetTronTransactionsData,\n\tDataGetXrpBalanceData,\n\tDataGetXrpTransactionsData,\n\tDataGetCoinGeckoCoinInfoParams,\n\tDataGetCoinGeckoCoinInfoData,\n\tDataGetCoinGeckoCoinListParams,\n\tDataGetCoinGeckoCoinListData,\n\tDataGetCoinGeckoCoinMarketsParams,\n\tDataGetCoinGeckoCoinMarketsData,\n\tDataGetAllUserDebankNfTsParams,\n\tDataGetAllUserDebankNfTsData,\n\tDataGetUserDebankNftListParams,\n\tDataGetUserDebankNftListData,\n} from \"@moonup/moon-api\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport { useMoonAuth } from \"../../context\";\n\ntype ChainInfo = {\n\tname: string;\n\taliases: string[];\n\thexId: string;\n};\n\nexport const chainIdToHexMapping: { [key: number]: ChainInfo } = {\n\t1: {\n\t\tname: \"Ethereum Mainnet\",\n\t\taliases: [\"eth\", \"mainnet\"],\n\t\thexId: \"0x1\",\n\t},\n\t5: {\n\t\tname: \"Goerli (Ethereum Testnet)\",\n\t\taliases: [\"goerli\"],\n\t\thexId: \"0x5\",\n\t},\n\t56: {\n\t\tname: \"Binance Smart Chain Mainnet\",\n\t\taliases: [\"bsc\", \"binance\", \"binance smart chain\"],\n\t\thexId: \"0x38\",\n\t},\n\t97: {\n\t\tname: \"Binance Smart Chain Testnet\",\n\t\taliases: [\"bsc testnet\", \"binance testnet\", \"binance smart chain testnet\"],\n\t\thexId: \"0x61\",\n\t},\n\t137: {\n\t\tname: \"Polygon (Matic) Mainnet\",\n\t\taliases: [\"matic\", \"polygon\"],\n\t\thexId: \"0x89\",\n\t},\n\t80001: {\n\t\tname: \"Mumbai (Matic Testnet)\",\n\t\taliases: [\"mumbai\", \"matic testnet\", \"polygon testnet\"],\n\t\thexId: \"0x13881\",\n\t},\n\t43114: {\n\t\tname: \"Avalanche Mainnet\",\n\t\taliases: [\"avalanche\"],\n\t\thexId: \"0xa86a\",\n\t},\n\t43113: {\n\t\tname: \"Avalanche Testnet\",\n\t\taliases: [\"avalanche testnet\"],\n\t\thexId: \"0xa869\",\n\t},\n\t250: {\n\t\tname: \"Fantom Mainnet\",\n\t\taliases: [\"fantom\"],\n\t\thexId: \"0xfa\",\n\t},\n\t25: {\n\t\tname: \"Cronos Mainnet\",\n\t\taliases: [\"cronos\"],\n\t\thexId: \"0x19\",\n\t},\n};\n\nexport const useMoonDataSDK = () => {\n\tconst { handleTransaction } = useMoonTransaction();\n\n\tconst { moon, session } = useMoonAuth();\n\n\tconst { account: wallet } = useMoonAccount();\n\tconst { selectedChain: chain } = useChains();\n\n\tconst getChartAnalysis = useCallback(\n\t\tasync (\n\t\t\tsymbol: string,\n\t\t\ttimeframe: ChartsGetChartAnalysisParamsEnum,\n\t\t): Promise<ChartAnalysisAPIResponse> => {\n\t\t\treturn handleTransaction(\"getChartAnalysis\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.chartsGetChartAnalysis(\n\t\t\t\t\tsymbol,\n\t\t\t\t\ttimeframe,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst executeCustomSupabaseQuery = useCallback(\n\t\tasync (data: DataExecuteCustomSupabaseQueryPayload): Promise<any> => {\n\t\t\treturn handleTransaction(\"executeCustomSupabaseQuery\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataExecuteCustomSupabaseQuery(data);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getPortfolioFetchStatus = useCallback(\n\t\tasync (jobId: string): Promise<PortfolioAPIResponse> => {\n\t\t\treturn handleTransaction(\"getPortfolioFetchStatus\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetPortfolioFetchStatus(jobId);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTokensMetadata = useCallback(\n\t\tasync (\n\t\t\tquery: DataGetTokensMetadataParams,\n\t\t): Promise<TokenMetadataAPIResponse> => {\n\t\t\treturn handleTransaction(\"getTokensMetadata\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetTokensMetadata(query);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getUserDebankComplexProtocolList = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetUserDebankComplexProtocolListParams,\n\t\t): Promise<DebankPortfolioAPIResponse> => {\n\t\t\treturn handleTransaction(\"getUserDebankComplexProtocolList\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response =\n\t\t\t\t\tawait dataSDK.dataGetUserDebankComplexProtocolList(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getUserDebankTokenList = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetUserDebankTokenListParams,\n\t\t): Promise<WalletBalanceAPIResponse> => {\n\t\t\treturn handleTransaction(\"getUserDebankTokenList\", async () => {\n\t\t\t\tif (!params.address) {\n\t\t\t\t\tthrow new Error(\"getUserDebankTokenList::Address is required\");\n\t\t\t\t}\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetUserDebankTokenList(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getUserWalletPortfolio = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetUserWalletPortfolioParams,\n\t\t): Promise<PortfolioAPIResponse> => {\n\t\t\treturn handleTransaction(\"getUserWalletPortfolio\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetUserWalletPortfolio(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\tconst getUserDebankTotalBalance = useCallback(\n\t\tasync (address: string): Promise<WalletBalanceAPIResponse> => {\n\t\t\treturn handleTransaction(\"getUserDebankTotalBalance\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetUserDebankTotalBalance({\n\t\t\t\t\taddress,\n\t\t\t\t});\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getWalletNFTs = useCallback(\n\t\tasync (params: DataGetWalletNfTsParams): Promise<NFTsAPIResponse> => {\n\t\t\treturn handleTransaction(\"getWalletNFTs\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetWalletNfTs(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getBitcoinBalance = useCallback(\n\t\tasync (address: string): Promise<DataGetBitcoinBalanceData> => {\n\t\t\treturn handleTransaction(\"getBitcoinBalance\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetBitcoinBalance(address);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getBitcoinTransactions = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetBitcoinTransactionsParams,\n\t\t): Promise<DataGetBitcoinTransactionsData> => {\n\t\t\treturn handleTransaction(\"getBitcoinTransactions\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetBitcoinTransactions(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getDogecoinBalance = useCallback(\n\t\tasync (address: string): Promise<DataGetDogecoinBalanceData> => {\n\t\t\treturn handleTransaction(\"getDogecoinBalance\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetDogecoinBalance(address);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getDogecoinTransactions = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetDogecoinTransactionsParams,\n\t\t): Promise<DataGetDogecoinTransactionsData> => {\n\t\t\treturn handleTransaction(\"getDogecoinTransactions\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetDogecoinTransactions(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getLitecoinBalance = useCallback(\n\t\tasync (address: string): Promise<DataGetLitecoinBalanceData> => {\n\t\t\treturn handleTransaction(\"getLitecoinBalance\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetLitecoinBalance(address);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getLitecoinTransactions = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetLitecoinTransactionsParams,\n\t\t): Promise<DataGetLitecoinTransactionsData> => {\n\t\t\treturn handleTransaction(\"getLitecoinTransactions\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetLitecoinTransactions(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTronBalance = useCallback(\n\t\tasync (address: string): Promise<DataGetTronBalanceData> => {\n\t\t\treturn handleTransaction(\"getTronBalance\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetTronBalance(address);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getTronTransactions = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetTronTransactionsParams,\n\t\t): Promise<DataGetTronTransactionsData> => {\n\t\t\treturn handleTransaction(\"getTronTransactions\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetTronTransactions(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getXrpBalance = useCallback(\n\t\tasync (account: string): Promise<DataGetXrpBalanceData> => {\n\t\t\treturn handleTransaction(\"getXrpBalance\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetXrpBalance(account);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getXrpTransactions = useCallback(\n\t\tasync (account: string): Promise<DataGetXrpTransactionsData> => {\n\t\t\treturn handleTransaction(\"getXrpTransactions\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetXrpTransactions(account);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t// React Query Hooks for new methods\n\tconst useBitcoinBalanceQuery = (address: string) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"bitcoinBalance\", address],\n\t\t\tqueryFn: () => getBitcoinBalance(address),\n\t\t});\n\n\tconst useBitcoinTransactionsQuery = (\n\t\tparams: DataGetBitcoinTransactionsParams,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"bitcoinTransactions\", params],\n\t\t\tqueryFn: () => getBitcoinTransactions(params),\n\t\t});\n\n\tconst useDogecoinBalanceQuery = (address: string) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"dogecoinBalance\", address],\n\t\t\tqueryFn: () => getDogecoinBalance(address),\n\t\t});\n\n\tconst useDogecoinTransactionsQuery = (\n\t\tparams: DataGetDogecoinTransactionsParams,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"dogecoinTransactions\", params],\n\t\t\tqueryFn: () => getDogecoinTransactions(params),\n\t\t});\n\n\tconst useLitecoinBalanceQuery = (address: string) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"litecoinBalance\", address],\n\t\t\tqueryFn: () => getLitecoinBalance(address),\n\t\t});\n\n\tconst useLitecoinTransactionsQuery = (\n\t\tparams: DataGetLitecoinTransactionsParams,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"litecoinTransactions\", params],\n\t\t\tqueryFn: () => getLitecoinTransactions(params),\n\t\t});\n\n\tconst useTronBalanceQuery = (address: string) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"tronBalance\", address],\n\t\t\tqueryFn: () => getTronBalance(address),\n\t\t});\n\n\tconst useTronTransactionsQuery = (params: DataGetTronTransactionsParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"tronTransactions\", params],\n\t\t\tqueryFn: () => getTronTransactions(params),\n\t\t});\n\n\tconst useXrpBalanceQuery = (account: string) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"xrpBalance\", account],\n\t\t\tqueryFn: () => getXrpBalance(account),\n\t\t});\n\n\tconst useXrpTransactionsQuery = (account: string) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"xrpTransactions\", account],\n\t\t\tqueryFn: () => getXrpTransactions(account),\n\t\t});\n\n\t// React Query Hooks\n\n\tconst useChartAnalysisQuery = (\n\t\tsymbol: string,\n\t\ttimeframe: ChartsGetChartAnalysisParamsEnum,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"chartAnalysis\", symbol, timeframe],\n\t\t\tqueryFn: () => getChartAnalysis(symbol, timeframe),\n\t\t});\n\n\tconst usePortfolioFetchStatusQuery = (jobId: string) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"portfolioFetchStatus\", jobId],\n\t\t\tqueryFn: () => getPortfolioFetchStatus(jobId),\n\t\t});\n\n\tconst useTokensMetadataQuery = (query: DataGetTokensMetadataParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"tokensMetadata\", query],\n\t\t\tqueryFn: () => getTokensMetadata(query),\n\t\t});\n\n\tconst useDebankUserTotalBalanceQuery = (address: string) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"debankUserTotalBalance\", address],\n\t\t\tqueryFn: () => getUserDebankTotalBalance(address),\n\t\t});\n\n\tconst useUserDebankComplexProtocolListQuery = (\n\t\tparams: DataGetUserDebankComplexProtocolListParams,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"userDebankComplexProtocolList\", params],\n\t\t\tqueryFn: () => getUserDebankComplexProtocolList(params),\n\t\t});\n\n\tconst useUserDebankTokenListQuery = (\n\t\tparams: DataGetUserDebankTokenListParams,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"userDebankTokenList\", params],\n\t\t\tqueryFn: () => getUserDebankTokenList(params),\n\t\t\tenabled: !!params.address && !!session,\n\t\t});\n\n\tconst useUserWalletPortfolioQuery = (\n\t\tparams: DataGetUserWalletPortfolioParams,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"userWalletPortfolio\", params],\n\t\t\tqueryFn: () => getUserWalletPortfolio(params),\n\t\t});\n\n\tconst useDebankUserTokensQuery = (address: string, isAll: boolean) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"debankUserTokens\", address, isAll],\n\t\t\tqueryFn: () =>\n\t\t\t\tgetAllDebankUserTokens({\n\t\t\t\t\taddress,\n\t\t\t\t\tisAll,\n\t\t\t\t}),\n\t\t\tenabled: !!address && !!moon,\n\t\t});\n\tconst walletBalanceChainIdQuery = (chainId?: number) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"useMoonDataWalletBalanceQuery\", chainId || chain?.id, wallet],\n\t\t\tqueryFn: async () => {\n\t\t\t\tconst dataSDK = moon?.getDataSDK();\n\t\t\t\tif (!dataSDK)\n\t\t\t\t\tthrow new Error(\"useMoonWalletHistory::Moon SDK not initialized\");\n\t\t\t\tif (!wallet)\n\t\t\t\t\tthrow new Error(\"useMoonWalletHistory::No wallet address found\");\n\n\t\t\t\tconst selectedChainId = chainId || chain?.chain_id;\n\t\t\t\tif (!selectedChainId)\n\t\t\t\t\tthrow new Error(\"useMoonWalletHistory::No chain found\");\n\t\t\t\tif (!chainIdToHexMapping[selectedChainId])\n\t\t\t\t\tthrow new Error(\"useMoonWalletHistory::Chain not supported\");\n\n\t\t\t\tconst hexChain = chainIdToHexMapping[selectedChainId].hexId;\n\t\t\t\tconst response = await dataSDK.dataGetWalletTokenBalances({\n\t\t\t\t\taddress: wallet || \"\",\n\t\t\t\t\tchain: hexChain,\n\t\t\t\t});\n\t\t\t\tif (!response.data) {\n\t\t\t\t\tthrow new Error(\"useMoonDataSDK::Wallet balance query failed\");\n\t\t\t\t}\n\t\t\t\treturn response.data;\n\t\t\t},\n\t\t\tstaleTime: 1000 * 60 * 20,\n\t\t});\n\n\tconst walletBalanceQuery = useQuery({\n\t\tqueryKey: [\"useMoonDataWalletBalanceQuery\", chain?.id, wallet],\n\t\tqueryFn: async () => {\n\t\t\tconst dataSDK = moon?.getDataSDK();\n\t\t\tif (!dataSDK)\n\t\t\t\tthrow new Error(\"useMoonWalletHistory::Moon SDK not initialized\");\n\t\t\tif (!wallet)\n\t\t\t\tthrow new Error(\"useMoonWalletHistory::No wallet address found\");\n\t\t\tif (!chain || !chain.chain_id)\n\t\t\t\tthrow new Error(\"useMoonWalletHistory::No chain found\");\n\t\t\tif (!chainIdToHexMapping[chain.chain_id])\n\t\t\t\tthrow new Error(\"useMoonWalletHistory::Chain not supported\");\n\t\t\tconst hexChain = chainIdToHexMapping[chain.chain_id].hexId;\n\t\t\tconst response = await dataSDK.dataGetWalletTokenBalances({\n\t\t\t\taddress: wallet || \"\",\n\t\t\t\tchain: hexChain,\n\t\t\t});\n\t\t\tif (!response.data) {\n\t\t\t\tthrow new Error(\"useMoonDataSDK::Wallet balance query failed\");\n\t\t\t}\n\t\t\treturn response.data;\n\t\t},\n\t\tstaleTime: 1000 * 60 * 20,\n\t});\n\n\tconst getDataSDK = (): Data => {\n\t\tconst dataSDK = moon?.getDataSDK();\n\t\tif (!dataSDK) throw new Error(\"Moon SDK not initialized\");\n\t\treturn dataSDK;\n\t};\n\n\tconst getWalletBalance = useCallback(\n\t\tasync (\n\t\t\tpayload: DataGetWalletTokenBalancesParams,\n\t\t): Promise<WalletBalanceAPIResponse> => {\n\t\t\treturn handleTransaction(\"getWalletBalance\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetWalletTokenBalances(payload);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getWalletHistory = useCallback(\n\t\tasync (\n\t\t\tpayload: DataGetWalletTransactionHistoryParams,\n\t\t): Promise<WalletHistoryAPIResponse> => {\n\t\t\treturn handleTransaction(\"getWalletHistory\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetWalletTransactionHistory(payload);\n\t\t\t\treturn response;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\tconst getAllDebankUserTokens = useCallback(\n\t\tasync (params: {\n\t\t\taddress: string;\n\t\t\tisAll: boolean;\n\t\t\trefresh?: boolean;\n\t\t}): Promise<WalletBalanceAPIResponse> => {\n\t\t\treturn handleTransaction(\"getAllDebankUserTokens\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\n\t\t\t\tconst response = await dataSDK.getAllDebankUserTokens({\n\t\t\t\t\taddress: params.address,\n\t\t\t\t\tisAll: params.isAll,\n\t\t\t\t\trefresh: params.refresh,\n\t\t\t\t});\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst debankUserTokensQuery = useQuery({\n\t\tqueryKey: [\"debankUserTokens\", wallet],\n\t\tqueryFn: async () => {\n\t\t\tif (!wallet || !moon) return null;\n\t\t\tconst response = await moon.getDataSDK().getAllDebankUserTokens({\n\t\t\t\taddress: wallet,\n\t\t\t\tisAll: false,\n\t\t\t});\n\t\t\treturn response.data;\n\t\t},\n\t\tenabled: !!wallet && !!moon,\n\t});\n\tconst useWalletHistoryQuery = (\n\t\tparams: DataGetWalletTransactionHistoryParams,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"walletHistory\", params],\n\t\t\tqueryFn: () => getWalletHistory(params),\n\t\t\tenabled: !!params.address,\n\t\t});\n\n\tconst useWalletNFTsQuery = (params: DataGetWalletNfTsParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"walletNFTs\", params],\n\t\t\tqueryFn: () => getWalletNFTs(params),\n\t\t\tenabled: !!params.address,\n\t\t});\n\tconst getCoinGeckoCoinInfo = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetCoinGeckoCoinInfoParams,\n\t\t): Promise<DataGetCoinGeckoCoinInfoData> => {\n\t\t\treturn handleTransaction(\"getCoinGeckoCoinInfo\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetCoinGeckoCoinInfo(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getCoinGeckoCoinList = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetCoinGeckoCoinListParams,\n\t\t): Promise<DataGetCoinGeckoCoinListData> => {\n\t\t\treturn handleTransaction(\"getCoinGeckoCoinList\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetCoinGeckoCoinList(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getCoinGeckoCoinMarkets = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetCoinGeckoCoinMarketsParams,\n\t\t): Promise<DataGetCoinGeckoCoinMarketsData> => {\n\t\t\treturn handleTransaction(\"getCoinGeckoCoinMarkets\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetCoinGeckoCoinMarkets(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getAllUserDebankNfTs = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetAllUserDebankNfTsParams,\n\t\t): Promise<DataGetAllUserDebankNfTsData> => {\n\t\t\treturn handleTransaction(\"getAllUserDebankNfTs\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetAllUserDebankNfTs(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\tconst getUserDebankNftList = useCallback(\n\t\tasync (\n\t\t\tparams: DataGetUserDebankNftListParams,\n\t\t): Promise<DataGetUserDebankNftListData> => {\n\t\t\treturn handleTransaction(\"getUserDebankNftList\", async () => {\n\t\t\t\tconst dataSDK = getDataSDK();\n\t\t\t\tconst response = await dataSDK.dataGetUserDebankNftList(params);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon],\n\t);\n\n\t// React Query Hooks for new methods\n\tconst useCoinGeckoCoinInfoQuery = (params: DataGetCoinGeckoCoinInfoParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"coinGeckoCoinInfo\", params],\n\t\t\tqueryFn: () => getCoinGeckoCoinInfo(params),\n\t\t});\n\n\tconst useCoinGeckoCoinListQuery = (params: DataGetCoinGeckoCoinListParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"coinGeckoCoinList\", params],\n\t\t\tqueryFn: () => getCoinGeckoCoinList(params),\n\t\t});\n\n\tconst useCoinGeckoCoinMarketsQuery = (\n\t\tparams: DataGetCoinGeckoCoinMarketsParams,\n\t) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"coinGeckoCoinMarkets\", params],\n\t\t\tqueryFn: () => getCoinGeckoCoinMarkets(params),\n\t\t});\n\n\tconst useAllUserDebankNfTsQuery = (params: DataGetAllUserDebankNfTsParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"allUserDebankNfTs\", params],\n\t\t\tqueryFn: () => getAllUserDebankNfTs(params),\n\t\t});\n\n\tconst useUserDebankNftListQuery = (params: DataGetUserDebankNftListParams) =>\n\t\tuseQuery({\n\t\t\tqueryKey: [\"userDebankNftList\", params],\n\t\t\tqueryFn: () => getUserDebankNftList(params),\n\t\t});\n\n\treturn {\n\t\tgetChartAnalysis,\n\t\texecuteCustomSupabaseQuery,\n\t\tgetPortfolioFetchStatus,\n\t\tgetTokensMetadata,\n\t\tgetUserDebankComplexProtocolList,\n\t\tgetUserDebankTokenList,\n\t\tgetUserWalletPortfolio,\n\t\tgetWalletBalance,\n\t\tgetWalletNFTs,\n\t\tgetWalletHistory,\n\t\tgetAllDebankUserTokens,\n\t\tgetUserDebankTotalBalance,\n\t\tuseDebankUserTotalBalanceQuery,\n\t\t// React Query Hooks\n\t\tdebankUserTokensQuery,\n\t\tuseWalletHistoryQuery,\n\t\tuseWalletNFTsQuery,\n\t\tuseDebankUserTokensQuery,\n\t\tuseChartAnalysisQuery,\n\t\tusePortfolioFetchStatusQuery,\n\t\tuseTokensMetadataQuery,\n\t\tuseUserDebankComplexProtocolListQuery,\n\t\tuseUserDebankTokenListQuery,\n\t\tuseUserWalletPortfolioQuery,\n\t\twalletBalanceQuery,\n\t\twalletBalanceChainIdQuery,\n\t\tgetBitcoinBalance,\n\t\tgetBitcoinTransactions,\n\t\tgetDogecoinBalance,\n\t\tgetDogecoinTransactions,\n\t\tgetLitecoinBalance,\n\t\tgetLitecoinTransactions,\n\t\tgetTronBalance,\n\t\tgetTronTransactions,\n\t\tgetXrpBalance,\n\t\tgetXrpTransactions,\n\t\tuseBitcoinBalanceQuery,\n\t\tuseBitcoinTransactionsQuery,\n\t\tuseDogecoinBalanceQuery,\n\t\tuseDogecoinTransactionsQuery,\n\t\tuseLitecoinBalanceQuery,\n\t\tuseLitecoinTransactionsQuery,\n\t\tuseTronBalanceQuery,\n\t\tuseTronTransactionsQuery,\n\t\tuseXrpBalanceQuery,\n\t\tuseXrpTransactionsQuery,\n\t\tgetCoinGeckoCoinInfo,\n\t\tgetCoinGeckoCoinList,\n\t\tgetCoinGeckoCoinMarkets,\n\t\tgetAllUserDebankNfTs,\n\t\tgetUserDebankNftList,\n\t\tuseCoinGeckoCoinInfoQuery,\n\t\tuseCoinGeckoCoinListQuery,\n\t\tuseCoinGeckoCoinMarketsQuery,\n\t\tuseAllUserDebankNfTsQuery,\n\t\tuseUserDebankNftListQuery,\n\t};\n};\n","import { MoonAuthContext, type MoonAuthContextType } from \"@/context\";\nimport { useContext } from \"react\";\n\n/**\n * Custom hook to access the MoonSDK context.\n *\n * This hook must be used within a `MoonSDKProvider` to access the SDK state.\n * If used outside of a `MoonSDKProvider`, it will throw an error.\n *\n * @returns {State} The current state of the MoonSDK context.\n * @throws {Error} If used outside of a `MoonSDKProvider`.\n */\nexport const useMoonSDK = (): MoonAuthContextType => {\n\tconst context = useContext(MoonAuthContext);\n\tif (context === undefined) {\n\t\tthrow new Error(\"useMoonSDK must be used within a MoonSDKProvider\");\n\t}\n\treturn context;\n};\n","// useChains.ts\nimport { useMoonSDK } from \"@/hooks\";\nimport type { Chains } from \"@moonup/moon-sdk\";\nimport { useCallback, useState } from \"react\";\nimport { useLocalStorage } from \"usehooks-ts\";\n\nexport const useChains = () => {\n\tconst { moon } = useMoonSDK();\n\tconst [chains, setChains] = useLocalStorage<Chains[]>(\"moonChains\", []);\n\tconst [selectedChain, setSelectedChain] = useLocalStorage<Chains | null>(\n\t\t\"moonSelectedChain\",\n\t\tnull,\n\t);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tconst fetchChains = useCallback(async () => {\n\t\tif (!moon) {\n\t\t\tsetError(new Error(\"MoonSDK not initialized\"));\n\t\t\tsetLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tsetLoading(true);\n\t\t\tconst chainService = moon.getChainService();\n\t\t\tconst fetchedChains = await chainService.getChains();\n\t\t\tsetChains(fetchedChains);\n\t\t\tsetLoading(false);\n\t\t} catch (err) {\n\t\t\tsetError(\n\t\t\t\terr instanceof Error ? err : new Error(\"Failed to fetch chains\"),\n\t\t\t);\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [moon]);\n\n\tconst switchChain = useCallback(\n\t\t(chainId: number) => {\n\t\t\ttry {\n\t\t\t\tconst newSelectedChain = chains.find(\n\t\t\t\t\t(chain) => chain.chain_id === chainId,\n\t\t\t\t);\n\t\t\t\tconsole.log(\"newSelectedChain\", newSelectedChain);\n\t\t\t\tif (newSelectedChain) {\n\t\t\t\t\t// Create a new object to ensure React detects the change\n\t\t\t\t\tsetSelectedChain((prevChain) => {\n\t\t\t\t\t\tif (prevChain?.chain_id === newSelectedChain.chain_id) {\n\t\t\t\t\t\t\treturn prevChain; // No change needed\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { ...newSelectedChain };\n\t\t\t\t\t});\n\t\t\t\t\tmoon?.chainService.setSelectedChain(newSelectedChain);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`Chain with id ${chainId} not found`);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tsetError(\n\t\t\t\t\terr instanceof Error ? err : new Error(\"Failed to switch chain\"),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[moon, chains],\n\t);\n\n\tconst getChainById = useCallback(\n\t\t(id: number): Chains | undefined => {\n\t\t\treturn chains.find((chain) => chain.chain_id === id);\n\t\t},\n\t\t[chains],\n\t);\n\n\t// useEffect(() => {\n\t// \tif (moon && chains.length > 0) {\n\t// \t\tconst initialSelectedChain = moon.getChainService().getSelectedChain();\n\t// \t\tsetSelectedChain(initialSelectedChain);\n\t// \t}\n\t// }, [moon, chains]);\n\n\treturn {\n\t\tchains,\n\t\tselectedChain,\n\t\tloading,\n\t\terror,\n\t\tfetchChains,\n\t\tswitchChain,\n\t\tgetChainById,\n\t};\n};\n","import { DBAdapterBase } from \"@/components\";\nimport {\n\tUseQueryOptions,\n\tUseQueryResult,\n\tuseQuery,\n} from \"@tanstack/react-query\";\nimport { fetchNullable } from \"./fetchNullable\";\nlet priceCallcount = 0;\nlet infoCallcount = 0;\n/**\n * Constructs the URL to retrieve prices from CoinGecko.\n * @param tokens\n * @returns\n */\nexport const buildCoinGeckoPricesURL = (tokens: readonly string[]): string =>\n\t`https://api.coingecko.com/api/v3/simple/price?ids=${tokens.join(\n\t\t\"%2C\",\n\t)}&vs_currencies=usd`;\n\nexport const buildCoinGeckoInfoURL = (tokenId: string): string => {\n\treturn `https://api.coingecko.com/api/v3/coins/${tokenId}`;\n};\n\nexport const buildCoinGeckoTokenListURL = (): string => {\n\treturn `https://api.coingecko.com/api/v3/coins/list`;\n};\n\nconst createEmptyResult = <T extends string>(\n\ttokens: readonly T[],\n): CoinGeckoPrices<T> => {\n\tconst ret = {} as CoinGeckoPrices<T>;\n\ttokens.forEach((token) => {\n\t\tret[token] = null;\n\t});\n\treturn ret;\n};\n\n/**\n * Prices of each token.\n */\nexport type CoinGeckoPrices<T extends string> = {\n\t[C in T]: number | null;\n};\n\nexport type CG_TokenInfo = {\n\tid: string;\n\tname: string;\n\tsymbol: string;\n\tmarket_data: {\n\t\tcurrent_price: {\n\t\t\tusd: number;\n\t\t};\n\t};\n\tdescription: {\n\t\ten: string;\n\t};\n\timage: {\n\t\tsmall: string;\n\t\tlarge: string;\n\t};\n\tplatforms: {\n\t\t[key: string]: string;\n\t};\n};\n\nexport type CG_TokenListItem = {\n\tid: string;\n\tsymbol: string;\n\tname: string;\n};\n\nconst tryGetAllPricesFromCache = async (\n\ttokens: readonly string[],\n\tcache: DBAdapterBase,\n): Promise<CoinGeckoPrices<string> | null> => {\n\tconst prices = await Promise.all(\n\t\ttokens.map(async (token) => {\n\t\t\ttry {\n\t\t\t\tconst price = await cache.getTokenPrice(token);\n\t\t\t\t//parse the updated at time and check if it is within the last hour\n\t\t\t\tconst updateTime = new Date(price.updated_at).getTime();\n\t\t\t\tconst currentTime = new Date().getTime();\n\t\t\t\tif (currentTime - updateTime > 1000 * 60 * 60) {\n\t\t\t\t\treturn { token, price: null };\n\t\t\t\t}\n\t\t\t\treturn { token, price: price.price };\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(\"tryGetAllPricesFromCache error\", e);\n\t\t\t\treturn { token, price: null };\n\t\t\t}\n\t\t}),\n\t);\n\tconsole.log(\"tryGetAllPricesFromCache prices \", prices);\n\tif (!prices.some((p) => p.price === null)) {\n\t\tconst ret = {} as CoinGeckoPrices<string>;\n\t\tprices.forEach((p) => {\n\t\t\tret[p.token] = p.price;\n\t\t});\n\t\treturn ret;\n\t}\n\tconsole.log(\"tryGetAllPricesFromCache returning null as some are empty \");\n\treturn null;\n};\n\nexport const makeCoinGeckoPricesQuery = <T extends string>(\n\ttokens: readonly T[],\n\tcache?: DBAdapterBase,\n): UseQueryOptions<\n\tCoinGeckoPrices<T>,\n\tunknown,\n\tCoinGeckoPrices<T>,\n\tstring[]\n> => {\n\treturn {\n\t\tstaleTime: 1000 * 60 * 20,\n\t\tretry: true,\n\t\tretryDelay: 30000,\n\t\tqueryKey: [\"coinGeckoPrices\", ...tokens],\n\t\tqueryFn: async ({ signal }) => {\n\t\t\tif (tokens.length === 0) {\n\t\t\t\treturn createEmptyResult(tokens);\n\t\t\t}\n\t\t\tconsole.log(\"coinGeckoPrices cache\", cache);\n\t\t\tif (cache) {\n\t\t\t\tconst cachedTokenPrices = await tryGetAllPricesFromCache(tokens, cache);\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"makeCoinGeckoPricesQuery cachedTokenPrices\",\n\t\t\t\t\tcachedTokenPrices,\n\t\t\t\t);\n\t\t\t\tif (cachedTokenPrices) {\n\t\t\t\t\treturn cachedTokenPrices;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst coingeckoPricesURL = buildCoinGeckoPricesURL(tokens);\n\t\t\tconst rawData = await fetchNullable<{\n\t\t\t\t[C in T]?: {\n\t\t\t\t\tusd: number;\n\t\t\t\t};\n\t\t\t}>(coingeckoPricesURL, signal);\n\t\t\tpriceCallcount++;\n\t\t\tconsole.log(\"priceCallcount\", priceCallcount);\n\n\t\t\tif (!rawData) {\n\t\t\t\treturn createEmptyResult(tokens);\n\t\t\t}\n\n\t\t\tconst ret = {} as CoinGeckoPrices<T>;\n\t\t\ttokens.forEach(async (token) => {\n\t\t\t\tconst priceInfo = rawData[token];\n\t\t\t\tret[token] = priceInfo ? priceInfo.usd : null;\n\t\t\t\tif (cache) await cache.saveTokenPrice(token, ret[token] || 0);\n\t\t\t});\n\t\t\tconsole.log(\"makeCoinGeckoPricesQuery cg ret\", ret);\n\n\t\t\treturn ret;\n\t\t},\n\t};\n};\n\nexport const makeTokenInfoQuery = (\n\ttokenId: string,\n): UseQueryOptions<CG_TokenInfo | null, unknown, CG_TokenInfo, string[]> => {\n\treturn {\n\t\tqueryKey: [\"tokenInfo\", tokenId],\n\t\tqueryFn: async ({ signal }) => {\n\t\t\tif (!tokenId || tokenId === \"\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst url = buildCoinGeckoInfoURL(tokenId);\n\t\t\tconst rawData = await fetchNullable<CG_TokenInfo>(url, signal);\n\t\t\tinfoCallcount++;\n\t\t\tconsole.log(\"infoCallcount\", infoCallcount);\n\t\t\treturn rawData;\n\t\t},\n\t\tstaleTime: 1000 * 60 * 30,\n\t};\n};\n\nexport const makeTokenListQuery = (): UseQueryOptions<\n\tCG_TokenListItem[] | null,\n\tunknown,\n\tCG_TokenListItem[],\n\tstring[]\n> => {\n\treturn {\n\t\tqueryKey: [\"tokenList\"],\n\t\tqueryFn: async ({ signal }) => {\n\t\t\tconst url = buildCoinGeckoTokenListURL();\n\t\t\tconst rawData = await fetchNullable<CG_TokenListItem[]>(url, signal);\n\t\t\treturn rawData;\n\t\t},\n\t\tstaleTime: 1000 * 60 * 30,\n\t};\n};\n\n/**\n * Fetches prices of tokens from CoinGecko.\n * @returns The CoinGecko prices.\n */\nexport const useCoinGeckoPrices = <T extends string>(\n\ttokens: readonly T[],\n\toptions: Omit<\n\t\tUseQueryOptions<CoinGeckoPrices<T>, unknown, CoinGeckoPrices<T>, string[]>,\n\t\t\"queryKey\" | \"queryFn\"\n\t> = {},\n\tcache?: DBAdapterBase,\n): UseQueryResult<CoinGeckoPrices<T>, unknown> => {\n\treturn useQuery({ ...options, ...makeCoinGeckoPricesQuery(tokens, cache) });\n};\n\n/**\n * Fetches the token information from CoinGecko.\n * @param tokenId The token to fetch.\n * @returns The token information.\n */\n\nexport const useTokenInfo = (tokenId: string) => {\n\treturn useQuery(makeTokenInfoQuery(tokenId));\n};\n\nexport const useTokenList = () => {\n\treturn useQuery(makeTokenListQuery());\n};\n","/**\n * Performs a GET request, returning `null` if 404.\n *\n * @param url\n * @param signal\n * @returns\n */\nexport const fetchNullable = async <T>(\n  url: string,\n  signal?: AbortSignal\n): Promise<T | null> => {\n  const resp = await fetch(url, { signal });\n  if (resp.status === 404) {\n    return null;\n  }\n  const info = (await resp.json()) as T;\n  return info;\n};\n","import type { UserToken } from \"@/components\";\nimport { useMoonAuth } from \"@/context\";\nimport {\n\tuseChains,\n\tuseFetchWalletBalances,\n\tuseMoonAccount,\n\tuseTokenBalances,\n} from \"@/hooks\";\nimport { useCoinGeckoPrices, useTokenList } from \"@/utils/react-coinghecko\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { formatUnits } from \"ethers\";\nimport { useCallback, useMemo } from \"react\";\nimport { useMoonSDK } from \"../old/useMoonSDK\";\n\nexport const useMoonTokenManager = (addresses?: string[]) => {\n\tconst { dbAdapter } = useMoonSDK();\n\tconst { session } = useMoonAuth();\n\tconst { account: wallet } = useMoonAccount();\n\tconst { selectedChain: chain } = useChains();\n\n\tconst tokens = useQuery({\n\t\tqueryKey: [\"userSavedTokens\", session?.user.id],\n\t\tqueryFn: async () => {\n\t\t\tif (!session?.user?.id) throw new Error(\"No user found\");\n\t\t\tconst userTokens = await dbAdapter.getTokens();\n\t\t\tconsole.log(\"useTokenManager::userTokens\", userTokens);\n\t\t\treturn userTokens;\n\t\t},\n\t\tretry: true,\n\t\tretryDelay: 5000,\n\t});\n\n\tconst walletAddresses = addresses ? addresses : wallet ? [wallet] : [];\n\tconst chainId = chain?.chain_id?.toString() || \"1\";\n\tconst tokenIds = useMemo(\n\t\t() => (tokens?.data ? tokens.data.map((token) => token.coinGeckoId) : []),\n\t\t[tokens],\n\t);\n\tconst { data: tokenPrices } = useCoinGeckoPrices(tokenIds, {}, dbAdapter);\n\n\tconst { data: tokenList } = useTokenList();\n\tconst queryClient = useQueryClient();\n\n\tconst tokenBalanceQueries = useTokenBalances(\n\t\twalletAddresses,\n\t\ttokens.data ?? [],\n\t);\n\n\tconsole.log(\n\t\t\"useTokenManager::tokenBalanceQueries\",\n\t\twalletAddresses,\n\t\ttokenBalanceQueries,\n\t);\n\n\t//filter queries that have data\n\tconst tokenBalanceQueriesFiltered = tokenBalanceQueries.filter(\n\t\t(query) => (query as any).data !== undefined,\n\t);\n\n\tconst tokensWithBalance = useMemo(\n\t\t() =>\n\t\t\ttokenBalanceQueriesFiltered.map((query) => ({\n\t\t\t\t...(query as any).data,\n\t\t\t\tprice: tokenPrices?.[(query as any).data.coinGeckoId] || 0,\n\t\t\t})),\n\t\t[tokens, tokenBalanceQueries, tokenPrices],\n\t);\n\t//\n\n\tconst gasBalanceQueries = useFetchWalletBalances(walletAddresses, chainId);\n\tconst { data: gasTokenPrice } = useCoinGeckoPrices(\n\t\t[\"ethereum\"],\n\t\t{},\n\t\tdbAdapter,\n\t);\n\n\tconst gasTokens = useMemo(() => {\n\t\tif (!chain?.native_currency) return [];\n\t\treturn walletAddresses.map((wallet, wIndex) => {\n\t\t\tconst { name, symbol, coinGeckoId, decimals } =\n\t\t\t\tchain.native_currency as any;\n\t\t\treturn {\n\t\t\t\ttype: \"native\",\n\t\t\t\tisGasToken: true,\n\t\t\t\ticon: \"https://etherscan.io/images/ethereum-icon.png\",\n\t\t\t\tname: name || \"ETH\",\n\t\t\t\twallet,\n\t\t\t\tsymbol,\n\t\t\t\tcoinGeckoId,\n\t\t\t\tdecimals,\n\t\t\t\taddress: \"0x\",\n\t\t\t\tchainId: chain.chain_id || 1,\n\t\t\t\tprice: gasTokenPrice?.ethereum || 0,\n\t\t\t\tbalance: gasBalanceQueries[wIndex]?.data\n\t\t\t\t\t? formatUnits(gasBalanceQueries[wIndex].data || \"0\", decimals)\n\t\t\t\t\t: \"0\",\n\t\t\t} as UserToken;\n\t\t});\n\t}, [chain, gasBalanceQueries]);\n\n\t// useEffect(() => {\n\t//   if (session?.user.id) dbAdapter.getTokens().then(setTokens);\n\t// }, [session?.user.id]);\n\n\tconst addToken = useCallback(\n\t\tasync (newToken: UserToken) => {\n\t\t\tawait dbAdapter.addToken(newToken);\n\t\t\tawait queryClient.invalidateQueries({\n\t\t\t\tqueryKey: [\"userSavedTokens\", session?.user.id],\n\t\t\t});\n\t\t},\n\t\t[dbAdapter],\n\t);\n\n\tconst updateToken = useCallback(\n\t\tasync (newToken: UserToken) => {\n\t\t\tawait dbAdapter.updateToken(newToken);\n\t\t\tawait queryClient.invalidateQueries({\n\t\t\t\tqueryKey: [\"userSavedTokens\", session?.user.id],\n\t\t\t});\n\t\t\tawait queryClient.invalidateQueries({\n\t\t\t\tqueryKey: [\n\t\t\t\t\t\"erc20TokenBalances\",\n\t\t\t\t\twallet,\n\t\t\t\t\tnewToken.address,\n\t\t\t\t\tnewToken.chainId,\n\t\t\t\t],\n\t\t\t});\n\t\t},\n\t\t[dbAdapter],\n\t);\n\n\tconst removeToken = useCallback(\n\t\tasync (address: string) => {\n\t\t\tawait dbAdapter.removeToken(address);\n\t\t\tawait queryClient.invalidateQueries({\n\t\t\t\tqueryKey: [\"userSavedTokens\", session?.user.id],\n\t\t\t});\n\t\t},\n\t\t[dbAdapter],\n\t);\n\n\tconst tokensWithGasToken = useMemo(\n\t\t() => [...gasTokens, ...tokensWithBalance],\n\t\t[gasTokens, gasTokenPrice, tokensWithBalance],\n\t);\n\n\treturn {\n\t\ttokens: tokensWithBalance.filter((t) => t.hasOwnProperty(\"name\")),\n\t\taddToken,\n\t\tremoveToken,\n\t\tupdateToken,\n\t\ttokenList,\n\t\tchain,\n\t\tgasBalanceQueries,\n\t\ttokenBalanceQueries,\n\t\tgasTokens,\n\t\ttokensWithGasToken,\n\t};\n};\n","import { useContext } from \"react\";\nimport { MoonSDKContext, type State } from \"../../context/MoonProvider\";\n\nexport const useMoonSDK = (): State => {\n\tconst context = useContext(MoonSDKContext);\n\tif (context === undefined) {\n\t\tthrow new Error(\"useMoonSDK must be used within a MoonSDKProvider\");\n\t}\n\treturn context;\n};\n","import { useMoonSDK } from \"../old/useMoonSDK\";\n\nexport const useMoonTransaction = () => {\n\tconst { addTransactionResult } = useMoonSDK();\n\n\tconst handleTransaction = async (\n\t\ttransactionType: string,\n\t\toperation: () => Promise<any>,\n\t) => {\n\t\tconst transactionId = Date.now().toString();\n\t\ttry {\n\t\t\tconst result = await operation();\n\t\t\taddTransactionResult({\n\t\t\t\tid: transactionId,\n\t\t\t\ttype: transactionType,\n\t\t\t\tstatus: \"success\",\n\t\t\t\tdata: result,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\taddTransactionResult({\n\t\t\t\tid: transactionId,\n\t\t\t\ttype: transactionType,\n\t\t\t\tstatus: \"error\",\n\t\t\t\terror: (error as any).message,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t};\n\n\treturn {\n\t\thandleTransaction,\n\t};\n};\n","import { UserToken } from '@/components';\nimport { useErc1155, useErc20, useErc721, useMoonAccount } from '@/hooks';\nimport { weiStringAsFloat } from '@/utils/parse';\nimport { useQueries, UseQueryResult } from '@tanstack/react-query';\n\nexport type BalanceQueryResult = UseQueryResult<UserToken, Error>;\n\nexport function useTokenBalances(\n  wallets: string[],\n  tokens: UserToken[]\n): BalanceQueryResult[][] {\n  const { balanceOfErc20 } = useErc20();\n  const { getErc721BalanceOf: balanceOfErc721 } = useErc721();\n  const { balanceOfErc1155 } = useErc1155();\n  const { getBalance } = useMoonAccount();\n  const queries = wallets.flatMap((wallet) =>\n    tokens.map((token) => ({\n      queryKey: ['erc20TokenBalances', wallet, token.address, token.chainId],\n      queryFn: async () => {\n        if (!wallet) {\n          throw new Error('useTokenBalances::Wallet not found');\n        }\n        let res = null;\n        switch (token.type) {\n          case 'native':\n            res = await getBalance(wallet);\n            break;\n          case 'erc721':\n            res = await balanceOfErc721({\n              account: wallet,\n              address: token.address,\n              chainId: token.chainId.toString(),\n            });\n            break;\n          case 'erc1155':\n            res = await balanceOfErc1155({\n              accountName: wallet,\n              transaction: {\n                chain_id: token.chainId.toString(),\n                contract_address: token.address,\n              },\n            });\n            break;\n          case 'erc20':\n            res = await balanceOfErc20({\n              account: wallet,\n              address: token.address,\n              chainId: token.chainId.toString(),\n            });\n            break;\n          default:\n            res = await balanceOfErc20({\n              account: wallet,\n              address: token.address,\n              chainId: token.chainId.toString(),\n            });\n            console.warn(\n              'useTokenBalances::Unsupported token type' +\n                token.type +\n                ' for token ' +\n                token.address +\n                ' on chain ' +\n                token.chainId\n            );\n        }\n        console.warn('useTokenBalances::res', res, token);\n        const balanceDec = weiStringAsFloat(res.balance, token.decimals);\n        return {\n          ...token,\n          wallet: wallet,\n          balance: balanceDec,\n        };\n      },\n      staleTime: 30000, // 30 seconds\n      retry: 2,\n    }))\n  );\n  return useQueries({\n    queries: queries,\n  });\n}\n","export function shortenAddress(address: string | null | undefined) {\n  if (!address) return null;\n  return (\n    address.substring(0, 6) +\n    \"...\" +\n    address.substring(address.length - 4, address.length)\n  );\n}\n\nexport function minAddress(address: string | null | undefined) {\n  if (!address) return null;\n  return (\n    address.substring(address.length - 4, address.length)\n  );\n}\n","import { shortenAddress } from \"@/utils/shortenAddress\";\nimport { useCallback } from \"react\";\nimport { useMoonSDK } from \"../old/useMoonSDK\";\n\nexport const useWalletAlias = () => {\n\tconst { aliases, dbAdapter, fetchAliases } = useMoonSDK();\n\n\tconst wallet2Alias = useCallback(\n\t\t(wallet: string | null): string => {\n\t\t\treturn (\n\t\t\t\taliases.find((alias) => alias.address === wallet)?.alias ||\n\t\t\t\tshortenAddress(wallet) ||\n\t\t\t\t\"\"\n\t\t\t);\n\t\t},\n\t\t[aliases],\n\t);\n\n\tconst alias2Wallet = useCallback(\n\t\t(alias: string): string => {\n\t\t\treturn aliases.find((a) => a.alias === alias)?.address || alias;\n\t\t},\n\t\t[aliases],\n\t);\n\n\tconst setWalletAlias = useCallback(\n\t\tasync (alias: string, wallet: string) => {\n\t\t\tawait dbAdapter.upsertWalletAlias(alias, wallet);\n\t\t\tawait fetchAliases();\n\t\t},\n\t\t[dbAdapter],\n\t);\n\n\treturn {\n\t\twallet2Alias,\n\t\talias2Wallet,\n\t\tsetWalletAlias,\n\t};\n};\n","import React from 'react';\n\ninterface SVGProps {\n  className?: string;\n  style?: React.CSSProperties;\n  fill?: string;\n}\n///https://www.svgrepo.com/vectors/arrow/\n\nexport const IconClose: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 1024 1024\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        fill={fill}\n        d=\"M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z\"\n      />\n    </svg>\n  );\n};\n\nexport const IconChevronRight: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        d=\"M9 6L15 12L9 18\"\n        stroke={fill}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  );\n};\n\nexport const IconUser: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        d=\"M5 21C5 17.134 8.13401 14 12 14C15.866 14 19 17.134 19 21M16 7C16 9.20914 14.2091 11 12 11C9.79086 11 8 9.20914 8 7C8 4.79086 9.79086 3 12 3C14.2091 3 16 4.79086 16 7Z\"\n        stroke={fill}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  );\n};\n\nexport const IconDiscord: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      fill={fill}\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 32 32\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path d=\"M 12.65625 4.90625 L 11.875 5 C 11.875 5 8.371094 5.382813 5.8125 7.4375 L 5.78125 7.4375 L 5.75 7.46875 C 5.175781 7.996094 4.925781 8.644531 4.53125 9.59375 C 4.136719 10.542969 3.714844 11.753906 3.34375 13.09375 C 2.601563 15.777344 2 19.027344 2 22 L 2 22.25 L 2.125 22.5 C 3.050781 24.125 4.695313 25.160156 6.21875 25.875 C 7.742188 26.589844 9.058594 26.96875 9.96875 27 L 10.5625 27.03125 L 10.875 26.5 L 11.96875 24.5625 C 13.128906 24.824219 14.464844 25 16 25 C 17.535156 25 18.871094 24.824219 20.03125 24.5625 L 21.125 26.5 L 21.4375 27.03125 L 22.03125 27 C 22.941406 26.96875 24.257813 26.589844 25.78125 25.875 C 27.304688 25.160156 28.949219 24.125 29.875 22.5 L 30 22.25 L 30 22 C 30 19.027344 29.398438 15.777344 28.65625 13.09375 C 28.285156 11.753906 27.863281 10.542969 27.46875 9.59375 C 27.074219 8.644531 26.824219 7.996094 26.25 7.46875 L 26.21875 7.4375 L 26.1875 7.4375 C 23.628906 5.382813 20.125 5 20.125 5 L 19.34375 4.90625 L 19.0625 5.625 C 19.0625 5.625 18.773438 6.355469 18.59375 7.1875 C 17.460938 7.035156 16.535156 7 16 7 C 15.464844 7 14.539063 7.035156 13.40625 7.1875 C 13.226563 6.355469 12.9375 5.625 12.9375 5.625 Z M 11.28125 7.1875 C 11.324219 7.328125 11.367188 7.449219 11.40625 7.5625 C 10.113281 7.882813 8.734375 8.371094 7.46875 9.15625 L 8.53125 10.84375 C 11.125 9.234375 14.851563 9 16 9 C 17.148438 9 20.875 9.234375 23.46875 10.84375 L 24.53125 9.15625 C 23.265625 8.371094 21.886719 7.882813 20.59375 7.5625 C 20.632813 7.449219 20.675781 7.328125 20.71875 7.1875 C 21.652344 7.375 23.433594 7.804688 24.90625 8.96875 C 24.898438 8.972656 25.28125 9.550781 25.625 10.375 C 25.976563 11.222656 26.367188 12.351563 26.71875 13.625 C 27.394531 16.066406 27.925781 19.039063 27.96875 21.65625 C 27.339844 22.617188 26.171875 23.484375 24.9375 24.0625 C 23.859375 24.566406 23.007813 24.75 22.5 24.84375 L 22 24 C 22.296875 23.890625 22.589844 23.769531 22.84375 23.65625 C 24.382813 22.980469 25.21875 22.25 25.21875 22.25 L 23.90625 20.75 C 23.90625 20.75 23.34375 21.265625 22.03125 21.84375 C 20.71875 22.421875 18.714844 23 16 23 C 13.285156 23 11.28125 22.421875 9.96875 21.84375 C 8.65625 21.265625 8.09375 20.75 8.09375 20.75 L 6.78125 22.25 C 6.78125 22.25 7.617188 22.980469 9.15625 23.65625 C 9.410156 23.769531 9.703125 23.890625 10 24 L 9.5 24.84375 C 8.992188 24.75 8.140625 24.566406 7.0625 24.0625 C 5.828125 23.484375 4.660156 22.617188 4.03125 21.65625 C 4.074219 19.039063 4.605469 16.066406 5.28125 13.625 C 5.632813 12.351563 6.023438 11.222656 6.375 10.375 C 6.71875 9.550781 7.101563 8.972656 7.09375 8.96875 C 8.566406 7.804688 10.347656 7.375 11.28125 7.1875 Z M 12.5 14 C 11.726563 14 11.042969 14.441406 10.625 15 C 10.207031 15.558594 10 16.246094 10 17 C 10 17.753906 10.207031 18.441406 10.625 19 C 11.042969 19.558594 11.726563 20 12.5 20 C 13.273438 20 13.957031 19.558594 14.375 19 C 14.792969 18.441406 15 17.753906 15 17 C 15 16.246094 14.792969 15.558594 14.375 15 C 13.957031 14.441406 13.273438 14 12.5 14 Z M 19.5 14 C 18.726563 14 18.042969 14.441406 17.625 15 C 17.207031 15.558594 17 16.246094 17 17 C 17 17.753906 17.207031 18.441406 17.625 19 C 18.042969 19.558594 18.726563 20 19.5 20 C 20.273438 20 20.957031 19.558594 21.375 19 C 21.792969 18.441406 22 17.753906 22 17 C 22 16.246094 21.792969 15.558594 21.375 15 C 20.957031 14.441406 20.273438 14 19.5 14 Z M 12.5 16 C 12.554688 16 12.625 16.019531 12.75 16.1875 C 12.875 16.355469 13 16.648438 13 17 C 13 17.351563 12.875 17.644531 12.75 17.8125 C 12.625 17.980469 12.554688 18 12.5 18 C 12.445313 18 12.375 17.980469 12.25 17.8125 C 12.125 17.644531 12 17.351563 12 17 C 12 16.648438 12.125 16.355469 12.25 16.1875 C 12.375 16.019531 12.445313 16 12.5 16 Z M 19.5 16 C 19.554688 16 19.625 16.019531 19.75 16.1875 C 19.875 16.355469 20 16.648438 20 17 C 20 17.351563 19.875 17.644531 19.75 17.8125 C 19.625 17.980469 19.554688 18 19.5 18 C 19.445313 18 19.375 17.980469 19.25 17.8125 C 19.125 17.644531 19 17.351563 19 17 C 19 16.648438 19.125 16.355469 19.25 16.1875 C 19.375 16.019531 19.445313 16 19.5 16 Z\" />\n    </svg>\n  );\n};\n\nexport const IconGithub: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        d=\"M4.0744 2.9938C4.13263 1.96371 4.37869 1.51577 5.08432 1.15606C5.84357 0.768899 7.04106 0.949072 8.45014 1.66261C9.05706 1.97009 9.11886 1.97635 10.1825 1.83998C11.5963 1.65865 13.4164 1.65929 14.7213 1.84164C15.7081 1.97954 15.7729 1.97265 16.3813 1.66453C18.3814 0.651679 19.9605 0.71795 20.5323 1.8387C20.8177 2.39812 20.8707 3.84971 20.6494 5.04695C20.5267 5.71069 20.5397 5.79356 20.8353 6.22912C22.915 9.29385 21.4165 14.2616 17.8528 16.1155C17.5801 16.2574 17.3503 16.3452 17.163 16.4167C16.5879 16.6363 16.4133 16.703 16.6247 17.7138C16.7265 18.2 16.8491 19.4088 16.8973 20.4002C16.9844 22.1922 16.9831 22.2047 16.6688 22.5703C16.241 23.0676 15.6244 23.076 15.2066 22.5902C14.9341 22.2734 14.9075 22.1238 14.9075 20.9015C14.9075 19.0952 14.7095 17.8946 14.2417 16.8658C13.6854 15.6415 14.0978 15.185 15.37 14.9114C17.1383 14.531 18.5194 13.4397 19.2892 11.8146C20.0211 10.2698 20.1314 8.13501 18.8082 6.83668C18.4319 6.3895 18.4057 5.98446 18.6744 4.76309C18.7748 4.3066 18.859 3.71768 18.8615 3.45425C18.8653 3.03823 18.8274 2.97541 18.5719 2.97541C18.4102 2.97541 17.7924 3.21062 17.1992 3.49805L16.2524 3.95695C16.1663 3.99866 16.07 4.0147 15.975 4.0038C13.5675 3.72746 11.2799 3.72319 8.86062 4.00488C8.76526 4.01598 8.66853 3.99994 8.58215 3.95802L7.63585 3.49882C7.04259 3.21087 6.42482 2.97541 6.26317 2.97541C5.88941 2.97541 5.88379 3.25135 6.22447 4.89078C6.43258 5.89203 6.57262 6.11513 5.97101 6.91572C5.06925 8.11576 4.844 9.60592 5.32757 11.1716C5.93704 13.1446 7.4295 14.4775 9.52773 14.9222C10.7926 15.1903 11.1232 15.5401 10.6402 16.9905C10.26 18.1319 10.0196 18.4261 9.46707 18.4261C8.72365 18.4261 8.25796 17.7821 8.51424 17.1082C8.62712 16.8112 8.59354 16.7795 7.89711 16.5255C5.77117 15.7504 4.14514 14.0131 3.40172 11.7223C2.82711 9.95184 3.07994 7.64739 4.00175 6.25453C4.31561 5.78028 4.32047 5.74006 4.174 4.83217C4.09113 4.31822 4.04631 3.49103 4.0744 2.9938Z\"\n        fill={fill}\n      />\n      <path\n        d=\"M3.33203 15.9454C3.02568 15.4859 2.40481 15.3617 1.94528 15.6681C1.48576 15.9744 1.36158 16.5953 1.66793 17.0548C1.8941 17.3941 2.16467 17.6728 2.39444 17.9025C2.4368 17.9449 2.47796 17.9858 2.51815 18.0257C2.71062 18.2169 2.88056 18.3857 3.05124 18.5861C3.42875 19.0292 3.80536 19.626 4.0194 20.6962C4.11474 21.1729 4.45739 21.4297 4.64725 21.5419C4.85315 21.6635 5.07812 21.7352 5.26325 21.7819C5.64196 21.8774 6.10169 21.927 6.53799 21.9559C7.01695 21.9877 7.53592 21.998 7.99999 22.0008C8.00033 22.5527 8.44791 23.0001 8.99998 23.0001C9.55227 23.0001 9.99998 22.5524 9.99998 22.0001V21.0001C9.99998 20.4478 9.55227 20.0001 8.99998 20.0001C8.90571 20.0001 8.80372 20.0004 8.69569 20.0008C8.10883 20.0026 7.34388 20.0049 6.67018 19.9603C6.34531 19.9388 6.07825 19.9083 5.88241 19.871C5.58083 18.6871 5.09362 17.8994 4.57373 17.2891C4.34391 17.0194 4.10593 16.7834 3.91236 16.5914C3.87612 16.5555 3.84144 16.5211 3.80865 16.4883C3.5853 16.265 3.4392 16.1062 3.33203 15.9454Z\"\n        fill={fill}\n      />\n    </svg>\n  );\n};\n\nexport const IconTwitter: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M19.7828 3.91825C20.1313 3.83565 20.3743 3.75444 20.5734 3.66915C20.8524 3.54961 21.0837 3.40641 21.4492 3.16524C21.7563 2.96255 22.1499 2.9449 22.4739 3.11928C22.7979 3.29366 23 3.6319 23 3.99986C23 5.08079 22.8653 5.96673 22.5535 6.7464C22.2911 7.40221 21.9225 7.93487 21.4816 8.41968C21.2954 11.7828 20.3219 14.4239 18.8336 16.4248C17.291 18.4987 15.2386 19.8268 13.0751 20.5706C10.9179 21.3121 8.63863 21.4778 6.5967 21.2267C4.56816 20.9773 2.69304 20.3057 1.38605 19.2892C1.02813 19.0108 0.902313 18.5264 1.07951 18.109C1.25671 17.6916 1.69256 17.4457 2.14144 17.5099C3.42741 17.6936 4.6653 17.4012 5.6832 16.9832C5.48282 16.8742 5.29389 16.7562 5.11828 16.6346C4.19075 15.9925 3.4424 15.1208 3.10557 14.4471C2.96618 14.1684 2.96474 13.8405 3.10168 13.5606C3.17232 13.4161 3.27562 13.293 3.40104 13.1991C2.04677 12.0814 1.49999 10.5355 1.49999 9.49986C1.49999 9.19192 1.64187 8.90115 1.88459 8.71165C1.98665 8.63197 2.10175 8.57392 2.22308 8.53896C2.12174 8.24222 2.0431 7.94241 1.98316 7.65216C1.71739 6.3653 1.74098 4.91284 2.02985 3.75733C2.1287 3.36191 2.45764 3.06606 2.86129 3.00952C3.26493 2.95299 3.6625 3.14709 3.86618 3.50014C4.94369 5.36782 6.93116 6.50943 8.78086 7.18568C9.6505 7.50362 10.4559 7.70622 11.0596 7.83078C11.1899 6.61019 11.5307 5.6036 12.0538 4.80411C12.7439 3.74932 13.7064 3.12525 14.74 2.84698C16.5227 2.36708 18.5008 2.91382 19.7828 3.91825ZM10.7484 9.80845C10.0633 9.67087 9.12171 9.43976 8.09412 9.06408C6.7369 8.56789 5.16088 7.79418 3.84072 6.59571C3.86435 6.81625 3.89789 7.03492 3.94183 7.24766C4.16308 8.31899 4.5742 8.91899 4.94721 9.10549C5.40342 9.3336 5.61484 9.8685 5.43787 10.3469C5.19827 10.9946 4.56809 11.0477 3.99551 10.9046C4.45603 11.595 5.28377 12.2834 6.66439 12.5135C7.14057 12.5929 7.49208 13.0011 7.49986 13.4838C7.50765 13.9665 7.16949 14.3858 6.69611 14.4805L5.82565 14.6546C5.95881 14.7703 6.103 14.8838 6.2567 14.9902C6.95362 15.4727 7.65336 15.6808 8.25746 15.5298C8.70991 15.4167 9.18047 15.6313 9.39163 16.0472C9.60278 16.463 9.49846 16.9696 9.14018 17.2681C8.49626 17.8041 7.74425 18.2342 6.99057 18.5911C6.63675 18.7587 6.24134 18.9241 5.8119 19.0697C6.14218 19.1402 6.48586 19.198 6.84078 19.2417C8.61136 19.4594 10.5821 19.3126 12.4249 18.6792C14.2614 18.0479 15.9589 16.9385 17.2289 15.2312C18.497 13.5262 19.382 11.1667 19.5007 7.96291C19.51 7.71067 19.6144 7.47129 19.7929 7.29281C20.2425 6.84316 20.6141 6.32777 20.7969 5.7143C20.477 5.81403 20.1168 5.90035 19.6878 5.98237C19.3623 6.04459 19.0272 5.94156 18.7929 5.70727C18.0284 4.94274 16.5164 4.43998 15.2599 4.77822C14.6686 4.93741 14.1311 5.28203 13.7274 5.89906C13.3153 6.52904 13 7.51045 13 8.9999C13 9.28288 12.8801 9.5526 12.6701 9.74221C12.1721 10.1917 11.334 9.92603 10.7484 9.80845Z\"\n        fill={fill}\n      />\n    </svg>\n  );\n};\n\nexport const IconGoogle: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M23 12C23 18.0751 18.0751 23 12 23C5.92487 23 1 18.0751 1 12C1 5.92487 5.92487 1 12 1C18.0751 1 23 5.92487 23 12ZM21 12C21 16.9706 16.9706 21 12 21C11.8075 21 11.6164 20.994 11.4268 20.982L15.3516 14.1842C15.7616 13.5562 16 12.806 16 12C16 11.2714 15.8052 10.5883 15.4649 10H20.777C20.9229 10.6432 21 11.3126 21 12ZM3 12C3 16.0439 5.66703 19.4648 9.33808 20.5998L11.9938 16C10.4369 15.9976 9.08858 15.1058 8.4297 13.8055L4.5075 7.01205C3.55514 8.43975 3 10.155 3 12ZM5.88442 5.39694C7.48983 3.90934 9.63872 3 12 3C15.5337 3 18.5918 5.03656 20.0645 8H12C10.5219 8 9.23103 8.80174 8.53857 9.99407L5.88442 5.39694ZM10.2633 12.9925L10.2681 12.9897L10.1968 12.8662C10.0707 12.6041 10 12.3103 10 12C10 10.8954 10.8954 10 12 10C13.1046 10 14 10.8954 14 12C14 12.361 13.9043 12.6997 13.737 12.9921L13.7321 12.9893L13.6529 13.1263C13.2928 13.6538 12.6868 14 12 14C11.2566 14 10.608 13.5945 10.2633 12.9925Z\"\n        fill={fill}\n      />\n    </svg>\n  );\n};\n\nexport const IconWallet: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        d=\"M16.5008 14.1502H16.5098M19 4.00098H6.2C5.0799 4.00098 4.51984 4.00098 4.09202 4.21896C3.71569 4.41071 3.40973 4.71667 3.21799 5.093C3 5.52082 3 6.08087 3 7.20098V16.801C3 17.9211 3 18.4811 3.21799 18.909C3.40973 19.2853 3.71569 19.5912 4.09202 19.783C4.51984 20.001 5.07989 20.001 6.2 20.001H17.8C18.9201 20.001 19.4802 20.001 19.908 19.783C20.2843 19.5912 20.5903 19.2853 20.782 18.909C21 18.4811 21 17.9211 21 16.801V11.201C21 10.0809 21 9.52082 20.782 9.093C20.5903 8.71667 20.2843 8.41071 19.908 8.21896C19.4802 8.00098 18.9201 8.00098 17.8 8.00098H7M16.9508 14.1502C16.9508 14.3987 16.7493 14.6002 16.5008 14.6002C16.2523 14.6002 16.0508 14.3987 16.0508 14.1502C16.0508 13.9017 16.2523 13.7002 16.5008 13.7002C16.7493 13.7002 16.9508 13.9017 16.9508 14.1502Z\"\n        stroke={fill}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  );\n};\n\nexport const IconArrowLeft: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        d=\"M6 12H18M6 12L11 7M6 12L11 17\"\n        stroke={fill}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  );\n};\n\nexport const IconTrash: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        d=\"M18 6L17.1991 18.0129C17.129 19.065 17.0939 19.5911 16.8667 19.99C16.6666 20.3412 16.3648 20.6235 16.0011 20.7998C15.588 21 15.0607 21 14.0062 21H9.99377C8.93927 21 8.41202 21 7.99889 20.7998C7.63517 20.6235 7.33339 20.3412 7.13332 19.99C6.90607 19.5911 6.871 19.065 6.80086 18.0129L6 6M4 6H20M16 6L15.7294 5.18807C15.4671 4.40125 15.3359 4.00784 15.0927 3.71698C14.8779 3.46013 14.6021 3.26132 14.2905 3.13878C13.9376 3 13.523 3 12.6936 3H11.3064C10.477 3 10.0624 3 9.70951 3.13878C9.39792 3.26132 9.12208 3.46013 8.90729 3.71698C8.66405 4.00784 8.53292 4.40125 8.27064 5.18807L8 6M14 10V17M10 10V17\"\n        stroke={fill}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  );\n};\n\nexport const IconDots: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        d=\"M12 12H12.01M12 6H12.01M12 18H12.01M13 12C13 12.5523 12.5523 13 12 13C11.4477 13 11 12.5523 11 12C11 11.4477 11.4477 11 12 11C12.5523 11 13 11.4477 13 12ZM13 18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18C11 17.4477 11.4477 17 12 17C12.5523 17 13 17.4477 13 18ZM13 6C13 6.55228 12.5523 7 12 7C11.4477 7 11 6.55228 11 6C11 5.44772 11.4477 5 12 5C12.5523 5 13 5.44772 13 6Z\"\n        stroke={fill}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  );\n};\n\nexport const IconPlus: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        d=\"M6 12H18M12 6V18\"\n        stroke={fill}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  );\n};\n\nexport const IconCopy: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M15 1.25H10.9436C9.10583 1.24998 7.65019 1.24997 6.51098 1.40314C5.33856 1.56076 4.38961 1.89288 3.64124 2.64124C2.89288 3.38961 2.56076 4.33856 2.40314 5.51098C2.24997 6.65019 2.24998 8.10582 2.25 9.94357V16C2.25 17.8722 3.62205 19.424 5.41551 19.7047C5.55348 20.4687 5.81753 21.1208 6.34835 21.6517C6.95027 22.2536 7.70814 22.5125 8.60825 22.6335C9.47522 22.75 10.5775 22.75 11.9451 22.75H15.0549C16.4225 22.75 17.5248 22.75 18.3918 22.6335C19.2919 22.5125 20.0497 22.2536 20.6517 21.6517C21.2536 21.0497 21.5125 20.2919 21.6335 19.3918C21.75 18.5248 21.75 17.4225 21.75 16.0549V10.9451C21.75 9.57754 21.75 8.47522 21.6335 7.60825C21.5125 6.70814 21.2536 5.95027 20.6517 5.34835C20.1208 4.81753 19.4687 4.55348 18.7047 4.41551C18.424 2.62205 16.8722 1.25 15 1.25ZM17.1293 4.27117C16.8265 3.38623 15.9876 2.75 15 2.75H11C9.09318 2.75 7.73851 2.75159 6.71085 2.88976C5.70476 3.02502 5.12511 3.27869 4.7019 3.7019C4.27869 4.12511 4.02502 4.70476 3.88976 5.71085C3.75159 6.73851 3.75 8.09318 3.75 10V16C3.75 16.9876 4.38624 17.8265 5.27117 18.1293C5.24998 17.5194 5.24999 16.8297 5.25 16.0549V10.9451C5.24998 9.57754 5.24996 8.47522 5.36652 7.60825C5.48754 6.70814 5.74643 5.95027 6.34835 5.34835C6.95027 4.74643 7.70814 4.48754 8.60825 4.36652C9.47522 4.24996 10.5775 4.24998 11.9451 4.25H15.0549C15.8297 4.24999 16.5194 4.24998 17.1293 4.27117ZM7.40901 6.40901C7.68577 6.13225 8.07435 5.9518 8.80812 5.85315C9.56347 5.75159 10.5646 5.75 12 5.75H15C16.4354 5.75 17.4365 5.75159 18.1919 5.85315C18.9257 5.9518 19.3142 6.13225 19.591 6.40901C19.8678 6.68577 20.0482 7.07435 20.1469 7.80812C20.2484 8.56347 20.25 9.56458 20.25 11V16C20.25 17.4354 20.2484 18.4365 20.1469 19.1919C20.0482 19.9257 19.8678 20.3142 19.591 20.591C19.3142 20.8678 18.9257 21.0482 18.1919 21.1469C17.4365 21.2484 16.4354 21.25 15 21.25H12C10.5646 21.25 9.56347 21.2484 8.80812 21.1469C8.07435 21.0482 7.68577 20.8678 7.40901 20.591C7.13225 20.3142 6.9518 19.9257 6.85315 19.1919C6.75159 18.4365 6.75 17.4354 6.75 16V11C6.75 9.56458 6.75159 8.56347 6.85315 7.80812C6.9518 7.07435 7.13225 6.68577 7.40901 6.40901Z\"\n        fill={fill}\n      />\n    </svg>\n  );\n};\n\nexport const IconCheck: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        d=\"M4 12.6111L8.92308 17.5L20 6.5\"\n        stroke={fill}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  );\n};\n\nexport const IconGas: React.FC<SVGProps> = ({\n  className,\n  style,\n  fill = 'currentColor',\n}) => {\n  return (\n    <svg\n      width=\"24px\"\n      height=\"24px\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      style={style}\n    >\n      <path\n        d=\"M16 22V8C16 5.17157 16 3.75736 15.1213 2.87868C14.2426 2 12.8284 2 10 2H9C6.17157 2 4.75736 2 3.87868 2.87868C3 3.75736 3 5.17157 3 8V22\"\n        stroke={fill}\n        strokeWidth=\"1.5\"\n      />\n      <path\n        d=\"M11 6H8C7.05719 6 6.58579 6 6.29289 6.29289C6 6.58579 6 7.05719 6 8C6 8.94281 6 9.41421 6.29289 9.70711C6.58579 10 7.05719 10 8 10H11C11.9428 10 12.4142 10 12.7071 9.70711C13 9.41421 13 8.94281 13 8C13 7.05719 13 6.58579 12.7071 6.29289C12.4142 6 11.9428 6 11 6Z\"\n        stroke={fill}\n        strokeWidth=\"1.5\"\n      />\n      <path\n        d=\"M7 17H12\"\n        stroke={fill}\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M17 22H2\"\n        stroke={fill}\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M19.5 4L20.7331 4.98647C20.8709 5.09673 20.9398 5.15186 21.0025 5.20805C21.5937 5.73807 21.9508 6.48086 21.9953 7.27364C22 7.35769 22 7.44594 22 7.62244V18.5C22 19.3284 21.3284 20 20.5 20C19.6716 20 19 19.3284 19 18.5V18.4286C19 17.6396 18.3604 17 17.5714 17H16\"\n        stroke={fill}\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n      />\n      <path\n        d=\"M22 8H20.5C19.6716 8 19 8.67157 19 9.5V11.9189C19 12.5645 19.4131 13.1377 20.0257 13.3419L22 14\"\n        stroke={fill}\n        strokeWidth=\"1.5\"\n        strokeLinecap=\"round\"\n      />\n    </svg>\n  );\n};\n","import coinbase from \"@/assets/coinbase.svg\";\nimport { IconWallet } from \"@/assets/icons\";\nimport metamask from \"@/assets/metamask.svg\";\nimport moonLogoLight from \"@/assets/moon-logo-light.png\";\nimport rabby from \"@/assets/rabby.png\";\nimport trustwallet from \"@/assets/trustwallet.png\";\nimport walletconnect from \"@/assets/walletconnect.svg\";\nimport { useConnectToMoon } from \"@/hooks\";\nimport { useMemo } from \"react\";\nimport { useAccount, useConnect, useSignMessage } from \"wagmi\";\n\nexport const useWalletConnectors = () => {\n\tconst { connectors, connect } = useConnect();\n\tconst { address } = useAccount();\n\tconst { signMessageAsync } = useSignMessage();\n\tconst walletAddress = address ? address : \"\";\n\tconst { connectToMoonSiwe } = useConnectToMoon({\n\t\taddress: walletAddress,\n\t\tsignMessageAsync,\n\t});\n\n\tconst walletIcons: any = useMemo(\n\t\t() => ({\n\t\t\tMetaMask: <img src={metamask} />,\n\t\t\t\"Coinbase Wallet\": <img src={coinbase} width={60} />,\n\t\t\t\"Rabby Wallet\": <img src={rabby} width={60} />,\n\t\t\tSafe: <img src={trustwallet} width={60} />,\n\t\t\tMoon: <img src={moonLogoLight} width={60} />,\n\t\t\tWalletConnect: <img src={walletconnect} width={60} />,\n\t\t\t\"Browser Wallet\": <IconWallet className=\"w-[60px]\" />,\n\t\t}),\n\t\t[],\n\t);\n\n\tconst handleConnect = async (connector: any) => {\n\t\tconnect({ connector });\n\t\tconnectToMoonSiwe();\n\t};\n\n\t//remove duplicate connectors\n\tconst uniqueConnectors = connectors.filter(\n\t\t(v: any, i: any, a: any) =>\n\t\t\ta.findIndex((t: any) => t.name === v.name) === i,\n\t);\n\n\treturn useMemo(\n\t\t() =>\n\t\t\tuniqueConnectors.map((connector: any) => ({\n\t\t\t\ttype: \"connector\",\n\t\t\t\tcolor: \"blue-600\",\n\t\t\t\thoverColor: \"blue-700\",\n\t\t\t\ttext: connector.name,\n\t\t\t\ticon: walletIcons[connector.name],\n\t\t\t\tcomponent: (\n\t\t\t\t\t<div key={connector.uid} className=\"flex flex-col items-center\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonClick={() => handleConnect(connector)}\n\t\t\t\t\t\t\tclassName=\"p-2 bg-accent-color w-80 h-30 rounded-xl flex items-center justify-center gap-2 text-text-primary hover:border-2 hover:border-text-primary hover:bg-accent-color hover:text-text-primary\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{walletIcons[connector.name] && walletIcons[connector.name]}\n\t\t\t\t\t\t\t{connector.name !== \"Moon\" && connector.name}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t),\n\t\t\t})),\n\t\t[connect, connectors, walletIcons],\n\t);\n};\n","import { useQueries } from '@tanstack/react-query';\nimport { useMoonAccounts } from '../old/useMoonAccounts';\n\n/**\n * Fetches the gas balances of the wallets in the list.\n **/\nexport function useFetchWalletBalances(wallets: string[], chainId: string) {\n  const { getBalance } = useMoonAccounts();\n\n  return useQueries({\n    queries: wallets.map((wallet) => {\n      return {\n        queryKey: ['walletBalance', wallet, chainId],\n        queryFn: async () => {\n          if (!wallet) {\n            throw new Error('Wallet not found');\n          }\n          const response = await getBalance({\n            accountName: wallet,\n            chainId,\n          });\n          return response.balance;\n        },\n      };\n    }),\n  });\n}\n","import { useMoonTransaction } from \"@/hooks\";\nimport type {\n\tAccountResponse,\n\tBroadCastRawTransactionResponse,\n\tInputBody,\n\tSignMessage,\n\tSignTypedData,\n\tTransaction,\n\tTransactionData,\n} from \"@moonup/moon-api\";\nimport { useCallback } from \"react\";\nimport { useMoonSDK } from \"./useMoonSDK\";\n\nexport const useMoonAccounts = () => {\n\tconst context = useMoonSDK();\n\tconst { handleTransaction } = useMoonTransaction();\n\tconst { moon, addTransactionResult } = context;\n\n\tconst getAccountsSDK = () => {\n\t\tconst accountsSDK = moon?.getAccountsSDK();\n\t\tif (!accountsSDK) throw new Error(\"Moon SDK not initialized\");\n\t\treturn accountsSDK;\n\t};\n\n\tconst transferEth = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\ttransaction: InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"transferEth\", async () => {\n\t\t\t\tconst accountsSDK = getAccountsSDK();\n\t\t\t\tconsole.log(\"transferEth\", payload.accountName, payload.transaction);\n\t\t\t\tconst response = await accountsSDK.accountsTransferEth(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon, addTransactionResult],\n\t);\n\n\tconst getBalance = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\tchainId: string;\n\t\t}): Promise<{ balance: string }> => {\n\t\t\treturn handleTransaction(\"getBalance\", async () => {\n\t\t\t\tconst accountsSDK = getAccountsSDK();\n\t\t\t\tconst response = await accountsSDK.accountsEthereumGetNativeBalance({\n\t\t\t\t\taccountName: payload.accountName,\n\t\t\t\t\tchainId: payload.chainId,\n\t\t\t\t});\n\t\t\t\tif (!response.success) {\n\t\t\t\t\tthrow new Error(response.message);\n\t\t\t\t}\n\t\t\t\treturn response.data as { balance: string };\n\t\t\t});\n\t\t},\n\t\t[moon, addTransactionResult],\n\t);\n\n\tconst listAccounts = useCallback(async (): Promise<AccountResponse> => {\n\t\treturn handleTransaction(\"listAccounts\", async () => {\n\t\t\tconst accountsSDK = getAccountsSDK();\n\t\t\tconst response = await accountsSDK.accountsListEthereumAccounts();\n\t\t\treturn response.data;\n\t\t});\n\t}, [moon, addTransactionResult]);\n\n\tconst createAccount = useCallback(async (): Promise<AccountResponse> => {\n\t\treturn handleTransaction(\"createAccount\", async () => {\n\t\t\tconst accountsSDK = getAccountsSDK();\n\t\t\tconst response = await accountsSDK.accountsCreateEthereumAccount({});\n\t\t\treturn response.data;\n\t\t});\n\t}, [moon, addTransactionResult]);\n\n\tconst getAccount = useCallback(\n\t\tasync (payload: { id: string }): Promise<AccountResponse> => {\n\t\t\treturn handleTransaction(\"getAccount\", async () => {\n\t\t\t\tconst accountsSDK = getAccountsSDK();\n\t\t\t\tconst response = await accountsSDK.accountsGetEthreumAccount(\n\t\t\t\t\tpayload.id,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon, addTransactionResult],\n\t);\n\n\tconst deleteAccount = useCallback(\n\t\tasync (payload: { id: string }): Promise<AccountResponse> => {\n\t\t\treturn handleTransaction(\"deleteAccount\", async () => {\n\t\t\t\tconst accountsSDK = getAccountsSDK();\n\t\t\t\tconst response = await accountsSDK.accountsDeleteEthereumAccount(\n\t\t\t\t\tpayload.id,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon, addTransactionResult],\n\t);\n\n\tconst signTransaction = useCallback(\n\t\tasync (payload: {\n\t\t\taccountName: string;\n\t\t\ttransaction: InputBody;\n\t\t}): Promise<Transaction> => {\n\t\t\treturn handleTransaction(\"signTransaction\", async () => {\n\t\t\t\tconst accountsSDK = getAccountsSDK();\n\t\t\t\tconst response = await accountsSDK.accountsSignEthereumTransaction(\n\t\t\t\t\tpayload.accountName,\n\t\t\t\t\tpayload.transaction,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon, addTransactionResult],\n\t);\n\n\tconst signMessage = useCallback(\n\t\tasync (payload: {\n\t\t\tid: string;\n\t\t\tmessage: SignMessage;\n\t\t}): Promise<TransactionData> => {\n\t\t\treturn handleTransaction(\"signMessage\", async () => {\n\t\t\t\tconst accountsSDK = getAccountsSDK();\n\t\t\t\tconst response = await accountsSDK.accountsSignEthreumMessage(\n\t\t\t\t\tpayload.id,\n\t\t\t\t\tpayload.message,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon, addTransactionResult],\n\t);\n\n\tconst signTypedData = useCallback(\n\t\tasync (payload: {\n\t\t\tid: string;\n\t\t\ttypedData: SignTypedData;\n\t\t}): Promise<TransactionData> => {\n\t\t\treturn handleTransaction(\"signTypedData\", async () => {\n\t\t\t\tconst accountsSDK = getAccountsSDK();\n\t\t\t\tconst response = await accountsSDK.accountsSignEthereumTypedData(\n\t\t\t\t\tpayload.id,\n\t\t\t\t\tpayload.typedData,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon, addTransactionResult],\n\t);\n\n\tconst broadcastTx = useCallback(\n\t\tasync (payload: {\n\t\t\tid: string;\n\t\t\ttransaction: string;\n\t\t\tchain_id: string;\n\t\t}): Promise<BroadCastRawTransactionResponse> => {\n\t\t\treturn handleTransaction(\"broadcastTx\", async () => {\n\t\t\t\tconst accountsSDK = getAccountsSDK();\n\t\t\t\tconst response = await accountsSDK.accountsBroadcastEthreeumTransaction(\n\t\t\t\t\tpayload.id,\n\t\t\t\t\t{\n\t\t\t\t\t\trawTransaction: payload.transaction,\n\t\t\t\t\t\tchainId: payload.chain_id,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t});\n\t\t},\n\t\t[moon, addTransactionResult],\n\t);\n\n\treturn {\n\t\ttransferEth,\n\t\tgetBalance,\n\t\tlistAccounts,\n\t\tcreateAccount,\n\t\tgetAccount,\n\t\tdeleteAccount,\n\t\tsignTransaction,\n\t\tsignMessage,\n\t\tsignTypedData,\n\t\tbroadcastTx,\n\t};\n};\n","import {\n\tAnyTokenSelectorModal,\n\tButton,\n\tChainSelector,\n\tChainSelectorModal,\n\tChatBot,\n\tLifiChainSelectorModal,\n\tLifiTokenSelectorModal,\n\tSwapInterface,\n\tUserTokenManager,\n\tWalletSelector,\n\tWalletSelectorModal,\n} from \"@/components\";\nimport { useAave, useChains, useMoonAccount } from \"@/hooks\";\nimport type { Chains } from \"@moonup/moon-sdk\";\nimport type { Session } from \"@supabase/supabase-js\";\nimport React from \"react\";\nimport { useAccount } from \"wagmi\";\nimport { useMoonAuth } from \"../../context\";\nimport { useMoonSDK } from \"../../hooks/old/useMoonSDK\";\ninterface AccountInfoProps {\n\tsession: Session | null;\n\taddress: string | undefined;\n\tstatus: string | undefined;\n\tselectedChain: Chains | null;\n}\ninterface WalletSectionProps {\n\taccounts: string[];\n\tcreateAccount: (input: any) => void;\n\tdeleteAccount: (wallet: string) => Promise<void>;\n\tgetBalance: (wallet: string) => void;\n}\ninterface LifiSectionProps {\n\tsetLifiChainKey: React.Dispatch<React.SetStateAction<string | undefined>>;\n\tlifiChainKey: string | undefined;\n}\ninterface ChatBotSectionProps {\n\tsetChatOpen: (isOpen: boolean) => Promise<void>;\n\tchatOpen: boolean;\n}\n\ninterface AaveSectionProps {\n\tgetAaveV3PoolAddress: (\n\t\taccountName: string,\n\t\tchainId: string,\n\t) => Promise<string | undefined>;\n\taccounts: string[];\n}\n\nexport function Account() {\n\tconst { address, status } = useAccount();\n\tconst { setChatOpen, chatOpen } = useMoonSDK();\n\tconst { moon, session, signOut } = useMoonAuth();\n\tconst { fetchChains, selectedChain } = useChains();\n\tconst { accounts, createAccount, deleteAccount, listAccounts, getBalance } =\n\t\tuseMoonAccount();\n\n\tconst [lifiChainKey, setLifiChainKey] = React.useState<string | undefined>();\n\tconst { getAaveV3PoolAddress } = useAave();\n\n\tReact.useEffect(() => {\n\t\tlistAccounts();\n\t\tfetchChains();\n\t}, [listAccounts, fetchChains]);\n\n\tif (!moon || !session) {\n\t\treturn <div>Loading...</div>;\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col items-center gap-4 p-4 bg-background-primary h-[100vh] overflow-scroll\">\n\t\t\t<AccountInfo\n\t\t\t\tsession={session}\n\t\t\t\taddress={address}\n\t\t\t\tstatus={status}\n\t\t\t\tselectedChain={selectedChain}\n\t\t\t/>\n\t\t\t<WalletSection\n\t\t\t\taccounts={accounts}\n\t\t\t\tcreateAccount={createAccount}\n\t\t\t\tdeleteAccount={deleteAccount}\n\t\t\t\tgetBalance={getBalance}\n\t\t\t/>\n\t\t\t<ChainSection />\n\t\t\t<LifiSection\n\t\t\t\tsetLifiChainKey={setLifiChainKey}\n\t\t\t\tlifiChainKey={lifiChainKey}\n\t\t\t/>\n\t\t\t<TokenManagerSection />\n\t\t\t<SwapSection />\n\t\t\t<AnyTokenSelectorSection />\n\t\t\t<ChatBotSection setChatOpen={setChatOpen} chatOpen={chatOpen} />\n\t\t\t<AaveSection\n\t\t\t\tgetAaveV3PoolAddress={getAaveV3PoolAddress}\n\t\t\t\taccounts={accounts}\n\t\t\t/>\n\t\t\t<SignOutButton signOut={signOut} />\n\t\t</div>\n\t);\n}\n\nfunction AccountInfo({\n\tsession,\n\taddress,\n\tstatus,\n\tselectedChain,\n}: AccountInfoProps) {\n\treturn (\n\t\t<div className=\"bg-background-secondary w-full rounded-xl flex flex-col items-center justify-center text-text-primary p-4\">\n\t\t\t<div className=\"text-center text-xl font-semibold\">\n\t\t\t\t<p>Welcome, {session?.user?.email}</p>\n\t\t\t\t{address && <p>Address: {address}</p>}\n\t\t\t\t{status && <p>Status: {status}</p>}\n\t\t\t\t{selectedChain && <p>Chain: {selectedChain.name}</p>}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction WalletSection({\n\taccounts,\n\tcreateAccount,\n\tdeleteAccount,\n\tgetBalance,\n}: WalletSectionProps) {\n\treturn (\n\t\t<div className=\"bg-background-secondary w-full rounded-xl flex flex-col items-center justify-center text-text-primary p-4\">\n\t\t\t{accounts && accounts.length > 0 ? (\n\t\t\t\t<div>\n\t\t\t\t\t<div className=\"text-center text-xl font-semibold\">Wallets</div>\n\t\t\t\t\t<WalletSelector\n\t\t\t\t\t\tselectProps={{\n\t\t\t\t\t\t\tclassName:\n\t\t\t\t\t\t\t\t\"max-h-[300px] bg-accent-color rounded-xl p-3 m-1 text-text-primary\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<WalletSelectorModal\n\t\t\t\t\t\ttitle=\"Wallet Selector\"\n\t\t\t\t\t\tinputProps={{\n\t\t\t\t\t\t\tlabel: \"Select Wallet\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t{accounts.map((wallet) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={wallet}\n\t\t\t\t\t\t\tclassName=\"text-center text-xl flex gap-4 items-center justify-center mb-1\"\n\t\t\t\t\t\t\tonClick={() => getBalance(wallet)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{wallet}{\" \"}\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tclassName=\"bg-red-500\"\n\t\t\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\t\t\tawait deleteAccount(wallet);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tDelete\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<div>\n\t\t\t\t\t<div className=\"text-center text-xl font-semibold\">\n\t\t\t\t\t\tNo wallets connected\n\t\t\t\t\t</div>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"bg-blue-600 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full mb-2\"\n\t\t\t\t\t\tonClick={createAccount}\n\t\t\t\t\t>\n\t\t\t\t\t\tcreate wallet\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction ChainSection() {\n\treturn (\n\t\t<div className=\"bg-background-secondary w-full rounded-xl flex flex-col items-center justify-center text-text-primary p-4\">\n\t\t\t<div className=\"text-center text-xl font-semibold\">Moon Chains</div>\n\t\t\t<ChainSelector\n\t\t\t\tselectProps={{\n\t\t\t\t\tclassName:\n\t\t\t\t\t\t\"max-h-[300px] bg-accent-color rounded-xl p-3 m-1 text-text-primary\",\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<ChainSelectorModal\n\t\t\t\ttitle=\"Chain Selector\"\n\t\t\t\tinputProps={{\n\t\t\t\t\tlabel: \"Select Chain\",\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction LifiSection({ setLifiChainKey, lifiChainKey }: LifiSectionProps) {\n\treturn (\n\t\t<div className=\"bg-background-secondary w-full rounded-xl flex flex-col items-center justify-center text-text-primary p-4\">\n\t\t\t<div className=\"text-center text-xl font-semibold\">Lifi</div>\n\t\t\t<LifiChainSelectorModal\n\t\t\t\tonSelect={(chainId: string) => {\n\t\t\t\t\tconsole.log(chainId);\n\t\t\t\t\tsetLifiChainKey(chainId);\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<LifiTokenSelectorModal\n\t\t\t\tinitialTokenChain={lifiChainKey}\n\t\t\t\tonSelect={(chainId: string) => {\n\t\t\t\t\tconsole.log(chainId);\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction TokenManagerSection() {\n\treturn (\n\t\t<div className=\"bg-background-secondary w-full rounded-xl flex flex-col items-center justify-center text-text-primary p-4\">\n\t\t\t<div className=\"text-center text-xl font-semibold\">Token Manager</div>\n\t\t\t<UserTokenManager />\n\t\t</div>\n\t);\n}\n\nfunction SwapSection() {\n\treturn (\n\t\t<div className=\"bg-background-secondary w-full rounded-xl flex flex-col items-center justify-center text-text-primary p-4\">\n\t\t\t<div className=\"text-center text-xl font-semibold\">Swap Interface</div>\n\t\t\t<SwapInterface />\n\t\t</div>\n\t);\n}\n\nfunction AnyTokenSelectorSection() {\n\treturn (\n\t\t<div className=\"bg-background-secondary w-full rounded-xl flex flex-col items-center justify-center text-text-primary p-4\">\n\t\t\t<div className=\"text-center text-xl font-semibold\">\n\t\t\t\tAny Token Selector\n\t\t\t</div>\n\t\t\t<AnyTokenSelectorModal\n\t\t\t\tonSelect={(tokenAddress: string) => {\n\t\t\t\t\tconsole.log(tokenAddress);\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction ChatBotSection({ setChatOpen, chatOpen }: ChatBotSectionProps) {\n\treturn (\n\t\t<>\n\t\t\t<ChatBot />\n\t\t\t<Button\n\t\t\t\tcolor=\"infoColor\"\n\t\t\t\tonClick={() => {\n\t\t\t\t\tsetChatOpen(!chatOpen);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tOpen Chat\n\t\t\t</Button>\n\t\t</>\n\t);\n}\n\nfunction AaveSection({ getAaveV3PoolAddress, accounts }: AaveSectionProps) {\n\treturn (\n\t\t<Button\n\t\t\tcolor=\"infoColor\"\n\t\t\tonClick={async () => {\n\t\t\t\tconst res = await getAaveV3PoolAddress(accounts[0], \"10\");\n\t\t\t\tconsole.log(res);\n\t\t\t}}\n\t\t>\n\t\t\tGet AaveV3Pool\n\t\t</Button>\n\t);\n}\n\nfunction SignOutButton({\n\tsignOut,\n}: {\n\tsignOut: () => void;\n}) {\n\treturn (\n\t\t<Button color=\"errorColor\" onClick={signOut}>\n\t\t\tsign out\n\t\t</Button>\n\t);\n}\n\nexport default Account;\n","import {\n\tAuthModalContent,\n\tAuthModalOverlay,\n\tAuthOptions,\n\tWalletConnectorsList,\n} from \"@/components\";\nimport { useMoonSDK } from \"@/hooks\";\nimport type { AuthModalConfig } from \"@/types\";\nimport React from \"react\";\nimport { SignupForm } from \"../SignUp/SignupForm\";\n\ntype AuthModalProps = {\n\tchildren: React.ReactNode;\n\tconfig: AuthModalConfig;\n};\n\nexport const AuthModal: React.FC<AuthModalProps> = ({ config, children }) => {\n\tconst { enabled, appearance } = config;\n\tconst [_, setConnectWallet] = React.useState(false);\n\tconst [screen, setScreen] = React.useState<\n\t\t\"login\" | \"walletConnect\" | \"signup\"\n\t>(\"login\");\n\tconst { session } = useMoonSDK();\n\n\tif (!enabled) return <>{children}</>;\n\tif (session) return <>{children}</>;\n\n\tlet logoPosition = \"left-8\";\n\tif (appearance.logo?.position === \"center\")\n\t\tlogoPosition = \"left-[50%] transform -translate-x-1/2\";\n\telse if (appearance.logo?.position === \"right\") logoPosition = \"right-8\";\n\n\treturn (\n\t\t<>\n\t\t\t<AuthModalOverlay onClick={() => {}} config={config} />\n\t\t\t<AuthModalContent config={config} isSignup={screen === \"signup\"}>\n\t\t\t\t{config.appearance.logo?.enabled && (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={config.appearance.logo?.src}\n\t\t\t\t\t\talt=\"logo\"\n\t\t\t\t\t\twidth={config.appearance.logo?.width}\n\t\t\t\t\t\theight={config.appearance.logo?.height}\n\t\t\t\t\t\tclassName={`fixed top-8 ${logoPosition}`}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{screen === \"login\" && (\n\t\t\t\t\t<AuthOptions\n\t\t\t\t\t\tconfig={config}\n\t\t\t\t\t\tonConnectWallet={() => setScreen(\"walletConnect\")}\n\t\t\t\t\t\tonSignupEmail={() => setScreen(\"signup\")}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{screen === \"walletConnect\" && (\n\t\t\t\t\t<WalletConnectorsList onBack={() => setConnectWallet(false)} />\n\t\t\t\t)}\n\t\t\t\t{screen === \"signup\" && (\n\t\t\t\t\t<SignupForm\n\t\t\t\t\t\tonCancel={() => setScreen(\"login\")}\n\t\t\t\t\t\tonSuccess={() => {\n\t\t\t\t\t\t\tsetScreen(\"login\");\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tconfig={config}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</AuthModalContent>\n\t\t</>\n\t);\n};\n","import { Button, Input } from \"@/components\";\nimport { useAuth } from \"@/index\";\nimport type { AuthModalConfig } from \"@/types\";\nimport { useState } from \"react\";\nimport { useMoonSDK } from \"../../../hooks/old/useMoonSDK\";\n\n/**\n * Props for the SignupForm component.\n *\n * @interface SignupFormProps\n * @property {AuthModalConfig} config - Configuration object for the authentication modal.\n * @property {Function} onSuccess - Callback function to be called upon successful signup.\n * @property {Function} onCancel - Callback function to be called when the signup process is cancelled.\n */\nexport interface SignupFormProps {\n\tconfig: AuthModalConfig;\n\tonSuccess: any;\n\tonCancel: any;\n}\n\n/**\n * SignupForm component handles the user sign-up process.\n *\n * @param {Object} props - The properties object.\n * @param {Function} props.onSuccess - Callback function to be called upon successful sign-up.\n * @param {Function} props.onCancel - Callback function to be called when the user cancels the sign-up process.\n * @param {Object} props.config - Configuration object for the sign-up form appearance and behavior.\n *\n * @returns {JSX.Element} The rendered sign-up form component.\n *\n * @component\n * @example\n * const handleSuccess = () => { console.log('Sign-up successful'); };\n * const handleCancel = () => { console.log('Sign-up cancelled'); };\n * const config = { appearance: { modal: { padding: '4' }, input: { placeholders: { email: 'Enter your email', password: 'Enter your password' } } } };\n *\n * <SignupForm onSuccess={handleSuccess} onCancel={handleCancel} config={config} />\n */\nexport const SignupForm = ({\n\tonSuccess,\n\tonCancel,\n\tconfig,\n}: SignupFormProps) => {\n\tconst [isSigningUp, setSigningUp] = useState(false);\n\tconst [email, setEmail] = useState(\"\");\n\tconst [password, setPassword] = useState(\"\");\n\tconst [error, setError] = useState<string | null>(null);\n\tconst { authConfig } = useMoonSDK();\n\tconst { signUpWithEmail } = useAuth();\n\n\tconst handleSignupEmail = async () => {\n\t\ttry {\n\t\t\tsetSigningUp(true);\n\t\t\tconst session = await signUpWithEmail(email, password);\n\t\t\tif (!session) {\n\t\t\t\tconsole.error(\"Invalid Session\");\n\t\t\t\tsetError(\"Invalid session\");\n\t\t\t\tsetSigningUp(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonSuccess();\n\t\t\tsetSigningUp(false);\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t\tsetError(\"An error occurred\");\n\t\t\tsetSigningUp(false);\n\t\t}\n\t};\n\n\tif (isSigningUp)\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-4 items-center justify-center\">\n\t\t\t\t<div className=\"animate-spin rounded-full h-32 w-32 border-t-2 border-b-2 border-text-primary\"></div>\n\t\t\t\tSigning you up...\n\t\t\t</div>\n\t\t);\n\treturn (\n\t\t<div\n\t\t\tclassName={`p-${config.appearance.modal.padding} justify-center items-center flex flex-col gap-5`}\n\t\t>\n\t\t\t<Input\n\t\t\t\tlabel=\"Email\"\n\t\t\t\tid=\"email\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tname=\"email\"\n\t\t\t\tvalue={email}\n\t\t\t\tonChange={(e) => setEmail(e.target.value)}\n\t\t\t\tstyle={{\n\t\t\t\t\tborderRadius: authConfig.appearance.input.borderRadius || \"3px\",\n\t\t\t\t}}\n\t\t\t\tplaceholder={\n\t\t\t\t\tconfig?.appearance?.input?.placeholders?.email ||\n\t\t\t\t\t\"eg. ILoveMoon@gmail.com\"\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Input\n\t\t\t\tlabel=\"Password\"\n\t\t\t\tid=\"password\"\n\t\t\t\ttype=\"password\"\n\t\t\t\tname=\"password\"\n\t\t\t\tvalue={password}\n\t\t\t\tonChange={(e) => setPassword(e.target.value)}\n\t\t\t\tplaceholder={\n\t\t\t\t\tconfig?.appearance?.input?.placeholders?.password || \"******\"\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Button onClick={handleSignupEmail} color=\"infoColor\">\n\t\t\t\tSign Up\n\t\t\t</Button>\n\t\t\t{error && <div className=\"text-red-500\">{error}</div>}\n\n\t\t\t<h3\n\t\t\t\tclassName=\"text-text-secondary hover:cursor-pointer hover:underline\"\n\t\t\t\tonClick={onCancel}\n\t\t\t>\n\t\t\t\tBack to Login\n\t\t\t</h3>\n\t\t</div>\n\t);\n};\n","import React from 'react';\n// import { AuthModalConfig } from \"../../types/types\";\nimport { AuthModalConfig } from '@/types';\n\ninterface ModalProps {\n  children: React.ReactNode;\n  config: AuthModalConfig;\n  isSignup?: boolean;\n}\n\ninterface ModalOverlayProps {\n  config: AuthModalConfig;\n  onClick: () => void;\n}\n\nexport const AuthModalOverlay = ({ onClick, config }: ModalOverlayProps) => (\n  <div\n    className={`bg-[${config.theming.backgroundColor}] opacity-25 fixed inset-0 z-40 hover:opacity-100 cursor-pointer hover`}\n    onClick={onClick}\n  ></div>\n);\n\nexport const AuthModalContent = ({\n  children,\n  config,\n  isSignup,\n}: ModalProps) => {\n  const textInside = config.appearance.welcomeMessage?.position == 'inside';\n  const title = (\n    <div\n      className={`relative w-auto mt-4 mx-auto flex flex-col justify-center items-center ${\n        !textInside && 'mb-4'\n      } `}\n    >\n      <div\n        style={{ color: config.theming.textColor }}\n        className={`text-2xl font-bold`}\n      >\n        {isSignup\n          ? config.appearance.signupMessage?.title\n          : config.appearance.welcomeMessage?.title}\n      </div>\n      <div\n        style={{ color: config.theming.textColorSecondary }}\n        className={`text-lg`}\n      >\n        {isSignup\n          ? config.appearance.signupMessage?.subtitle\n          : config.appearance.welcomeMessage?.subtitle}\n      </div>\n    </div>\n  );\n\n  return (\n    <div\n      style={{ backgroundColor: config.theming.backgroundColor }}\n      className={`justify-center items-center flex overflow-x-hidden overflow-y-auto fixed inset-0 z-50 outline-none focus:outline-none`}\n    >\n      <div className=\"relative w-auto my-6 mx-auto flex flex-col justify-center items-center\">\n        {!textInside && title}\n        <div className=\"text-white w-full flex items-center justify-center\">\n          <div\n            style={{\n              backgroundColor: config.theming.backgroundColorSecondary,\n              width: config.appearance.modal.width,\n              borderRadius: config.appearance.modal.borderRadius,\n            }}\n            className={`relative justify-center items-center`}\n          >\n            {textInside && title}\n            {children}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n","import { IconChevronRight, IconWallet } from \"@/assets/icons\";\nimport {\n\tButton,\n\tEmailLogin,\n\tSignInAnonymously,\n\tSocialLogins,\n} from \"@/components\";\nimport type { AuthModalConfig } from \"@/types\";\n\n/**\n * Props for the AuthOptions component.\n *\n * @interface AuthOptionsProps\n * @property {AuthModalConfig} config - Configuration for the authentication modal.\n * @property {Function} onConnectWallet - Callback function to handle wallet connection.\n * @property {Function} onSignupEmail - Callback function to handle email signup.\n */\nexport interface AuthOptionsProps {\n\tconfig: AuthModalConfig;\n\tonConnectWallet: any;\n\tonSignupEmail: any;\n}\n\n/**\n * AuthOptions component renders various authentication options based on the provided configuration.\n *\n * @param {AuthOptionsProps} props - The properties for the AuthOptions component.\n * @param {object} props.config - Configuration object for the authentication options.\n * @param {function} props.onConnectWallet - Callback function to handle wallet connection.\n * @param {function} props.onSignupEmail - Callback function to handle email signup.\n *\n * @returns {JSX.Element} The rendered AuthOptions component.\n *\n * @component\n * @example\n * const config = {\n *   appearance: { modal: { padding: '4' } },\n *   socialLogins: ['google', 'facebook'],\n *   walletConnectEnabled: true,\n *   anonymousLoginEnabled: true,\n * };\n * const handleConnectWallet = () => { ... };\n * const handleSignupEmail = () => { ... };\n *\n * <AuthOptions\n *   config={config}\n *   onConnectWallet={handleConnectWallet}\n *   onSignupEmail={handleSignupEmail}\n * />\n */\nexport const AuthOptions = ({\n\tconfig,\n\tonConnectWallet,\n\tonSignupEmail,\n}: AuthOptionsProps) => (\n\t<div\n\t\tclassName={`p-${config.appearance.modal.padding} justify-center items-center flex flex-col gap-5`}\n\t>\n\t\t<EmailLogin config={config} />\n\n\t\t<div className=\"w-full border-b-[1px] border-text-secondary\" />\n\t\t{config.socialLogins && config.socialLogins.length > 0 && (\n\t\t\t<div className=\"w-full overflow-x-scroll h-20 flex gap-4 justify-center scrollbar-hide\">\n\t\t\t\t<SocialLogins socialLogins={config.socialLogins} />\n\t\t\t</div>\n\t\t)}\n\t\t{config.walletConnectEnabled && (\n\t\t\t<Button onClick={onConnectWallet} color=\"successColor\">\n\t\t\t\t<IconWallet className=\"absolute left-5 w-[30px]\" />\n\t\t\t\tConnect Wallet\n\t\t\t\t<IconChevronRight className=\"absolute right-2 w-[30px]\" />\n\t\t\t</Button>\n\t\t)}\n\t\t{config.anonymousLoginEnabled && <SignInAnonymously />}\n\t\t<h3\n\t\t\tclassName=\"text-text-secondary hover:cursor-pointer hover:underline\"\n\t\t\tonClick={onSignupEmail}\n\t\t>\n\t\t\tSign Up\n\t\t</h3>\n\t</div>\n);\n","import { Button, Input } from \"@/components\";\nimport { useAuth } from \"@/hooks\";\nimport type { AuthModalConfig } from \"@/types\";\nimport { useState } from \"react\";\nimport { useMoonSDK } from \"../../../hooks/old/useMoonSDK\";\n\n/**\n * Props for the EmailLogin component.\n *\n * @interface EmailLoginProps\n * @property {AuthModalConfig} config - Configuration object for the authentication modal.\n */\nexport interface EmailLoginProps {\n\tconfig: AuthModalConfig;\n}\n/**\n * EmailLogin component allows users to log in using their email and password.\n *\n * @param {EmailLoginProps} props - The properties for the EmailLogin component.\n * @param {object} props.config - Configuration object for the component.\n *\n * @returns {JSX.Element} The rendered EmailLogin component.\n *\n * @component\n *\n * @example\n * return (\n *   <EmailLogin config={config} />\n * );\n *\n * @remarks\n * This component uses the `useMoonSDK` and `useAuth` hooks to handle authentication.\n * It manages its own state for email, password, and error messages.\n *\n * @function\n * @name EmailLogin\n */\nexport const EmailLogin = ({ config }: EmailLoginProps) => {\n\tconst [isLoggingIn, setIsLoggingIn] = useState(false);\n\tconst [email, setEmail] = useState(\"\");\n\tconst [password, setPassword] = useState(\"\");\n\tconst [error, setError] = useState<string | null>(null);\n\tconst { authConfig } = useMoonSDK();\n\tconst { signInWithEmail } = useAuth();\n\n\tconst handleLoginEmail = async () => {\n\t\ttry {\n\t\t\tsetIsLoggingIn(true);\n\t\t\tconst response = await signInWithEmail(email, password);\n\t\t\t// console.log(\"login response\", response);\n\t\t\tif (!response) {\n\t\t\t\tsetError(\"Invalid email or password\");\n\t\t\t\tsetIsLoggingIn(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetIsLoggingIn(false);\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\tsetError(\"An error occurred\");\n\t\t\tsetIsLoggingIn(false);\n\t\t}\n\t};\n\tif (isLoggingIn)\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-4 items-center justify-center\">\n\t\t\t\t<div className=\"animate-spin rounded-full h-32 w-32 border-t-2 border-b-2 border-text-primary\"></div>\n\t\t\t\tLogging in...\n\t\t\t</div>\n\t\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Input\n\t\t\t\tlabel=\"Email\"\n\t\t\t\tid=\"email\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tname=\"email\"\n\t\t\t\tvalue={email}\n\t\t\t\tonChange={(e) => setEmail(e.target.value)}\n\t\t\t\tstyle={{\n\t\t\t\t\tborderRadius: authConfig.appearance.input.borderRadius || \"3px\",\n\t\t\t\t}}\n\t\t\t\tplaceholder={\n\t\t\t\t\tconfig?.appearance?.input?.placeholders?.email ||\n\t\t\t\t\t\"eg. ILoveMoon@gmail.com\"\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Input\n\t\t\t\tlabel=\"Password\"\n\t\t\t\tid=\"password\"\n\t\t\t\ttype=\"password\"\n\t\t\t\tname=\"password\"\n\t\t\t\tvalue={password}\n\t\t\t\tonChange={(e) => setPassword(e.target.value)}\n\t\t\t\tplaceholder={\n\t\t\t\t\tconfig?.appearance?.input?.placeholders?.password || \"******\"\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Button onClick={handleLoginEmail} color=\"successColor\">\n\t\t\t\tLogin\n\t\t\t</Button>\n\t\t\t{error && <div className=\"text-red-500\">{error}</div>}\n\t\t</>\n\t);\n};\n","import { IconChevronRight, IconUser } from \"@/assets/icons\";\nimport { Button } from \"@/components\";\nimport { useAuth } from \"@/hooks\";\n/**\n * SignInAnonymously component allows users to sign in anonymously.\n *\n * This component renders a button that, when clicked, triggers the\n * `signInAnonymously` function from the `useAuth` hook to sign in the user\n * without requiring any credentials.\n *\n * @returns {JSX.Element} A button element that initiates anonymous sign-in.\n */\nexport function SignInAnonymously() {\n\tconst { signInAnonymously } = useAuth();\n\n\treturn (\n\t\t<Button\n\t\t\tonClick={async () => {\n\t\t\t\tawait signInAnonymously();\n\t\t\t}}\n\t\t\tcolor=\"accentColor\"\n\t\t>\n\t\t\t<IconUser className=\"absolute left-5 w-[30px]\" />\n\t\t\tAnonymous Login\n\t\t\t<IconChevronRight className=\"absolute right-2 w-[30px]\" />\n\t\t</Button>\n\t);\n}\n","import {\n\tIconDiscord,\n\tIconGithub,\n\tIconGoogle,\n\tIconTwitter,\n} from \"@/assets/icons\";\nimport { useOAuth2 } from \"@/hooks\";\nimport type {\n\tSocialOptionArray as SocialLoginsType,\n\tSocialOption,\n} from \"@/types\";\nimport type React from \"react\";\nimport { useEffect } from \"react\";\n\n/**\n * Props for the SocialLogins component.\n *\n * @interface SocialLoginsProps\n * @property {SocialLoginsType} socialLogins - An object containing the social login options.\n */\nexport interface SocialLoginsProps {\n\tsocialLogins: SocialLoginsType;\n}\n\n/**\n * SocialLogins component renders social login buttons and handles OAuth2 authentication flow.\n *\n * @param {SocialLoginsProps} props - The properties for the SocialLogins component.\n * @param {SocialOption[]} props.socialLogins - An array of social login providers to display.\n *\n * @returns {JSX.Element} The rendered social login buttons.\n *\n * @example\n * <SocialLogins socialLogins={['discord', 'github', 'twitter', 'google']} />\n *\n * @remarks\n * This component uses the `useOAuth2` hook to initiate and handle OAuth2 authentication.\n * It stores the selected provider in localStorage and processes the OAuth callback.\n *\n * @component\n */\nexport function SocialLogins({ socialLogins }: SocialLoginsProps) {\n\tconst { initiateOAuth, handleOAuthCallback } = useOAuth2();\n\n\tuseEffect(() => {\n\t\tconst url = new URL(window.location.href);\n\t\tconst code = url.searchParams.get(\"code\");\n\t\tconst provider = localStorage.getItem(\"moon_auth_provider\") as SocialOption;\n\n\t\tif (code && provider) {\n\t\t\thandleOAuthCallback(provider, code)\n\t\t\t\t.then(() => {\n\t\t\t\t\t// Clear the code from the URL\n\t\t\t\t\turl.searchParams.delete(\"code\");\n\t\t\t\t\twindow.history.replaceState({}, \"\", url.toString());\n\t\t\t\t})\n\t\t\t\t.catch((error) => console.error(\"OAuth callback error:\", error))\n\t\t\t\t.finally(() => {\n\t\t\t\t\tlocalStorage.removeItem(\"moon_auth_provider\");\n\t\t\t\t});\n\t\t}\n\t}, [handleOAuthCallback]);\n\n\tconst handleSignIn = (provider: SocialOption) => {\n\t\tlocalStorage.setItem(\"moon_auth_provider\", provider);\n\t\tinitiateOAuth(provider);\n\t};\n\n\tconst socialButtons: {\n\t\tprovider: SocialOption;\n\t\tIcon: React.ComponentType<{ className?: string }>;\n\t\tbgColor: string;\n\t}[] = [\n\t\t{ provider: \"discord\", Icon: IconDiscord, bgColor: \"bg-accent-color\" },\n\t\t{ provider: \"github\", Icon: IconGithub, bgColor: \"bg-gray-900\" },\n\t\t{ provider: \"twitter\", Icon: IconTwitter, bgColor: \"bg-sky-500\" },\n\t\t{ provider: \"google\", Icon: IconGoogle, bgColor: \"bg-zinc-50\" },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t{socialButtons\n\t\t\t\t.filter(({ provider }) => socialLogins.includes(provider))\n\t\t\t\t.map(({ provider, Icon, bgColor }) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={provider}\n\t\t\t\t\t\tclassName={`p-2 ${bgColor} w-min h-min rounded-xl border-2 border-transparent hover:border-white cursor-pointer`}\n\t\t\t\t\t\tonClick={() => handleSignIn(provider)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tclassName={`w-[30px] h-[30px] ${\n\t\t\t\t\t\t\t\tprovider === \"google\" ? \"text-[#000000]\" : \"\"\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t</>\n\t);\n}\n","import { IconArrowLeft, IconWallet } from \"@/assets/icons\";\nimport { useConnectToMoon } from \"@/hooks\";\nimport { useRef } from \"react\";\nimport { useAccount, useConnect, useSignMessage } from \"wagmi\";\n\n/**\n * Props for the WalletConnectorList component.\n *\n * @interface WalletConnectorsListProps\n * @property {Function} onBack - Callback function to handle the back action.\n */\ninterface WalletConnectorsListProps {\n\tonBack: any;\n}\n\n/**\n * WalletConnectorsList component renders a list of wallet connectors and allows the user to connect to a wallet.\n *\n * @param {WalletConnectorsListProps} props - The properties for the WalletConnectorsList component.\n * @param {function} props.onBack - Callback function to handle the back button click event.\n *\n * @returns {JSX.Element} The rendered WalletConnectorsList component.\n *\n * @example\n * <WalletConnectorsList onBack={() => console.log('Back button clicked')} />\n *\n * @remarks\n * This component uses the `useConnect`, `useAccount`, `useSignMessage`, and `useConnectToMoon` hooks to manage wallet connections.\n * It filters out duplicate connectors and displays a list of unique connectors.\n * When a connector is clicked, it triggers the `handleConnect` function to initiate the connection process.\n * If the user is already connected, it automatically calls `connectToMoonSiwe`.\n */\nexport const WalletConnectorsList = ({ onBack }: WalletConnectorsListProps) => {\n\tconst { connectors, connect } = useConnect();\n\tconst { address, isConnected } = useAccount();\n\tconst { signMessageAsync } = useSignMessage();\n\tconst walletAddress = address ? address : \"\";\n\tconst { connectToMoonSiwe } = useConnectToMoon({\n\t\taddress: walletAddress,\n\t\tsignMessageAsync,\n\t});\n\tconst hasAttemptedConnection = useRef(false);\n\n\t// useEffect(() => {\n\t// \tif (isConnected && address && !hasAttemptedConnection.current) {\n\t// \t\t// connectToMoonSiwe();\n\t// \t\thasAttemptedConnection.current = true;\n\t// \t}\n\t// }, [isConnected, address, connectToMoonSiwe]);\n\n\tconst handleConnect = async (connector: any) => {\n\t\tif (isConnected) {\n\t\t\tif (!hasAttemptedConnection.current) {\n\t\t\t\tconnectToMoonSiwe();\n\t\t\t\thasAttemptedConnection.current = true;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconnect({ connector });\n\t};\n\n\t//remove duplicate connectors\n\tconst uniqueConnectors = connectors.filter(\n\t\t(v: any, i: any, a: any) =>\n\t\t\ta.findIndex((t: any) => t.name === v.name) === i,\n\t);\n\n\treturn (\n\t\t<div className=\"p-8 pt-15 justify-center items-center flex flex-col gap-5\">\n\t\t\t<div\n\t\t\t\tclassName=\"pl-5 pt-5 justify-center items-center flex gap-5 absolute top-0 left-0 opacity-70 hover:opacity-100 cursor-pointer hover\"\n\t\t\t\tonClick={onBack}\n\t\t\t>\n\t\t\t\t<IconArrowLeft className=\"w-6 h-6\" />\n\t\t\t\tBack\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-col justify-center gap-5 items-center overflow-y-auto\">\n\t\t\t\t<IconWallet className=\"text-accent w-[40px] h-[40px]\" />\n\t\t\t\t<p className=\"text-text-secondary\">Connect to a wallet</p>\n\t\t\t\t{uniqueConnectors &&\n\t\t\t\t\tuniqueConnectors.map((connector: any) => (\n\t\t\t\t\t\t<div key={connector.uid} className=\"flex flex-col items-center\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={() => handleConnect(connector)}\n\t\t\t\t\t\t\t\tclassName=\"border-2 border-transparent relative p-2 bg-accent-color w-80 h-30 rounded-sm flex items-center justify-center gap-2 text-text-primary hover:border-2 hover:border-text-primary hover:bg-accent-color hover:text-text-primary\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{connector.name}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","// components/Auth/WebAuthnComponent/WebAuthnComponent.tsx\n\nimport { Button, Input } from \"@/components\";\nimport { useTheme } from \"@/context\";\nimport { useAuth } from \"@/hooks\";\nimport {\n\tstartAuthentication,\n\tstartRegistration,\n} from \"@simplewebauthn/browser\";\nimport { motion } from \"framer-motion\";\nimport type React from \"react\";\nimport { type CSSProperties, useState } from \"react\";\n\n/**\n * WebAuthnComponent is a React functional component that provides\n * user authentication and registration using WebAuthn.\n *\n * @component\n * @example\n * return (\n *   <WebAuthnComponent />\n * )\n *\n * @returns {JSX.Element} The rendered component.\n *\n * @remarks\n * This component uses the `useAuth` hook to handle WebAuthn operations\n * such as initiating and completing login and registration. It also\n * utilizes the `useTheme` hook to apply theming styles.\n *\n * @function\n * @name WebAuthnComponent\n *\n * @hook\n * @name useAuth\n * @description Provides methods for WebAuthn operations.\n *\n * @hook\n * @name useTheme\n * @description Provides theming properties for styling the component.\n *\n * @state {string} email - The email input value.\n *\n * @async\n * @function\n * @name handleLogin\n * @description Initiates and completes the login process using WebAuthn.\n *\n * @async\n * @function\n * @name handleRegister\n * @description Initiates and completes the registration process using WebAuthn.\n */\nexport const WebAuthnComponent: React.FC = () => {\n\tconst [email, setEmail] = useState(\"\");\n\t// const [error, setError] = useState('');\n\tconst {\n\t\tinitiatePasskeyLogin,\n\t\tinitiatePasskeyRegistration,\n\t\tcompletePasskeyLogin,\n\t\tcompletePasskeyRegistration,\n\t} = useAuth();\n\tconst theme = useTheme();\n\n\tconst handleLogin = async () => {\n\t\ttry {\n\t\t\tconst publicKey = await initiatePasskeyLogin(email);\n\t\t\tif (!publicKey) throw new Error(\"Failed to initiate login\");\n\t\t\tconst credential = await startAuthentication(publicKey);\n\t\t\tif (!credential) throw new Error(\"Failed to start authentication\");\n\t\t\tconst auth = await completePasskeyLogin(email, credential);\n\t\t\tif (!auth) throw new Error(\"Failed to complete login\");\n\t\t} catch (err: unknown) {\n\t\t\tif (err instanceof Error) {\n\t\t\t\t// setError(err.message);\n\t\t\t\tconsole.error(err.message);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"An unknown error occurred\");\n\t\t\t\t// setError('An unknown error occurred');\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleRegister = async () => {\n\t\ttry {\n\t\t\tconst pubKey = await initiatePasskeyRegistration(email);\n\t\t\tif (!pubKey) throw new Error(\"Failed to initiate registration\");\n\t\t\tconst credential = await startRegistration(pubKey);\n\t\t\tif (!credential) throw new Error(\"Failed to start registration\");\n\t\t\tawait completePasskeyRegistration(email, credential, pubKey);\n\t\t} catch (err: unknown) {\n\t\t\tif (err instanceof Error) {\n\t\t\t\t// setError(err.message);\n\t\t\t\tconsole.error(err.message);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"An unknown error occurred\");\n\t\t\t\t// setError('An unknown error occurred');\n\t\t\t}\n\t\t}\n\t};\n\n\treturn (\n\t\t<motion.div\n\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\texit={{ opacity: 0, y: -20 }}\n\t\t\tclassName={`p-8 bg-${theme.backgroundColor} rounded-${theme.borderRadius} shadow-${theme.boxShadow} w-80`}\n\t\t\tstyle={{ fontFamily: theme.fontFamily } as CSSProperties}\n\t\t>\n\t\t\t<h2 className={`mb-4 text-xl font-semibold text-${theme.textColor}`}>\n\t\t\t\tLogin with WebAuthn\n\t\t\t</h2>\n\t\t\t<Input\n\t\t\t\ttype=\"email\"\n\t\t\t\tvalue={email}\n\t\t\t\tonChange={(e) => setEmail(e.target.value)}\n\t\t\t\tplaceholder=\"Email\"\n\t\t\t/>\n\t\t\t<Button onClick={handleLogin} className=\"mt-4\">\n\t\t\t\tLogin\n\t\t\t</Button>\n\t\t\t<Button onClick={handleRegister} color=\"successColor\" className=\"mt-2\">\n\t\t\t\tRegister\n\t\t\t</Button>\n\t\t</motion.div>\n\t);\n};\n","import { Input } from \"@/components\";\nimport { useMoonTokenManager } from \"@/hooks\";\nimport type { ChatMessage } from \"@/types\";\nimport React, { useEffect, useState } from \"react\";\nimport { useMoonSDK } from \"../../hooks/old/useMoonSDK\";\nimport ChatBubble from \"./components/ChatBubble\";\nimport { testMessages } from \"./testData/chatTestData\";\n\nexport type ChatBotProps = {\n\tclassName?: string;\n\tcontainerProps?: React.HTMLAttributes<HTMLDivElement>;\n\tmessageBoxProps?: React.HTMLAttributes<HTMLDivElement>;\n\tinputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n\tsendButtonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n\tclearButtonProps?: React.HTMLAttributes<HTMLDivElement>;\n};\n\nexport const ChatBot: React.FC<ChatBotProps> = ({\n\tclassName,\n\tcontainerProps,\n\tmessageBoxProps,\n\tinputProps,\n\tsendButtonProps,\n\tclearButtonProps,\n}) => {\n\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\tconst messageBoxRef = React.useRef<HTMLDivElement>(null);\n\tconst [showMessages, setShowMessages] = useState(false);\n\tconst { chatOpen, wallet, chain, wallets } = useMoonSDK();\n\tconst { tokens } = useMoonTokenManager();\n\n\tconsole.log(\"showMessages\", showMessages);\n\tconst [messages, setMessages] = useState<ChatMessage[]>([\n\t\t{\n\t\t\tid: \"initial\",\n\t\t\ttype: \"userMessage\",\n\t\t\tsender: \"system\",\n\t\t\ttimestamp: new Date(),\n\t\t\tcontent:\n\t\t\t\t\"Hello! I'm Cod3x, your friendly AI assistant. How can I help you today?\",\n\t\t},\n\t\t...testMessages,\n\t]);\n\tconst [userInput, setUserInput] = useState(\"\");\n\n\tuseEffect(() => {\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tif (\n\t\t\t\tcontainerRef.current &&\n\t\t\t\t!containerRef.current.contains(event.target as Node)\n\t\t\t) {\n\t\t\t\tsetShowMessages(false);\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t};\n\t}, [containerRef]);\n\n\tuseEffect(() => {\n\t\tloadMessagesFromLocalStorage();\n\t\tif (messageBoxRef.current) {\n\t\t\tmessageBoxRef.current.scrollTo(0, messageBoxRef.current.scrollHeight);\n\t\t}\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (messages.length > 1) {\n\t\t\tsaveMessagesToLocalStorage();\n\t\t}\n\t}, [messages]);\n\n\tconst handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n\t\tsetUserInput(event.target.value);\n\t};\n\n\tconst clearMessages = () => {\n\t\tsetMessages([]);\n\t\tlocalStorage.removeItem(\"messages\");\n\t};\n\n\tconst saveMessagesToLocalStorage = () => {\n\t\tlocalStorage.setItem(\"messages\", JSON.stringify(messages));\n\t};\n\n\tconst loadMessagesFromLocalStorage = () => {\n\t\tlet storedMessages = JSON.parse(localStorage.getItem(\"messages\") || \"[]\");\n\t\tif (storedMessages.length === 0) {\n\t\t\tstoredMessages = [messages[0]];\n\t\t}\n\t\tsetMessages(storedMessages.filter((msg: ChatMessage) => msg?.content));\n\t};\n\n\tconst sendMessage = async () => {\n\t\tsetShowMessages(true);\n\t\tsetUserInput(\"\");\n\t\tconst userMessage: ChatMessage = {\n\t\t\tid: Date.now().toString(),\n\t\t\ttype: \"userMessage\",\n\t\t\tsender: \"user\",\n\t\t\ttimestamp: new Date(),\n\t\t\tcontent: userInput,\n\t\t};\n\t\tsetMessages([...messages, userMessage]);\n\n\t\ttry {\n\t\t\tconst response = await fetch(\n\t\t\t\t\"https://api.conscience.ngrok.app/conscience/1/Cod3xV2/trigger\",\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\ttext: `User Available Wallets: ${JSON.stringify(\n\t\t\t\t\t\t\twallets,\n\t\t\t\t\t\t)}\\nUser tokens: ${JSON.stringify(\n\t\t\t\t\t\t\ttokens,\n\t\t\t\t\t\t)}\\nUser Selected Wallet: ${wallet}\\n Selected Chain: ${JSON.stringify(\n\t\t\t\t\t\t\tchain,\n\t\t\t\t\t\t)}\\nUser Query:${userInput}`,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t).then((response) => response.json());\n\n\t\t\tlet botMessage: ChatMessage;\n\t\t\ttry {\n\t\t\t\tconst jsonData = JSON.parse(response.data);\n\t\t\t\tif (response.data.includes(\"abiFileName\")) {\n\t\t\t\t\tbotMessage = {\n\t\t\t\t\t\tid: Date.now().toString(),\n\t\t\t\t\t\ttype: \"multiStepTransaction\",\n\t\t\t\t\t\tsender: \"system\",\n\t\t\t\t\t\ttimestamp: new Date(),\n\t\t\t\t\t\tcontent: response.data,\n\t\t\t\t\t\tsteps: jsonData,\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Not a transaction\");\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tbotMessage = {\n\t\t\t\t\tid: Date.now().toString(),\n\t\t\t\t\ttype: \"userMessage\",\n\t\t\t\t\tsender: \"system\",\n\t\t\t\t\ttimestamp: new Date(),\n\t\t\t\t\tcontent: response.data,\n\t\t\t\t};\n\t\t\t}\n\t\t\tsetMessages([...messages, userMessage, botMessage]);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error fetching response:\", error);\n\t\t}\n\t\tmessageBoxRef.current?.scrollTo(0, messageBoxRef.current?.scrollHeight);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\t{...containerProps}\n\t\t\tclassName={`fixed z-40 top-0 right-0 flex justify-center items-center flex-col h-full w-full max-w-[600px] backdrop-blur-md gap-2 transition-all ease-in duration-500 shadow-lg bg-background-secondary ${\n\t\t\t\tchatOpen ? \"top-0 right-0\" : \"top-[120%] right-0\"\n\t\t\t} ${className} ${containerProps?.className || \"\"}`}\n\t\t>\n\t\t\t<div\n\t\t\t\tref={messageBoxRef}\n\t\t\t\t{...messageBoxProps}\n\t\t\t\tclassName={`flex flex-col-reverse overflow-y-auto text-primary-text rounded-lg h-[90%] w-[95%] p-0 m-0 ${\n\t\t\t\t\tmessageBoxProps?.className || \"\"\n\t\t\t\t}`}\n\t\t\t>\n\t\t\t\t{[...messages].reverse().map((msg) => (\n\t\t\t\t\t<ChatBubble key={msg.id} message={msg} />\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t<div className=\"flex justify-between items-center w-[95%] h-[10%] max-w-[90%] relative mb-4\">\n\t\t\t\t<div\n\t\t\t\t\t{...clearButtonProps}\n\t\t\t\t\tonClick={clearMessages}\n\t\t\t\t\tclassName={`absolute bottom-0 right-0 text-xs text-primary-text cursor-pointer hover:text-secondary ${\n\t\t\t\t\t\tclearButtonProps?.className || \"\"\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\tClear Message History\n\t\t\t\t</div>\n\t\t\t\t<Input\n\t\t\t\t\t{...inputProps}\n\t\t\t\t\tonFocus={() => setShowMessages(true)}\n\t\t\t\t\tonMouseEnter={() => setShowMessages(true)}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tplaceholder=\"Message Cod3x\"\n\t\t\t\t\tvalue={userInput}\n\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t\t\t\tsendMessage();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\t{...sendButtonProps}\n\t\t\t\t\tonClick={sendMessage}\n\t\t\t\t\tdisabled={!userInput}\n\t\t\t\t\tonPointerLeave={() => setShowMessages(false)}\n\t\t\t\t\tonMouseLeave={() => setShowMessages(false)}\n\t\t\t\t\tclassName={`absolute bottom-1/2 right-6 translate-x-1/2 translate-y-1/2 p-2 rounded bg-primary text-primary-text font-bold cursor-pointer border border-secondary hover:opacity-80 ${\n\t\t\t\t\t\tsendButtonProps?.className || \"\"\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\tSend\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ChatBot;\n","import { ProtocolInfo } from \"@/types\";\nimport React from \"react\";\n\ninterface Props {\n  message: ProtocolInfo;\n}\n\nconst ProtocolInfoBubble: React.FC<Props> = ({ message }) => (\n  <div>\n    <h3 className=\"font-bold text-lg\">{message.name}</h3>\n    <p className=\"mt-2\">{message.description}</p>\n    <p className=\"mt-2\">TVL: ${message.tvl.toLocaleString()}</p>\n    <p>APY: {message.apy}%</p>\n  </div>\n);\n\nexport default ProtocolInfoBubble;\n","import { PoolInfo } from \"@/types\";\nimport React from \"react\";\n\ninterface Props {\n  message: PoolInfo;\n}\n\nconst PoolInfoBubble: React.FC<Props> = ({ message }) => (\n  <div>\n    <h3 className=\"font-bold text-lg\">{message.name}</h3>\n    <p className=\"mt-2\">Tokens: {message.tokens.join(\", \")}</p>\n    <p className=\"mt-2\">\n      Total Liquidity: ${message.totalLiquidity.toLocaleString()}\n    </p>\n    <p>APY: {message.apy}%</p>\n  </div>\n);\n\nexport default PoolInfoBubble;\n","import React from \"react\";\nimport { TokenInfo } from \"@/types\";\ninterface Props {\n  message: TokenInfo;\n}\n\nconst TokenInfoBubble: React.FC<Props> = ({ message }) => (\n  <div>\n    <h3 className=\"font-bold text-lg\">\n      {message.name} ({message.symbol})\n    </h3>\n    <p className=\"mt-2\">Price: ${message.price.toLocaleString()}</p>\n    <p>Market Cap: ${message.marketCap.toLocaleString()}</p>\n  </div>\n);\n\nexport default TokenInfoBubble;\n","import React from \"react\";\nimport { WalletInfo } from \"@/types\";\n\ninterface Props {\n  message: WalletInfo;\n}\n\nconst WalletInfoBubble: React.FC<Props> = ({ message }) => (\n  <div>\n    <h3 className=\"font-bold text-lg\">Wallet</h3>\n    <p className=\"mt-2\">Address: {message.address}</p>\n    <p>Balance: ${message.balance.toLocaleString()}</p>\n    <ul className=\"mt-2\">\n      {message.tokens.map((token, index) => (\n        <li key={index}>\n          {token.symbol}: {token.balance}\n        </li>\n      ))}\n    </ul>\n  </div>\n);\n\nexport default WalletInfoBubble;\n","import React from \"react\";\nimport { TransactionResultChat } from \"@/types\";\nimport { IconCheck } from \"@/assets/icons\";\n\ninterface Props {\n  message: TransactionResultChat;\n}\n\nconst TransactionResultBubble: React.FC<Props> = ({ message }) => (\n  <div>\n    <h3 className=\"font-bold text-lg flex gap-3\">\n      Transaction {message.status}\n      {message.status === \"success\" && (\n        <span>\n          <IconCheck className=\"w-6 h-6 text-green-500\" />\n        </span>\n      )}\n    </h3>\n    <p className=\"mt-2\">Hash: {message.hash}</p>\n    <p>From: {message.from}</p>\n    <p>To: {message.to}</p>\n    <p>\n      Amount: {message.amount} {message.currency}\n    </p>\n  </div>\n);\n\nexport default TransactionResultBubble;\n","import { PortfolioChange } from \"@/types\";\nimport React from \"react\";\n\ninterface Props {\n  message: PortfolioChange;\n}\n\nconst PortfolioChangeBubble: React.FC<Props> = ({ message }) => (\n  <div>\n    <h3 className=\"font-bold text-lg\">Portfolio Change</h3>\n    <p\n      className={`mt-2 ${\n        message.changePercentage >= 0 ? \"bg-green-100\" : \"bg-red-100\"\n      }`}\n    >\n      Change: {message.changePercentage}%\n    </p>\n    <p>New Total: ${message.newTotal.toLocaleString()}</p>\n  </div>\n);\n\nexport default PortfolioChangeBubble;\n","import React from \"react\";\nimport { HistoricalTransaction } from \"@/types\";\n\ninterface Props {\n  message: HistoricalTransaction;\n}\n\nconst HistoricalTransactionBubble: React.FC<Props> = ({ message }) => (\n  <div>\n    <h3 className=\"font-bold text-lg\">Transaction History</h3>\n    <ul className=\"mt-2\">\n      {message.transactions.map((tx, index) => (\n        <li key={index} className=\"mb-1\">\n          {tx.date.toLocaleDateString()}: {tx.type} {tx.amount} {tx.currency}\n        </li>\n      ))}\n    </ul>\n  </div>\n);\n\nexport default HistoricalTransactionBubble;\n","// import { Line } from \"react-chartjs-2\";\nimport type { HistoricalPerformance } from \"@/types\";\nimport type React from \"react\";\n\ninterface Props {\n\tmessage: HistoricalPerformance;\n}\n\nconst HistoricalPerformanceBubble: React.FC<Props> = ({ message }) => (\n\t<div>\n\t\t<h3 className=\"font-bold text-lg\">{message.token} Performance</h3>\n\t\t<div className=\"mt-4\">\n\t\t\t{/* <Line\n        data={{\n          labels: message.data.map((d) => d.date.toLocaleDateString()),\n          datasets: [\n            {\n              label: \"Price\",\n              data: message.data.map((d) => d.price),\n              borderColor: \"rgb(75, 192, 192)\",\n              tension: 0.1,\n            },\n          ],\n        }}\n        options={{\n          responsive: true,\n          scales: {\n            y: {\n              beginAtZero: false,\n            },\n          },\n        }}\n      /> */}\n\t\t</div>\n\t</div>\n);\n\nexport default HistoricalPerformanceBubble;\n","import type { ChainInfo } from \"@/types\";\nimport type React from \"react\";\n\ninterface Props {\n\tmessage: ChainInfo;\n}\n\nconst ChainInfoBubble: React.FC<Props> = ({ message }) => (\n\t<div>\n\t\t<h3 className=\"font-bold text-lg\">{message.name}</h3>\n\t\t<p className=\"mt-2\">Native Currency: {message.nativeCurrency}</p>\n\t\t<p>Block Time: {message.blockTime} seconds</p>\n\t\t<p>Gas Price: {message.gasPrice} Gwei</p>\n\t</div>\n);\n\nexport default ChainInfoBubble;\n","import { ChatMessage } from \"@/types\";\nimport React from \"react\";\n\ntype UserMessageBubbleProps = {\n  message: ChatMessage;\n  containerProps?: React.HTMLAttributes<HTMLDivElement>;\n  contentProps?: React.HTMLAttributes<HTMLDivElement>;\n};\n\nconst UserMessageBubble: React.FC<UserMessageBubbleProps> = ({\n  message,\n  containerProps,\n  contentProps,\n}) => (\n  <div\n    {...containerProps}\n    className={`flex flex-col justify-start items-end gap-2 p-2 rounded m-1 bg-gray-200 text-black ${\n      containerProps?.className || \"\"\n    }`}\n  >\n    <div {...contentProps} className={`p-1 ${contentProps?.className || \"\"}`}>\n      {message.content}\n    </div>\n  </div>\n);\n\nexport default UserMessageBubble;\n","// src/components/chat/bubbles/MultiStepTransactionBubble.tsx\n\nimport React, { useState } from \"react\";\n// import { ethers } from \"ethers\";\nimport { MultiStepTransactionMessage, TransactionStep } from \"@/types\";\n\ntype MultiStepTransactionBubbleProps = {\n  message: MultiStepTransactionMessage;\n  containerProps?: React.HTMLAttributes<HTMLDivElement>;\n  stepProps?: React.HTMLAttributes<HTMLDivElement>;\n  buttonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n};\n\nconst MultiStepTransactionBubble: React.FC<MultiStepTransactionBubbleProps> = ({\n  message,\n  containerProps,\n  stepProps,\n  buttonProps,\n}) => {\n  const [executedSteps, setExecutedSteps] = useState<number[]>([]);\n\n  const executeStep = async (step: TransactionStep, index: number) => {\n    try {\n      //   // Assuming you have a way to get the current provider and signer\n      //   const provider = new ethers.providers.Web3Provider(window.ethereum);\n      //   const signer = provider.getSigner();\n\n      //   const tx = await signer.sendTransaction(step.transaction);\n      //   await tx.wait();\n      console.log(step);\n      setExecutedSteps([...executedSteps, index]);\n      console.log(`Step ${index + 1} executed successfully`);\n    } catch (error) {\n      console.error(`Error executing step ${index + 1}:`, error);\n    }\n  };\n\n  return (\n    <div\n      {...containerProps}\n      className={`text-black my-2  ${containerProps?.className || \"\"}`}\n    >\n      <h3 className=\"text-lg font-bold mb-2\">Multi-Step Transaction</h3>\n      {message.steps.map((step, index) => (\n        <div\n          key={index}\n          {...stepProps}\n          className={`border-b border-gray-400 pb-4 mb-4 last:border-b-0 last:pb-0 last:mb-0 ${\n            stepProps?.className || \"\"\n          }`}\n        >\n          <h4 className=\"font-semibold text-md mb-2\">{step.title}</h4>\n          <p className=\"text-sm mb-2\">{step.description}</p>\n          <p className=\"text-sm mb-2\">\n            <strong>Success Condition:</strong> {step.successCondition}\n          </p>\n          <button\n            {...buttonProps}\n            onClick={() => executeStep(step, index)}\n            disabled={executedSteps.includes(index)}\n            className={`px-4 py-2 rounded ${\n              executedSteps.includes(index)\n                ? \"bg-gray-300 cursor-not-allowed\"\n                : \"bg-blue-500 text-white hover:bg-blue-600\"\n            } ${buttonProps?.className || \"\"}`}\n          >\n            {executedSteps.includes(index) ? \"Executed\" : \"Execute Step\"}\n          </button>\n        </div>\n      ))}\n    </div>\n  );\n};\n\nexport default MultiStepTransactionBubble;\n","// src/components/chat/MessageContainer.tsx\n\nimport React, { ReactNode } from \"react\";\n\ninterface MessageContainerProps {\n  children: ReactNode;\n  sender: \"user\" | \"system\";\n  timestamp: Date;\n}\n\nconst MessageContainer: React.FC<MessageContainerProps> = ({\n  children,\n  sender,\n  timestamp,\n}) => {\n  const isUser = sender === \"user\";\n\n  return (\n    <div className={`w-[100%] ${isUser ? \"ml-auto\" : \"mr-auto\"} mb-4`}>\n      <div\n        className={`rounded-sm p-4 shadow-md ${\n          isUser ? \"bg-gray-600 text-white\" : \"bg-gray-200 text-black\"\n        }`}\n      >\n        {children}\n      </div>\n      <div\n        className={`text-xs text-gray-500 mt-1 ${\n          isUser ? \"text-right\" : \"text-left\"\n        }`}\n      >\n        {timestamp.toLocaleString()}\n      </div>\n    </div>\n  );\n};\n\nexport default MessageContainer;\n","import React from \"react\";\nimport { ChatMessage } from \"@/types\";\nimport ProtocolInfoBubble from \"./bubbles/ProtocolInfoBubble\";\nimport PoolInfoBubble from \"./bubbles/PoolInfoBubble\";\nimport TokenInfoBubble from \"./bubbles/TokenInfoBubble\";\nimport WalletInfoBubble from \"./bubbles/WalletInfoBubble\";\nimport TransactionResultBubble from \"./bubbles/TransactionResultBubble\";\nimport PortfolioChangeBubble from \"./bubbles/PortfolioChangeBubble\";\nimport HistoricalTransactionBubble from \"./bubbles/HistoricalTransactionBubble\";\nimport HistoricalPerformanceBubble from \"./bubbles/HistoricalPerformanceBubble\";\nimport ChainInfoBubble from \"./bubbles/ChainInfoBubble\";\nimport UserMessageBubble from \"./bubbles/UserMessageBubble\";\nimport MultiStepTransactionBubble from \"./bubbles/MultiStepTransactionBubble\";\nimport MessageContainer from \"./MessageContainer\";\n\ninterface ChatBubbleProps {\n  message: ChatMessage;\n}\n\nconst bubbleComponents: { [key: string]: any } = {\n  poolInfo: PoolInfoBubble,\n  chainInfo: ChainInfoBubble,\n  tokenInfo: TokenInfoBubble,\n  walletInfo: WalletInfoBubble,\n  transactionResult: TransactionResultBubble,\n  portfolioChange: PortfolioChangeBubble,\n  historicalTransaction: HistoricalTransactionBubble,\n  historicalPerformance: HistoricalPerformanceBubble,\n  protocolInfo: ProtocolInfoBubble,\n  userMessage: UserMessageBubble,\n  multiStepTransaction: MultiStepTransactionBubble,\n};\n\nconst ChatBubble: React.FC<ChatBubbleProps> = ({ message }) => {\n  const BubbleComponent = bubbleComponents[message.type];\n\n  if (!BubbleComponent) {\n    return <div>Unsupported message type</div>;\n  }\n\n  return (\n    <MessageContainer sender={message.sender} timestamp={message.timestamp}>\n      <BubbleComponent message={message} />\n    </MessageContainer>\n  );\n};\n\nexport default ChatBubble;\n","import { ChatMessage } from \"@/types\";\n\nexport const testMessages: ChatMessage[] = [\n  {\n    id: \"1\",\n    type: \"protocolInfo\",\n    sender: \"system\",\n    timestamp: new Date(),\n    name: \"Uniswap\",\n    description: \"Decentralized trading protocol for ERC20 tokens\",\n    tvl: 1000000000,\n    apy: 5.2,\n  },\n  {\n    id: \"2\",\n    type: \"poolInfo\",\n    sender: \"system\",\n    timestamp: new Date(),\n    name: \"ETH/USDC\",\n    tokens: [\"ETH\", \"USDC\"],\n    totalLiquidity: 500000000,\n    apy: 10.5,\n  },\n  {\n    id: \"3\",\n    type: \"chainInfo\",\n    sender: \"system\",\n    timestamp: new Date(),\n    name: \"Ethereum\",\n    nativeCurrency: \"ETH\",\n    blockTime: 15,\n    gasPrice: 20,\n  },\n  {\n    id: \"4\",\n    type: \"tokenInfo\",\n    sender: \"system\",\n    timestamp: new Date(),\n    name: \"Ethereum\",\n    symbol: \"ETH\",\n    price: 3500,\n    marketCap: 400000000000,\n  },\n  {\n    id: \"5\",\n    type: \"walletInfo\",\n    sender: \"system\",\n    timestamp: new Date(),\n    address: \"0x1234...5678\",\n    balance: 10.5,\n    tokens: [\n      { symbol: \"ETH\", balance: 10.5 },\n      { symbol: \"USDC\", balance: 1000 },\n    ],\n  },\n  {\n    id: \"6\",\n    type: \"transactionResult\",\n    sender: \"system\",\n    timestamp: new Date(),\n    status: \"success\",\n    hash: \"0xabcd...1234\",\n    from: \"0x1234...5678\",\n    to: \"0x5678...1234\",\n    amount: 1.5,\n    currency: \"ETH\",\n  },\n  {\n    id: \"7\",\n    type: \"portfolioChange\",\n    sender: \"system\",\n    timestamp: new Date(),\n    changePercentage: 5.3,\n    newTotal: 105300,\n  },\n  {\n    id: \"8\",\n    type: \"historicalTransaction\",\n    sender: \"system\",\n    timestamp: new Date(),\n    transactions: [\n      { date: new Date(\"2023-05-01\"), type: \"buy\", amount: 1, currency: \"ETH\" },\n      {\n        date: new Date(\"2023-05-02\"),\n        type: \"sell\",\n        amount: 0.5,\n        currency: \"ETH\",\n      },\n    ],\n  },\n  {\n    id: \"9\",\n    type: \"historicalPerformance\",\n    sender: \"system\",\n    timestamp: new Date(),\n    token: \"ETH\",\n    data: [\n      { date: new Date(\"2023-05-01\"), price: 3000 },\n      { date: new Date(\"2023-05-02\"), price: 3100 },\n      { date: new Date(\"2023-05-03\"), price: 3200 },\n    ],\n  },\n  {\n    id: \"10\",\n    type: \"multiStepTransaction\",\n    sender: \"system\",\n    timestamp: new Date(),\n    steps: [\n      {\n        title: \"Approve USDC\",\n        description: \"Approve USDC spending for the swap\",\n        successCondition: \"USDC allowance increased\",\n        transaction: {\n          to: \"0xUSDC_CONTRACT_ADDRESS\",\n          data: \"0x095ea7b3...\", // Approve function ABI-encoded\n          value: \"0\",\n        },\n      },\n      {\n        title: \"Swap USDC for ETH\",\n        description: \"Swap 1000 USDC for ETH on Uniswap\",\n        successCondition: \"ETH balance increased\",\n        transaction: {\n          to: \"0xUNISWAP_ROUTER_ADDRESS\",\n          data: \"0x7ff36ab5...\", // swapExactTokensForETH function ABI-encoded\n          value: \"0\",\n        },\n      },\n    ],\n  },\n];\n","import { useErc20 } from \"@/hooks\";\nimport { motion } from \"framer-motion\";\nimport React, { useEffect, useState } from \"react\";\n\n/**\n * Props for the ERC20AllowanceDisplay component.\n *\n * @interface ERC20AllowanceDisplayProps\n * @property {string} owner - The address of the token owner.\n * @property {string} spender - The address of the spender.\n * @property {string} tokenAddress - The address of the ERC20 token contract.\n * @property {string} chainId - The ID of the blockchain network.\n * @property {string} [className] - Optional CSS class for styling the component.\n */\nexport interface ERC20AllowanceDisplayProps {\n\towner: string;\n\tspender: string;\n\ttokenAddress: string;\n\tchainId: string;\n\tclassName?: string;\n}\n\n/**\n * ERC20AllowanceDisplay is a React functional component that displays the allowance of an ERC20 token.\n * It fetches the allowance for a given owner and spender from the blockchain and displays it.\n *\n * @component\n * @param {ERC20AllowanceDisplayProps} props - The properties for the component.\n * @param {string} props.owner - The address of the token owner.\n * @param {string} props.spender - The address of the spender.\n * @param {string} props.tokenAddress - The address of the ERC20 token contract.\n * @param {number} props.chainId - The ID of the blockchain network.\n * @param {string} [props.className] - Optional additional CSS class names to apply to the component.\n *\n * @returns {JSX.Element} The rendered component displaying the allowance.\n */\nexport const ERC20AllowanceDisplay: React.FC<ERC20AllowanceDisplayProps> = ({\n\towner,\n\tspender,\n\ttokenAddress,\n\tchainId,\n\tclassName = \"\",\n}) => {\n\tconst { allowanceErc20 } = useErc20();\n\tconst [allowance, setAllowance] = useState<string>(\"\");\n\n\tuseEffect(() => {\n\t\tconst fetchAllowance = async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await allowanceErc20({\n\t\t\t\t\taccount: owner,\n\t\t\t\t\taddress: tokenAddress,\n\t\t\t\t\towner,\n\t\t\t\t\tspender,\n\t\t\t\t\tchainId,\n\t\t\t\t});\n\t\t\t\tsetAllowance(result);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to fetch allowance:\", error);\n\t\t\t}\n\t\t};\n\n\t\tfetchAllowance();\n\t}, [owner, spender, tokenAddress, chainId]);\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName={`text-lg font-semibold ${className}`}\n\t\t\tinitial={{ opacity: 0, y: -20 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\ttransition={{ duration: 0.5 }}\n\t\t>\n\t\t\tAllowance: {allowance}\n\t\t</motion.div>\n\t);\n};\n\nexport default ERC20AllowanceDisplay;\n","import { Button } from '@/components';\nimport { useErc20 } from '@/hooks';\nimport React from 'react';\n\n/**\n * Props for the ERC20ApprovalButton component.\n *\n * @interface ERC20ApprovalButtonProps\n * @property {string} owner - The address of the token owner.\n * @property {string} spender - The address of the spender.\n * @property {string} tokenAddress - The address of the ERC20 token contract.\n * @property {number} amount - The amount of tokens to approve.\n * @property {string} chainId - The ID of the blockchain network.\n * @property {string} [className] - Optional CSS class for styling the button.\n */\nexport interface ERC20ApprovalButtonProps {\n  owner: string;\n  spender: string;\n  tokenAddress: string;\n  amount: number;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC20ApprovalButton component allows users to approve a token spend for a specified ERC20 token.\n *\n * @component\n * @param {ERC20ApprovalButtonProps} props - The properties for the ERC20ApprovalButton component.\n * @param {string} props.owner - The address of the token owner.\n * @param {string} props.spender - The address of the spender who is being approved to spend the tokens.\n * @param {string} props.tokenAddress - The address of the ERC20 token contract.\n * @param {string} props.amount - The amount of tokens to approve for spending.\n * @param {number} props.chainId - The ID of the blockchain network.\n * @param {string} [props.className] - Optional CSS class name to apply to the button.\n *\n * @returns {JSX.Element} A button that, when clicked, triggers the approval of token spend.\n *\n * @example\n * <ERC20ApprovalButton\n *   owner=\"0xOwnerAddress\"\n *   spender=\"0xSpenderAddress\"\n *   tokenAddress=\"0xTokenAddress\"\n *   amount=\"1000000000000000000\"\n *   chainId={1}\n * />\n */\nexport const ERC20ApprovalButton: React.FC<ERC20ApprovalButtonProps> = ({\n  owner,\n  spender,\n  tokenAddress,\n  amount,\n  chainId,\n  className = '',\n}) => {\n  const { approveTokenSpendIfNeeded } = useErc20();\n\n  const handleApproval = async () => {\n    try {\n      await approveTokenSpendIfNeeded(\n        owner,\n        spender,\n        tokenAddress,\n        amount,\n        chainId\n      );\n    } catch (error) {\n      console.error('Approval failed:', error);\n    }\n  };\n\n  return (\n    <Button className={className} onClick={handleApproval}>\n      Approve Token Spend\n    </Button>\n  );\n};\n\nexport default ERC20ApprovalButton;\n","import { useErc20 } from '@/hooks';\nimport { motion } from 'framer-motion';\nimport React, { useEffect, useState } from 'react';\n\n/**\n * Props for the ERC20BalanceDisplay component.\n *\n * @interface ERC20BalanceDisplayProps\n * @property {string} account - The account address to display the balance for.\n * @property {string} tokenAddress - The address of the ERC20 token contract.\n * @property {string} chainId - The ID of the blockchain network.\n * @property {string} [className] - Optional CSS class name for styling the component.\n */\nexport interface ERC20BalanceDisplayProps {\n  account: string;\n  tokenAddress: string;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC20BalanceDisplay is a React functional component that displays the balance of an ERC20 token for a given account.\n *\n * @param {ERC20BalanceDisplayProps} props - The properties for the component.\n * @param {string} props.account - The account address to fetch the balance for.\n * @param {string} props.tokenAddress - The address of the ERC20 token contract.\n * @param {number} props.chainId - The chain ID of the blockchain network.\n * @param {string} [props.className] - Optional additional class names for styling the component.\n *\n * @returns {JSX.Element} The rendered component displaying the ERC20 token balance.\n *\n * @example\n * ```tsx\n * <ERC20BalanceDisplay\n *   account=\"0x123...\"\n *   tokenAddress=\"0xabc...\"\n *   chainId={1}\n *   className=\"custom-class\"\n * />\n * ```\n */\nexport const ERC20BalanceDisplay: React.FC<ERC20BalanceDisplayProps> = ({\n  account,\n  tokenAddress,\n  chainId,\n  className = '',\n}) => {\n  const { balanceOfErc20 } = useErc20();\n  const [balance, setBalance] = useState<string>('');\n\n  useEffect(() => {\n    const fetchBalance = async () => {\n      try {\n        const result = await balanceOfErc20({\n          account,\n          address: tokenAddress,\n          chainId,\n        });\n        setBalance(result.balance);\n      } catch (error) {\n        console.error('Failed to fetch balance:', error);\n      }\n    };\n\n    fetchBalance();\n  }, [account, tokenAddress, chainId]);\n\n  return (\n    <motion.div\n      className={`text-lg font-semibold ${className}`}\n      initial={{ opacity: 0, y: -20 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.5 }}\n    >\n      Balance: {balance}\n    </motion.div>\n  );\n};\n\nexport default ERC20BalanceDisplay;\n","import { useErc20 } from '@/hooks';\nimport React, { useEffect, useState } from 'react';\n\nimport { motion } from 'framer-motion';\n\n/**\n * Props for the ERC20TokenInfo component.\n *\n * @interface ERC20TokenInfoProps\n * @property {string} tokenAddress - The address of the ERC20 token.\n * @property {string} chainId - The ID of the blockchain network.\n * @property {string} [className] - Optional CSS class for styling.\n */\nexport interface ERC20TokenInfoProps {\n  tokenAddress: string;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC20TokenInfo component fetches and displays information about an ERC20 token.\n *\n * @component\n * @param {ERC20TokenInfoProps} props - The properties for the component.\n * @param {string} props.tokenAddress - The address of the ERC20 token.\n * @param {number} props.chainId - The chain ID where the token is deployed.\n * @param {string} [props.className] - Optional additional class names for styling.\n *\n * @returns {JSX.Element} A React component that displays the token's name, symbol, and decimals.\n *\n * @example\n * ```tsx\n * <ERC20TokenInfo tokenAddress=\"0x1234567890abcdef\" chainId={1} />\n * ```\n */\nexport const ERC20TokenInfo: React.FC<ERC20TokenInfoProps> = ({\n  tokenAddress,\n  chainId,\n  className = '',\n}) => {\n  const { getNameErc20, getSymbolErc20, getDecimalsErc20 } = useErc20();\n  const [name, setName] = useState<string>('');\n  const [symbol, setSymbol] = useState<string>('');\n  const [decimals, setDecimals] = useState<number>(0);\n\n  useEffect(() => {\n    const fetchTokenInfo = async () => {\n      try {\n        const [nameResult, symbolResult, decimalsResult] = await Promise.all([\n          getNameErc20({\n            address: tokenAddress,\n            chainId,\n            account: '0x0000000000000000000000000000000000000000',\n          }),\n          getSymbolErc20({\n            address: tokenAddress,\n            chainId,\n            account: '0x0000000000000000000000000000000000000000',\n          }),\n          getDecimalsErc20({\n            address: tokenAddress,\n            chainId,\n            account: '0x0000000000000000000000000000000000000000',\n          }),\n        ]);\n        setName(nameResult);\n        setSymbol(symbolResult);\n        setDecimals(decimalsResult);\n      } catch (error) {\n        console.error('Failed to fetch token info:', error);\n      }\n    };\n\n    fetchTokenInfo();\n  }, [tokenAddress, chainId]);\n\n  return (\n    <motion.div\n      className={`space-y-2 ${className}`}\n      initial={{ opacity: 0, y: -20 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.5 }}\n    >\n      <div className=\"text-lg font-semibold\">Token Info</div>\n      <div>Name: {name}</div>\n      <div>Symbol: {symbol}</div>\n      <div>Decimals: {decimals}</div>\n    </motion.div>\n  );\n};\n\nexport default ERC20TokenInfo;\n","import { useErc20 } from '@/hooks';\nimport { motion } from 'framer-motion';\nimport React, { useEffect, useState } from 'react';\n\n/**\n * Props for the ERC20TotalSupplyDisplay component.\n *\n * @interface ERC20TotalSupplyDisplayProps\n * @property {string} tokenAddress - The address of the ERC20 token.\n * @property {string} chainId - The ID of the blockchain network.\n * @property {string} [className] - Optional CSS class name for styling.\n */\nexport interface ERC20TotalSupplyDisplayProps {\n  tokenAddress: string;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC20TotalSupplyDisplay is a React functional component that displays the total supply of an ERC20 token.\n * It fetches the total supply using the `getTotalSupplyErc20` function from the `useErc20` hook.\n * The total supply is fetched based on the provided `tokenAddress` and `chainId` props.\n *\n * @component\n * @param {ERC20TotalSupplyDisplayProps} props - The properties for the component.\n * @param {string} props.tokenAddress - The address of the ERC20 token.\n * @param {number} props.chainId - The chain ID of the blockchain network.\n * @param {string} [props.className] - Additional CSS classes to apply to the component.\n *\n * @example\n * <ERC20TotalSupplyDisplay tokenAddress=\"0x...\" chainId={1} className=\"my-class\" />\n *\n * @returns {JSX.Element} The rendered component displaying the total supply of the ERC20 token.\n */\nexport const ERC20TotalSupplyDisplay: React.FC<\n  ERC20TotalSupplyDisplayProps\n> = ({ tokenAddress, chainId, className = '' }) => {\n  const { getTotalSupplyErc20 } = useErc20();\n  const [totalSupply, setTotalSupply] = useState<string>('');\n\n  useEffect(() => {\n    const fetchTotalSupply = async () => {\n      try {\n        const result = await getTotalSupplyErc20({\n          account: '0x0000000000000000000000000000000000000000', // Use a dummy address to get the total supply\n          address: tokenAddress,\n          chainId,\n        });\n        setTotalSupply(result);\n      } catch (error) {\n        console.error('Failed to fetch total supply:', error);\n      }\n    };\n\n    fetchTotalSupply();\n  }, [tokenAddress, chainId]);\n\n  return (\n    <motion.div\n      className={`text-lg font-semibold ${className}`}\n      initial={{ opacity: 0, y: -20 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.5 }}\n    >\n      Total Supply: {totalSupply}\n    </motion.div>\n  );\n};\n\nexport default ERC20TotalSupplyDisplay;\n","import { Button, Input } from '@/components';\nimport { useErc20 } from '@/hooks';\nimport { motion } from 'framer-motion';\nimport React, { useState } from 'react';\n\n/**\n * Props for the ERC20TransferForm component.\n *\n * @interface ERC20TransferFormProps\n * @property {string} accountName - The name of the account initiating the transfer.\n * @property {string} tokenAddress - The address of the ERC20 token contract.\n * @property {string} chainId - The ID of the blockchain network.\n * @property {string} [className] - Optional CSS class for custom styling.\n */\nexport interface ERC20TransferFormProps {\n  accountName: string;\n  tokenAddress: string;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC20TransferForm is a React functional component that renders a form for transferring ERC20 tokens.\n *\n * @param {ERC20TransferFormProps} props - The properties for the ERC20TransferForm component.\n * @param {string} props.accountName - The name of the account initiating the transfer.\n * @param {string} props.tokenAddress - The address of the ERC20 token contract.\n * @param {number} props.chainId - The ID of the blockchain network.\n * @param {string} [props.className] - Optional additional class names for styling the form.\n *\n * @returns {JSX.Element} The rendered ERC20 transfer form component.\n *\n * @example\n * ```tsx\n * <ERC20TransferForm\n *   accountName=\"myAccount\"\n *   tokenAddress=\"0x1234567890abcdef\"\n *   chainId={1}\n *   className=\"my-custom-class\"\n * />\n * ```\n */\nexport const ERC20TransferForm: React.FC<ERC20TransferFormProps> = ({\n  accountName,\n  tokenAddress,\n  chainId,\n  className = '',\n}) => {\n  const { transferErc20 } = useErc20();\n  const [recipient, setRecipient] = useState('');\n  const [amount, setAmount] = useState('');\n\n  const handleTransfer = async (e: React.FormEvent) => {\n    e.preventDefault();\n    try {\n      await transferErc20({\n        accountName,\n        transaction: {\n          to: recipient,\n          amount,\n          contract_address: tokenAddress,\n          chain_id: chainId,\n          broadcast: true,\n          value: '0',\n        },\n      });\n    } catch (error) {\n      console.error('Transfer failed:', error);\n    }\n  };\n\n  return (\n    <motion.form\n      className={`space-y-4 ${className}`}\n      onSubmit={handleTransfer}\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      transition={{ duration: 0.5 }}\n    >\n      <Input\n        type=\"text\"\n        value={recipient}\n        onChange={(e) => setRecipient(e.target.value)}\n        placeholder=\"Recipient Address\"\n        className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n      />\n      <Input\n        type=\"text\"\n        value={amount}\n        onChange={(e) => setAmount(e.target.value)}\n        placeholder=\"Amount\"\n        className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n      />\n      <Button type=\"submit\">Transfer</Button>\n    </motion.form>\n  );\n};\n\nexport default ERC20TransferForm;\n","import { useErc721 } from '@/hooks';\nimport { motion } from 'framer-motion';\nimport React, { useEffect, useState } from 'react';\n\n/**\n * Props for the ERC721ApprovedDisplay component.\n *\n * @interface ERC721ApprovedDisplayProps\n *\n * @property {string} tokenId - The ID of the token to display.\n * @property {string} tokenAddress - The address of the token contract.\n * @property {string} chainId - The ID of the blockchain network.\n * @property {string} [className] - Optional CSS class name for styling the component.\n */\nexport interface ERC721ApprovedDisplayProps {\n  tokenId: string;\n  tokenAddress: string;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC721ApprovedDisplay component fetches and displays the approved address for a given ERC721 token.\n *\n * @component\n * @param {ERC721ApprovedDisplayProps} props - The properties for the component.\n * @param {string} props.tokenId - The ID of the ERC721 token.\n * @param {string} props.tokenAddress - The address of the ERC721 token contract.\n * @param {number} props.chainId - The ID of the blockchain network.\n * @param {string} [props.className] - Additional CSS classes to apply to the component.\n *\n * @returns {JSX.Element} The rendered component displaying the approved address.\n *\n * @example\n * <ERC721ApprovedDisplay\n *   tokenId=\"1\"\n *   tokenAddress=\"0x1234567890abcdef1234567890abcdef12345678\"\n *   chainId={1}\n *   className=\"my-custom-class\"\n * />\n */\nexport const ERC721ApprovedDisplay: React.FC<ERC721ApprovedDisplayProps> = ({\n  tokenId,\n  tokenAddress,\n  chainId,\n  className = '',\n}) => {\n  const { getErc721Approved } = useErc721();\n  const [approvedAddress, setApprovedAddress] = useState<string>('');\n\n  useEffect(() => {\n    const fetchApproved = async () => {\n      try {\n        const result = await getErc721Approved({\n          tokenId,\n          address: tokenAddress,\n          chainId,\n        });\n        setApprovedAddress(result.transaction?.to || '');\n      } catch (error) {\n        console.error('Failed to fetch ERC721 approved address:', error);\n      }\n    };\n\n    fetchApproved();\n  }, [tokenId, tokenAddress, chainId]);\n\n  return (\n    <motion.div\n      className={`text-lg font-semibold ${className}`}\n      initial={{ opacity: 0, y: -20 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.5 }}\n    >\n      ERC721 Approved Address: {approvedAddress}\n    </motion.div>\n  );\n};\n\nexport default ERC721ApprovedDisplay;\n","import { useErc721 } from '@/hooks';\nimport { motion } from 'framer-motion';\nimport React, { useEffect, useState } from 'react';\n\n/**\n * Props for the ERC721BalanceDisplay component.\n *\n * @interface ERC721BalanceDisplayProps\n * @property {string} account - The account address to check the balance for.\n * @property {string} tokenAddress - The address of the ERC721 token contract.\n * @property {string} chainId - The ID of the blockchain network.\n * @property {string} [className] - Optional CSS class name for styling the component.\n */\nexport interface ERC721BalanceDisplayProps {\n  account: string;\n  tokenAddress: string;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC721BalanceDisplay component displays the balance of ERC721 tokens for a given account.\n *\n * @component\n * @param {ERC721BalanceDisplayProps} props - The properties for the component.\n * @param {string} props.account - The account address to fetch the balance for.\n * @param {string} props.tokenAddress - The address of the ERC721 token contract.\n * @param {number} props.chainId - The chain ID of the blockchain network.\n * @param {string} [props.className] - Additional CSS classes to apply to the component.\n *\n * @returns {React.FC<ERC721BalanceDisplayProps>} A React functional component that displays the ERC721 token balance.\n *\n * @example\n * <ERC721BalanceDisplay\n *   account=\"0x123...\"\n *   tokenAddress=\"0xabc...\"\n *   chainId={1}\n *   className=\"my-custom-class\"\n * />\n */\nexport const ERC721BalanceDisplay: React.FC<ERC721BalanceDisplayProps> = ({\n  account,\n  tokenAddress,\n  chainId,\n  className = '',\n}) => {\n  const { getErc721BalanceOf } = useErc721();\n  const [balance, setBalance] = useState<string>('');\n\n  useEffect(() => {\n    const fetchBalance = async () => {\n      try {\n        const result = await getErc721BalanceOf({\n          account,\n          address: tokenAddress,\n          chainId,\n        });\n        setBalance(result.balance);\n      } catch (error) {\n        console.error('Failed to fetch ERC721 balance:', error);\n      }\n    };\n\n    fetchBalance();\n  }, [account, tokenAddress, chainId]);\n\n  return (\n    <motion.div\n      className={`text-lg font-semibold ${className}`}\n      initial={{ opacity: 0, y: -20 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.5 }}\n    >\n      ERC721 Balance: {balance}\n    </motion.div>\n  );\n};\n\nexport default ERC721BalanceDisplay;\n","import { useErc721 } from '@/hooks';\nimport { motion } from 'framer-motion';\nimport React, { useEffect, useState } from 'react';\n\n/**\n * Props for the ERC721IsApprovedForAllDisplay component.\n *\n * @interface ERC721IsApprovedForAllDisplayProps\n *\n * @property {string} owner - The address of the owner of the ERC721 tokens.\n * @property {string} operator - The address of the operator to check approval status for.\n * @property {string} tokenAddress - The address of the ERC721 token contract.\n * @property {string} chainId - The ID of the blockchain network.\n * @property {string} [className] - Optional CSS class name to apply to the component.\n */\nexport interface ERC721IsApprovedForAllDisplayProps {\n  owner: string;\n  operator: string;\n  tokenAddress: string;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC721IsApprovedForAllDisplay component displays the approval status of an ERC721 token.\n *\n * @component\n * @param {ERC721IsApprovedForAllDisplayProps} props - The properties for the component.\n * @param {string} props.owner - The address of the owner of the ERC721 token.\n * @param {string} props.operator - The address of the operator to check approval status for.\n * @param {string} props.tokenAddress - The address of the ERC721 token contract.\n * @param {number} props.chainId - The chain ID of the blockchain network.\n * @param {string} [props.className] - Additional CSS classes to apply to the component.\n *\n * @returns {JSX.Element} The rendered component displaying the approval status.\n *\n * @example\n * <ERC721IsApprovedForAllDisplay\n *   owner=\"0x123...\"\n *   operator=\"0xabc...\"\n *   tokenAddress=\"0xdef...\"\n *   chainId={1}\n * />\n */\nexport const ERC721IsApprovedForAllDisplay: React.FC<\n  ERC721IsApprovedForAllDisplayProps\n> = ({ owner, operator, tokenAddress, chainId, className = '' }) => {\n  const { getErc721IsApprovedForAll } = useErc721();\n  const [isApproved, setIsApproved] = useState<boolean | null>(null);\n\n  useEffect(() => {\n    const fetchApprovalStatus = async () => {\n      try {\n        const result = await getErc721IsApprovedForAll({\n          owner,\n          operator,\n          address: tokenAddress,\n          chainId,\n        });\n        setIsApproved(result.isApproved);\n      } catch (error) {\n        console.error('Failed to fetch ERC721 approval status:', error);\n      }\n    };\n\n    fetchApprovalStatus();\n  }, [owner, operator, tokenAddress, chainId]);\n\n  return (\n    <motion.div\n      className={`text-lg font-semibold ${className}`}\n      initial={{ opacity: 0, y: -20 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.5 }}\n    >\n      ERC721 Is Approved For All:{' '}\n      {isApproved === null ? 'Loading...' : isApproved.toString()}\n    </motion.div>\n  );\n};\n\nexport default ERC721IsApprovedForAllDisplay;\n","import { useErc721 } from '@/hooks';\nimport { motion } from 'framer-motion';\nimport React, { useEffect, useState } from 'react';\n\n/**\n * Props for the ERC721NameDisplay component.\n *\n * @property tokenAddress - The address of the ERC721 token contract.\n * @property chainId - The ID of the blockchain network.\n * @property className - Optional CSS class name for styling the component.\n */\nexport interface ERC721NameDisplayProps {\n  tokenAddress: string;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC721NameDisplay component displays the name of an ERC721 token.\n *\n * @component\n * @param {ERC721NameDisplayProps} props - The properties for the component.\n * @param {string} props.tokenAddress - The address of the ERC721 token.\n * @param {number} props.chainId - The chain ID where the token is deployed.\n * @param {string} [props.className] - Additional CSS classes to apply to the component.\n *\n * @returns {React.FC<ERC721NameDisplayProps>} A React functional component that displays the ERC721 token name.\n *\n * @example\n * <ERC721NameDisplay tokenAddress=\"0x123...\" chainId={1} className=\"custom-class\" />\n */\nexport const ERC721NameDisplay: React.FC<ERC721NameDisplayProps> = ({\n  tokenAddress,\n  chainId,\n  className = '',\n}) => {\n  const { getErc721Name } = useErc721();\n  const [name, setName] = useState<string>('');\n\n  useEffect(() => {\n    const fetchName = async () => {\n      try {\n        const result = await getErc721Name({\n          address: tokenAddress,\n          chainId,\n        });\n        setName(result.name);\n      } catch (error) {\n        console.error('Failed to fetch ERC721 name:', error);\n      }\n    };\n\n    fetchName();\n  }, [tokenAddress, chainId]);\n\n  return (\n    <motion.div\n      className={`text-lg font-semibold ${className}`}\n      initial={{ opacity: 0, y: -20 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.5 }}\n    >\n      ERC721 Token Name: {name}\n    </motion.div>\n  );\n};\n\nexport default ERC721NameDisplay;\n","import { useErc721 } from '@/hooks';\nimport { motion } from 'framer-motion';\nimport React, { useEffect, useState } from 'react';\n\n/**\n * Props for the ERC721OwnerDisplay component.\n *\n * @property {string} tokenId - The ID of the token.\n * @property {string} tokenAddress - The address of the token contract.\n * @property {string} chainId - The ID of the blockchain network.\n * @property {string} [className] - Optional CSS class name for styling.\n */\nexport interface ERC721OwnerDisplayProps {\n  tokenId: string;\n  tokenAddress: string;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC721OwnerDisplay component displays the owner of an ERC721 token.\n *\n * @component\n * @param {ERC721OwnerDisplayProps} props - The properties for the component.\n * @param {string} props.tokenId - The ID of the ERC721 token.\n * @param {string} props.tokenAddress - The address of the ERC721 token contract.\n * @param {number} props.chainId - The ID of the blockchain network.\n * @param {string} [props.className] - Additional CSS classes to apply to the component.\n *\n * @returns {React.FC} A React functional component that displays the owner of the specified ERC721 token.\n *\n * @example\n * <ERC721OwnerDisplay\n *   tokenId=\"1\"\n *   tokenAddress=\"0x1234567890abcdef1234567890abcdef12345678\"\n *   chainId={1}\n *   className=\"custom-class\"\n * />\n */\nexport const ERC721OwnerDisplay: React.FC<ERC721OwnerDisplayProps> = ({\n  tokenId,\n  tokenAddress,\n  chainId,\n  className = '',\n}) => {\n  const { getErc721OwnerOf } = useErc721();\n  const [owner, setOwner] = useState<string>('');\n\n  useEffect(() => {\n    const fetchOwner = async () => {\n      try {\n        const result = await getErc721OwnerOf({\n          tokenId,\n          address: tokenAddress,\n          chainId,\n        });\n        setOwner(result.owner);\n      } catch (error) {\n        console.error('Failed to fetch ERC721 owner:', error);\n      }\n    };\n\n    fetchOwner();\n  }, [tokenId, tokenAddress, chainId]);\n\n  return (\n    <motion.div\n      className={`text-lg font-semibold ${className}`}\n      initial={{ opacity: 0, y: -20 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.5 }}\n    >\n      ERC721 Token Owner: {owner}\n    </motion.div>\n  );\n};\n\nexport default ERC721OwnerDisplay;\n","import { useErc721 } from '@/hooks';\nimport { motion } from 'framer-motion';\nimport React, { useEffect, useState } from 'react';\n\n/**\n * Props for the ERC721SymbolDisplay component.\n *\n * @property tokenAddress - The address of the ERC721 token.\n * @property chainId - The ID of the blockchain network.\n * @property className - Optional CSS class name for styling.\n */\nexport interface ERC721SymbolDisplayProps {\n  tokenAddress: string;\n  chainId: string;\n  className?: string;\n}\n\n/**\n * ERC721SymbolDisplay is a React functional component that displays the symbol of an ERC721 token.\n * It fetches the symbol using the `getErc721Symbol` function from the `useErc721` hook.\n *\n * @component\n * @param {ERC721SymbolDisplayProps} props - The properties passed to the component.\n * @param {string} props.tokenAddress - The address of the ERC721 token.\n * @param {number} props.chainId - The chain ID where the token resides.\n * @param {string} [props.className] - Additional CSS classes to apply to the component.\n *\n * @returns {JSX.Element} A motion.div element that displays the ERC721 token symbol.\n *\n * @example\n * ```tsx\n * <ERC721SymbolDisplay tokenAddress=\"0x123...\" chainId={1} className=\"my-class\" />\n * ```\n */\nexport const ERC721SymbolDisplay: React.FC<ERC721SymbolDisplayProps> = ({\n  tokenAddress,\n  chainId,\n  className = '',\n}) => {\n  const { getErc721Symbol } = useErc721();\n  const [symbol, setSymbol] = useState<string>('');\n\n  useEffect(() => {\n    const fetchSymbol = async () => {\n      try {\n        const result = await getErc721Symbol({\n          address: tokenAddress,\n          chainId,\n        });\n        setSymbol(result.symbol);\n      } catch (error) {\n        console.error('Failed to fetch ERC721 symbol:', error);\n      }\n    };\n\n    fetchSymbol();\n  }, [tokenAddress, chainId]);\n\n  return (\n    <motion.div\n      className={`text-lg font-semibold ${className}`}\n      initial={{ opacity: 0, y: -20 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.5 }}\n    >\n      ERC721 Token Symbol: {symbol}\n    </motion.div>\n  );\n};\n\nexport default ERC721SymbolDisplay;\n","// components/Core/Button/Button.tsx\nimport { useTheme } from '@/context';\nimport { Theme } from '@/types';\nimport { HTMLMotionProps, motion } from 'framer-motion';\n\nimport React, { CSSProperties } from 'react';\n\nexport type ButtonProps = {\n  color?: keyof Theme;\n  variant?: 'filled' | 'outlined' | 'text';\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button: React.FC<ButtonProps> = ({\n  onClick,\n  color = 'accentColor',\n  variant = 'filled',\n  children,\n  className,\n  ...rest\n}) => {\n  const theme = useTheme();\n\n  const getStyles = () => {\n    const baseStyles = `font-medium px-4 py-2 rounded-${theme.borderRadius} transition-all duration-200`;\n    switch (variant) {\n      case 'filled':\n        return `${baseStyles} bg-${color} text-white hover:opacity-90`;\n      case 'outlined':\n        return `${baseStyles} border-2 border-${color} text-${color} hover:bg-${color} hover:text-white`;\n      case 'text':\n        return `${baseStyles} text-${color} hover:bg-${color} hover:bg-opacity-10`;\n    }\n  };\n  const buttonStyle = getStyles();\n\n  return (\n    <motion.button\n      whileHover={{ scale: 1.05 }}\n      whileTap={{ scale: 0.95 }}\n      className={`${buttonStyle} ${className}`}\n      onClick={onClick}\n      style={{ fontFamily: theme.fontFamily } as CSSProperties}\n      {...(rest as HTMLMotionProps<'button'>)}\n    >\n      {children}\n    </motion.button>\n  );\n};\n","// biome-ignore lint/style/useImportType: <explanation>\nimport React from \"react\";\nimport { useMoonSDK } from \"../../../hooks/old/useMoonSDK\";\n\nexport type InputProps = {\n\tlabel?: string;\n} & React.InputHTMLAttributes<HTMLInputElement>;\n\nexport function Input({ label, ...rest }: InputProps) {\n\tconst { authConfig } = useMoonSDK();\n\treturn (\n\t\t<div className=\"w-full\">\n\t\t\t{label && (\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={label}\n\t\t\t\t\tclassName=\"block text-sm font-medium leading-6 text-text-secondary\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<input\n\t\t\t\tid={label}\n\t\t\t\tname={label}\n\t\t\t\t{...rest}\n\t\t\t\tstyle={{\n\t\t\t\t\tborderRadius: authConfig.appearance.input.borderRadius || \"3px\",\n\t\t\t\t}}\n\t\t\t\tclassName={`block w-full border-0 py-1.5 pl-2 pr-2 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6`}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import React from 'react';\n\nexport type ModalProps = {\n  isOpen: boolean;\n  toggleModal: (e?: any) => void;\n  children: React.ReactNode;\n  overlayProps?: React.HTMLAttributes<HTMLDivElement>;\n  modalProps?: React.HTMLAttributes<HTMLDivElement>;\n};\n\nexport const Modal: React.FC<ModalProps> = ({\n  isOpen,\n  toggleModal,\n  children,\n  overlayProps,\n  modalProps,\n}) => {\n  if (!isOpen) return null;\n\n  return (\n    <div className=\"fixed inset-0 flex items-center justify-center z-100 gap-3\">\n      <div\n        className=\"absolute inset-0 bg-black opacity-50\"\n        onClick={toggleModal}\n        {...overlayProps}\n      ></div>\n      <div\n        className=\"rounded-lg p-4 z-50 max-w-md w-full bg-background-secondary\"\n        {...modalProps}\n      >\n        {children}\n      </div>\n    </div>\n  );\n};\n","import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport React from 'react';\n\nexport interface DropdownProps {\n  trigger: React.ReactNode;\n  children: React.ReactNode;\n  align?: 'start' | 'center' | 'end';\n  side?: 'top' | 'right' | 'bottom' | 'left';\n  sideOffset?: number;\n  className?: string;\n}\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n  trigger,\n  children,\n  align = 'center',\n  side = 'bottom',\n  sideOffset = 4,\n  className = '',\n}) => {\n  const [open, setOpen] = React.useState(false);\n\n  return (\n    <DropdownMenuPrimitive.Root open={open} onOpenChange={setOpen}>\n      <DropdownMenuPrimitive.Trigger>{trigger}</DropdownMenuPrimitive.Trigger>\n      <AnimatePresence>\n        {open && (\n          <DropdownMenuPrimitive.Portal>\n            <DropdownMenuPrimitive.Content\n              align={align}\n              side={side}\n              sideOffset={sideOffset}\n              className={`z-50 min-w-[8rem] overflow-hidden rounded-md border border-slate-100 bg-white p-1 shadow-md animate-in data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ${className}`}\n              asChild\n            >\n              <motion.div\n                initial={{ opacity: 0, scale: 0.95 }}\n                animate={{ opacity: 1, scale: 1 }}\n                exit={{ opacity: 0, scale: 0.95 }}\n                transition={{ duration: 0.2 }}\n              >\n                {children}\n              </motion.div>\n            </DropdownMenuPrimitive.Content>\n          </DropdownMenuPrimitive.Portal>\n        )}\n      </AnimatePresence>\n    </DropdownMenuPrimitive.Root>\n  );\n};\n\nexport const DropdownItem = DropdownMenuPrimitive.Item;\n\nexport default Dropdown;\n","// components/Tooltip.tsx\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport React from \"react\";\n\ninterface TooltipProps {\n\tcontent: React.ReactNode;\n\tchildren: React.ReactNode;\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({ content, children }) => (\n\t<TooltipPrimitive.Root>\n\t\t<TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n\t\t<TooltipPrimitive.Content className=\"data-[state=delayed-open]:data-[side=top]:animate-slideDownAndFade data-[state=delayed-open]:data-[side=right]:animate-slideLeftAndFade data-[state=delayed-open]:data-[side=bottom]:animate-slideUpAndFade data-[state=delayed-open]:data-[side=left]:animate-slideRightAndFade px-2 py-1 rounded-md bg-black text-white shadow-md\">\n\t\t\t<TooltipPrimitive.Arrow className=\"fill-current text-black\" />\n\t\t\t{content}\n\t\t</TooltipPrimitive.Content>\n\t</TooltipPrimitive.Root>\n);\n","import { useEffect, useState } from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { useMoonAuth } from \"../../../context\";\n\nexport interface Notification {\n\tid: number;\n\ttext: string;\n\tsender_id: number | null;\n\treceiver_id: number;\n\tread: boolean;\n\tcreated_at: string;\n}\n\nexport const NotificationComponent = () => {\n\tconst { supabaseClient: supabase, user } = useMoonAuth();\n\tconst [notifications, setNotifications] = useState<Notification[]>([]);\n\tconst [open, setOpen] = useState(false);\n\tconst [selectedNotification, setSelectedNotification] =\n\t\tuseState<Notification | null>(null);\n\n\tuseEffect(() => {\n\t\tconst fetchNotifications = async () => {\n\t\t\tif (user) {\n\t\t\t\tconst { data, error } = await supabase\n\t\t\t\t\t.from(\"notifications\")\n\t\t\t\t\t.select(\"*\")\n\t\t\t\t\t.eq(\"receiver_id\", user.id)\n\t\t\t\t\t.order(\"created_at\", { ascending: false });\n\n\t\t\t\tif (error) {\n\t\t\t\t\tconsole.error(\"Error fetching notifications:\", error);\n\t\t\t\t} else {\n\t\t\t\t\tsetNotifications(data as Notification[]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfetchNotifications();\n\n\t\tconst channel = supabase\n\t\t\t.channel(\"notifications\")\n\t\t\t.on(\n\t\t\t\t\"postgres_changes\",\n\t\t\t\t{\n\t\t\t\t\tevent: \"INSERT\",\n\t\t\t\t\tschema: \"public\",\n\t\t\t\t\ttable: \"notifications\",\n\t\t\t\t\tfilter: `receiver_id=eq.${user?.id}`,\n\t\t\t\t},\n\t\t\t\t(payload) => {\n\t\t\t\t\tsetNotifications((prevNotifications) => [\n\t\t\t\t\t\t...prevNotifications,\n\t\t\t\t\t\tpayload.new as Notification,\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t)\n\t\t\t.subscribe();\n\n\t\treturn () => {\n\t\t\tchannel.unsubscribe();\n\t\t};\n\t}, [supabase, user]);\n\n\tconst dismissNotification = async (notificationId: number) => {\n\t\ttry {\n\t\t\tconst { error } = await supabase\n\t\t\t\t.from(\"notifications\")\n\t\t\t\t.update({ read: true })\n\t\t\t\t.eq(\"id\", notificationId);\n\n\t\t\tif (error) {\n\t\t\t\tconsole.error(\"Error dismissing notification:\", error);\n\t\t\t} else {\n\t\t\t\tsetNotifications((prevNotifications) =>\n\t\t\t\t\tprevNotifications.map((notification) =>\n\t\t\t\t\t\tnotification.id === notificationId\n\t\t\t\t\t\t\t? { ...notification, read: true }\n\t\t\t\t\t\t\t: notification,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error dismissing notification:\", error);\n\t\t}\n\t};\n\n\tconst openNotificationModal = (notification: Notification) => {\n\t\tsetSelectedNotification(notification);\n\t\tsetOpen(true);\n\t};\n\n\tconst closeNotificationModal = () => {\n\t\tsetSelectedNotification(null);\n\t\tsetOpen(false);\n\t};\n\n\treturn (\n\t\t<div className=\"fixed bottom-4 right-4 z-50\">\n\t\t\t<AnimatePresence>\n\t\t\t\t{notifications.map((notification) => (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tkey={notification.id}\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 50 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\texit={{ opacity: 0, y: 50 }}\n\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\tclassName={`bg-white rounded-lg shadow-lg p-4 mb-4 ${\n\t\t\t\t\t\t\tnotification.read ? \"opacity-50\" : \"\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"flex justify-between items-center\">\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclassName=\"text-gray-800 cursor-pointer\"\n\t\t\t\t\t\t\t\tonClick={() => openNotificationModal(notification)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{notification.text}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclassName=\"text-gray-500 hover:text-gray-800 focus:outline-none\"\n\t\t\t\t\t\t\t\tonClick={() => dismissNotification(notification.id)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclassName=\"h-5 w-5\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<path d=\"M6 18L18 6M6 6l12 12\"></path>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t))}\n\t\t\t</AnimatePresence>\n\n\t\t\t{/* Notification Modal */}\n\t\t\t<DialogPrimitive.Root open={open} onOpenChange={setOpen}>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{open && (\n\t\t\t\t\t\t<DialogPrimitive.Portal forceMount>\n\t\t\t\t\t\t\t<DialogPrimitive.Overlay\n\t\t\t\t\t\t\t\tclassName=\"fixed inset-0 bg-black/30\"\n\t\t\t\t\t\t\t\tasChild\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\t\t\tclassName=\"fixed inset-0 flex items-center justify-center\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<DialogPrimitive.Content\n\t\t\t\t\t\t\t\t\t\tasChild\n\t\t\t\t\t\t\t\t\t\tclassName=\"bg-white rounded-lg shadow-lg p-6 max-w-md\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t<DialogPrimitive.Title className=\"text-xl font-semibold mb-4\">\n\t\t\t\t\t\t\t\t\t\t\t\tNotification\n\t\t\t\t\t\t\t\t\t\t\t</DialogPrimitive.Title>\n\t\t\t\t\t\t\t\t\t\t\t<DialogPrimitive.Description className=\"text-gray-600 mb-6\">\n\t\t\t\t\t\t\t\t\t\t\t\t{selectedNotification?.text}\n\t\t\t\t\t\t\t\t\t\t\t</DialogPrimitive.Description>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex justify-end\">\n\t\t\t\t\t\t\t\t\t\t\t\t<DialogPrimitive.Close asChild>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-blue-500 hover:bg-blue-600 text-white font-semibold py-2 px-4 rounded focus:outline-none\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={closeNotificationModal}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tClose\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t</DialogPrimitive.Close>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</DialogPrimitive.Content>\n\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t</DialogPrimitive.Overlay>\n\t\t\t\t\t\t</DialogPrimitive.Portal>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</DialogPrimitive.Root>\n\t\t</div>\n\t);\n};\n\nexport default NotificationComponent;\n","import { Input, InputProps, Modal } from '@/components';\nimport { combineArraysFromObject, useLifi } from '@/index';\nimport { LiFiToken, LiFiTokenMap, LifiChainData } from '@/types';\nimport React, { useEffect, useState } from 'react';\nimport { useDebounceCallback } from 'usehooks-ts';\n\nexport type LifiTokenSelectorModalProps = {\n  initialTokenAddress?: string | undefined;\n  initialTokenChain?: string | undefined;\n  onSelect: (tokenAddress: string) => void;\n  title?: string;\n  headerProps?: React.HTMLAttributes<HTMLDivElement>;\n  buttonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n  inputProps?: InputProps;\n  listProps?: React.HTMLAttributes<HTMLDivElement>;\n  listItemProps?: React.HTMLAttributes<HTMLDivElement>;\n};\n\nexport const LifiTokenSelectorModal: React.FC<LifiTokenSelectorModalProps> = ({\n  initialTokenAddress,\n  initialTokenChain,\n  onSelect,\n  title,\n  headerProps,\n  buttonProps,\n  inputProps,\n  listProps,\n  listItemProps,\n}) => {\n  const [filteredTokens, setFilteredTokens] = useState([] as LiFiToken[]);\n\n  const [selectedTokenAddress, setSelectedTokenAddress] = useState<\n    string | undefined\n  >(initialTokenAddress);\n  const [selectedChainKey, setSelectedChainKey] = useState<string | undefined>(\n    initialTokenChain\n  );\n  const { supportedTokensQuery, supportedChainsQuery } = useLifi();\n\n  console.log('supportedTokensQuery', supportedTokensQuery, selectedChainKey);\n\n  useEffect(() => {\n    if (selectedChainKey !== initialTokenChain)\n      setSelectedChainKey(initialTokenChain);\n  }, [initialTokenChain]);\n\n  useEffect(() => {\n    if (selectedTokenAddress !== initialTokenAddress)\n      setSelectedTokenAddress(initialTokenAddress);\n  }, [initialTokenAddress]);\n\n  const tokenData = supportedTokensQuery.isSuccess\n    ? ((supportedTokensQuery.data as any).data.tokens as LiFiTokenMap)\n    : ({} as LiFiTokenMap);\n\n  const chainData = supportedChainsQuery.isSuccess\n    ? ((supportedChainsQuery.data as any).data.chains as LifiChainData[])\n    : ([] as LifiChainData[]);\n\n  const initialChain = chainData.find(\n    (chain: LifiChainData) => chain.key === selectedChainKey\n  );\n\n  const [isOpen, setIsOpen] = useState(false);\n  const [searchTerm, setSearchTerm] = useState('');\n\n  const filterTokens = () => {\n    let tokens = [];\n    tokens = combineArraysFromObject<LiFiToken>(tokenData);\n    if (initialChain)\n      tokens = tokens.filter((token: LiFiToken) => {\n        return token.chainId === initialChain.id;\n      });\n    tokens = tokens.filter((token: LiFiToken) => {\n      return token.name.toLowerCase().includes(searchTerm.toLowerCase());\n    });\n    //sort based on how close the search term length is to the token name length\n    if (searchTerm !== '')\n      tokens = tokens.sort((a, b) => {\n        return (\n          Math.abs(a.name.length - searchTerm.length) -\n          Math.abs(b.name.length - searchTerm.length)\n        );\n      });\n    setFilteredTokens(tokens);\n  };\n\n  const debouncedFilterTokens = useDebounceCallback(filterTokens, 1000);\n\n  useEffect(() => {\n    debouncedFilterTokens();\n  }, [tokenData, initialChain, searchTerm]);\n\n  const toggleModal = (e?: any) => {\n    e && e.preventDefault(); // Prevent form submission\n    setIsOpen(!isOpen);\n  };\n\n  const handleTokenSelect = (tokenAddress: string) => {\n    setSelectedTokenAddress(tokenAddress);\n    onSelect(tokenAddress);\n    toggleModal();\n  };\n\n  const selectedToken = filteredTokens.find(\n    (token: LiFiToken) => token.address === selectedTokenAddress\n  );\n\n  return (\n    <>\n      <button\n        className=\"bg-accent-color rounded-xl p-3 m-1 text-text-primary\"\n        onClick={toggleModal}\n        {...buttonProps}\n      >\n        {(selectedToken && selectedToken?.name) || 'Select Token'}\n      </button>\n      <Modal isOpen={isOpen} toggleModal={toggleModal}>\n        {title && (\n          <h2 className=\"text-xl font-semibold mb-4\" {...headerProps}>\n            {title}\n          </h2>\n        )}\n        <Input\n          label=\"Search Tokens\"\n          type=\"text\"\n          placeholder=\"Search tokens...\"\n          value={searchTerm}\n          onChange={(e) => setSearchTerm(e.target.value)}\n          className=\"w-full p-2 mb-4 border border-gray-300 rounded\"\n          {...inputProps}\n        />\n        <div className=\"max-h-[300px] overflow-y-auto\" {...listProps}>\n          {filteredTokens.map((token) => (\n            <div\n              key={token.address + token.chainId}\n              onClick={() => handleTokenSelect(token.address)}\n              className=\"p-2 cursor-pointer hover:bg-accent-color rounded-sm\"\n              {...listItemProps}\n            >\n              {token.name} ({token.symbol}) - {token.chainId}\n            </div>\n          ))}\n        </div>\n      </Modal>\n    </>\n  );\n};\n","import { Input, InputProps, Modal } from '@/components';\nimport { useLifi } from '@/index';\nimport { LifiChainData } from '@/types';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nexport type LifiChainSelectorModalProps = {\n  initialChainKey?: string;\n  onSelect: (tokenAddress: string) => void;\n  title?: string;\n  headerProps?: React.HTMLAttributes<HTMLDivElement>;\n  buttonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n  inputProps?: InputProps;\n  listProps?: React.HTMLAttributes<HTMLDivElement>;\n  listItemProps?: React.HTMLAttributes<HTMLDivElement>;\n};\n\nexport const LifiChainSelectorModal: React.FC<LifiChainSelectorModalProps> = ({\n  initialChainKey,\n  onSelect,\n  title,\n  headerProps,\n  buttonProps,\n  inputProps,\n  listProps,\n  listItemProps,\n}) => {\n  const [selectedChainKey, setSelectedChainKey] = useState<string | undefined>(\n    initialChainKey\n  );\n  const { supportedChainsQuery } = useLifi();\n  useEffect(() => {\n    if (selectedChainKey !== initialChainKey)\n      setSelectedChainKey(initialChainKey);\n  }, [initialChainKey]);\n\n  const chainData = supportedChainsQuery.isSuccess\n    ? ((supportedChainsQuery.data as any).data.chains as LifiChainData[])\n    : ([] as LifiChainData[]);\n\n  const [isOpen, setIsOpen] = useState(false);\n  const [searchTerm, setSearchTerm] = useState('');\n\n  const filteredChains = useMemo(() => {\n    return chainData.filter((chain) => {\n      return (\n        chain.name.toLowerCase().includes(searchTerm.toLowerCase()) ||\n        chain.key.toLowerCase().includes(searchTerm.toLowerCase()) ||\n        chain.coin.toLowerCase().includes(searchTerm.toLowerCase()) ||\n        chain.id.toString().toLowerCase().includes(searchTerm.toLowerCase())\n      );\n    });\n  }, [chainData, searchTerm]);\n\n  const toggleModal = () => {\n    setIsOpen(!isOpen);\n  };\n\n  const handleChainSelect = (chainKey: string) => {\n    setSelectedChainKey(chainKey);\n    onSelect(chainKey);\n    toggleModal();\n  };\n  const selectedChain = chainData.find(\n    (chain) => chain.key === selectedChainKey\n  );\n  return (\n    <>\n      <button\n        className=\"bg-accent-color rounded-xl p-3 m-1 text-text-primary\"\n        onClick={toggleModal}\n        {...buttonProps}\n      >\n        {(selectedChainKey && selectedChain?.name) || 'Select Chain'}\n      </button>\n      <Modal isOpen={isOpen} toggleModal={toggleModal}>\n        {title && (\n          <h2 className=\"text-xl font-semibold mb-4\" {...headerProps}>\n            {title}\n          </h2>\n        )}\n        <Input\n          label=\"Search Chains\"\n          type=\"text\"\n          placeholder=\"Search Chains...\"\n          value={searchTerm}\n          onChange={(e) => setSearchTerm(e.target.value)}\n          className=\"w-full p-2 mb-4 border border-gray-300 rounded\"\n          {...inputProps}\n        />\n        <div className=\"max-h-[300px] overflow-y-auto\" {...listProps}>\n          {filteredChains.map((chain) => (\n            <div\n              key={chain.id}\n              onClick={() => handleChainSelect(chain.key)}\n              className=\"p-2 cursor-pointer hover:bg-accent-color rounded-sm\"\n              {...listItemProps}\n            >\n              {chain.name}\n            </div>\n          ))}\n        </div>\n      </Modal>\n    </>\n  );\n};\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { FiArrowDown } from \"react-icons/fi\";\nimport { useTheme } from \"@/context\";\nimport { useLifi, useMoonAccount, useMoonDataSDK } from \"@/hooks\";\nimport { Transaction } from \"@/components/Web3/Transactions/transactions\";\nimport { formatUnits, parseUnits } from \"ethers\";\nimport { Button } from \"@/components\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useDebounceValue } from \"usehooks-ts\";\nimport { useErc20 } from \"@/hooks\";\nimport { TokenInput } from \"./TokenInput\";\nimport { ChainSelector } from \"./ChainSelector\";\nimport { SlippageSettings } from \"./SlippageSettings\";\nimport { SwapDetails } from \"./SwapDetails\";\nimport type { InputBody, Quote } from \"@moonup/moon-api\";\n\ntype ButtonStatus =\n\t| \"Get Quote\"\n\t| \"Getting Quote...\"\n\t| \"Bridging...\"\n\t| \"Bridge\"\n\t| \"Insufficient Balance\"\n\t| \"Enter an amount\"\n\t| \"Select tokens and chains\";\n\nexport const LifiBridge: React.FC = () => {\n\tconst theme = useTheme();\n\tconst {\n\t\tgetQuoteLifi,\n\t\tpostQuoteLifi,\n\t\tsupportedTokensQuery,\n\t\tsupportedChainsQuery,\n\t} = useLifi();\n\tconst { account } = useMoonAccount();\n\tconst queryClient = useQueryClient();\n\tconst { approveTokenSpendIfNeeded } = useErc20();\n\tconst { walletBalanceQuery, walletBalanceChainIdQuery } = useMoonDataSDK();\n\n\tconst [fromToken, setFromToken] = useState<any>(null);\n\tconst [toToken, setToToken] = useState<any>(null);\n\tconst [fromChain, setFromChain] = useState<any>(null);\n\tconst [toChain, setToChain] = useState<any>(null);\n\tconst [fromAmount, setFromAmount] = useState(\"\");\n\tconst [toAmount, setToAmount] = useState(\"\");\n\tconst [slippage, setSlippage] = useState(0.5);\n\tconst [quoteResult, setQuoteResult] = useState<Quote | null>(null);\n\tconst [buttonStatus, setButtonStatus] = useState<ButtonStatus>(\"Get Quote\");\n\tconst [transactionData, setTransactionData] = useState<InputBody | null>(\n\t\tnull,\n\t);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [isSwapComplete, setIsSwapComplete] = useState(false);\n\tconst [showTransactionDetails, setShowTransactionDetails] = useState(false);\n\n\tconst [debouncedFromAmount] = useDebounceValue(fromAmount, 500);\n\tconst { data: walletBalanceData = { balances: {} } } = walletBalanceQuery;\n\tconst { data: walletBalanceChainIdData = { balances: {} } } =\n\t\twalletBalanceChainIdQuery(toChain?.id ?? 1);\n\tconst { data: tokensData = { tokens: {} } } = supportedTokensQuery;\n\n\tconst { data: chainsData = { chains: [] } } = supportedChainsQuery;\n\tconst tokensFilteredForChain = useMemo(() => {\n\t\tif (!fromChain) return [];\n\t\t// add the balance to the token object\n\t\tconst tokens = tokensData.tokens[fromChain.id.toString()] || [];\n\t\treturn tokens.map((token: any) => {\n\t\t\tconst balances: { [key: string]: string } = Array.isArray(\n\t\t\t\twalletBalanceData,\n\t\t\t)\n\t\t\t\t? {}\n\t\t\t\t: walletBalanceData?.balances || {};\n\t\t\ttoken.balance = balances[token.address] || \"0\";\n\t\t\treturn token;\n\t\t});\n\t}, [tokensData, fromChain, walletBalanceData]);\n\n\tconst tokensFilteredToChain = useMemo(() => {\n\t\tif (!toChain) return [];\n\n\t\tconst tokens = tokensData.tokens[toChain.id.toString()] || [];\n\t\treturn tokens.map((token: any) => {\n\t\t\tconst balances: { [key: string]: string } = Array.isArray(\n\t\t\t\twalletBalanceChainIdData,\n\t\t\t)\n\t\t\t\t? {}\n\t\t\t\t: walletBalanceChainIdData?.balances || {};\n\t\t\ttoken.balance = balances[token.address] || \"0\";\n\t\t\treturn token;\n\t\t});\n\t}, [tokensData, toChain]);\n\n\tconst fromValue = useMemo(() => {\n\t\treturn quoteResult\n\t\t\t? Number.parseFloat(quoteResult.estimate.fromAmountUSD)\n\t\t\t: 0;\n\t}, [quoteResult]);\n\n\tconst toValue = useMemo(() => {\n\t\treturn quoteResult\n\t\t\t? Number.parseFloat(quoteResult.estimate.toAmountUSD)\n\t\t\t: 0;\n\t}, [quoteResult]);\n\n\tconst isSwapDisabled = useMemo(() => {\n\t\tif (!fromToken || !toToken || !fromChain || !toChain) {\n\t\t\treturn \"Select tokens and chains\";\n\t\t}\n\t\tif (!fromAmount || Number.parseFloat(fromAmount) === 0) {\n\t\t\treturn \"Enter an amount\";\n\t\t}\n\t\tif (\n\t\t\tNumber.parseFloat(fromAmount) >\n\t\t\tNumber.parseFloat(fromToken.balance || \"0\")\n\t\t) {\n\t\t\treturn \"Insufficient Balance\";\n\t\t}\n\t\tif (!quoteResult) {\n\t\t\treturn \"Get Quote\";\n\t\t}\n\t\treturn false;\n\t}, [fromToken, toToken, fromChain, toChain, fromAmount, quoteResult]);\n\n\tuseEffect(() => {\n\t\tif (fromToken && toToken && fromChain && toChain && debouncedFromAmount) {\n\t\t\thandleGetQuote();\n\t\t} else {\n\t\t\tsetQuoteResult(null);\n\t\t\tsetToAmount(\"\");\n\t\t}\n\t}, [fromToken, toToken, fromChain, toChain, debouncedFromAmount, slippage]);\n\n\tconst handleGetQuote = async () => {\n\t\tif (\n\t\t\t!fromToken ||\n\t\t\t!toToken ||\n\t\t\t!fromChain ||\n\t\t\t!toChain ||\n\t\t\t!debouncedFromAmount\n\t\t)\n\t\t\treturn;\n\n\t\tsetButtonStatus(\"Getting Quote...\");\n\t\tsetError(null);\n\n\t\tconst fromAmountBigInt = parseUnits(\n\t\t\tdebouncedFromAmount,\n\t\t\tfromToken.decimals,\n\t\t);\n\n\t\ttry {\n\t\t\tconst quoteParams = {\n\t\t\t\tfromChain: fromChain.key,\n\t\t\t\ttoChain: toChain.key,\n\t\t\t\tfromToken: fromToken.address,\n\t\t\t\ttoToken: toToken.address,\n\t\t\t\tfromAmount: fromAmountBigInt.toString(),\n\t\t\t\tfromAddress: account || \"\",\n\t\t\t\tslippage: slippage,\n\t\t\t};\n\n\t\t\tconst quote = await getQuoteLifi(quoteParams);\n\t\t\tsetQuoteResult(quote);\n\t\t\tsetToAmount(formatUnits(quote.estimate.toAmount, toToken.decimals));\n\t\t\tsetButtonStatus(\"Bridge\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Quote failed:\", error);\n\t\t\tsetError((error as Error)?.message || \"Failed to get quote\");\n\t\t\tsetButtonStatus(\"Get Quote\");\n\t\t}\n\t};\n\n\tconst handleBridge = async () => {\n\t\tif (!quoteResult || !account) return;\n\n\t\tsetButtonStatus(\"Bridging...\");\n\n\t\ttry {\n\t\t\tif (fromToken.address !== \"0x0000000000000000000000000000000000000000\") {\n\t\t\t\tawait approveTokenSpendIfNeeded(\n\t\t\t\t\taccount,\n\t\t\t\t\tquoteResult.transactionRequest.to || \"\",\n\t\t\t\t\tfromToken.address,\n\t\t\t\t\tNumber.parseFloat(fromAmount),\n\t\t\t\t\tfromChain.chainId.toString(),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst bridgeParams = {\n\t\t\t\taccountName: account,\n\t\t\t\tfromAmount: quoteResult.estimate.fromAmount,\n\t\t\t\tfromChain: fromChain.key,\n\t\t\t\tfromToken: fromToken.address,\n\t\t\t\ttoAmount: quoteResult.estimate.toAmount,\n\t\t\t\ttoChain: toChain.key,\n\t\t\t\ttoToken: toToken.address,\n\t\t\t\tfromAddress: account,\n\t\t\t\ttoAddress: account,\n\t\t\t\taction: quoteResult.action,\n\t\t\t\testimate: quoteResult.estimate,\n\t\t\t\tid: quoteResult.id,\n\t\t\t\tincludedSteps: quoteResult.includedSteps,\n\t\t\t\ttool: quoteResult.tool,\n\t\t\t\ttransactionRequest: quoteResult.transactionRequest,\n\t\t\t\ttype: quoteResult.type,\n\t\t\t};\n\n\t\t\tconst result = await postQuoteLifi(bridgeParams);\n\t\t\tqueryClient.invalidateQueries({ queryKey: [\"erc20TokenBalances\"] });\n\n\t\t\tsetTransactionData({\n\t\t\t\tto: result.quote.transactionRequest.to,\n\t\t\t\tdata: result.quote.transactionRequest.data,\n\t\t\t\tvalue: result.quote.transactionRequest.value,\n\t\t\t\tchain_id: fromChain.chainId.toString(),\n\t\t\t\tmaxFeePerGas: result.quote.transactionRequest.maxFeePerGas,\n\t\t\t\tmaxPriorityFeePerGas:\n\t\t\t\t\tresult.quote.transactionRequest.maxPriorityFeePerGas,\n\t\t\t\tnonce: result.quote.transactionRequest.nonce,\n\t\t\t});\n\t\t\tsetShowTransactionDetails(true);\n\t\t\tsetButtonStatus(\"Get Quote\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Bridge failed:\", error);\n\t\t\tsetError((error as Error)?.message || \"Bridge failed\");\n\t\t\tsetButtonStatus(\"Bridge\");\n\t\t}\n\t};\n\n\tconst handleSwapComplete = () => {\n\t\tsetIsSwapComplete(true);\n\t\tsetFromAmount(\"\");\n\t\tsetToAmount(\"\");\n\t\tsetButtonStatus(\"Get Quote\");\n\t\tsetShowTransactionDetails(false);\n\t};\n\n\tconst handleError = (error: any) => {\n\t\tconsole.log(\"transaction error called\", error);\n\t\tsetError(error);\n\t\tsetButtonStatus(\"Get Quote\");\n\t\tsetTransactionData(null);\n\t\tsetShowTransactionDetails(false);\n\t\tsetQuoteResult(null);\n\t\tsetFromAmount(\"\");\n\t\tsetToAmount(\"\");\n\t};\n\n\tif (isSwapComplete) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`w-full max-w-md mx-auto p-6 rounded-lg bg-${theme?.backgroundColor} shadow-xl text-center`}\n\t\t\t>\n\t\t\t\t<h2 className={`text-2xl font-bold mb-4 text-${theme?.textColor}`}>\n\t\t\t\t\tBridge Complete!\n\t\t\t\t</h2>\n\t\t\t\t<p className={`text-${theme?.textColorSecondary} mb-6`}>\n\t\t\t\t\tYour transaction has been successfully processed.\n\t\t\t\t</p>\n\t\t\t\t<Button\n\t\t\t\t\tonClick={() => setIsSwapComplete(false)}\n\t\t\t\t\tclassName={`py-3 px-6 bg-${theme?.accentColor} text-${theme?.backgroundColor} rounded-md font-bold text-lg shadow-md`}\n\t\t\t\t>\n\t\t\t\t\tMake Another Bridge\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`w-full max-w-md mx-auto p-6 rounded-lg bg-${theme?.backgroundColor} shadow-xl`}\n\t\t>\n\t\t\t{!showTransactionDetails && (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"flex justify-between items-center mb-6\">\n\t\t\t\t\t\t<h2 className={`text-2xl font-bold text-${theme?.textColor}`}>\n\t\t\t\t\t\t\tLifi Bridge\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t<SlippageSettings slippage={slippage} setSlippage={setSlippage} />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`mb-4 p-4 rounded-2xl bg-${theme?.backgroundColorSecondary}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChainSelector\n\t\t\t\t\t\t\tchains={chainsData.chains}\n\t\t\t\t\t\t\tselectedChain={fromChain}\n\t\t\t\t\t\t\tonSelectChain={setFromChain}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TokenInput\n\t\t\t\t\t\t\ttoken={fromToken}\n\t\t\t\t\t\t\tamount={fromAmount}\n\t\t\t\t\t\t\tsetAmount={setFromAmount}\n\t\t\t\t\t\t\ttokens={tokensFilteredForChain}\n\t\t\t\t\t\t\tonSelectToken={setFromToken}\n\t\t\t\t\t\t\tbalance={fromToken?.balance}\n\t\t\t\t\t\t\tvalue={fromValue}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<div className=\"flex justify-center my-4\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tclassName={`p-2 rounded-full bg-${theme?.backgroundColor} text-${theme?.textColor} shadow-md`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FiArrowDown />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<ChainSelector\n\t\t\t\t\t\t\tchains={chainsData.chains as any[]}\n\t\t\t\t\t\t\tselectedChain={toChain}\n\t\t\t\t\t\t\tonSelectChain={setToChain}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TokenInput\n\t\t\t\t\t\t\ttoken={toToken}\n\t\t\t\t\t\t\tamount={toAmount}\n\t\t\t\t\t\t\tsetAmount={setToAmount}\n\t\t\t\t\t\t\ttokens={tokensFilteredToChain}\n\t\t\t\t\t\t\tonSelectToken={setToToken}\n\t\t\t\t\t\t\tbalance={toToken?.balance}\n\t\t\t\t\t\t\tvalue={toValue}\n\t\t\t\t\t\t\treadOnly\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={handleBridge}\n\t\t\t\t\t\tdisabled={!!isSwapDisabled}\n\t\t\t\t\t\tclassName={`w-full py-4 px-6 bg-${theme?.accentColor} text-${theme?.backgroundColor} rounded-2xl font-bold text-lg shadow-md ${\n\t\t\t\t\t\t\tisSwapDisabled ? \"opacity-50 cursor-not-allowed\" : \"\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isSwapDisabled || buttonStatus}\n\t\t\t\t\t</Button>\n\n\t\t\t\t\t{error && <p className={`mt-2 text-sm text-red-500`}>{error}</p>}\n\n\t\t\t\t\t{quoteResult && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, height: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, height: \"auto\" }}\n\t\t\t\t\t\t\texit={{ opacity: 0, height: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\tclassName=\"mt-6\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SwapDetails\n\t\t\t\t\t\t\t\tquoteResult={quoteResult}\n\t\t\t\t\t\t\t\tfromToken={fromToken}\n\t\t\t\t\t\t\t\ttoToken={toToken}\n\t\t\t\t\t\t\t\tslippage={slippage}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{transactionData && (\n\t\t\t\t<Transaction\n\t\t\t\t\twallet={account}\n\t\t\t\t\ttransaction={transactionData}\n\t\t\t\t\tautoExecute={false}\n\t\t\t\t\tisModal={false}\n\t\t\t\t\tonSuccess={handleSwapComplete}\n\t\t\t\t\tonError={handleError}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default LifiBridge;\n","import { useTheme } from \"@/context\";\nimport { useChains, useMoonAccount } from \"@/hooks\";\nimport type { InputBody, SimulateAssetChangesChange } from \"@moonup/moon-api\";\nimport * as Progress from \"@radix-ui/react-progress\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { formatEther, formatUnits } from \"ethers\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport type React from \"react\";\nimport { useEffect, useState, useCallback } from \"react\";\nimport { CheckCircleIcon, XCircleIcon } from \"lucide-react\";\nimport pkg from \"react-copy-to-clipboard\";\nconst { CopyToClipboard } = pkg;\nimport { Tooltip, Button } from \"@/components\";\nimport { TooltipProvider } from \"@radix-ui/react-tooltip\";\n\ninterface TransactionProps {\n\twallet: string;\n\ttransaction: InputBody;\n\tautoExecute?: boolean;\n\tisModal?: boolean;\n\tonSuccess?: (receipt: any) => void;\n\tonError?: (error: string) => void;\n}\n\nexport const Transaction: React.FC<TransactionProps> = ({\n\twallet,\n\ttransaction,\n\tautoExecute = false,\n\tisModal = false,\n\tonSuccess,\n\tonError,\n}) => {\n\tconst theme = useTheme();\n\tconst [isOpen, setIsOpen] = useState(isModal);\n\n\tuseEffect(() => {\n\t\tif (isModal) {\n\t\t\tsetIsOpen(true);\n\t\t}\n\t}, [isModal]);\n\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t{isModal ? (\n\t\t\t\t<Dialog.Root open={isOpen} onOpenChange={setIsOpen}>\n\t\t\t\t\t<Dialog.Trigger asChild>\n\t\t\t\t\t\t{/* Your trigger component, e.g., a button */}\n\t\t\t\t\t</Dialog.Trigger>\n\t\t\t\t\t<Dialog.Portal>\n\t\t\t\t\t\t<Dialog.Overlay className=\"fixed inset-0 bg-black/30\" />\n\t\t\t\t\t\t<Dialog.Content\n\t\t\t\t\t\t\tclassName={`fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 bg-${theme.backgroundColor} text-${theme.textColor} p-4 rounded-lg shadow-md`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/* Render the transaction component */}\n\t\t\t\t\t\t\t<TransactionContent\n\t\t\t\t\t\t\t\twallet={wallet}\n\t\t\t\t\t\t\t\ttransaction={transaction}\n\t\t\t\t\t\t\t\tautoExecute={autoExecute}\n\t\t\t\t\t\t\t\tonSuccess={onSuccess}\n\t\t\t\t\t\t\t\tonError={onError}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Dialog.Content>\n\t\t\t\t\t</Dialog.Portal>\n\t\t\t\t</Dialog.Root>\n\t\t\t) : (\n\t\t\t\t<TransactionContent\n\t\t\t\t\twallet={wallet}\n\t\t\t\t\ttransaction={transaction}\n\t\t\t\t\tautoExecute={autoExecute}\n\t\t\t\t\tonSuccess={onSuccess}\n\t\t\t\t\tonError={onError}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</TooltipProvider>\n\t);\n};\n\nconst TransactionContent: React.FC<\n\tPick<\n\t\tTransactionProps,\n\t\t\"wallet\" | \"transaction\" | \"autoExecute\" | \"onSuccess\" | \"onError\"\n\t>\n> = ({ wallet, transaction, autoExecute, onSuccess, onError }) => {\n\tconst [status, setStatus] = useState<\n\t\t\"initial\" | \"simulating\" | \"ready\" | \"pending\" | \"completed\" | \"failed\"\n\t>(\"initial\");\n\tconst [txHash, setTxHash] = useState<string | null>(null);\n\tconst [txReceipt, setTxReceipt] = useState<any>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst { selectedChain } = useChains();\n\n\tconst theme = useTheme();\n\tconst { sendTransaction, signTransaction, watchTransactionStatus } =\n\t\tuseMoonAccount();\n\tconst {\n\t\tdata: simulationResult,\n\t\terror: simulationError,\n\t\trefetch: simulateTransaction,\n\t} = useQuery({\n\t\tqueryKey: [\"simulateTransaction\", transaction],\n\t\tqueryFn: async () => {\n\t\t\tsetStatus(\"simulating\");\n\t\t\ttry {\n\t\t\t\tconst result = await signTransaction(wallet, {\n\t\t\t\t\t...transaction,\n\t\t\t\t\tsimulate: true,\n\t\t\t\t});\n\t\t\t\tconsole.log(result);\n\t\t\t\tsetStatus(\"ready\");\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\tconst typedError = error as Error;\n\t\t\t\tsetError(typedError.message || \"Simulation failed\");\n\t\t\t\tsetStatus(\"failed\");\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tenabled: false,\n\t});\n\n\tuseEffect(() => {\n\t\tif (simulationError) {\n\t\t\tsetStatus(\"failed\");\n\t\t\tsetError(simulationError.message || \"Simulation failed\");\n\t\t}\n\t}, [simulationError]);\n\tconst handleSign = useCallback(async () => {\n\t\tsetStatus(\"pending\");\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst txResult = await sendTransaction({\n\t\t\t\t...transaction,\n\t\t\t\tfrom: wallet,\n\t\t\t});\n\t\t\tconsole.log(txResult);\n\t\t\tsetTxHash(txResult.transaction_hash);\n\t\t\twatchTransactionStatus(txResult.transaction_hash)\n\t\t\t\t.then((result) => {\n\t\t\t\t\tsetTxReceipt(txResult);\n\t\t\t\t\tsetStatus(result.status);\n\t\t\t\t\tif (result.status === \"completed\" && onSuccess) {\n\t\t\t\t\t\tonSuccess(txResult);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tsetError(error.message);\n\t\t\t\t\tsetStatus(\"failed\");\n\t\t\t\t\tif (onError) {\n\t\t\t\t\t\tonError(error.message);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst typedError = error as Error;\n\t\t\tconsole.error(\"Transaction failed:\", error);\n\t\t\tsetError(typedError.message || \"Transaction failed\");\n\t\t\tsetStatus(\"failed\");\n\t\t\tif (onError) {\n\t\t\t\tonError(typedError.message);\n\t\t\t}\n\t\t}\n\t}, [\n\t\ttransaction,\n\t\twallet,\n\t\tsendTransaction,\n\t\twatchTransactionStatus,\n\t\tonSuccess,\n\t\tonError,\n\t]);\n\n\tconst handleCancel = useCallback(() => {\n\t\tsetStatus(\"failed\");\n\t\tsetError(\"Transaction cancelled by user.\");\n\t\tsetTxHash(null);\n\t\tsetTxReceipt(null);\n\t\tif (onError) {\n\t\t\tonError(\"Transaction cancelled by user.\");\n\t\t}\n\t}, [txHash, onError]);\n\n\tuseEffect(() => {\n\t\tif (autoExecute) {\n\t\t\thandleSign();\n\t\t} else {\n\t\t\tsimulateTransaction();\n\t\t}\n\t}, [transaction, autoExecute, simulateTransaction, handleSign]);\n\n\tconst renderTransactionDetails = () => {\n\t\tif (status === \"simulating\" || status === \"pending\") {\n\t\t\treturn (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={`bg-${theme.backgroundColorSecondary} p-6 rounded-lg shadow-md mb-4`}\n\t\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex items-center justify-between mb-4\">\n\t\t\t\t\t\t<h3 className={`text-${theme.accentColor} text-2xl font-bold`}>\n\t\t\t\t\t\t\tTransaction Details\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<div className=\"animate-pulse\">\n\t\t\t\t\t\t\t<div className={`bg-${theme.accentColor} h-2 w-8 rounded-full`} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<p\n\t\t\t\t\t\tclassName={`text-${theme.textColor} text-lg leading-relaxed text-center`}\n\t\t\t\t\t>\n\t\t\t\t\t\tSimulating transaction...\n\t\t\t\t\t</p>\n\t\t\t\t</motion.div>\n\t\t\t);\n\t\t}\n\n\t\tif (simulationResult && simulationResult.transaction) {\n\t\t\tconst tx = simulationResult.transaction;\n\t\t\treturn (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={`bg-${theme.backgroundColorSecondary} p-6 rounded-lg shadow-md mb-4`}\n\t\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t>\n\t\t\t\t\t<h3 className={`text-${theme.accentColor} text-2xl font-bold mb-4`}>\n\t\t\t\t\t\tTransaction Details\n\t\t\t\t\t</h3>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`grid grid-cols-2 gap-4 text-${theme.textColor} text-lg`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"font-semibold\">To:</div>\n\t\t\t\t\t\t<div>{tx.to}</div>\n\t\t\t\t\t\t<div className=\"font-semibold\">From:</div>\n\t\t\t\t\t\t<div>{tx.from}</div>\n\t\t\t\t\t\t<div className=\"font-semibold\">Value:</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t{formatEther(tx.value || \"0\")}{\" \"}\n\t\t\t\t\t\t\t{tx.chainId === \"137\" ? \"MATIC\" : \"ETH\"}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{tx.gasLimit && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"font-semibold\">Gas Limit:</div>\n\t\t\t\t\t\t\t\t<div>{tx.gasLimit}</div>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{tx.maxFeePerGas && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"font-semibold\">Max Fee:</div>\n\t\t\t\t\t\t\t\t<div>{`${formatUnits(tx.maxFeePerGas, \"gwei\")} Gwei`}</div>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{tx.maxPriorityFeePerGas && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"font-semibold\">Max Priority Fee:</div>\n\t\t\t\t\t\t\t\t<div>{`${formatUnits(tx.maxPriorityFeePerGas, \"gwei\")} Gwei`}</div>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"font-semibold\">Nonce:</div>\n\t\t\t\t\t\t<div>{tx.nonce}</div>\n\t\t\t\t\t\t<div className=\"font-semibold\">Chain ID:</div>\n\t\t\t\t\t\t<div>{tx.chainId}</div>\n\t\t\t\t\t\t{tx.data && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"font-semibold\">Data:</div>\n\t\t\t\t\t\t\t\t<div className=\"truncate\">{tx.data}</div>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{tx.access_list?.length > 0 && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"font-semibold\">Access List:</div>\n\t\t\t\t\t\t\t\t<div>{tx.access_list.join(\", \")}</div>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{tx.blob_gas && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"font-semibold\">Blob Gas:</div>\n\t\t\t\t\t\t\t\t<div>{tx.blob_gas}</div>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{tx.blob_gas_fee_cap && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"font-semibold\">Blob Gas Fee Cap:</div>\n\t\t\t\t\t\t\t\t<div>{tx.blob_gas_fee_cap}</div>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{tx.blob_hashes?.length > 0 && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"font-semibold\">Blob Hashes:</div>\n\t\t\t\t\t\t\t\t<div>{tx.blob_hashes.join(\", \")}</div>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tconst renderAssetChanges = (changes: SimulateAssetChangesChange[]) => (\n\t\t<motion.div\n\t\t\tclassName={`bg-${theme.backgroundColorSecondary} p-6 rounded-lg shadow-md mb-4`}\n\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\ttransition={{ duration: 0.3 }}\n\t\t>\n\t\t\t<h3 className={`text-${theme.accentColor} text-2xl font-bold mb-4`}>\n\t\t\t\tAsset Changes\n\t\t\t</h3>\n\t\t\t<div className=\"grid grid-cols-1 gap-4\">\n\t\t\t\t{changes.map((change, index) => (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\ttransition={{ delay: index * 0.1, duration: 0.3 }}\n\t\t\t\t\t\tclassName={`flex items-center p-4 bg-${theme.backgroundColor} rounded-lg shadow-md`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={change.logo}\n\t\t\t\t\t\t\talt={`${change.name} logo`}\n\t\t\t\t\t\t\tclassName=\"w-10 h-10 mr-4 rounded-full\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div className=\"flex-grow\">\n\t\t\t\t\t\t\t<p className={`text-${theme.textColor} text-lg font-semibold`}>\n\t\t\t\t\t\t\t\t{change.changeType} {change.amount} {change.symbol}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p className={`text-${theme.textColorSecondary} text-sm`}>\n\t\t\t\t\t\t\t\tFrom: {change.from.slice(0, 6)}...{change.from.slice(-4)} → To:{\" \"}\n\t\t\t\t\t\t\t\t{change.to.slice(0, 6)}...{change.to.slice(-4)}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</motion.div>\n\t);\n\n\tconst renderStatusIndicator = () => (\n\t\t<div className={`mt-4 flex items-center`}>\n\t\t\t<Progress.Root\n\t\t\t\tclassName={`h-2 w-full bg-${theme.backgroundColor} rounded-full overflow-hidden`}\n\t\t\t\tvalue={status === \"completed\" ? 100 : status === \"pending\" ? 50 : 0}\n\t\t\t>\n\t\t\t\t<Progress.Indicator\n\t\t\t\t\tclassName={`h-full bg-${theme.accentColor} transition-all duration-500 ease-in-out`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: `${status === \"completed\" ? 100 : status === \"pending\" ? 50 : 0}%`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</Progress.Root>\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<motion.div\n\t\t\tclassName={`bg-${theme.backgroundColor} p-4 rounded-lg shadow-md`}\n\t\t\tinitial={{ opacity: 0, y: 10 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\texit={{ opacity: 0, y: 10 }}\n\t\t\ttransition={{ duration: 0.3 }}\n\t\t>\n\t\t\t{error && (\n\t\t\t\t<motion.div\n\t\t\t\t\tclassName={`mt-4 p-4 bg-red-100 border border-red-400 text-red-700 rounded-md flex items-center`}\n\t\t\t\t\tinitial={{ opacity: 0, x: -20 }}\n\t\t\t\t\tanimate={{ opacity: 1, x: 0 }}\n\t\t\t\t\texit={{ opacity: 0, x: 20 }}\n\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t>\n\t\t\t\t\t<XCircleIcon className=\"h-6 w-6 mr-2\" />\n\t\t\t\t\t{error}\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t\t{renderTransactionDetails()}\n\t\t\t{status === \"ready\" &&\n\t\t\t\tsimulationResult &&\n\t\t\t\tsimulationResult.simulation && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{renderAssetChanges(simulationResult.simulation.changes || [])}\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tclassName=\"mt-4 mb-2 flex justify-center\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0, x: -20 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, x: 0 }}\n\t\t\t\t\t\t\ttransition={{ delay: 0.2, duration: 0.3 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Tooltip content=\"This will execute the transaction. Make sure you have reviewed all details carefully.\">\n\t\t\t\t\t\t\t\t<p className={`text-${theme.textColor} text-center`}>\n\t\t\t\t\t\t\t\t\tReview the transaction details and asset changes carefully\n\t\t\t\t\t\t\t\t\tbefore proceeding.\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t{(status === \"pending\" || status === \"completed\") &&\n\t\t\t\trenderStatusIndicator()}\n\n\t\t\t<AnimatePresence>\n\t\t\t\t{status === \"ready\" && !autoExecute && !error && (\n\t\t\t\t\t<div className=\"flex space-x-4\">\n\t\t\t\t\t\t<motion.button\n\t\t\t\t\t\t\twhileHover={{ scale: 1.05 }}\n\t\t\t\t\t\t\twhileTap={{ scale: 0.95 }}\n\t\t\t\t\t\t\tonClick={handleSign}\n\t\t\t\t\t\t\tclassName={`mt-4 w-full py-3 px-4 bg-${theme.accentColor} text-${theme.backgroundColor} rounded-md font-bold text-lg shadow-md`}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tSign and Send Transaction\n\t\t\t\t\t\t</motion.button>\n\t\t\t\t\t\t<motion.button\n\t\t\t\t\t\t\twhileHover={{ scale: 1.05 }}\n\t\t\t\t\t\t\twhileTap={{ scale: 0.95 }}\n\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\tclassName={`mt-4 w-full py-3 px-4 bg-red-600 text-white rounded-md font-bold text-lg shadow-md`}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Tooltip content=\"Cancel the transaction process\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\t\t\t\tclassName=\"text-red-600\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tCancel\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</motion.button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{status === \"pending\" && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ opacity: 0, x: -20 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, x: 0 }}\n\t\t\t\t\t\texit={{ opacity: 0, x: 20 }}\n\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\tclassName={`mt-4 p-4 bg-yellow-100 border border-yellow-400 text-yellow-700 rounded-md flex items-center`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclassName=\"animate-spin -ml-1 mr-3 h-5 w-5 text-yellow-500\"\n\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\tclassName=\"opacity-25\"\n\t\t\t\t\t\t\t\tcx=\"12\"\n\t\t\t\t\t\t\t\tcy=\"12\"\n\t\t\t\t\t\t\t\tr=\"10\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"4\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\tclassName=\"opacity-75\"\n\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\td=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tTransaction is pending. Please wait...\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\n\t\t\t\t{status === \"completed\" && txReceipt && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ opacity: 0, x: -20 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, x: 0 }}\n\t\t\t\t\t\texit={{ opacity: 0, x: 20 }}\n\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\tclassName={`mt-4 p-4 bg-green-100 border border-green-400 text-green-700 rounded-md flex items-center`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CheckCircleIcon className=\"h-6 w-6 mr-2\" />\n\t\t\t\t\t\t<div className=\"flex-grow\">\n\t\t\t\t\t\t\t<h3 className=\"font-bold mb-2\">Transaction Completed</h3>\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\tTransaction Hash:{\" \"}\n\t\t\t\t\t\t\t\t<CopyToClipboard\n\t\t\t\t\t\t\t\t\ttext={txHash || \"\"}\n\t\t\t\t\t\t\t\t\tonCopy={() => alert(\"Transaction hash copied to clipboard!\")}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{selectedChain?.explorers &&\n\t\t\t\t\t\t\t\t\tArray.isArray(selectedChain.explorers) &&\n\t\t\t\t\t\t\t\t\tselectedChain.explorers.length > 0 ? (\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\thref={`${(selectedChain?.explorers as { url: string }[])?.[0]?.url}/tx/${txHash}`}\n\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{txHash}\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<div>{txHash}</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</CopyToClipboard>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p>Block Number: {txReceipt.blockNumber}</p>\n\t\t\t\t\t\t\t{txReceipt.gasUsed && (\n\t\t\t\t\t\t\t\t<p>Gas Used: {txReceipt.gasUsed.toString()}</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t\t{status === \"failed\" && (\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={{ opacity: 0, x: -20 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, x: 0 }}\n\t\t\t\t\t\texit={{ opacity: 0, x: 20 }}\n\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\tclassName={`mt-4 p-4 bg-red-100 border border-red-400 text-red-700 rounded-md flex items-center`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<XCircleIcon className=\"h-6 w-6 mr-2\" />\n\t\t\t\t\t\tTransaction failed. Please try again.\n\t\t\t\t\t</motion.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</motion.div>\n\t);\n};\n","import React, { useState, useMemo } from \"react\";\nimport { FiChevronDown } from \"react-icons/fi\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { useTheme } from \"@/context\";\n\ninterface TokenSelectorProps {\n\ttokens: any[];\n\tselectedToken: any;\n\tonSelect: (token: any) => void;\n\tchildren?: React.ReactNode;\n}\n\nexport const TokenSelector: React.FC<TokenSelectorProps> = ({\n\ttokens,\n\tselectedToken,\n\tonSelect,\n\tchildren,\n}) => {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [searchTerm, setSearchTerm] = useState(\"\");\n\tconst theme = useTheme();\n\n\tconst filteredTokens = useMemo(() => {\n\t\treturn tokens.filter(\n\t\t\t(token) =>\n\t\t\t\ttoken.symbol.toLowerCase().includes(searchTerm.toLowerCase()) ||\n\t\t\t\ttoken.name.toLowerCase().includes(searchTerm.toLowerCase()),\n\t\t);\n\t}, [tokens, searchTerm]);\n\n\tconst sortedTokens = useMemo(() => {\n\t\treturn filteredTokens.sort((a, b) => {\n\t\t\tconst balanceA = Number.parseFloat(a.balance || \"0\");\n\t\t\tconst balanceB = Number.parseFloat(b.balance || \"0\");\n\t\t\treturn balanceB - balanceA;\n\t\t});\n\t}, [filteredTokens]);\n\n\treturn (\n\t\t<RadixDialog.Root open={isOpen} onOpenChange={setIsOpen}>\n\t\t\t<RadixDialog.Trigger asChild>\n\t\t\t\t{children || (\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={`flex items-center justify-between w-full p-2 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{selectedToken ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"flex items-center\">\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={selectedToken.logoURI}\n\t\t\t\t\t\t\t\t\t\talt={selectedToken.symbol}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2 rounded-full\"\n\t\t\t\t\t\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span>{selectedToken.symbol}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<FiChevronDown />\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span>Select token</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</RadixDialog.Trigger>\n\n\t\t\t<AnimatePresence>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<RadixDialog.Portal forceMount>\n\t\t\t\t\t\t<RadixDialog.Overlay asChild>\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tclassName=\"fixed inset-0 bg-black/50\"\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</RadixDialog.Overlay>\n\t\t\t\t\t\t<RadixDialog.Content asChild>\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tclassName={`fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-md p-6 rounded-lg bg-${theme.backgroundColor} shadow-xl`}\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<RadixDialog.Title\n\t\t\t\t\t\t\t\t\tclassName={`text-lg font-bold mb-4 text-${theme.textColor}`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tSelect a token\n\t\t\t\t\t\t\t\t</RadixDialog.Title>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\tplaceholder=\"Search tokens\"\n\t\t\t\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n\t\t\t\t\t\t\t\t\tclassName={`w-full p-2 mb-4 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor}`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={`max-h-60 overflow-y-auto bg-${theme.backgroundColorSecondary} rounded-md`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{sortedTokens.map((token) => (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\tkey={token.address}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect(token);\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tclassName={`flex items-center w-full p-2 hover:bg-${theme.backgroundColorSecondary} rounded-md`}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={token.logoURI}\n\t\t\t\t\t\t\t\t\t\t\t\talt={token.symbol}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2 rounded-full\"\n\t\t\t\t\t\t\t\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<span className={`text-${theme.textColor}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t{token.symbol}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={`ml-2 text-sm text-${theme.textColorSecondary}`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{token.name}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={`ml-auto text-sm text-${theme.textColorSecondary}`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{token.balance}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</RadixDialog.Content>\n\t\t\t\t\t</RadixDialog.Portal>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</RadixDialog.Root>\n\t);\n};\n","import React from \"react\";\nimport { useTheme } from \"@/context\";\nimport { TokenSelector } from \"./TokenSelector\";\nimport { FiChevronDown } from \"react-icons/fi\";\n\ninterface TokenInputProps {\n\ttoken: any;\n\tamount: string;\n\tsetAmount: (value: string) => void;\n\ttokens: any[];\n\tonSelectToken: (token: any) => void;\n\tbalance: string;\n\tvalue: number;\n\treadOnly?: boolean;\n}\n\nexport const TokenInput: React.FC<TokenInputProps> = ({\n\ttoken,\n\tamount,\n\tsetAmount,\n\ttokens,\n\tonSelectToken,\n\tbalance,\n\tvalue,\n\treadOnly = false,\n}) => {\n\tconst theme = useTheme();\n\tconsole.log(\n\t\t\"TokenInputProps\",\n\t\ttoken,\n\t\tamount,\n\t\ttokens,\n\t\tonSelectToken,\n\t\tbalance,\n\t\tvalue,\n\t\treadOnly,\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`mb-4 p-4 rounded-2xl bg-${theme?.backgroundColorSecondary}`}\n\t\t>\n\t\t\t<div className=\"flex justify-between items-center mb-2\">\n\t\t\t\t<p className={`text-sm font-medium text-${theme?.textColorSecondary}`}>\n\t\t\t\t\t{readOnly ? \"You receive\" : \"You pay\"}\n\t\t\t\t</p>\n\t\t\t\t<p\n\t\t\t\t\tclassName={`text-sm text-${theme?.textColorSecondary} cursor-pointer`}\n\t\t\t\t\tonClick={() => !readOnly && setAmount(balance || \"0.00\")}\n\t\t\t\t>\n\t\t\t\t\tBalance: {balance || \"0.00\"}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tvalue={amount}\n\t\t\t\t\tonChange={(e) => setAmount(e.target.value)}\n\t\t\t\t\tplaceholder=\"0\"\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tclassName={`w-1/2 bg-transparent text-${theme?.textColor} text-3xl font-medium focus:outline-none`}\n\t\t\t\t/>\n\t\t\t\t<div className=\"flex items-center\">\n\t\t\t\t\t<TokenSelector\n\t\t\t\t\t\ttokens={tokens}\n\t\t\t\t\t\tselectedToken={token}\n\t\t\t\t\t\tonSelect={onSelectToken}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={`flex items-center bg-${theme?.backgroundColor} rounded-2xl p-2 cursor-pointer`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{token && (\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={token.logoURI}\n\t\t\t\t\t\t\t\t\talt={token.symbol}\n\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2 rounded-full\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<span className={`font-medium text-${theme?.textColor} mr-1`}>\n\t\t\t\t\t\t\t\t{token ? token.symbol : \"Select token\"}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<FiChevronDown className={`text-${theme?.textColorSecondary}`} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</TokenSelector>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<p className={`text-sm text-${theme?.textColorSecondary} mt-2`}>\n\t\t\t\t${value.toFixed(2)} USD\n\t\t\t</p>\n\t\t</div>\n\t);\n};\n","import React, { useState, useMemo } from \"react\";\nimport { FiChevronDown } from \"react-icons/fi\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { useTheme } from \"@/context\";\n\ninterface ChainSelectorProps {\n\tchains: any[];\n\tselectedChain: any;\n\tonSelectChain: (chain: any) => void;\n\tchildren?: React.ReactNode;\n\ttoolDetails?: {\n\t\tkey: string;\n\t\tname: string;\n\t\tlogoURI: string;\n\t};\n}\n\nexport const ChainSelector: React.FC<ChainSelectorProps> = ({\n\tchains,\n\tselectedChain,\n\tonSelectChain,\n\tchildren,\n\ttoolDetails,\n}) => {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [searchTerm, setSearchTerm] = useState(\"\");\n\tconst theme = useTheme();\n\n\tconst filteredChains = useMemo(() => {\n\t\treturn chains.filter((chain) =>\n\t\t\tchain.name.toLowerCase().includes(searchTerm.toLowerCase()),\n\t\t);\n\t}, [chains, searchTerm]);\n\n\treturn (\n\t\t<RadixDialog.Root open={isOpen} onOpenChange={setIsOpen}>\n\t\t\t<RadixDialog.Trigger asChild>\n\t\t\t\t{children || (\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={`flex items-center justify-between w-full p-2 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{selectedChain ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"flex items-center\">\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={selectedChain.logoURI}\n\t\t\t\t\t\t\t\t\t\talt={selectedChain.name}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2 rounded-full\"\n\t\t\t\t\t\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span>{selectedChain.name}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{toolDetails && (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={toolDetails.logoURI}\n\t\t\t\t\t\t\t\t\t\talt={toolDetails.name}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 ml-2 rounded-full\"\n\t\t\t\t\t\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<FiChevronDown />\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span>Select chain</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</RadixDialog.Trigger>\n\n\t\t\t<AnimatePresence>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<RadixDialog.Portal forceMount>\n\t\t\t\t\t\t<RadixDialog.Overlay asChild>\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tclassName=\"fixed inset-0 bg-black/50\"\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</RadixDialog.Overlay>\n\t\t\t\t\t\t<RadixDialog.Content asChild>\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tclassName={`fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-md p-6 rounded-lg bg-${theme.backgroundColor} shadow-xl`}\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<RadixDialog.Title\n\t\t\t\t\t\t\t\t\tclassName={`text-lg font-bold mb-4 text-${theme.textColor}`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tSelect a chain\n\t\t\t\t\t\t\t\t</RadixDialog.Title>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\tplaceholder=\"Search chains\"\n\t\t\t\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n\t\t\t\t\t\t\t\t\tclassName={`w-full p-2 mb-4 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor}`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={`max-h-60 overflow-y-auto bg-${theme.backgroundColorSecondary} rounded-md`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{filteredChains.map((chain) => (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\tkey={chain.chainId}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t// chain is a nested dict\n\t\t\t\t\t\t\t\t\t\t\t\tonSelectChain(chain);\n\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tclassName={`flex items-center w-full p-2 hover:bg-${theme.backgroundColor} rounded-md`}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={chain.logoURI}\n\t\t\t\t\t\t\t\t\t\t\t\talt={chain.name}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2 rounded-full\"\n\t\t\t\t\t\t\t\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<span className={`text-${theme.textColor}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t{chain.name}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</RadixDialog.Content>\n\t\t\t\t\t</RadixDialog.Portal>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</RadixDialog.Root>\n\t);\n};\n","import React from \"react\";\nimport * as RadixSlider from \"@radix-ui/react-slider\";\nimport * as RadixTooltip from \"@radix-ui/react-tooltip\";\nimport { FiSettings } from \"react-icons/fi\";\nimport { useTheme } from \"@/context\";\n\ninterface SlippageSettingsProps {\n\tslippage: number;\n\tsetSlippage: (value: number) => void;\n}\n\nexport const SlippageSettings: React.FC<SlippageSettingsProps> = ({\n\tslippage,\n\tsetSlippage,\n}) => {\n\tconst theme = useTheme();\n\n\treturn (\n\t\t<RadixTooltip.Provider>\n\t\t\t<RadixTooltip.Root>\n\t\t\t\t<RadixTooltip.Trigger asChild>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={`p-2 rounded-full bg-${theme?.backgroundColorSecondary} text-${theme?.textColor} mb-4`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<FiSettings />\n\t\t\t\t\t</button>\n\t\t\t\t</RadixTooltip.Trigger>\n\t\t\t\t<RadixTooltip.Content\n\t\t\t\t\tclassName={`p-4 rounded-md bg-${theme?.backgroundColorSecondary} text-${theme?.textColor} shadow-lg`}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"mb-2\">Slippage Tolerance</div>\n\t\t\t\t\t<RadixSlider.Root\n\t\t\t\t\t\tclassName=\"relative flex items-center w-48 h-5\"\n\t\t\t\t\t\tvalue={[slippage]}\n\t\t\t\t\t\tonValueChange={(value) => setSlippage(value[0])}\n\t\t\t\t\t\tmax={5}\n\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RadixSlider.Track\n\t\t\t\t\t\t\tclassName={`relative h-1 flex-grow rounded-full bg-${theme?.backgroundColor}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<RadixSlider.Range\n\t\t\t\t\t\t\t\tclassName={`absolute h-full rounded-full bg-${theme?.accentColor}`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</RadixSlider.Track>\n\t\t\t\t\t\t<RadixSlider.Thumb\n\t\t\t\t\t\t\tclassName={`block w-5 h-5 rounded-full bg-${theme?.accentColor}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</RadixSlider.Root>\n\t\t\t\t\t<div className=\"mt-2\">{slippage.toFixed(1)}%</div>\n\t\t\t\t</RadixTooltip.Content>\n\t\t\t</RadixTooltip.Root>\n\t\t</RadixTooltip.Provider>\n\t);\n};\n","import React from \"react\";\nimport { useTheme } from \"@/context\";\nimport { formatUnits } from \"ethers\";\nimport type { Quote } from \"@moonup/moon-api\";\n\ninterface SwapDetailsProps {\n\tquoteResult: Quote;\n\tfromToken: any;\n\ttoToken: any;\n\tslippage: number;\n}\n\nexport const SwapDetails: React.FC<SwapDetailsProps> = ({\n\tquoteResult,\n\tfromToken,\n\ttoToken,\n\tslippage,\n}) => {\n\tconst theme = useTheme();\n\tconst { estimate } = quoteResult;\n\n\tconst gasCost = estimate.gasCosts.reduce(\n\t\t(total, cost) =>\n\t\t\ttotal + Number(formatUnits(cost.amount, cost.token.decimals)),\n\t\t0,\n\t);\n\n\tconst exchangeRate = Number(estimate.toAmount) / Number(estimate.fromAmount);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`p-4 rounded-2xl bg-${theme?.backgroundColorSecondary} text-${theme?.textColor}`}\n\t\t>\n\t\t\t<h3 className=\"font-bold mb-4\">Transaction Details</h3>\n\t\t\t<div className=\"space-y-2\">\n\t\t\t\t<DetailRow\n\t\t\t\t\tlabel=\"Rate\"\n\t\t\t\t\tvalue={`1 ${fromToken.symbol} = ${exchangeRate.toFixed(6)} ${toToken.symbol}`}\n\t\t\t\t/>\n\t\t\t\t<DetailRow\n\t\t\t\t\tlabel=\"Minimum received\"\n\t\t\t\t\tvalue={`${formatUnits(estimate.toAmountMin, toToken.decimals)} ${toToken.symbol}`}\n\t\t\t\t/>\n\t\t\t\t<DetailRow\n\t\t\t\t\tlabel=\"Price Impact\"\n\t\t\t\t\tvalue={`${(((Number(estimate.fromAmountUSD) - Number(estimate.toAmountUSD)) / Number(estimate.fromAmountUSD)) * 100).toFixed(2)}%`}\n\t\t\t\t/>\n\t\t\t\t<DetailRow label=\"Network Fee\" value={`≈ $${gasCost.toFixed(2)}`} />\n\t\t\t\t{quoteResult.includedSteps.length > 1 && (\n\t\t\t\t\t<DetailRow\n\t\t\t\t\t\tlabel=\"Route\"\n\t\t\t\t\t\tvalue={quoteResult.includedSteps\n\t\t\t\t\t\t\t.map((step) => step.tool)\n\t\t\t\t\t\t\t.join(\" > \")}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst DetailRow: React.FC<{ label: string; value: string }> = ({\n\tlabel,\n\tvalue,\n}) => {\n\tconst theme = useTheme();\n\treturn (\n\t\t<div className=\"flex justify-between\">\n\t\t\t<span className={`text-${theme?.textColorSecondary}`}>{label}</span>\n\t\t\t<span className=\"font-medium\">{value}</span>\n\t\t</div>\n\t);\n};\n","import { useOdos } from '@/hooks';\nimport { OdosTokenMap } from '@/types';\nimport React, { useEffect, useState } from 'react';\n\ntype OdosTokenSelectorProps = {\n  initialTokenAddress?: string;\n  selectProps?: React.SelectHTMLAttributes<HTMLSelectElement>;\n  optionProps?: React.OptionHTMLAttributes<HTMLOptionElement>;\n};\n\nexport const OdosTokenSelector = ({\n  initialTokenAddress,\n  selectProps,\n  optionProps,\n}: OdosTokenSelectorProps) => {\n  const [selectedTokenAddress, setSelectedTokenAddress] = useState<\n    string | undefined\n  >(initialTokenAddress);\n  const { supportedTokensQuery } = useOdos();\n\n  useEffect(() => {\n    if (selectedTokenAddress !== initialTokenAddress)\n      setSelectedTokenAddress(initialTokenAddress);\n  }, [initialTokenAddress]);\n\n  const tokenData = supportedTokensQuery.isSuccess\n    ? ((supportedTokensQuery.data as any).data.tokenMap as OdosTokenMap)\n    : ({} as OdosTokenMap);\n\n  return (\n    <select\n      className=\"max-h-[300px] bg-accent-color rounded-xl p-3 m-1 text-text-primary\"\n      value={selectedTokenAddress || ''}\n      onChange={(e) => {\n        setSelectedTokenAddress(e.target.value);\n        if (selectProps?.onChange) selectProps.onChange(e);\n      }}\n      {...selectProps}\n    >\n      {Object.keys(tokenData).map((contractAddress: any) => (\n        <option\n          key={contractAddress}\n          value={contractAddress}\n          className=\"p-2\"\n          {...optionProps}\n        >\n          {tokenData[contractAddress].name} ({tokenData[contractAddress].symbol}\n          )\n        </option>\n      ))}\n    </select>\n  );\n};\n","import { Input, InputProps, Modal } from '@/components';\nimport { useOdos } from '@/index';\nimport { OdosTokenMap } from '@/types';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nexport type OdosTokenSelectorProps = {\n  initialTokenAddress?: string;\n  onSelect: (tokenAddress: string) => void;\n  title?: string;\n  headerProps?: React.HTMLAttributes<HTMLDivElement>;\n  buttonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n  inputProps?: InputProps;\n  listProps?: React.HTMLAttributes<HTMLDivElement>;\n  listItemProps?: React.HTMLAttributes<HTMLDivElement>;\n};\n\nexport const OdosTokenSelectorModal: React.FC<OdosTokenSelectorProps> = ({\n  initialTokenAddress,\n  onSelect,\n  title,\n  headerProps,\n  buttonProps,\n  inputProps,\n  listProps,\n  listItemProps,\n}) => {\n  const [selectedTokenAddress, setSelectedTokenAddress] = useState<\n    string | undefined\n  >(initialTokenAddress);\n  const { supportedTokensQuery } = useOdos();\n\n  useEffect(() => {\n    if (selectedTokenAddress !== initialTokenAddress)\n      setSelectedTokenAddress(initialTokenAddress);\n  }, [initialTokenAddress]);\n\n  const tokenData = supportedTokensQuery.isSuccess\n    ? ((supportedTokensQuery.data as any).data.tokenMap as OdosTokenMap)\n    : ({} as OdosTokenMap);\n\n  const [isOpen, setIsOpen] = useState(false);\n  const [searchTerm, setSearchTerm] = useState('');\n\n  const filteredTokenAddress = useMemo(() => {\n    return Object.keys(tokenData).filter((contractAddress: string) => {\n      return (\n        contractAddress.toLowerCase().includes(searchTerm.toLowerCase()) ||\n        tokenData[contractAddress].name\n          .toLowerCase()\n          .includes(searchTerm.toLowerCase()) ||\n        tokenData[contractAddress].symbol\n          .toLowerCase()\n          .includes(searchTerm.toLowerCase())\n      );\n    });\n  }, [tokenData, searchTerm]);\n\n  const toggleModal = (e?: any) => {\n    e && e.preventDefault(); // Prevent form submission\n    setIsOpen(!isOpen);\n  };\n\n  const handleTokenSelect = (tokenAddress: string) => {\n    setSelectedTokenAddress(tokenAddress);\n    onSelect(tokenAddress);\n    toggleModal();\n  };\n\n  return (\n    <>\n      <button\n        className=\"bg-accent-color rounded-xl p-3 m-1 text-text-primary\"\n        onClick={toggleModal}\n        {...buttonProps}\n      >\n        {(selectedTokenAddress && tokenData[selectedTokenAddress]?.name) ||\n          'Select Token'}\n      </button>\n      <Modal isOpen={isOpen} toggleModal={toggleModal}>\n        {title && (\n          <h2 className=\"text-xl font-semibold mb-4\" {...headerProps}>\n            {title}\n          </h2>\n        )}\n        <Input\n          label=\"Search Tokens\"\n          type=\"text\"\n          placeholder=\"Search tokens...\"\n          value={searchTerm}\n          onChange={(e) => setSearchTerm(e.target.value)}\n          className=\"w-full p-2 mb-4 border border-gray-300 rounded\"\n          {...inputProps}\n        />\n        <div className=\"max-h-[300px] overflow-y-auto\" {...listProps}>\n          {filteredTokenAddress.map((tokenAddresses: string) => (\n            <div\n              key={tokenAddresses}\n              onClick={() => handleTokenSelect(tokenAddresses)}\n              className=\"p-2 cursor-pointer hover:bg-accent-color rounded-sm\"\n              {...listItemProps}\n            >\n              {tokenData[tokenAddresses].name} (\n              {tokenData[tokenAddresses].symbol})\n            </div>\n          ))}\n        </div>\n      </Modal>\n    </>\n  );\n};\n","import { Button } from \"@/components\";\nimport { useMoonTokenManager, useOdos } from \"@/hooks\";\nimport { safelyParseUnits, weiStringAsFloat } from \"@/utils/parse\";\nimport type {\n\tOdosAPIResponseOdosExecuteFunctionResult,\n\tOdosSwapInputBody,\n} from \"@moonup/moon-api\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport React, { useEffect, useState } from \"react\";\nimport { useDebounceCallback } from \"usehooks-ts\";\nimport { useMoonSDK } from \"../../../../hooks/old/useMoonSDK\";\nimport { ChainSelectorModal } from \"../../../Web3/Chains/ChainSelectors/ChainSelectorModal\";\nimport type { UserToken } from \"../../../Web3/TokenManager/types\";\n\n// interface Token {\n//   address: string;\n//   symbol: string;\n//   decimals: number;\n// }\n\n// type EstimateResult = {\n//   message?: string;\n//   tx: {\n//     from: string;\n//     to: string;\n//     gas: string;\n//     nonce: number;\n//     value: string;\n//     simulation: {\n//       simulationResults: string;\n//       data: string;\n//     };\n//     data: string;\n//   };\n//   info: {\n//     amountOutMin: string;\n//     amountOut: string;\n//     affiliateAggregator: string;\n//     affiliateGas: string;\n//     conveyorGas: string;\n//     gasPrice: string;\n//     poolNames: string[];\n//   };\n//   tax: {\n//     tokenInSellTax: number;\n//     tokenInBuyTax: number;\n//     tokenOutSellTax: number;\n//     tokenOutBuyTax: number;\n//   };\n//   chainId: number;\n//   currentBlockNumber: string;\n// };\nexport const converyGasTokenAddress =\n\t\"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\nexport type ButtonStatus =\n\t| \"Estimate\"\n\t| \"Estimating...\"\n\t| \"Swapping...\"\n\t| \"Swap\"\n\t| \"Insufficient Balance\";\n\nexport const SwapInterface: React.FC = () => {\n\tconst { wallet } = useMoonSDK();\n\tconst { swapOdos, getQuoteOdos } = useOdos();\n\tconst { tokensWithGasToken: tokenList, chain } = useMoonTokenManager();\n\n\tconst [estimateResult, setEstimate] =\n\t\tuseState<OdosAPIResponseOdosExecuteFunctionResult | null>(null);\n\tconst [fromToken, setFromToken] = React.useState<UserToken | null>(null);\n\tconst [toToken, setToToken] = React.useState<UserToken | null>(null);\n\tconst [fromAmount, setFromAmount] = React.useState<string>(\"\");\n\tconst [toAmount, setToAmount] = React.useState<string>(\"\");\n\tconst [slippage, setSlippage] = React.useState<string>(\"0.5\");\n\n\tconst [buttonStatus, setButtonStatus] =\n\t\tReact.useState<ButtonStatus>(\"Estimate\");\n\tconst queryClient = useQueryClient();\n\n\t// Mock token list - replace with actual token list from your API\n\t//   const tokenList: Token[] = [\n\t//     { address: \"0x...\", symbol: \"ETH\", decimals: 18 },\n\t//     { address: \"0x...\", symbol: \"USDC\", decimals: 6 },\n\t//     { address: \"0x...\", symbol: \"DAI\", decimals: 18 },\n\t//   ];\n\n\tuseEffect(() => {\n\t\tif (fromToken && toToken && fromAmount) {\n\t\t\tdebouncedHandleEstimate();\n\t\t}\n\t}, [fromToken, toToken, fromAmount, slippage]);\n\n\tconst handleEstimate = async () => {\n\t\tif (!fromToken || !toToken || !fromAmount) return;\n\n\t\tsetButtonStatus(\"Estimating...\");\n\t\tconst bigAmountWei = safelyParseUnits(fromAmount, fromToken.decimals);\n\n\t\ttry {\n\t\t\tconst swapParams: OdosSwapInputBody = {\n\t\t\t\tinputTokens: [\n\t\t\t\t\t{\n\t\t\t\t\t\tamount: bigAmountWei.toString(),\n\t\t\t\t\t\ttokenAddress: fromToken.address,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\toutputTokens: [\n\t\t\t\t\t{\n\t\t\t\t\t\tproportion: 1,\n\t\t\t\t\t\ttokenAddress: toToken.address,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tslippageLimitPercent: Math.round(Number.parseFloat(slippage) * 100),\n\t\t\t\tchain_id: chain?.chain_id?.toString() || \"1\", // Assuming Ethereum mainnet\n\t\t\t};\n\n\t\t\tconst estimateResult = await getQuoteOdos({\n\t\t\t\taccountName: wallet || \"\",\n\t\t\t\tdata: swapParams,\n\t\t\t});\n\t\t\tsetEstimate(estimateResult);\n\t\t\tconsole.log(\"Estimate result:\", estimateResult);\n\t\t\tsetToAmount(\"0\");\n\t\t\tsetButtonStatus(\"Swap\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Estimate failed:\", error);\n\t\t\tsetButtonStatus(\"Estimate\");\n\t\t}\n\t};\n\tconst debouncedHandleEstimate = useDebounceCallback(handleEstimate, 1000);\n\n\tconst handleSwap = async () => {\n\t\tif (!fromToken || !toToken || !fromAmount || !toAmount || !wallet) return;\n\n\t\tsetButtonStatus(\"Swapping...\");\n\t\t//convert fromAmount from float to bigInt\n\t\tconst bigAmountWei = safelyParseUnits(fromAmount, fromToken.decimals);\n\t\ttry {\n\t\t\tconst swapParams: OdosSwapInputBody = {\n\t\t\t\tinputTokens: [\n\t\t\t\t\t{\n\t\t\t\t\t\tamount: bigAmountWei.toString(),\n\t\t\t\t\t\ttokenAddress: fromToken.address,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\toutputTokens: [\n\t\t\t\t\t{\n\t\t\t\t\t\tproportion: 1,\n\t\t\t\t\t\ttokenAddress: toToken.address,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tslippageLimitPercent: Math.round(Number.parseFloat(slippage) * 100),\n\t\t\t\tchain_id: chain?.chain_id?.toString() || \"\", // Assuming Ethereum mainnet\n\t\t\t\tbroadcast: true,\n\t\t\t};\n\n\t\t\tconst result = await swapOdos({\n\t\t\t\taccountName: wallet,\n\t\t\t\tdata: swapParams,\n\t\t\t});\n\t\t\tqueryClient.invalidateQueries({ queryKey: [\"erc20TokenBalances\"] });\n\n\t\t\tconsole.log(\"Swap executed:\", result);\n\t\t\tsetButtonStatus(\"Estimate\");\n\t\t\t// Handle successful swap (e.g., show success message, update balances)\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Swap failed:\", error);\n\t\t\t// Handle swap error (e.g., show error message)\n\t\t\tsetButtonStatus(\"Swap\");\n\t\t}\n\t};\n\n\t// const formatEth = (value: string) => {\n\t//   return weiStringAsFloat(value, 10) + \" ETH\";\n\t// };\n\n\t// const formatUsd = (value: string) => {\n\t//   let ether = weiStringAsFloat(value, 10);\n\t//   let usd = ether * (gasToken?.price || 0);\n\t//   return \"$\" + usd.toFixed(2);\n\t// };\n\n\t// const calculatePriceImpact = (amountIn: string, amountOut: string) => {\n\t//   const inValue = parseFloat(amountIn) * (fromToken?.price || 0);\n\t//   const outValue = parseFloat(amountOut) * (toToken?.price || 0);\n\t//   console.log(\"inValue\", inValue, fromToken, \"outValue\", outValue, toToken);\n\t//   const impact = ((inValue - outValue) / inValue) * 100;\n\t//   return impact.toFixed(2) + \"%\";\n\t// };\n\n\tconst tokensFilteredForChain = tokenList.filter(\n\t\t(token) => token.chainId === chain?.chain_id,\n\t);\n\n\tconst onSelectToken = (e: any, setter: any) => {\n\t\tconst token =\n\t\t\ttokensFilteredForChain.find((t) => t.symbol === e.target.value) || null;\n\t\tif (token?.isGasToken)\n\t\t\tsetter({ ...token, address: converyGasTokenAddress });\n\t\telse setter(token);\n\t};\n\n\treturn (\n\t\t<div className=\"bg-background-primary text-white p-6 rounded-xl max-w-lg mx-auto\">\n\t\t\t<ChainSelectorModal\n\t\t\t\tchainIdFilterList={[1, 56, 137, 42161, 8453, 10]}\n\t\t\t\tbuttonProps={{\n\t\t\t\t\tclassName: \"w-full bg-gray-800 rounded-lg p-2 mb-4\",\n\t\t\t\t}}\n\t\t\t/>\n\n\t\t\t<div className=\"mb-4\">\n\t\t\t\t<label className=\"block mb-2 text-text-secondary\">Swap From</label>\n\t\t\t\t<div className=\"flex items-center bg-gray-800 rounded-lg p-2\">\n\t\t\t\t\t<select\n\t\t\t\t\t\tclassName=\"bg-transparent flex-grow\"\n\t\t\t\t\t\tvalue={fromToken?.symbol || \"\"}\n\t\t\t\t\t\tonChange={(e) => onSelectToken(e, setFromToken)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<option value=\"\" className=\"bg-gray-800\">\n\t\t\t\t\t\t\tSelect token\n\t\t\t\t\t\t</option>\n\t\t\t\t\t\t{/* {gasToken && (\n              <option\n                className=\"bg-gray-800\"\n                key={gasToken.symbol + \"fromToken\"}\n                value={gasToken.symbol}\n              >\n                {gasToken.symbol}\n              </option>\n            )} */}\n\t\t\t\t\t\t{tokensFilteredForChain &&\n\t\t\t\t\t\t\ttokensFilteredForChain.map((token) => (\n\t\t\t\t\t\t\t\t<option\n\t\t\t\t\t\t\t\t\tclassName=\"bg-gray-800\"\n\t\t\t\t\t\t\t\t\tkey={token.symbol + \"fromToken\"}\n\t\t\t\t\t\t\t\t\tvalue={token.symbol}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{token.symbol}\n\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t<Button>test</Button>\n\t\t\t\t\t</select>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tvalue={fromAmount}\n\t\t\t\t\t\tonChange={(e) => setFromAmount(e.target.value)}\n\t\t\t\t\t\tplaceholder=\"0.0\"\n\t\t\t\t\t\tclassName=\"bg-transparent text-right text-2xl \"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<p className=\"text-sm text-gray-400 mt-1\">\n\t\t\t\t\tBalance: {fromToken?.balance || 0}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div className=\"mb-4\">\n\t\t\t\t<label className=\"block mb-2 text-text-secondary\">Swap To</label>\n\t\t\t\t<div className=\"flex items-center bg-gray-800 rounded-lg p-2\">\n\t\t\t\t\t<select\n\t\t\t\t\t\tclassName=\"bg-transparent flex-grow\"\n\t\t\t\t\t\tvalue={toToken?.symbol || \"\"}\n\t\t\t\t\t\tonChange={(e) => onSelectToken(e, setToToken)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<option value=\"\" className=\"bg-gray-800\">\n\t\t\t\t\t\t\tSelect token\n\t\t\t\t\t\t</option>\n\t\t\t\t\t\t{/* {gasToken && (\n              <option\n                className=\"bg-gray-800\"\n                key={gasToken.symbol + \"toeth\"}\n                value={gasToken.symbol}\n              >\n                {gasToken.symbol}\n              </option>\n            )} */}\n\t\t\t\t\t\t{tokensFilteredForChain.map((token) => (\n\t\t\t\t\t\t\t<option\n\t\t\t\t\t\t\t\tclassName=\"bg-gray-800\"\n\t\t\t\t\t\t\t\tkey={token.symbol + \"toToken\"}\n\t\t\t\t\t\t\t\tvalue={token.symbol}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{token.symbol}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</select>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tvalue={weiStringAsFloat(\"0\") || \"amountOut\"}\n\t\t\t\t\t\treadOnly\n\t\t\t\t\t\tplaceholder=\"0.0\"\n\t\t\t\t\t\tclassName=\"bg-transparent text-right text-2xl \"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<p className=\"text-sm text-gray-400 mt-1\">\n\t\t\t\t\tBalance: {toToken?.balance}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div className=\"mb-4\">\n\t\t\t\t<label className=\"block mb-2\">Slippage Tolerance</label>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tvalue={slippage}\n\t\t\t\t\tonChange={(e) => setSlippage(e.target.value)}\n\t\t\t\t\tclassName=\"bg-gray-800 rounded-lg p-2 w-full\"\n\t\t\t\t\tstep=\"0.1\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{estimateResult?.message && (\n\t\t\t\t<div className=\"bg-red-500 p-4 rounded-lg mb-4\">\n\t\t\t\t\t{estimateResult.message}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{/* {estimateResult && !estimateResult?.message && (\n        <div className=\"mb-4 bg-gray-800 rounded-lg p-4\">\n          <h3 className=\"text-lg font-semibold mb-2\">\n            Best route from {estimateResult.info.affiliateAggregator} API\n          </h3>\n          <div className=\"grid grid-cols-2 gap-2 text-sm\">\n            <div>{estimateResult.info.affiliateAggregator} Gas</div>\n            <div className=\"text-right\">\n              {formatEth(estimateResult.info.affiliateGas)} (\n              {formatUsd(estimateResult.info.affiliateGas)})\n            </div>\n            <div>Conveyor Gas</div>\n            <div className=\"text-right\">\n              {formatEth(estimateResult.info.conveyorGas)} (\n              {formatUsd(estimateResult.info.conveyorGas)})\n            </div>\n            <div>Gas Saved</div>\n            <div className=\"text-green-500 text-right\">\n              {formatEth(\n                (\n                  parseFloat(estimateResult.info.affiliateGas) -\n                  parseFloat(estimateResult.info.conveyorGas)\n                ).toString()\n              )}\n              (\n              {formatUsd(\n                (\n                  parseFloat(estimateResult.info.affiliateGas) -\n                  parseFloat(estimateResult.info.conveyorGas)\n                ).toString()\n              )}\n              )\n            </div>\n          </div>\n          <div className=\"mt-2\">\n            1 {fromToken?.symbol} ={\" \"}\n            {(\n              weiStringAsFloat(estimateResult.info.amountOut) /\n              parseFloat(fromAmount)\n            ).toFixed(4)}{\" \"}\n            {toToken?.symbol}\n          </div>\n          <div className=\"grid grid-cols-2 gap-2 mt-2\">\n            <div>Slippage:</div>\n            <div className=\"text-right\">{slippage}%</div>\n            <div>Price impact</div>\n            <div className=\"text-right\">\n              {calculatePriceImpact(\n                fromAmount,\n                weiStringAsFloat(estimateResult.info.amountOut).toString()\n              )}\n            </div>\n            <div>Expected Output</div>\n            <div className=\"text-right\">\n              {weiStringAsFloat(estimateResult.info.amountOut).toFixed(4)}{\" \"}\n              {toToken?.symbol}\n            </div>\n            <div>Minimum received (@ {slippage}% slippage)</div>\n            <div className=\"text-right\">\n              {weiStringAsFloat(estimateResult.info.amountOutMin).toFixed(4)}{\" \"}\n              {toToken?.symbol}\n            </div>\n          </div>\n        </div>\n      )} */}\n\n\t\t\t<Button onClick={handleSwap} disabled={buttonStatus != \"Swap\"}>\n\t\t\t\t{buttonStatus}\n\t\t\t</Button>\n\t\t</div>\n\t);\n};\n","import { useMoonSDK } from '../old/useMoonSDK';\n\nexport const useMoonChain = () => {\n  const { chains, chain, listChains, setChain } = useMoonSDK();\n  return {\n    chains,\n    currentChain: chain,\n    listChains,\n    setChain,\n  };\n};\n","import { Input, InputProps, Modal } from '@/components';\nimport { useMoonChain } from '@/hooks/web3/useMoonChain';\nimport { Chains } from '@moonup/moon-sdk';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nexport type ChainSelectorProps = {\n  chainIdFilterList?: number[];\n  title?: string;\n  headerProps?: React.HTMLAttributes<HTMLDivElement>;\n  buttonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n  inputProps?: InputProps;\n  listProps?: React.HTMLAttributes<HTMLDivElement>;\n  listItemProps?: React.HTMLAttributes<HTMLDivElement>;\n  modalProps?: React.HTMLAttributes<HTMLDivElement>;\n  controlSelectedChain?: boolean;\n  onChange?: (e: any) => void;\n};\n\nexport const ChainSelectorModal: React.FC<ChainSelectorProps> = ({\n  chainIdFilterList,\n  title,\n  headerProps,\n  buttonProps,\n  inputProps,\n  listProps,\n  listItemProps,\n  modalProps,\n  onChange,\n  controlSelectedChain = true,\n}) => {\n  const { chains, setChain, currentChain: chain } = useMoonChain();\n  const [isOpen, setIsOpen] = useState(false);\n  const [searchTerm, setSearchTerm] = useState('');\n  const [selectedChain, setSelectedChain] = useState<Chains | undefined>();\n\n  useEffect(() => {\n    if (!selectedChain && chain) setSelectedChain(chain);\n  }, [chain, selectedChain]);\n\n  useEffect(() => {\n    const mainnet = chains.find((chain: Chains) => chain.chain_id === 1);\n    if (!chain && mainnet && controlSelectedChain) setChain(mainnet);\n  }, [chains, setChain, chain]);\n\n  const sortedChains = useMemo(() => {\n    return chains.sort((a: Chains, b: Chains) => {\n      if (!a?.name || !b?.name) return 0;\n      return a.name.localeCompare(b.name);\n    });\n  }, [chains]);\n\n  const filteredChains = useMemo(() => {\n    return sortedChains.filter((chain: Chains) => {\n      if (!chain.name) return 0;\n      return (\n        chain.name.toLowerCase().includes(searchTerm.toLowerCase()) &&\n        (!chainIdFilterList || chainIdFilterList.includes(chain.chain_id || -1))\n      );\n    });\n  }, [sortedChains, searchTerm]);\n\n  const toggleModal = (e?: any) => {\n    e && e.preventDefault(); // Prevent form submission\n    setIsOpen(!isOpen);\n  };\n\n  const handleChainSelect = (chainId: string) => {\n    const selectedChain = chains.find((chain: Chains) => chain.id === chainId);\n    if (selectedChain && controlSelectedChain) setChain(selectedChain);\n    setSelectedChain(selectedChain);\n    toggleModal();\n    const fakeEvent = { target: { value: selectedChain?.chain_id } };\n    onChange && onChange(fakeEvent);\n  };\n\n  return (\n    <>\n      <button\n        className=\"bg-accent-color rounded-xl p-3 m-1 text-text-primary\"\n        onClick={toggleModal}\n        {...buttonProps}\n      >\n        {selectedChain?.name || 'Select Chain'}\n      </button>\n      <Modal isOpen={isOpen} toggleModal={toggleModal} modalProps={modalProps}>\n        {title && (\n          <h2 className=\"text-xl font-semibold mb-4\" {...headerProps}>\n            {title}\n          </h2>\n        )}\n        <Input\n          label=\"Search Chains\"\n          type=\"text\"\n          placeholder=\"Search chains...\"\n          value={searchTerm}\n          onChange={(e) => setSearchTerm(e.target.value)}\n          className=\"w-full p-2 mb-4 border border-gray-300 rounded\"\n          {...inputProps}\n        />\n        <div className=\"max-h-[300px] overflow-y-auto\" {...listProps}>\n          {filteredChains.map((chain: Chains) => (\n            <div\n              key={chain.id}\n              onClick={() => handleChainSelect(chain.id)}\n              className=\"p-2 cursor-pointer hover:bg-accent-color rounded-sm\"\n              {...listItemProps}\n            >\n              {chain.name}\n            </div>\n          ))}\n        </div>\n      </Modal>\n    </>\n  );\n};\n","import { useState, useEffect, useMemo } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { FiArrowDown } from \"react-icons/fi\";\nimport { useTheme } from \"@/context\";\nimport { useChains, useOdos } from \"@/hooks\";\nimport { Transaction } from \"@/components/Web3/Transactions/transactions\";\nimport { useMoonAccount } from \"@/hooks\";\nimport { formatUnits } from \"ethers\";\nimport { Button } from \"@/components\";\nimport { useQueryClient, useQuery } from \"@tanstack/react-query\";\nimport { safelyParseUnits } from \"../../../utils\";\nimport { useDebounceValue } from \"usehooks-ts\";\nimport { useErc20 } from \"@/hooks/contracts/useErc20\";\n\nimport { SlippageSettings } from \"./SlippageSettings\";\nimport { SwapDetails } from \"./SwapDetails\";\nimport { TokenInput } from \"./TokenInput\";\nimport type { InputBody } from \"@moonup/moon-api\";\n\ntype ButtonStatus =\n\t| \"Estimate\"\n\t| \"Estimating...\"\n\t| \"Swapping...\"\n\t| \"Swap\"\n\t| \"Insufficient Balance\";\n\nconst tokenPriceBaseUrl = \"https://api.odos.xyz/pricing/token\";\n\nconst fetchTokenPrice = async (chainId: number, tokenAddress: string) => {\n\tconst response = await fetch(\n\t\t`${tokenPriceBaseUrl}/${chainId}/${tokenAddress}`,\n\t);\n\tif (response.status === 200) {\n\t\tconst data = await response.json();\n\t\treturn data.price;\n\t} else {\n\t\tthrow new Error(\"Error fetching token price\");\n\t}\n};\n\nconst calculatePrice = (amount: string, price: number) => {\n\treturn Number.parseFloat(amount) * price;\n};\n\nconst formatBalance = (balance: string, decimals: number) => {\n\treturn formatUnits(balance, decimals);\n};\n\nconst fetchBalances = async (account: string, chainId: string) => {\n\tconst response = await fetch(\n\t\t`https://api.odos.xyz/balances/${account}/${chainId}`,\n\t);\n\tif (response.status === 200) {\n\t\tconst data = await response.json();\n\t\tconsole.log(data);\n\t\treturn data.balances;\n\t} else {\n\t\tthrow new Error(\"Error fetching balances\");\n\t}\n};\n\nconst fetchContractInfo = async (chainId: number) => {\n\tconst response = await fetch(\n\t\t`https://api.odos.xyz/info/contract-info/v2/${chainId}`,\n\t);\n\tif (response.status === 200) {\n\t\tconst data = await response.json();\n\t\treturn data;\n\t} else {\n\t\tthrow new Error(\"Error fetching contract info\");\n\t}\n};\n\nexport const OdosSwap = () => {\n\tconst theme = useTheme();\n\tconst { getQuoteOdos, swapOdos, supportedTokensQuery } = useOdos();\n\tconst { account } = useMoonAccount();\n\tconst queryClient = useQueryClient();\n\tconst { selectedChain } = useChains();\n\tconst { approveTokenSpendIfNeeded } = useErc20();\n\tconst [fromToken, setFromToken] = useState<any>(null);\n\tconst [toToken, setToToken] = useState<any>(null);\n\tconst [fromAmount, setFromAmount] = useState(\"\");\n\tconst [toAmount, setToAmount] = useState(\"\");\n\tconst [slippage, setSlippage] = useState(0.5);\n\tconst [estimateResult, setEstimateResult] = useState<any>(null);\n\tconst [buttonStatus, setButtonStatus] = useState<ButtonStatus>(\"Estimate\");\n\tconst [transactionData, setTransactionData] = useState<InputBody | null>(\n\t\tnull,\n\t);\n\tconst [_, setError] = useState<string | null>(null);\n\tconst [isSwapComplete, setIsSwapComplete] = useState(false);\n\tconst [showTransactionDetails, setShowTransactionDetails] = useState(false);\n\tconst [contractInfo, setContractInfo] = useState<any>(null);\n\n\tconst [debouncedFromAmount] = useDebounceValue(fromAmount, 500);\n\tconst { data: tokensFilteredForChain = [] } = supportedTokensQuery;\n\n\tconst { data: balanceData = [] } = useQuery({\n\t\tqueryKey: [\"OdosSwapBalances\", account, selectedChain?.chain_id],\n\t\tqueryFn: () =>\n\t\t\tfetchBalances(account, selectedChain?.chain_id?.toString() || \"1\"),\n\t\tenabled: !!account && !!selectedChain,\n\t});\n\n\tconst tokensWithBalances = useMemo(() => {\n\t\treturn tokensFilteredForChain.map((token) => {\n\t\t\tconst balance = balanceData?.find(\n\t\t\t\t(b: any) => b.address === token.address,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\t...token,\n\t\t\t\tbalance: balance\n\t\t\t\t\t? formatBalance(balance.balance.toString(), token.decimals)\n\t\t\t\t\t: \"0.00\",\n\t\t\t};\n\t\t});\n\t}, [tokensFilteredForChain, balanceData]);\n\n\tconst { data: fromTokenPrice, refetch: refetchFromTokenPrice } = useQuery({\n\t\tqueryKey: [\"tokenPrice\", fromToken],\n\t\tqueryFn: () =>\n\t\t\tfetchTokenPrice(selectedChain?.chain_id || 1, fromToken?.address),\n\t\tenabled: !!fromToken,\n\t});\n\n\tconst { data: toTokenPrice, refetch: refetchToTokenPrice } = useQuery({\n\t\tqueryKey: [\"tokenPrice\", toToken?.address],\n\t\tqueryFn: () =>\n\t\t\tfetchTokenPrice(selectedChain?.chain_id || 1, toToken?.address),\n\t\tenabled: !!toToken,\n\t});\n\n\tuseEffect(() => {\n\t\tif (fromToken && toToken) {\n\t\t\trefetchFromTokenPrice();\n\t\t\trefetchToTokenPrice();\n\t\t}\n\t}, [fromToken, toToken, refetchFromTokenPrice, refetchToTokenPrice]);\n\n\tconst fromValue = calculatePrice(fromAmount, fromTokenPrice || 0);\n\tconst toValue = calculatePrice(toAmount, toTokenPrice || 0);\n\n\tuseEffect(() => {\n\t\tif (fromToken && toToken && debouncedFromAmount) {\n\t\t\thandleEstimate();\n\t\t}\n\t}, [\n\t\tfromToken,\n\t\ttoToken,\n\t\tdebouncedFromAmount,\n\t\tslippage,\n\t\tfromTokenPrice,\n\t\ttoTokenPrice,\n\t]);\n\n\tuseEffect(() => {\n\t\tif (selectedChain && typeof selectedChain.chain_id === \"number\") {\n\t\t\tfetchContractInfo(selectedChain.chain_id)\n\t\t\t\t.then(setContractInfo)\n\t\t\t\t.catch((error) =>\n\t\t\t\t\tconsole.error(\"Error fetching contract info:\", error),\n\t\t\t\t);\n\t\t}\n\t}, [selectedChain]);\n\n\tconst handleEstimate = async () => {\n\t\tif (!fromToken || !toToken || !debouncedFromAmount) return;\n\n\t\tsetButtonStatus(\"Estimating...\");\n\t\tconst bigAmountWei = safelyParseUnits(\n\t\t\tdebouncedFromAmount,\n\t\t\tfromToken.decimals,\n\t\t);\n\n\t\ttry {\n\t\t\tconst swapParams = {\n\t\t\t\tinputTokens: [\n\t\t\t\t\t{ amount: bigAmountWei.toString(), tokenAddress: fromToken.address },\n\t\t\t\t],\n\t\t\t\toutputTokens: [{ proportion: 1, tokenAddress: toToken.address }],\n\t\t\t\tslippageLimitPercent: Math.round(slippage * 100),\n\t\t\t\tchain_id: selectedChain?.chain_id?.toString() || \"1\",\n\t\t\t};\n\n\t\t\tconst estimateResult = await getQuoteOdos({\n\t\t\t\taccountName: account || \"\",\n\t\t\t\tdata: swapParams,\n\t\t\t});\n\t\t\tsetEstimateResult(estimateResult);\n\t\t\tsetToAmount(\n\t\t\t\testimateResult?.data\n\t\t\t\t\t? formatUnits(estimateResult.data.outAmounts[0], toToken.decimals)\n\t\t\t\t\t: \"0\",\n\t\t\t);\n\t\t\tsetButtonStatus(\"Swap\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Estimate failed:\", error);\n\t\t\tsetButtonStatus(\"Estimate\");\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tconst interval = setInterval(() => {\n\t\t\thandleEstimate();\n\t\t}, 60000);\n\t\treturn () => clearInterval(interval);\n\t}, [fromToken, toToken, debouncedFromAmount, slippage]);\n\n\tconst handleSwap = async () => {\n\t\tif (\n\t\t\t!fromToken ||\n\t\t\t!toToken ||\n\t\t\t!fromAmount ||\n\t\t\t!toAmount ||\n\t\t\t!account ||\n\t\t\t!contractInfo\n\t\t)\n\t\t\treturn;\n\n\t\tsetButtonStatus(\"Swapping...\");\n\t\tconst bigAmountWei = safelyParseUnits(fromAmount, fromToken.decimals);\n\n\t\ttry {\n\t\t\t// Check if fromToken is not the native token\n\t\t\tif (fromToken.address !== \"0x0000000000000000000000000000000000000000\") {\n\t\t\t\tawait approveTokenSpendIfNeeded(\n\t\t\t\t\taccount,\n\t\t\t\t\tcontractInfo.routerAddress,\n\t\t\t\t\tfromToken.address,\n\t\t\t\t\tNumber.parseFloat(fromAmount),\n\t\t\t\t\tselectedChain?.chain_id?.toString() || \"1\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst swapParams = {\n\t\t\t\tinputTokens: [\n\t\t\t\t\t{ amount: bigAmountWei.toString(), tokenAddress: fromToken.address },\n\t\t\t\t],\n\t\t\t\toutputTokens: [{ proportion: 1, tokenAddress: toToken.address }],\n\t\t\t\tslippageLimitPercent: Math.round(slippage * 100),\n\t\t\t\tchain_id: selectedChain?.chain_id?.toString() || \"1\",\n\t\t\t\tbroadcast: false,\n\t\t\t\tdryrun: true,\n\t\t\t};\n\n\t\t\tconst result = (await swapOdos({\n\t\t\t\taccountName: account,\n\t\t\t\tdata: swapParams,\n\t\t\t})) as any;\n\t\t\tqueryClient.invalidateQueries({ queryKey: [\"erc20TokenBalances\"] });\n\t\t\tconsole.log(result);\n\n\t\t\tsetTransactionData({\n\t\t\t\tto: result.transaction.to,\n\t\t\t\tdata: result.transaction.data,\n\t\t\t\tvalue: result.transaction.value,\n\t\t\t\tnonce: result.transaction.nonce,\n\t\t\t\tgasLimit: result.transaction.gasLimit,\n\t\t\t\tmaxFeePerGas: result.transaction.maxFeePerGas,\n\t\t\t\tmaxPriorityFeePerGas: result.transaction.maxPriorityFeePerGas,\n\t\t\t\tchain_id: selectedChain?.chain_id?.toString() || \"1\",\n\t\t\t});\n\t\t\tsetShowTransactionDetails(true);\n\t\t\tsetButtonStatus(\"Estimate\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Swap failed:\", error);\n\t\t\tsetError((error as Error)?.message || \"Swap failed\");\n\t\t\tsetButtonStatus(\"Swap\");\n\t\t}\n\t};\n\n\tconst swapTokens = () => {\n\t\tsetFromToken(toToken);\n\t\tsetToToken(fromToken);\n\t\tsetFromAmount(toAmount);\n\t\tsetToAmount(fromAmount);\n\t};\n\tconst handleSwapComplete = () => {\n\t\tsetIsSwapComplete(true);\n\t\tsetFromAmount(\"\");\n\t\tsetToAmount(\"\");\n\t\tsetButtonStatus(\"Estimate\");\n\t\tsetShowTransactionDetails(false);\n\t};\n\tconst handleError = (error: any) => {\n\t\tconsole.log(\"transaction error called\", error);\n\t\tsetError(error);\n\t\tsetButtonStatus(\"Estimate\");\n\t\tsetTransactionData(null);\n\t\tsetShowTransactionDetails(false);\n\t\tsetEstimateResult(null);\n\t\tsetFromAmount(\"\");\n\t\tsetToAmount(\"\");\n\t\t// Reset other state variables if needed\n\t};\n\n\tif (isSwapComplete) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`w-full max-w-md mx-auto p-6 rounded-lg bg-${theme?.backgroundColor} shadow-xl text-center`}\n\t\t\t>\n\t\t\t\t<h2 className={`text-2xl font-bold mb-4 text-${theme?.textColor}`}>\n\t\t\t\t\tSwap Complete!\n\t\t\t\t</h2>\n\t\t\t\t<p className={`text-${theme?.textColorSecondary} mb-6`}>\n\t\t\t\t\tYour transaction has been successfully processed.\n\t\t\t\t</p>\n\t\t\t\t<Button\n\t\t\t\t\tonClick={() => setIsSwapComplete(false)}\n\t\t\t\t\tclassName={`py-3 px-6 bg-${theme?.accentColor} text-${theme?.backgroundColor} rounded-md font-bold text-lg shadow-md`}\n\t\t\t\t>\n\t\t\t\t\tMake Another Swap\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`w-full max-w-md mx-auto p-6 rounded-lg bg-${theme?.backgroundColor} shadow-xl`}\n\t\t>\n\t\t\t{!showTransactionDetails && (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"flex justify-between items-center mb-6\">\n\t\t\t\t\t\t<h2 className={`text-2xl font-bold text-${theme?.textColor}`}>\n\t\t\t\t\t\t\tSwap\n\t\t\t\t\t\t</h2>\n\n\t\t\t\t\t\t<SlippageSettings slippage={slippage} setSlippage={setSlippage} />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`mb-4 p-4 rounded-2xl bg-${theme?.backgroundColorSecondary}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<TokenInput\n\t\t\t\t\t\t\ttoken={fromToken}\n\t\t\t\t\t\t\tamount={fromAmount}\n\t\t\t\t\t\t\tsetAmount={setFromAmount}\n\t\t\t\t\t\t\ttokens={tokensWithBalances}\n\t\t\t\t\t\t\tonSelectToken={setFromToken}\n\t\t\t\t\t\t\tbalance={fromToken?.balance}\n\t\t\t\t\t\t\tvalue={fromValue}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<div className=\"flex justify-center my-4\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={swapTokens}\n\t\t\t\t\t\t\t\tclassName={`p-2 rounded-full bg-${theme?.backgroundColor} text-${theme?.textColor} shadow-md`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FiArrowDown />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<TokenInput\n\t\t\t\t\t\t\ttoken={toToken}\n\t\t\t\t\t\t\tamount={toAmount}\n\t\t\t\t\t\t\tsetAmount={setToAmount}\n\t\t\t\t\t\t\ttokens={tokensWithBalances}\n\t\t\t\t\t\t\tonSelectToken={setToToken}\n\t\t\t\t\t\t\tbalance={toToken?.balance}\n\t\t\t\t\t\t\tvalue={toValue}\n\t\t\t\t\t\t\treadOnly\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={handleSwap}\n\t\t\t\t\t\tdisabled={buttonStatus !== \"Swap\"}\n\t\t\t\t\t\tclassName={`w-full py-4 px-6 bg-${theme?.accentColor} text-${theme?.backgroundColor} rounded-2xl font-bold text-lg shadow-md ${\n\t\t\t\t\t\t\tbuttonStatus !== \"Swap\" ? \"opacity-50 cursor-not-allowed\" : \"\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{buttonStatus}\n\t\t\t\t\t</Button>\n\t\t\t\t\t{estimateResult && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, height: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, height: \"auto\" }}\n\t\t\t\t\t\t\texit={{ opacity: 0, height: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\t\t\tclassName=\"mt-6\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SwapDetails\n\t\t\t\t\t\t\t\testimateResult={estimateResult}\n\t\t\t\t\t\t\t\tfromToken={fromToken}\n\t\t\t\t\t\t\t\ttoToken={toToken}\n\t\t\t\t\t\t\t\tfromAmount={fromAmount}\n\t\t\t\t\t\t\t\ttoAmount={toAmount}\n\t\t\t\t\t\t\t\tslippage={slippage}\n\t\t\t\t\t\t\t\tfromValue={fromValue}\n\t\t\t\t\t\t\t\ttoValue={toValue}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{transactionData && (\n\t\t\t\t<Transaction\n\t\t\t\t\twallet={account}\n\t\t\t\t\ttransaction={transactionData}\n\t\t\t\t\tautoExecute={false}\n\t\t\t\t\tisModal={false}\n\t\t\t\t\tonSuccess={handleSwapComplete}\n\t\t\t\t\tonError={handleError}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default OdosSwap;\n","export type ObjectWithArrays = {\n  [key: string]: any[];\n};\n\nexport function combineArraysFromObject<T>(obj: ObjectWithArrays): T[] {\n  return Object.values(obj).flat() as T[];\n}\n","import React from \"react\";\nimport * as RadixSlider from \"@radix-ui/react-slider\";\nimport * as RadixTooltip from \"@radix-ui/react-tooltip\";\nimport { FiSettings } from \"react-icons/fi\";\nimport { useTheme } from \"@/context\";\n\ninterface SlippageSettingsProps {\n\tslippage: number;\n\tsetSlippage: (value: number) => void;\n}\n\nexport const SlippageSettings: React.FC<SlippageSettingsProps> = ({\n\tslippage,\n\tsetSlippage,\n}) => {\n\tconst theme = useTheme();\n\n\treturn (\n\t\t<RadixTooltip.Provider>\n\t\t\t<RadixTooltip.Root>\n\t\t\t\t<RadixTooltip.Trigger asChild>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={`p-2 rounded-full bg-${theme?.backgroundColorSecondary} text-${theme?.textColor} mb-4`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<FiSettings />\n\t\t\t\t\t</button>\n\t\t\t\t</RadixTooltip.Trigger>\n\t\t\t\t<RadixTooltip.Content\n\t\t\t\t\tclassName={`p-4 rounded-md bg-${theme?.backgroundColorSecondary} text-${theme?.textColor} shadow-lg`}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"mb-2\">Slippage Tolerance</div>\n\t\t\t\t\t<RadixSlider.Root\n\t\t\t\t\t\tclassName=\"relative flex items-center w-48 h-5\"\n\t\t\t\t\t\tvalue={[slippage]}\n\t\t\t\t\t\tonValueChange={(value) => setSlippage(value[0])}\n\t\t\t\t\t\tmax={5}\n\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RadixSlider.Track\n\t\t\t\t\t\t\tclassName={`relative h-1 flex-grow rounded-full bg-${theme?.backgroundColor}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<RadixSlider.Range\n\t\t\t\t\t\t\t\tclassName={`absolute h-full rounded-full bg-${theme?.accentColor}`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</RadixSlider.Track>\n\t\t\t\t\t\t<RadixSlider.Thumb\n\t\t\t\t\t\t\tclassName={`block w-5 h-5 rounded-full bg-${theme?.accentColor}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</RadixSlider.Root>\n\t\t\t\t\t<div className=\"mt-2\">{slippage.toFixed(1)}%</div>\n\t\t\t\t</RadixTooltip.Content>\n\t\t\t</RadixTooltip.Root>\n\t\t</RadixTooltip.Provider>\n\t);\n};\n","import React from \"react\";\nimport { useTheme } from \"@/context\";\n\ninterface SwapDetailsProps {\n\testimateResult: any;\n\tfromToken: any;\n\ttoToken: any;\n\tfromAmount: string;\n\ttoAmount: string;\n\tslippage: number;\n\tfromValue: number;\n\ttoValue: number;\n}\n\nexport const SwapDetails: React.FC<SwapDetailsProps> = ({\n\testimateResult,\n\tfromToken,\n\ttoToken,\n\tfromAmount,\n\ttoAmount,\n\tslippage,\n\tfromValue,\n\ttoValue,\n}) => {\n\tconst theme = useTheme();\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`p-4 rounded-2xl bg-${theme?.backgroundColorSecondary} text-${theme?.textColor}`}\n\t\t>\n\t\t\t<h3 className=\"font-bold mb-4\">Transaction Details</h3>\n\t\t\t<div className=\"space-y-2\">\n\t\t\t\t<DetailRow\n\t\t\t\t\tlabel=\"Rate\"\n\t\t\t\t\tvalue={`1 ${fromToken.symbol} = ${(Number.parseFloat(toAmount) / Number.parseFloat(fromAmount)).toFixed(6)} ${toToken.symbol}`}\n\t\t\t\t/>\n\t\t\t\t<DetailRow\n\t\t\t\t\tlabel=\"Minimum received\"\n\t\t\t\t\tvalue={`${(Number.parseFloat(toAmount) * (1 - slippage / 100)).toFixed(6)} ${toToken.symbol}`}\n\t\t\t\t/>\n\t\t\t\t<DetailRow\n\t\t\t\t\tlabel=\"Price Impact\"\n\t\t\t\t\tvalue={estimateResult.data.priceImpact}\n\t\t\t\t/>\n\t\t\t\t<DetailRow\n\t\t\t\t\tlabel=\"Network Fee\"\n\t\t\t\t\tvalue={`≈ $${estimateResult.data.gasEstimateValue}`}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst DetailRow: React.FC<{ label: string; value: string }> = ({\n\tlabel,\n\tvalue,\n}) => {\n\tconst theme = useTheme();\n\treturn (\n\t\t<div className=\"flex justify-between\">\n\t\t\t<span className={`text-${theme?.textColorSecondary}`}>{label}</span>\n\t\t\t<span className=\"font-medium\">{value}</span>\n\t\t</div>\n\t);\n};\n","import React, { useState, useMemo } from \"react\";\nimport { FiChevronDown } from \"react-icons/fi\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { useTheme } from \"@/context\";\n\ninterface TokenSelectorProps {\n\ttokens: any[];\n\tselectedToken: any;\n\tonSelect: (token: any) => void;\n\n\tchildren?: React.ReactNode;\n}\n\nexport const TokenSelector: React.FC<TokenSelectorProps> = ({\n\ttokens,\n\tselectedToken,\n\tonSelect,\n\tchildren,\n}) => {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [searchTerm, setSearchTerm] = useState(\"\");\n\tconst theme = useTheme();\n\n\tconst filteredTokens = useMemo(() => {\n\t\treturn tokens.filter(\n\t\t\t(token) =>\n\t\t\t\ttoken.symbol.toLowerCase().includes(searchTerm.toLowerCase()) ||\n\t\t\t\ttoken.name.toLowerCase().includes(searchTerm.toLowerCase()),\n\t\t);\n\t}, [tokens, searchTerm]);\n\n\tconst sortedTokens = useMemo(() => {\n\t\treturn filteredTokens.sort((a, b) => {\n\t\t\tconst balanceA = Number.parseFloat(a.balance || \"0\");\n\t\t\tconst balanceB = Number.parseFloat(b.balance || \"0\");\n\t\t\treturn balanceB - balanceA;\n\t\t});\n\t}, [filteredTokens]);\n\n\treturn (\n\t\t<RadixDialog.Root open={isOpen} onOpenChange={setIsOpen}>\n\t\t\t<RadixDialog.Trigger asChild>\n\t\t\t\t{children || (\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={`flex items-center justify-between w-full p-2 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{selectedToken ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"flex items-center\">\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={`https://assets.odos.xyz/tokens/${selectedToken.symbol}.webp`}\n\t\t\t\t\t\t\t\t\t\talt={selectedToken.symbol}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2 rounded-full\"\n\t\t\t\t\t\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span>{selectedToken.symbol}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<FiChevronDown />\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span>Select token</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</RadixDialog.Trigger>\n\n\t\t\t<AnimatePresence>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<RadixDialog.Portal forceMount>\n\t\t\t\t\t\t<RadixDialog.Overlay asChild>\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tclassName=\"fixed inset-0 bg-black/50\"\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</RadixDialog.Overlay>\n\t\t\t\t\t\t<RadixDialog.Content asChild>\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tclassName={`fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-md p-6 rounded-lg bg-${theme.backgroundColor} shadow-xl`}\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<RadixDialog.Title\n\t\t\t\t\t\t\t\t\tclassName={`text-lg font-bold mb-4 text-${theme.textColor}`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tSelect a token\n\t\t\t\t\t\t\t\t</RadixDialog.Title>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\tplaceholder=\"Search tokens\"\n\t\t\t\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n\t\t\t\t\t\t\t\t\tclassName={`w-full p-2 mb-4 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor}`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={`max-h-60 overflow-y-auto bg-${theme.backgroundColorSecondary} rounded-md`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{sortedTokens.map((token) => (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\tkey={token.address}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect(token);\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tclassName={`flex items-center w-full p-2 hover:bg-${theme.backgroundColorSecondary} rounded-md`}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={`https://assets.odos.xyz/tokens/${token.symbol}.webp`}\n\t\t\t\t\t\t\t\t\t\t\t\talt={token.symbol}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2 rounded-full\"\n\t\t\t\t\t\t\t\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<span className={`text-${theme.textColor}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t{token.symbol}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={`ml-2 text-sm text-${theme.textColorSecondary}`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{token.name}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={`ml-auto text-sm text-${theme.textColorSecondary}`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{token.balance}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t</RadixDialog.Content>\n\t\t\t\t\t</RadixDialog.Portal>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</RadixDialog.Root>\n\t);\n};\n","import React from \"react\";\nimport { useTheme } from \"@/context\";\nimport { TokenSelector } from \"./TokenSelector\";\nimport { FiChevronDown } from \"react-icons/fi\";\n\ninterface TokenInputProps {\n\ttoken: any;\n\tamount: string;\n\tsetAmount: (value: string) => void;\n\ttokens: any[];\n\tonSelectToken: (token: any) => void;\n\tbalance: string;\n\tvalue: number;\n\treadOnly?: boolean;\n}\n\nexport const TokenInput: React.FC<TokenInputProps> = ({\n\ttoken,\n\tamount,\n\tsetAmount,\n\ttokens,\n\tonSelectToken,\n\tbalance,\n\tvalue,\n\treadOnly = false,\n}) => {\n\tconst theme = useTheme();\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`mb-4 p-4 rounded-2xl bg-${theme?.backgroundColorSecondary}`}\n\t\t>\n\t\t\t<div className=\"flex justify-between items-center mb-2\">\n\t\t\t\t<p className={`text-sm font-medium text-${theme?.textColorSecondary}`}>\n\t\t\t\t\t{readOnly ? \"You receive\" : \"You pay\"}\n\t\t\t\t</p>\n\t\t\t\t<p\n\t\t\t\t\tclassName={`text-sm text-${theme?.textColorSecondary} cursor-pointer`}\n\t\t\t\t\tonClick={() => !readOnly && setAmount(balance || \"0.00\")}\n\t\t\t\t>\n\t\t\t\t\tBalance: {balance || \"0.00\"}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tvalue={amount}\n\t\t\t\t\tonChange={(e) => setAmount(e.target.value)}\n\t\t\t\t\tplaceholder=\"0\"\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tclassName={`w-1/2 bg-transparent text-${theme?.textColor} text-3xl font-medium focus:outline-none`}\n\t\t\t\t/>\n\t\t\t\t<div className=\"flex items-center\">\n\t\t\t\t\t<TokenSelector\n\t\t\t\t\t\ttokens={tokens}\n\t\t\t\t\t\tselectedToken={token}\n\t\t\t\t\t\tonSelect={(selectedToken) =>\n\t\t\t\t\t\t\tonSelectToken(\n\t\t\t\t\t\t\t\tselectedToken.isGasToken\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t...selectedToken,\n\t\t\t\t\t\t\t\t\t\t\taddress: \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\",\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: selectedToken,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={`flex items-center bg-${theme?.backgroundColor} rounded-2xl p-2 cursor-pointer`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{token && (\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={`https://assets.odos.xyz/tokens/${token.symbol}.webp`}\n\t\t\t\t\t\t\t\t\talt={token.symbol}\n\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2 rounded-full\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<span className={`font-medium text-${theme?.textColor} mr-1`}>\n\t\t\t\t\t\t\t\t{token ? token.symbol : \"Select token\"}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<FiChevronDown className={`text-${theme?.textColorSecondary}`} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</TokenSelector>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<p className={`text-sm text-${theme?.textColorSecondary} mt-2`}>\n\t\t\t\t${value.toFixed(2)} USD\n\t\t\t</p>\n\t\t</div>\n\t);\n};\n","// import React, { useEffect } from \"react\";\n// import { motion, AnimatePresence } from \"framer-motion\";\n// import * as RadixDialog from \"@radix-ui/react-dialog\";\n// import * as RadixSlider from \"@radix-ui/react-slider\";\n// import * as RadixTooltip from \"@radix-ui/react-tooltip\";\n// import {\n// \tFiSettings,\n// \tFiRefreshCw,\n// \tFiChevronDown,\n// \tFiArrowDown,\n// } from \"react-icons/fi\";\n// import { useTheme } from \"@/context\";\n// import { useThorswap, useMoonTokenManager } from \"@/hooks\";\n// import { Transaction } from \"@/components/Web3/Transactions/transactions\";\n// import { useMoonAccount } from \"@/hooks\";\n// import { formatUnits } from \"ethers\";\n\n// import { Button } from \"@/components\";\n// import { ChainSelectorModal } from \"@/components/Web3/Chains/ChainSelectors/ChainSelectorModal\";\n// import { useQueryClient } from \"@tanstack/react-query\";\n// import { safelyParseUnits } from \"../../../utils\";\n// import { useDebounceValue } from \"usehooks-ts\";\n\n// const converyGasTokenAddress = \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n// type ButtonStatus =\n// \t| \"Estimate\"\n// \t| \"Estimating...\"\n// \t| \"Swapping...\"\n// \t| \"Swap\"\n// \t| \"Insufficient Balance\";\n\n// interface TokenSelectorProps {\n// \ttokens: any[];\n// \tselectedToken: any;\n// \tonSelect: (token: any) => void;\n// }\n\n// const TokenSelector: React.FC<TokenSelectorProps> = ({\n// \ttokens,\n// \tselectedToken,\n// \tonSelect,\n// }) => {\n// \tconst [isOpen, setIsOpen] = React.useState(false);\n// \tconst [searchTerm, setSearchTerm] = React.useState(\"\");\n// \tconst theme = useTheme();\n\n// \tconst filteredTokens = tokens.filter(\n// \t\t(token) =>\n// \t\t\ttoken.symbol.toLowerCase().includes(searchTerm.toLowerCase()) ||\n// \t\t\ttoken.name.toLowerCase().includes(searchTerm.toLowerCase()),\n// \t);\n\n// \treturn (\n// \t\t<RadixDialog.Root open={isOpen} onOpenChange={setIsOpen}>\n// \t\t\t<RadixDialog.Trigger asChild>\n// \t\t\t\t<button\n// \t\t\t\t\tclassName={`flex items-center justify-between w-full p-2 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor}`}\n// \t\t\t\t>\n// \t\t\t\t\t{selectedToken ? (\n// \t\t\t\t\t\t<>\n// \t\t\t\t\t\t\t<div className=\"flex items-center\">\n// \t\t\t\t\t\t\t\t<img\n// \t\t\t\t\t\t\t\t\tsrc={selectedToken.logoURI}\n// \t\t\t\t\t\t\t\t\talt={selectedToken.symbol}\n// \t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2 rounded-full\"\n// \t\t\t\t\t\t\t\t/>\n// \t\t\t\t\t\t\t\t<span>{selectedToken.symbol}</span>\n// \t\t\t\t\t\t\t</div>\n// \t\t\t\t\t\t\t<FiChevronDown />\n// \t\t\t\t\t\t</>\n// \t\t\t\t\t) : (\n// \t\t\t\t\t\t<span>Select token</span>\n// \t\t\t\t\t)}\n// \t\t\t\t</button>\n// \t\t\t</RadixDialog.Trigger>\n\n// \t\t\t<AnimatePresence>\n// \t\t\t\t{isOpen && (\n// \t\t\t\t\t<RadixDialog.Portal forceMount>\n// \t\t\t\t\t\t<RadixDialog.Overlay asChild>\n// \t\t\t\t\t\t\t<motion.div\n// \t\t\t\t\t\t\t\tclassName=\"fixed inset-0 bg-black/50\"\n// \t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n// \t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n// \t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n// \t\t\t\t\t\t\t/>\n// \t\t\t\t\t\t</RadixDialog.Overlay>\n// \t\t\t\t\t\t<RadixDialog.Content asChild>\n// \t\t\t\t\t\t\t<motion.div\n// \t\t\t\t\t\t\t\tclassName={`fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-md p-6 rounded-lg bg-${theme.backgroundColor} shadow-xl`}\n// \t\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n// \t\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n// \t\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n// \t\t\t\t\t\t\t>\n// \t\t\t\t\t\t\t\t<RadixDialog.Title\n// \t\t\t\t\t\t\t\t\tclassName={`text-lg font-bold mb-4 text-${theme.textColor}`}\n// \t\t\t\t\t\t\t\t>\n// \t\t\t\t\t\t\t\t\tSelect a token\n// \t\t\t\t\t\t\t\t</RadixDialog.Title>\n// \t\t\t\t\t\t\t\t<input\n// \t\t\t\t\t\t\t\t\ttype=\"text\"\n// \t\t\t\t\t\t\t\t\tplaceholder=\"Search tokens\"\n// \t\t\t\t\t\t\t\t\tvalue={searchTerm}\n// \t\t\t\t\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n// \t\t\t\t\t\t\t\t\tclassName={`w-full p-2 mb-4 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor}`}\n// \t\t\t\t\t\t\t\t/>\n// \t\t\t\t\t\t\t\t<div className={`max-h-60 overflow-y-auto`}>\n// \t\t\t\t\t\t\t\t\t{filteredTokens.map((token) => (\n// \t\t\t\t\t\t\t\t\t\t<button\n// \t\t\t\t\t\t\t\t\t\t\tkey={token.address}\n// \t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n// \t\t\t\t\t\t\t\t\t\t\t\tonSelect(token);\n// \t\t\t\t\t\t\t\t\t\t\t\tsetIsOpen(false);\n// \t\t\t\t\t\t\t\t\t\t\t}}\n// \t\t\t\t\t\t\t\t\t\t\tclassName={`flex items-center w-full p-2 hover:bg-${theme.backgroundColorSecondary} rounded-md`}\n// \t\t\t\t\t\t\t\t\t\t>\n// \t\t\t\t\t\t\t\t\t\t\t<img\n// \t\t\t\t\t\t\t\t\t\t\t\tsrc={token.logoURI}\n// \t\t\t\t\t\t\t\t\t\t\t\talt={token.symbol}\n// \t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2 rounded-full\"\n// \t\t\t\t\t\t\t\t\t\t\t/>\n// \t\t\t\t\t\t\t\t\t\t\t<span className={`text-${theme.textColor}`}>\n// \t\t\t\t\t\t\t\t\t\t\t\t{token.symbol}\n// \t\t\t\t\t\t\t\t\t\t\t</span>\n// \t\t\t\t\t\t\t\t\t\t\t<span\n// \t\t\t\t\t\t\t\t\t\t\t\tclassName={`ml-2 text-sm text-${theme.textColorSecondary}`}\n// \t\t\t\t\t\t\t\t\t\t\t>\n// \t\t\t\t\t\t\t\t\t\t\t\t{token.name}\n// \t\t\t\t\t\t\t\t\t\t\t</span>\n// \t\t\t\t\t\t\t\t\t\t</button>\n// \t\t\t\t\t\t\t\t\t))}\n// \t\t\t\t\t\t\t\t</div>\n// \t\t\t\t\t\t\t</motion.div>\n// \t\t\t\t\t\t</RadixDialog.Content>\n// \t\t\t\t\t</RadixDialog.Portal>\n// \t\t\t\t)}\n// \t\t\t</AnimatePresence>\n// \t\t</RadixDialog.Root>\n// \t);\n// };\n\nexport const ThorswapSwap = () => {\n\t// const theme = useTheme();\n\t// const { getQuote, swap } = useThorswap();\n\t// const { tokensWithGasToken: tokenList, chain } = useMoonTokenManager();\n\t// const { account } = useMoonAccount();\n\t// const queryClient = useQueryClient();\n\t// const [fromToken, setFromToken] = React.useState<any>(null);\n\t// const [toToken, setToToken] = React.useState<any>(null);\n\t// const [fromAmount, setFromAmount] = React.useState<string>(\"\");\n\t// const [toAmount, setToAmount] = React.useState<string>(\"\");\n\t// const [slippage, setSlippage] = React.useState<number>(0.5);\n\t// const [estimateResult, setEstimateResult] = React.useState<any>(null);\n\t// const [buttonStatus, setButtonStatus] =\n\t// \tReact.useState<ButtonStatus>(\"Estimate\");\n\t// const [debouncedFromAmount] = useDebounceValue(fromAmount, 500);\n\t// const tokensFilteredForChain = tokenList.filter(\n\t// \t(token) => token.chainId === chain?.chain_id,\n\t// );\n\t// useEffect(() => {\n\t// \tif (fromToken && toToken && debouncedFromAmount) {\n\t// \t\thandleEstimate();\n\t// \t}\n\t// }, [fromToken, toToken, debouncedFromAmount, slippage]);\n\t// const handleEstimate = async () => {\n\t// \tif (!fromToken || !toToken || !debouncedFromAmount) return;\n\t// \tsetButtonStatus(\"Estimating...\");\n\t// \tconst bigAmountWei = safelyParseUnits(\n\t// \t\tdebouncedFromAmount,\n\t// \t\tfromToken.decimals,\n\t// \t);\n\t// \ttry {\n\t// \t\tconst quoteParams = {\n\t// \t\t\tfromChain: chain?.chain_id?.toString() || \"\",\n\t// \t\t\ttoChain: chain?.chain_id?.toString() || \"\",\n\t// \t\t\tfromToken: fromToken.address,\n\t// \t\t\ttoToken: toToken.address,\n\t// \t\t\tfromAddress: account || \"\",\n\t// \t\t\ttoAddress: account || \"\",\n\t// \t\t\tamount: bigAmountWei.toString(),\n\t// \t\t\tslippage: slippage.toString(),\n\t// \t\t\tbuyAsset: toToken.symbol,\n\t// \t\t\tchainId: chain?.chain_id?.toString() || \"\",\n\t// \t\t\trecipientAddress: account || \"\",\n\t// \t\t\tsellAmount: bigAmountWei.toString(),\n\t// \t\t\tsellAsset: fromToken.symbol,\n\t// \t\t\tsenderAddress: account || \"\",\n\t// \t\t};\n\t// \t\tconst estimateResult = await getQuote(quoteParams);\n\t// \t\tsetEstimateResult(estimateResult);\n\t// \t\tsetToAmount(\n\t// \t\t\testimateResult?.expectedAmountOut\n\t// \t\t\t\t? formatUnits(estimateResult.expectedAmountOut, toToken.decimals)\n\t// \t\t\t\t: \"0\",\n\t// \t\t);\n\t// \t\tsetButtonStatus(\"Swap\");\n\t// \t} catch (error) {\n\t// \t\tconsole.error(\"Estimate failed:\", error);\n\t// \t\tsetButtonStatus(\"Estimate\");\n\t// \t}\n\t// };\n\t// const handleSwap = async () => {\n\t// \tif (!fromToken || !toToken || !fromAmount || !toAmount || !account) return;\n\t// \tsetButtonStatus(\"Swapping...\");\n\t// \tconst bigAmountWei = safelyParseUnits(fromAmount, fromToken.decimals);\n\t// \ttry {\n\t// \t\tconst swapParams = {\n\t// \t\t\tfromChain: chain?.chain_id?.toString() || \"\",\n\t// \t\t\ttoChain: chain?.chain_id?.toString() || \"\",\n\t// \t\t\tfromToken: fromToken.address,\n\t// \t\t\ttoToken: toToken.address,\n\t// \t\t\tfromAddress: account,\n\t// \t\t\ttoAddress: account,\n\t// \t\t\tamount: bigAmountWei.toString(),\n\t// \t\t\tslippage: slippage.toString(),\n\t// \t\t};\n\t// \t\tconst result = await swap(swapParams);\n\t// \t\tqueryClient.invalidateQueries({ queryKey: [\"erc20TokenBalances\"] });\n\t// \t\tconsole.log(\"Swap executed:\", result);\n\t// \t\tsetButtonStatus(\"Estimate\");\n\t// \t} catch (error) {\n\t// \t\tconsole.error(\"Swap failed:\", error);\n\t// \t\tsetButtonStatus(\"Swap\");\n\t// \t}\n\t// };\n\t// return (\n\t// \t<div\n\t// \t\tclassName={`w-full max-w-md mx-auto p-6 rounded-lg bg-${theme.backgroundColor} shadow-xl`}\n\t// \t>\n\t// \t\t<ChainSelectorModal\n\t// \t\t\tchainIdFilterList={[1, 56, 137, 42161, 8453, 10]}\n\t// \t\t\tbuttonProps={{\n\t// \t\t\t\tclassName: `w-full bg-${theme.backgroundColorSecondary} rounded-lg p-2 mb-4 text-${theme.textColor}`,\n\t// \t\t\t}}\n\t// \t\t/>\n\t// \t\t<div\n\t// \t\t\tclassName={`mb-4 p-4 rounded-md bg-${theme.backgroundColorSecondary}`}\n\t// \t\t>\n\t// \t\t\t<TokenSelector\n\t// \t\t\t\ttokens={tokensFilteredForChain}\n\t// \t\t\t\tselectedToken={fromToken}\n\t// \t\t\t\tonSelect={(token) =>\n\t// \t\t\t\t\tsetFromToken(\n\t// \t\t\t\t\t\ttoken.isGasToken\n\t// \t\t\t\t\t\t\t? { ...token, address: converyGasTokenAddress }\n\t// \t\t\t\t\t\t\t: token,\n\t// \t\t\t\t\t)\n\t// \t\t\t\t}\n\t// \t\t\t/>\n\t// \t\t\t<input\n\t// \t\t\t\ttype=\"number\"\n\t// \t\t\t\tvalue={fromAmount}\n\t// \t\t\t\tonChange={(e) => setFromAmount(e.target.value)}\n\t// \t\t\t\tplaceholder=\"0.0\"\n\t// \t\t\t\tclassName={`w-full mt-2 p-2 rounded-md bg-${theme.backgroundColor} text-${theme.textColor} text-right text-2xl`}\n\t// \t\t\t/>\n\t// \t\t\t<p className={`text-sm text-${theme.textColorSecondary} mt-1`}>\n\t// \t\t\t\tBalance: {fromToken?.balance || 0}\n\t// \t\t\t</p>\n\t// \t\t</div>\n\t// \t\t<div className=\"flex justify-center my-4\">\n\t// \t\t\t<button\n\t// \t\t\t\tonClick={() => {\n\t// \t\t\t\t\tsetFromToken(toToken);\n\t// \t\t\t\t\tsetToToken(fromToken);\n\t// \t\t\t\t\tsetFromAmount(toAmount);\n\t// \t\t\t\t\tsetToAmount(fromAmount);\n\t// \t\t\t\t}}\n\t// \t\t\t\tclassName={`p-2 rounded-full bg-${theme.backgroundColorSecondary} text-${theme.textColor}`}\n\t// \t\t\t>\n\t// \t\t\t\t<FiArrowDown />\n\t// \t\t\t</button>\n\t// \t\t</div>\n\t// \t\t<div\n\t// \t\t\tclassName={`mb-4 p-4 rounded-md bg-${theme.backgroundColorSecondary}`}\n\t// \t\t>\n\t// \t\t\t<TokenSelector\n\t// \t\t\t\ttokens={tokensFilteredForChain}\n\t// \t\t\t\tselectedToken={toToken}\n\t// \t\t\t\tonSelect={(token) =>\n\t// \t\t\t\t\tsetToToken(\n\t// \t\t\t\t\t\ttoken.isGasToken\n\t// \t\t\t\t\t\t\t? { ...token, address: converyGasTokenAddress }\n\t// \t\t\t\t\t\t\t: token,\n\t// \t\t\t\t\t)\n\t// \t\t\t\t}\n\t// \t\t\t/>\n\t// \t\t\t<input\n\t// \t\t\t\ttype=\"number\"\n\t// \t\t\t\tvalue={toAmount}\n\t// \t\t\t\treadOnly\n\t// \t\t\t\tplaceholder=\"0.0\"\n\t// \t\t\t\tclassName={`w-full mt-2 p-2 rounded-md bg-${theme.backgroundColor} text-${theme.textColor} text-right text-2xl`}\n\t// \t\t\t/>\n\t// \t\t\t<p className={`text-sm text-${theme.textColorSecondary} mt-1`}>\n\t// \t\t\t\tBalance: {toToken?.balance || 0}\n\t// \t\t\t</p>\n\t// \t\t</div>\n\t// \t\t<RadixTooltip.Provider>\n\t// \t\t\t<RadixTooltip.Root>\n\t// \t\t\t\t<RadixTooltip.Trigger asChild>\n\t// \t\t\t\t\t<button\n\t// \t\t\t\t\t\tclassName={`p-2 rounded-full bg-${theme.backgroundColorSecondary} text-${theme.textColor} mb-4`}\n\t// \t\t\t\t\t>\n\t// \t\t\t\t\t\t<FiSettings />\n\t// \t\t\t\t\t</button>\n\t// \t\t\t\t</RadixTooltip.Trigger>\n\t// \t\t\t\t<RadixTooltip.Content\n\t// \t\t\t\t\tclassName={`p-4 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor} shadow-lg`}\n\t// \t\t\t\t>\n\t// \t\t\t\t\t<div className=\"mb-2\">Slippage Tolerance</div>\n\t// \t\t\t\t\t<RadixSlider.Root\n\t// \t\t\t\t\t\tclassName=\"relative flex items-center w-48 h-5\"\n\t// \t\t\t\t\t\tvalue={[slippage]}\n\t// \t\t\t\t\t\tonValueChange={(value) => setSlippage(value[0])}\n\t// \t\t\t\t\t\tmax={5}\n\t// \t\t\t\t\t\tstep={0.1}\n\t// \t\t\t\t\t>\n\t// \t\t\t\t\t\t<RadixSlider.Track\n\t// \t\t\t\t\t\t\tclassName={`relative h-1 flex-grow rounded-full bg-${theme.backgroundColor}`}\n\t// \t\t\t\t\t\t>\n\t// \t\t\t\t\t\t\t<RadixSlider.Range\n\t// \t\t\t\t\t\t\t\tclassName={`absolute h-full rounded-full bg-${theme.accentColor}`}\n\t// \t\t\t\t\t\t\t/>\n\t// \t\t\t\t\t\t</RadixSlider.Track>\n\t// \t\t\t\t\t\t<RadixSlider.Thumb\n\t// \t\t\t\t\t\t\tclassName={`block w-5 h-5 rounded-full bg-${theme.accentColor}`}\n\t// \t\t\t\t\t\t/>\n\t// \t\t\t\t\t</RadixSlider.Root>\n\t// \t\t\t\t\t<div className=\"mt-2\">{slippage.toFixed(1)}%</div>\n\t// \t\t\t\t</RadixTooltip.Content>\n\t// \t\t\t</RadixTooltip.Root>\n\t// \t\t</RadixTooltip.Provider>\n\t// \t\t{estimateResult && (\n\t// \t\t\t<div\n\t// \t\t\t\tclassName={`mb-4 p-4 rounded-md bg-${theme.backgroundColorSecondary} text-${theme.textColor}`}\n\t// \t\t\t>\n\t// \t\t\t\t<h3 className=\"font-bold mb-2\">Swap Details</h3>\n\t// \t\t\t\t<div className=\"flex justify-between\">\n\t// \t\t\t\t\t<span>Rate</span>\n\t// \t\t\t\t\t<span>\n\t// \t\t\t\t\t\t1 {fromToken.symbol} ={\" \"}\n\t// \t\t\t\t\t\t{(parseFloat(toAmount) / parseFloat(fromAmount)).toFixed(6)}{\" \"}\n\t// \t\t\t\t\t\t{toToken.symbol}\n\t// \t\t\t\t\t</span>\n\t// \t\t\t\t</div>\n\t// \t\t\t\t<div className=\"flex justify-between\">\n\t// \t\t\t\t\t<span>Minimum received</span>\n\t// \t\t\t\t\t<span>\n\t// \t\t\t\t\t\t{(parseFloat(toAmount) * (1 - slippage / 100)).toFixed(6)}{\" \"}\n\t// \t\t\t\t\t\t{toToken.symbol}\n\t// \t\t\t\t\t</span>\n\t// \t\t\t\t</div>\n\t// \t\t\t</div>\n\t// \t\t)}\n\t// \t\t<Button\n\t// \t\t\tonClick={handleSwap}\n\t// \t\t\tdisabled={buttonStatus !== \"Swap\"}\n\t// \t\t\tclassName={`w-full py-3 px-4 bg-${theme.accentColor} text-${theme.backgroundColor} rounded-md font-bold text-lg shadow-md ${\n\t// \t\t\t\tbuttonStatus !== \"Swap\" ? \"opacity-50 cursor-not-allowed\" : \"\"\n\t// \t\t\t}`}\n\t// \t\t>\n\t// \t\t\t{buttonStatus === \"Estimating...\" ? (\n\t// \t\t\t\t<div className=\"flex items-center justify-center\">\n\t// \t\t\t\t\t<FiRefreshCw className=\"animate-spin mr-2\" />\n\t// \t\t\t\t\tFetching quote...\n\t// \t\t\t\t</div>\n\t// \t\t\t) : (\n\t// \t\t\t\tbuttonStatus\n\t// \t\t\t)}\n\t// \t\t</Button>\n\t// \t\t{estimateResult && (\n\t// \t\t\t<div className=\"mt-4\">\n\t// \t\t\t\t<Transaction\n\t// \t\t\t\t\twallet={account}\n\t// \t\t\t\t\ttransaction={{\n\t// \t\t\t\t\t\tto: estimateResult.to,\n\t// \t\t\t\t\t\tdata: estimateResult.data,\n\t// \t\t\t\t\t\tvalue: estimateResult.value,\n\t// \t\t\t\t\t\tchain_id: chain?.chain_id?.toString() || \"1\",\n\t// \t\t\t\t\t}}\n\t// \t\t\t\t\tautoExecute={false}\n\t// \t\t\t\t\tisModal={true}\n\t// \t\t\t\t/>\n\t// \t\t\t</div>\n\t// \t\t)}\n\t// \t</div>\n\t// );\n\treturn null;\n};\n\nexport default ThorswapSwap;\n","import { Input, type InputProps, Modal } from \"@/components\";\nimport { useLifi, useMoonTokenManager, useOdos } from \"@/hooks\";\nimport type { LiFiToken, LiFiTokenMap, OdosTokenMap } from \"@/types\";\nimport { combineArraysFromObject } from \"@/utils\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { useDebounceCallback } from \"usehooks-ts\";\n\nexport type AnyTokenSelectorModalProps = {\n\tinitialTokenAddress?: string | undefined;\n\tinitialTokenChain?: string | undefined;\n\tonSelect: (tokenAddress: string) => void;\n\ttitle?: string;\n\theaderProps?: React.HTMLAttributes<HTMLDivElement>;\n\tbuttonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n\tinputProps?: InputProps;\n\tlistProps?: React.HTMLAttributes<HTMLDivElement>;\n\tlistItemProps?: React.HTMLAttributes<HTMLDivElement>;\n};\n\nexport type AnyToken = {\n\taddress: string;\n\tchainId: string;\n\tname: string;\n\tsymbol: string;\n\ttype: \"ERC20\" | \"ETH\" | \"ERC721\" | \"ERC1155\";\n\tdecimals: number;\n\tprice?: string;\n};\n\nexport const AnyTokenSelectorModal: React.FC<AnyTokenSelectorModalProps> = ({\n\tinitialTokenAddress,\n\tinitialTokenChain,\n\tonSelect,\n\ttitle,\n\theaderProps,\n\tbuttonProps,\n\tinputProps,\n\tlistProps,\n\tlistItemProps,\n}) => {\n\t// const inputChainIdNumber = Number.parseInt(initialTokenChain || \"1\");\n\tconst { supportedTokensQuery: supportedTokensQueryLifi } = useLifi();\n\tconst { supportedTokensQuery: supportedTokensQueryOdos } = useOdos();\n\tconst { tokensWithGasToken } = useMoonTokenManager();\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [searchTerm, setSearchTerm] = useState(\"\");\n\n\tconst [filteredTokens, setFilteredTokens] = useState([] as AnyToken[]);\n\n\tconst [selectedTokenAddress, setSelectedTokenAddress] = useState<\n\t\tstring | undefined\n\t>(initialTokenAddress);\n\tconst [selectedChainKey, setSelectedChainKey] = useState<string | undefined>(\n\t\tinitialTokenChain,\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (selectedChainKey !== initialTokenChain)\n\t\t\tsetSelectedChainKey(initialTokenChain);\n\t}, [initialTokenChain]);\n\n\tReact.useEffect(() => {\n\t\tif (selectedTokenAddress !== initialTokenAddress)\n\t\t\tsetSelectedTokenAddress(initialTokenAddress);\n\t}, [initialTokenAddress]);\n\n\tconst tokensLoaded = useMemo(() => {\n\t\tconsole.log(\n\t\t\t\"AnyToken::tokensLoaded\",\n\t\t\tsupportedTokensQueryLifi,\n\t\t\tsupportedTokensQueryOdos,\n\t\t);\n\t\treturn (\n\t\t\tsupportedTokensQueryLifi.isSuccess && supportedTokensQueryOdos.isSuccess\n\t\t);\n\t}, [supportedTokensQueryLifi, supportedTokensQueryOdos]);\n\n\tconst tokenData = useMemo(() => {\n\t\tconsole.log(\"AnyToken::tokenData\", tokensLoaded);\n\t\tif (tokensLoaded) {\n\t\t\t//Convert lifi tokens\n\t\t\tconst tokenDataLifi = supportedTokensQueryLifi.isSuccess\n\t\t\t\t? ((supportedTokensQueryLifi.data as any).data.tokens as LiFiTokenMap)\n\t\t\t\t: ({} as LiFiTokenMap);\n\n\t\t\tconst lifiTokens = combineArraysFromObject<LiFiToken>(tokenDataLifi);\n\t\t\tconst tokenDataLifiAsAny: AnyToken[] = lifiTokens.map(\n\t\t\t\t(token: LiFiToken) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tname: token.name,\n\t\t\t\t\t\tsymbol: token.symbol,\n\t\t\t\t\t\taddress: token.address,\n\t\t\t\t\t\tchainId: token.chainId.toString(),\n\t\t\t\t\t\tdecimals: token.decimals,\n\t\t\t\t\t\ttype: \"ERC20\",\n\t\t\t\t\t\tprice: token.priceUSD.toString(),\n\t\t\t\t\t}) as AnyToken,\n\t\t\t);\n\n\t\t\t//Convert ODOS tokens\n\t\t\tconst tokenDataOdos = supportedTokensQueryOdos.isSuccess\n\t\t\t\t? ((supportedTokensQueryOdos.data as any).data.tokenMap as OdosTokenMap)\n\t\t\t\t: ({} as OdosTokenMap);\n\n\t\t\tconst tokenDataOdosAsAny: AnyToken[] = Object.keys(tokenDataOdos).map(\n\t\t\t\t(contractAddress: string) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: tokenDataOdos[contractAddress].name,\n\t\t\t\t\t\tdecimals: tokenDataOdos[contractAddress].decimals,\n\t\t\t\t\t\taddress: contractAddress,\n\t\t\t\t\t\tsymbol: tokenDataOdos[contractAddress].symbol,\n\t\t\t\t\t\tchainId: initialTokenChain || \"1\",\n\t\t\t\t\t\ttype: \"ERC20\",\n\t\t\t\t\t} as AnyToken;\n\t\t\t\t},\n\t\t\t);\n\n\t\t\t//convert tokens with gas token\n\t\t\tconst tokensWithGasTokenAsAny: AnyToken[] = tokensWithGasToken.map(\n\t\t\t\t(token) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: token.name,\n\t\t\t\t\t\tsymbol: token.symbol,\n\t\t\t\t\t\taddress: token.address,\n\t\t\t\t\t\tchainId: token.chainId,\n\t\t\t\t\t\tdecimals: token.decimals,\n\t\t\t\t\t\ttype: token.type == \"native\" ? \"ETH\" : \"ERC20\",\n\t\t\t\t\t\tprice: token.price.toString(),\n\t\t\t\t\t} as AnyToken;\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tlet tokenData = [\n\t\t\t\t...tokensWithGasTokenAsAny,\n\t\t\t\t...tokenDataLifiAsAny,\n\t\t\t\t...tokenDataOdosAsAny,\n\t\t\t];\n\t\t\t//remove duplicates of the same address\n\t\t\ttokenData = tokenData.filter(\n\t\t\t\t(token, index, self) =>\n\t\t\t\t\tindex ===\n\t\t\t\t\tself.findIndex(\n\t\t\t\t\t\t(t) => t.address === token.address && t.chainId === token.chainId,\n\t\t\t\t\t),\n\t\t\t);\n\n\t\t\treturn tokenData;\n\t\t}\n\t\treturn [];\n\t}, [tokensLoaded]);\n\n\tconst filterTokens = () => {\n\t\tlet tokens = [];\n\t\ttokens = tokenData;\n\t\tif (initialTokenChain)\n\t\t\ttokens = tokens.filter((token) => {\n\t\t\t\treturn token.chainId === initialTokenChain;\n\t\t\t});\n\t\ttokens = tokens.filter((token) => {\n\t\t\treturn token.name.toLowerCase().includes(searchTerm.toLowerCase());\n\t\t});\n\t\t//sort based on how close the search term length is to the token name length\n\t\tif (searchTerm !== \"\")\n\t\t\ttokens = tokens.sort((a, b) => {\n\t\t\t\treturn (\n\t\t\t\t\tMath.abs(a.name.length - searchTerm.length) -\n\t\t\t\t\tMath.abs(b.name.length - searchTerm.length)\n\t\t\t\t);\n\t\t\t});\n\t\tsetFilteredTokens(tokens);\n\t};\n\n\tconst debouncedFilterTokens = useDebounceCallback(filterTokens, 1000);\n\n\tuseEffect(() => {\n\t\tdebouncedFilterTokens();\n\t}, [tokenData, initialTokenChain, searchTerm]);\n\n\tconst toggleModal = (e?: any) => {\n\t\te && e.preventDefault(); // Prevent form submission\n\t\tsetIsOpen(!isOpen);\n\t};\n\n\tconst handleTokenSelect = (tokenAddress: string) => {\n\t\tsetSelectedTokenAddress(tokenAddress);\n\t\tonSelect(tokenAddress);\n\t\ttoggleModal();\n\t};\n\n\tconst selectedToken = filteredTokens.find(\n\t\t(token: AnyToken) => token.address === selectedTokenAddress,\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<button\n\t\t\t\tdisabled={!tokensLoaded}\n\t\t\t\tclassName=\"bg-accent-color rounded-xl p-3 m-1 text-text-primary\"\n\t\t\t\tonClick={toggleModal}\n\t\t\t\t{...buttonProps}\n\t\t\t>\n\t\t\t\t{tokensLoaded\n\t\t\t\t\t? (selectedToken && selectedToken?.name) || \"Select Token\"\n\t\t\t\t\t: \"Loading Tokens...\"}\n\t\t\t</button>\n\t\t\t<Modal isOpen={isOpen} toggleModal={toggleModal}>\n\t\t\t\t{title && (\n\t\t\t\t\t<h2 className=\"text-xl font-semibold mb-4\" {...headerProps}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\t\t\t\t)}\n\t\t\t\t<Input\n\t\t\t\t\tlabel=\"Search Tokens\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tplaceholder=\"Search tokens...\"\n\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n\t\t\t\t\tclassName=\"w-full p-2 mb-4 border border-gray-300 rounded\"\n\t\t\t\t\t{...inputProps}\n\t\t\t\t/>\n\t\t\t\t<div className=\"max-h-[300px] overflow-y-auto\" {...listProps}>\n\t\t\t\t\t{filteredTokens.map((token) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={token.address + token.chainId}\n\t\t\t\t\t\t\tonClick={() => handleTokenSelect(token.address)}\n\t\t\t\t\t\t\tclassName=\"p-2 cursor-pointer hover:bg-accent-color rounded-sm\"\n\t\t\t\t\t\t\t{...listItemProps}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{token.name} ({token.symbol}) - {token.chainId}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</Modal>\n\t\t</>\n\t);\n};\n","// create a react functional component that is a ChainSelector\n\nimport { useMoonChain } from '@/hooks/web3/useMoonChain';\nimport { Chains } from '@moonup/moon-sdk';\nimport React, { useEffect, useMemo } from 'react';\n\ntype ChainSelectorProps = {\n  selectProps?: React.SelectHTMLAttributes<HTMLSelectElement>;\n  optionProps?: React.OptionHTMLAttributes<HTMLOptionElement>;\n};\n\nexport const ChainSelector = ({\n  selectProps,\n  optionProps,\n}: ChainSelectorProps) => {\n  const { chains, setChain, currentChain: chain } = useMoonChain();\n\n  useEffect(() => {\n    const mainnet = chains.find((chain: Chains) => chain.chain_id === 1);\n    if (!chain && mainnet) setChain(mainnet);\n  }, [chains, setChain, chain]);\n\n  const sortedChains = useMemo(\n    () =>\n      chains.sort((a: Chains, b: Chains) => {\n        if (!a?.name || !b?.name) return 0;\n        return a.name.localeCompare(b.name);\n      }),\n    [chains]\n  );\n\n  return (\n    <select\n      className=\"max-h-[300px] bg-accent-color rounded-xl p-3 m-1 text-text-primary\"\n      value={chain?.id || ''}\n      onChange={(e) => {\n        const chainId = e.target.value;\n        const chain = chains.find((chain: any) => chain.id === chainId);\n        if (chain) setChain(chain);\n      }}\n      {...selectProps}\n    >\n      {sortedChains.map((chain: any) => (\n        <option\n          key={chain.id}\n          value={chain.id}\n          className=\"p-2\"\n          {...optionProps}\n        >\n          {chain.name}\n        </option>\n      ))}\n    </select>\n  );\n};\n","import React, { useState, useCallback, useMemo } from \"react\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { motion } from \"framer-motion\";\nimport { FaSearch } from \"react-icons/fa\";\nimport { FixedSizeList as List } from \"react-window\";\nimport { useChains } from \"@/hooks/moon/useChain\";\nimport { Input } from \"@/components\";\n\nconst MotionRadixContent = motion(RadixDialog.Content);\n\nexport type ChainSelectionModalProps = {\n\tchainIdFilterList?: number[];\n\ttitle?: string;\n\tonChange?: (e: any) => void;\n};\n\nexport const ChainSelectionModal: React.FC<ChainSelectionModalProps> = ({\n\tchainIdFilterList,\n\ttitle = \"Select Network\",\n\tonChange,\n}) => {\n\tconst { selectedChain, switchChain, chains } = useChains();\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [searchTerm, setSearchTerm] = useState(\"\");\n\n\tconst handleOpen = () => setIsOpen(true);\n\tconst handleClose = () => setIsOpen(false);\n\n\tconst sortedChains = useMemo(() => {\n\t\treturn chains.sort((a, b) => {\n\t\t\tif (!a?.name || !b?.name) return 0;\n\t\t\treturn a.name.localeCompare(b.name);\n\t\t});\n\t}, [chains]);\n\n\tconst filteredChains = useMemo(() => {\n\t\treturn sortedChains.filter((chain) => {\n\t\t\tif (!chain.name) return false;\n\t\t\treturn (\n\t\t\t\tchain.name.toLowerCase().includes(searchTerm.toLowerCase()) &&\n\t\t\t\t(!chainIdFilterList || chainIdFilterList.includes(chain.chain_id || -1))\n\t\t\t);\n\t\t});\n\t}, [sortedChains, searchTerm, chainIdFilterList]);\n\n\tconst handleChainSelect = (chainId: number) => {\n\t\tswitchChain(chainId);\n\t\thandleClose();\n\t\tconst fakeEvent = { target: { value: chainId } };\n\t\tonChange && onChange(fakeEvent);\n\t};\n\n\tconst Row = useCallback(\n\t\t({ index, style }: { index: number; style: React.CSSProperties }) => {\n\t\t\tconst chain = filteredChains[index];\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tstyle={style}\n\t\t\t\t\tkey={chain.id}\n\t\t\t\t\tclassName=\"flex items-center cursor-pointer hover:bg-gray-700 p-2 rounded-md mb-2\"\n\t\t\t\t\tonClick={() => handleChainSelect(chain.chain_id!)}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={\n\t\t\t\t\t\t\tchain.icon\n\t\t\t\t\t\t\t\t? `https://icons.llamao.fi/icons/chains/rsz_${chain.icon}.jpg`\n\t\t\t\t\t\t\t\t: \"/unknown-logo.png\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\talt={chain.name || \"Unknown Chain\"}\n\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span className=\"text-white\">{chain.name}</span>\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t\t[filteredChains],\n\t);\n\n\treturn (\n\t\t<RadixDialog.Root open={isOpen} onOpenChange={setIsOpen}>\n\t\t\t<RadixDialog.Trigger asChild>\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"flex items-center bg-gray-700 text-white rounded-md px-3 py-2 cursor-pointer\"\n\t\t\t\t\tonClick={handleOpen}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={\n\t\t\t\t\t\t\tselectedChain?.icon\n\t\t\t\t\t\t\t\t? `https://icons.llamao.fi/icons/chains/rsz_${selectedChain.icon}.jpg`\n\t\t\t\t\t\t\t\t: \"/unknown-logo.png\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\talt={selectedChain?.name || \"Unknown Chain\"}\n\t\t\t\t\t\tclassName=\"w-6 h-6 mr-2\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span>{selectedChain?.name || \"Select Network\"}</span>\n\t\t\t\t</button>\n\t\t\t</RadixDialog.Trigger>\n\t\t\t<RadixDialog.Portal>\n\t\t\t\t<RadixDialog.Overlay className=\"fixed inset-0 bg-black bg-opacity-50\" />\n\t\t\t\t<MotionRadixContent\n\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\tclassName=\"fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-gray-800 rounded-lg shadow-lg p-6 w-full max-w-md\"\n\t\t\t\t>\n\t\t\t\t\t<RadixDialog.Title className=\"text-lg font-semibold mb-4 text-white\">\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</RadixDialog.Title>\n\t\t\t\t\t<div className=\"flex items-center mb-4\">\n\t\t\t\t\t\t<FaSearch className=\"mr-2 text-gray-400\" />\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tplaceholder=\"Search chains...\"\n\t\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n\t\t\t\t\t\t\tclassName=\"flex-1 px-2 py-1 bg-gray-700 text-white rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"max-h-60 overflow-y-auto\">\n\t\t\t\t\t\t<List\n\t\t\t\t\t\t\theight={240}\n\t\t\t\t\t\t\titemCount={filteredChains.length}\n\t\t\t\t\t\t\titemSize={50}\n\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{Row}\n\t\t\t\t\t\t</List>\n\t\t\t\t\t</div>\n\t\t\t\t\t<RadixDialog.Close asChild>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName=\"px-4 py-2 mt-4 ml-auto text-sm font-semibold text-blue-500 hover:text-blue-700 rounded-md\"\n\t\t\t\t\t\t\tonClick={handleClose}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tClose\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</RadixDialog.Close>\n\t\t\t\t</MotionRadixContent>\n\t\t\t</RadixDialog.Portal>\n\t\t</RadixDialog.Root>\n\t);\n};\n\nexport default ChainSelectionModal;\n","import { IconCheck, IconCopy } from '@/assets/icons';\nimport { Modal } from '@/components';\nimport { useTokenInfo } from '@/utils/react-coinghecko';\nimport { shortenAddress } from '@/utils/shortenAddress';\nimport React, { useState } from 'react';\n\nexport type TokenInfoModalProps = {\n  isOpen: boolean;\n  toggleModal: () => void;\n  cgTokenId: string;\n};\n\nexport const TokenInfoModal: React.FC<TokenInfoModalProps> = ({\n  isOpen,\n  cgTokenId,\n  toggleModal,\n}) => {\n  const [wasCopied, setWasCopied] = useState('');\n  const { data: tokenInfo } = useTokenInfo(cgTokenId);\n  if (!tokenInfo) return null;\n  const copyToClipBoard = (text: string) => {\n    navigator.clipboard.writeText(text);\n    setWasCopied(text);\n    setTimeout(() => {\n      setWasCopied('');\n    }, 2000);\n  };\n  console.log('tokeninfo', tokenInfo);\n  return (\n    <Modal isOpen={isOpen} toggleModal={toggleModal}>\n      <h2 className=\"text-xl font-semibold mb-4\">Token Info</h2>\n      <div className=\"mb-4 flex flex-col gap-2\">\n        <div className=\"grid grid-cols-2 gap-4\">\n          <div className=\"h-10 relative bg-background-primary rounded-sm flex items-center justify-center\">\n            <span className=\"text-text-secondary text-sm absolute top-2 left-2\">\n              label\n            </span>\n            <span className=\"text-text-primary\">Value</span>\n          </div>\n          <div className=\"relative bg-background-primary rounded-sm flex flex-col p-3 gap-3\">\n            <span className=\"ml-3 text-text-secondary\">label</span>\n            <span className=\"ml-3 text-text-primary\">Value</span>\n          </div>\n        </div>\n\n        <div className=\"bg-background-primary rounded-sm flex flex-col p-3 gap-3\">\n          <div className=\"flex justify-left items-center \">\n            <img\n              src={tokenInfo?.image.small}\n              alt=\"Token Icon\"\n              className=\"w-10 h-10 mr-3\"\n            />\n            <span className=\"text-text-primary\">{tokenInfo?.name}</span>\n            <span className=\"ml-3 text-text-secondary\">\n              ${tokenInfo?.market_data.current_price.usd}\n            </span>\n          </div>\n          <div className=\"max-h-[200px] overflow-y-scroll\">\n            <span className=\"text-text-secondary\">\n              {tokenInfo.description.en}\n            </span>\n          </div>\n        </div>\n        <div className=\"max-h-[100px] overflow-y-scroll\">\n          <h4 className=\"text-text-secondary text-bold\">Chain Addresses</h4>\n          {Object.keys(tokenInfo.platforms).map((platform) => (\n            <div className=\"flex justify-between\" key={platform}>\n              <span className=\"text-text-primary\">{platform}:</span>\n              <span className=\"text-text-secondary flex\">\n                {shortenAddress(tokenInfo.platforms[platform])}\n                <div\n                  className=\"ml-3\"\n                  onClick={() => copyToClipBoard(tokenInfo.platforms[platform])}\n                >\n                  {wasCopied == tokenInfo.platforms[platform] ? (\n                    <IconCheck className=\"w-4 h-4 ml-1 text-success-color\" />\n                  ) : (\n                    <IconCopy className=\"w-4 h-4 ml-1 text-text-primary opacity-50 cursor-pointer hover:opacity-100\" />\n                  )}\n                </div>\n              </span>\n            </div>\n          ))}\n        </div>\n      </div>\n    </Modal>\n  );\n};\n","import { UserToken } from '@/components';\nimport { DBAdapterBase, DbTokenPrice, DbWalletAlias } from './DBAdapterBase';\n\nexport class LocalStorageAdapter implements DBAdapterBase {\n  private storageKey = 'userTokens';\n\n  async getTokens(): Promise<UserToken[]> {\n    const tokens = localStorage.getItem(this.storageKey);\n    return tokens ? JSON.parse(tokens) : [];\n  }\n\n  async addToken(token: UserToken): Promise<void> {\n    const tokens = await this.getTokens();\n    tokens.push(token);\n    localStorage.setItem(this.storageKey, JSON.stringify(tokens));\n  }\n\n  async removeToken(address: string): Promise<void> {\n    let tokens = await this.getTokens();\n    tokens = tokens.filter((token) => token.address !== address);\n    localStorage.setItem(this.storageKey, JSON.stringify(tokens));\n  }\n\n  async getTokenPrice(tokenId: string): Promise<DbTokenPrice> {\n    const prices = localStorage.getItem('tokenPrices');\n    return prices ? JSON.parse(prices)[tokenId] : 0;\n  }\n\n  async saveTokenPrice(tokenId: string, price: number): Promise<void> {\n    const prices = localStorage.getItem('tokenPrices');\n    const newPrices = prices ? JSON.parse(prices) : {};\n    newPrices[tokenId] = price;\n    localStorage.setItem('tokenPrices', JSON.stringify(newPrices));\n  }\n\n  async updateToken(token: UserToken): Promise<void> {\n    let tokens = await this.getTokens();\n    tokens = tokens.map((t) => (t.address === token.address ? token : t));\n    localStorage.setItem(this.storageKey, JSON.stringify(tokens));\n  }\n  async getUserWalletAliases(): Promise<DbWalletAlias[]> {\n    throw new Error('Method not implemented.');\n  }\n  async upsertWalletAlias(alias: string, address: string): Promise<void> {\n    console.log('upsertWalletAlias', alias, address);\n    throw new Error('Method not implemented.');\n  }\n}\n","import { UserToken } from '@/components';\nimport { SupabaseClient } from '@supabase/supabase-js';\nimport { v4 as uuidv4 } from 'uuid';\nimport { DBAdapterBase, DbTokenPrice, DbWalletAlias } from '.';\n\ntype DbToken = {\n  id?: string;\n  user_id: string;\n  name: string;\n  symbol: string;\n  coin_gecko_id: string;\n  decimals: number;\n  address: string;\n  chain_id: number;\n  logo_uri: string;\n  type: string;\n};\n\nexport class SupabaseAdapter implements DBAdapterBase {\n  private supabase: SupabaseClient;\n\n  constructor(supabase: SupabaseClient) {\n    this.supabase = supabase;\n  }\n\n  async getUserId(): Promise<string> {\n    const { data, error } = await this.supabase.auth.getUser();\n    if (error) {\n      throw new Error(error.message);\n    }\n    return data?.user?.id || '';\n  }\n\n  async getUserWalletAliases(): Promise<DbWalletAlias[]> {\n    const userId = await this.getUserId();\n    const { data, error } = await this.supabase\n      .from('wallet_alias')\n      .select('*')\n      .eq('user_id', userId);\n    console.log('getUserWalletAliases', data, error);\n\n    if (error) throw new Error(error.message);\n    return data;\n  }\n\n  async upsertWalletAlias(alias: string, address: string): Promise<void> {\n    const dbAlias = {\n      address: address,\n      alias: alias,\n    };\n    const userId = await this.getUserId();\n    const { error } = await this.supabase\n      .from('wallet_alias')\n      .upsert({ ...dbAlias, user_id: userId });\n    if (error) throw new Error(error.message);\n    console.log('upsertWalletAlias', dbAlias);\n  }\n\n  async getOneUserDbToken(\n    userId: string,\n    contractAddress: string,\n    chainId: number\n  ): Promise<DbToken> {\n    const { data, error } = await this.supabase\n      .from('user_tokens')\n      .select('*')\n      .eq('user_id', userId)\n      .eq('address', contractAddress)\n      .eq('chain_id', chainId)\n      .limit(1);\n    console.log('getOneUserDbToken', data, error);\n\n    if (error) throw new Error(error.message);\n    return data[0];\n  }\n\n  async getTokens(): Promise<UserToken[]> {\n    const userId = await this.getUserId();\n    const { data, error } = await this.supabase\n      .from('user_tokens')\n      .select('*')\n      .eq('user_id', userId);\n    console.log('getTokens', data, error);\n\n    if (error) throw new Error(error.message);\n    //convert db tokens to user tokens\n    const userTokens = data?.map((token: DbToken) => {\n      return {\n        name: token.name,\n        symbol: token.symbol,\n        coinGeckoId: token.coin_gecko_id,\n        decimals: token.decimals,\n        address: token.address,\n        chainId: token.chain_id,\n        icon: token.logo_uri,\n        type: token.type,\n      };\n    });\n    return userTokens;\n  }\n\n  async updateToken(token: UserToken): Promise<void> {\n    const userId = await this.getUserId();\n    const existingToken = await this.getOneUserDbToken(\n      userId || '',\n      token.address,\n      token.chainId\n    );\n    if (!existingToken) {\n      throw new Error('updateToken::Token not found');\n    }\n    existingToken.name = token.name;\n    existingToken.symbol = token.symbol;\n    existingToken.coin_gecko_id = token.coinGeckoId;\n    existingToken.decimals = token.decimals;\n    existingToken.logo_uri = token.icon || '';\n    existingToken.chain_id = token.chainId;\n    existingToken.address = token.address;\n\n    console.log('updateToken', existingToken);\n    const { error } = await this.supabase\n      .from('user_tokens')\n      .update(existingToken)\n      .eq('id', existingToken.id);\n    if (error) throw new Error(error.message);\n  }\n\n  async addToken(token: UserToken): Promise<void> {\n    const userId = await this.getUserId();\n\n    const dbToken: DbToken = {\n      id: uuidv4(), // Generate a new UUID\n      user_id: userId || '',\n      name: token.name,\n      symbol: token.symbol,\n      coin_gecko_id: token.coinGeckoId,\n      decimals: token.decimals,\n      address: token.address,\n      chain_id: token.chainId,\n      logo_uri: token.icon || '',\n      type: token.type, // Add this line\n    };\n    console.log('addToken', dbToken);\n    const { error } = await this.supabase.from('user_tokens').insert(dbToken);\n    if (error) throw new Error(error.message);\n  }\n\n  async removeToken(address: string): Promise<void> {\n    const { error } = await this.supabase\n      .from('user_tokens')\n      .delete()\n      .eq('address', address);\n    if (error) throw new Error(error.message);\n  }\n\n  async getTokenPrice(tokenId: string): Promise<DbTokenPrice> {\n    const { data, error } = await this.supabase\n      .from('cg_token_price_cache')\n      .select('*')\n      .eq('id', tokenId)\n      .limit(1)\n      .single();\n    console.log('getTokenPrice', data, error);\n\n    if (error) throw new Error(error.message);\n    // this.tokens = data;\n    return data;\n  }\n\n  async saveTokenPrice(tokenId: string, price: number): Promise<void> {\n    const { error, data } = await this.supabase\n      .from('cg_token_price_cache')\n      .upsert({\n        id: tokenId,\n        price: price,\n        updated_at: new Date().toISOString(),\n      });\n    console.log('saveTokenPrice', data, error);\n\n    if (error) throw new Error(error.message);\n  }\n}\n","import React, { useEffect, useRef } from 'react';\n\nexport type TokenContextMenuProps = {\n  onRemove: () => void;\n  onSend: () => void;\n  onEdit: () => void;\n  onInfo: () => void;\n  onClose: () => void;\n};\n\nexport const TokenContextMenu: React.FC<TokenContextMenuProps> = ({\n  onRemove,\n  onSend,\n  onEdit,\n  onInfo,\n  onClose,\n}) => {\n  const menuRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n        onClose();\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, [menuRef, onClose]);\n\n  return (\n    <div\n      ref={menuRef}\n      className=\"absolute right-0 top-20 mt-2 w-48 bg-white shadow-lg rounded-md overflow-hidden\"\n    >\n      <button\n        className=\"block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100\"\n        onClick={onRemove}\n      >\n        Remove\n      </button>\n      <button\n        className=\"block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100\"\n        onClick={onSend}\n      >\n        Send\n      </button>\n      <button\n        className=\"block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100\"\n        onClick={onEdit}\n      >\n        Edit\n      </button>\n      <button\n        className=\"block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100\"\n        onClick={onInfo}\n      >\n        Info\n      </button>\n    </div>\n  );\n};\n","import { IconDots, IconGas } from '@/assets/icons';\nimport { minAddress } from '@/utils/shortenAddress';\nimport React from 'react';\nimport { UserToken } from '../types';\n\nexport type TokenListItemProps = {\n  token: UserToken;\n  onDotsClick: () => void;\n};\n\nexport const TokenListItem: React.FC<TokenListItemProps> = ({\n  token,\n  onDotsClick,\n}) => (\n  <li\n    key={token.address + token.chainId + token.wallet}\n    className=\"relative flex mb-2 justify-start py-2 px-3 gap-4 items-center bg-background-primary rounded-sm min-w-[300px] border-2 border-transparent hover:border-2 hover:border-accent-color hover:shadow-lg cursor-pointer\"\n  >\n    {token.isGasToken ? (\n      <IconGas className=\"w-10 h-10 text-accent-color\" />\n    ) : (\n      <img src={token.icon} alt=\"Token Icon\" className=\"w-10 h-10\" />\n    )}\n    <p className=\"absolute left-3 top-0 rounded-lg py-0 px-1 text-xs\">\n      {minAddress(token.wallet)}\n    </p>\n    <p className=\"absolute left-1 bottom-1 bg-accent-color rounded-lg py-0 px-1 text-xs\">\n      {token.chainId}\n    </p>\n\n    <div className=\"flex flex-col mr-10 w-[100px]\">\n      <span className=\"text-text-primary whitespace-nowrap overflow-hidden text-ellipsis\">\n        {token.name}\n      </span>\n      <span className=\"text-text-secondary\">{token.symbol}</span>\n    </div>\n    <div className=\"flex flex-col  w-[100px] \">\n      <span className=\"text-text-primary whitespace-nowrap overflow-hidden text-ellipsis\">\n        {token?.balance || '0'}\n      </span>\n      <span className=\"text-text-secondary whitespace-nowrap overflow-hidden text-ellipsis\">\n        ${parseFloat(token?.balance || '0') * (token.price || 0)}\n      </span>\n    </div>\n    <div\n      className=\"flex text-text-primary cursor-pointer w-6 h-6 opacity-50 hover:opacity-100\"\n      onClick={onDotsClick}\n    >\n      <IconDots style={{ width: '1.5rem', height: '1.5rem' }} />\n    </div>\n  </li>\n);\n","import { Button, Input, Modal } from '@/components';\nimport React from 'react';\nimport { UserToken } from '../types';\n\nexport type TokenModalProps = {\n  isEditing: boolean;\n  isOpen: boolean;\n  toggleModal: () => void;\n  tokenInfo: any;\n  cgToken: string;\n  setCgToken: (value: string) => void;\n  autocompleteOptions: any[];\n  showAutocomplete: boolean;\n  handleAutocompleteChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n  handleAutocompleteSelect: (token: any) => void;\n  platforms: { [key: string]: string };\n  selectedPlatform: string;\n  handlePlatformChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n  newToken: UserToken;\n  setNewToken: (token: UserToken) => void;\n  handleAddToken: () => void;\n  handleUpdateToken: () => void;\n};\n\nexport const TokenModal: React.FC<TokenModalProps> = ({\n  isEditing,\n  isOpen,\n  toggleModal,\n  tokenInfo,\n  cgToken,\n  autocompleteOptions,\n  showAutocomplete,\n  handleAutocompleteChange,\n  handleAutocompleteSelect,\n  platforms,\n  selectedPlatform,\n  handlePlatformChange,\n  newToken,\n  setNewToken,\n  handleAddToken,\n  handleUpdateToken,\n}) => (\n  <Modal isOpen={isOpen} toggleModal={toggleModal}>\n    <h2 className=\"text-xl font-semibold mb-4\">\n      {isEditing ? 'Editing ' : 'Add New '} Token\n    </h2>\n    <div className=\"mb-4 flex flex-col gap-2\">\n      {tokenInfo?.name && tokenInfo?.market_data?.current_price?.usd && (\n        <div className=\"bg-background-primary rounded-sm flex flex-col p-3 gap-3\">\n          <div className=\"flex justify-left items-center \">\n            <img\n              src={tokenInfo?.image?.small}\n              alt=\"Token Icon\"\n              className=\"w-10 h-10 mr-3\"\n            />\n            <span className=\"text-text-primary\">{tokenInfo?.name}</span>\n            <span className=\"ml-3 text-text-secondary\">\n              ${tokenInfo?.market_data?.current_price?.usd}\n            </span>\n          </div>\n          <div className=\"max-h-[60px] overflow-y-scroll\">\n            <span className=\"text-text-secondary\">\n              {tokenInfo?.description?.en}\n            </span>\n          </div>\n        </div>\n      )}\n      <div className=\"relative\">\n        <Input\n          label=\"CoinGecko ID\"\n          type=\"text\"\n          placeholder=\"CoinGecko ID\"\n          value={cgToken}\n          onChange={handleAutocompleteChange}\n          className=\"p-2 border rounded mb-2\"\n        />\n        {showAutocomplete && (\n          <ul className=\"absolute z-10 w-full bg-white border border-gray-300 rounded shadow-lg max-h-48 overflow-y-auto\">\n            {autocompleteOptions.map((token) => (\n              <li\n                key={token.id}\n                onClick={() => handleAutocompleteSelect(token)}\n                className=\"p-2 cursor-pointer hover:bg-gray-200 text-black\"\n              >\n                {token.id} ({token.symbol})\n              </li>\n            ))}\n          </ul>\n        )}\n      </div>\n      {Object.keys(platforms).length > 0 && (\n        <div className=\"relative\">\n          <label className=\"block text-sm font-medium text-gray-700\">\n            Platform\n          </label>\n          <select\n            value={selectedPlatform}\n            onChange={handlePlatformChange}\n            className=\"p-2 border rounded mb-2 w-full text-black\"\n          >\n            {Object.keys(platforms).map((platform) => (\n              <option key={platform} value={platform}>\n                {platform}\n              </option>\n            ))}\n          </select>\n        </div>\n      )}\n      <Input\n        label=\"Name\"\n        type=\"text\"\n        placeholder=\"Name\"\n        value={newToken.name}\n        onChange={(e) => setNewToken({ ...newToken, name: e.target.value })}\n        className=\"p-2 border rounded mb-2\"\n      />\n      <Input\n        label=\"Symbol\"\n        type=\"text\"\n        placeholder=\"Symbol\"\n        value={newToken.symbol}\n        onChange={(e) => setNewToken({ ...newToken, symbol: e.target.value })}\n        className=\"p-2 border rounded mb-2\"\n      />\n      <Input\n        label=\"Decimals\"\n        type=\"number\"\n        placeholder=\"Decimals\"\n        value={newToken.decimals}\n        onChange={(e) =>\n          setNewToken({ ...newToken, decimals: +e.target.value })\n        }\n        className=\"p-2 border rounded mb-2\"\n      />\n      <Input\n        label=\"Address\"\n        type=\"text\"\n        placeholder=\"Address\"\n        value={newToken.address}\n        onChange={(e) => setNewToken({ ...newToken, address: e.target.value })}\n        className=\"p-2 border rounded mb-2\"\n      />\n      <Input\n        label=\"Chain ID (hex)\"\n        type=\"number\"\n        placeholder=\"Chain ID\"\n        value={newToken.chainId}\n        onChange={(e) => setNewToken({ ...newToken, chainId: +e.target.value })}\n        className=\"p-2 border rounded mb-2\"\n      />\n      {isEditing ? (\n        <Button onClick={handleUpdateToken} className=\"mt-2\">\n          Update Token\n        </Button>\n      ) : (\n        <Button onClick={handleAddToken} className=\"mt-2\">\n          Add Token\n        </Button>\n      )}\n    </div>\n  </Modal>\n);\n","import {\n\tButton,\n\tTokenContextMenu,\n\tTokenInfoModal,\n\tTokenListItem,\n\tTokenModal,\n} from \"@/components\";\nimport { useMoonAccount, useMoonTokenManager } from \"@/hooks\";\nimport { shortenAddress } from \"@/utils\";\nimport React, { useMemo, useState } from \"react\";\nimport type { UserToken } from \"./types\";\nimport { useTokenManagmentUIState } from \"./useTokenManagmentUIState\";\n\nexport const UserTokenManager: React.FC = () => {\n\tconst [contextMenuToken, setContextMenuToken] =\n\t\tReact.useState<UserToken | null>();\n\tconst { accounts: wallets, account: wallet } = useMoonAccount();\n\tconst {\n\t\ttokensWithGasToken: tokens,\n\t\taddToken,\n\t\tremoveToken,\n\t\tupdateToken,\n\t\ttokenList,\n\t\tchain,\n\t} = useMoonTokenManager(wallets);\n\n\tconst [activeFilters, setActiveFilters] = useState<string[]>([\n\t\t\"balance>0\",\n\t\t`selectedWallet`,\n\t\t`selectedChain`,\n\t\t\"native\",\n\t\t\"erc20\",\n\t]);\n\n\tconst {\n\t\ttokenInfoModalCGID,\n\t\tisEditingExistingToken,\n\t\tsetTokenInfoModalCGID,\n\t\tcgToken,\n\t\tsetCgToken,\n\t\tnewToken,\n\t\tsetNewToken,\n\t\tisModalOpen,\n\t\tautocompleteOptions,\n\t\tshowAutocomplete,\n\t\tplatforms,\n\t\tselectedPlatform,\n\t\tcontextMenuOpen,\n\t\ttoggleModal,\n\t\thandleAutocompleteChange,\n\t\thandleAutocompleteSelect,\n\t\thandlePlatformChange,\n\t\ttoggleContextMenu,\n\t} = useTokenManagmentUIState(tokenList);\n\n\tconst handleUpdateToken = async () => {\n\t\tawait updateToken(newToken);\n\t\tsetNewToken({\n\t\t\ttype: \"erc20\",\n\t\t\tname: \"\",\n\t\t\tsymbol: \"\",\n\t\t\tcoinGeckoId: \"\",\n\t\t\tdecimals: 0,\n\t\t\taddress: \"\",\n\t\t\tchainId: 1,\n\t\t\ticon: \"\",\n\t\t});\n\t\ttoggleModal();\n\t};\n\n\tconst handleAddToken = async () => {\n\t\tawait addToken(newToken);\n\t\tsetNewToken({\n\t\t\ttype: \"erc20\",\n\t\t\tname: \"\",\n\t\t\tsymbol: \"\",\n\t\t\tcoinGeckoId: \"\",\n\t\t\tdecimals: 0,\n\t\t\taddress: \"\",\n\t\t\tchainId: 1,\n\t\t\ticon: \"\",\n\t\t});\n\t\ttoggleModal();\n\t};\n\n\tconst toggleFilter = (filter: string) => {\n\t\tsetActiveFilters((prev) =>\n\t\t\tprev.includes(filter)\n\t\t\t\t? prev.filter((f) => f !== filter)\n\t\t\t\t: [...prev, filter],\n\t\t);\n\t};\n\n\tconst filteredTokens = useMemo(() => {\n\t\treturn tokens.filter((token: UserToken) => {\n\t\t\tif (\n\t\t\t\tactiveFilters.includes(\"balance>0\") &&\n\t\t\t\tNumber.parseFloat(token.balance || \"0\") <= 0\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tactiveFilters.includes(`selectedChain`) &&\n\t\t\t\ttoken.chainId !== chain?.chain_id\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tactiveFilters.includes(`selectedWallet`) &&\n\t\t\t\ttoken.wallet?.toLocaleLowerCase() !== (wallet || \"\").toLocaleLowerCase()\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst tokenType = token?.type || \"erc20\";\n\t\t\tif (!activeFilters.includes(tokenType)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t}, [tokens, activeFilters, chain?.chain_id]);\n\n\tconst FilterButton: React.FC<{ filter: string; label: string }> = ({\n\t\tfilter,\n\t\tlabel,\n\t}) => (\n\t\t<button\n\t\t\tonClick={() => toggleFilter(filter)}\n\t\t\tclassName={`inline-flex items-center justify-center whitespace-nowrap px-3 py-1 rounded-full text-sm mr-2 mb-2 transition-colors duration-200 ${\n\t\t\t\tactiveFilters.includes(filter)\n\t\t\t\t\t? \"bg-accent-color text-white\"\n\t\t\t\t\t: \"bg-gray-200 text-gray-700 hover:bg-gray-300\"\n\t\t\t}`}\n\t\t>\n\t\t\t{label}\n\t\t</button>\n\t);\n\n\tfilteredTokens.sort((a, b) => {\n\t\tif (!a?.balance || !b?.balance) return 0;\n\t\treturn Number.parseFloat(b.balance) - Number.parseFloat(a.balance);\n\t});\n\treturn (\n\t\t<div className=\"p-4 max-w-[400px] relative\">\n\t\t\t<div className=\"mb-4 flex flex-wrap\">\n\t\t\t\t<FilterButton filter=\"balance>0\" label=\"$>0\" />\n\t\t\t\t<FilterButton\n\t\t\t\t\tfilter={`selectedWallet`}\n\t\t\t\t\tlabel={shortenAddress(wallet) || \"Wallet\"}\n\t\t\t\t/>\n\t\t\t\t<FilterButton\n\t\t\t\t\tfilter={`selectedChain`}\n\t\t\t\t\tlabel={`Chain: ${chain?.name || chain?.chain_id}`}\n\t\t\t\t/>\n\t\t\t\t<FilterButton filter=\"native\" label=\"Native\" />\n\t\t\t\t<FilterButton filter=\"erc20\" label=\"ERC20\" />\n\t\t\t\t<FilterButton filter=\"erc721\" label=\"ERC721\" />\n\t\t\t\t<FilterButton filter=\"erc1155\" label=\"ERC1155\" />\n\t\t\t</div>\n\n\t\t\t{filteredTokens.length === 0 && (\n\t\t\t\t<p className=\"ml-auto mr-auto mb-3 text-text-secondary\">\n\t\t\t\t\tNo tokens match the current filters\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t<ul className=\"mb-3 max-h-[400px] overflow-y-scroll\">\n\t\t\t\t{filteredTokens.map((token) => (\n\t\t\t\t\t<TokenListItem\n\t\t\t\t\t\tkey={token.address + token.chainId + token.wallet}\n\t\t\t\t\t\ttoken={token}\n\t\t\t\t\t\tonDotsClick={() => {\n\t\t\t\t\t\t\ttoggleContextMenu(token.address + token.chainId + token.wallet);\n\t\t\t\t\t\t\tsetContextMenuToken(token);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</ul>\n\t\t\t<Button\n\t\t\t\tonClick={toggleModal}\n\t\t\t\tclassName=\"btn btn-primary mb-4\"\n\t\t\t\tcolor=\"accentColor\"\n\t\t\t>\n\t\t\t\tAdd Token\n\t\t\t</Button>\n\t\t\t{contextMenuOpen && contextMenuToken && (\n\t\t\t\t<TokenContextMenu\n\t\t\t\t\tonRemove={() => removeToken(contextMenuToken.address)}\n\t\t\t\t\tonSend={() => alert(\"Send functionality not implemented\")}\n\t\t\t\t\tonEdit={() => {\n\t\t\t\t\t\tsetNewToken(contextMenuToken);\n\t\t\t\t\t\tsetCgToken(contextMenuToken.coinGeckoId);\n\t\t\t\t\t\ttoggleModal();\n\t\t\t\t\t}}\n\t\t\t\t\tonInfo={() => setTokenInfoModalCGID(contextMenuToken.coinGeckoId)}\n\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\ttoggleContextMenu(\n\t\t\t\t\t\t\tcontextMenuToken.address +\n\t\t\t\t\t\t\t\tcontextMenuToken.chainId +\n\t\t\t\t\t\t\t\tcontextMenuToken.wallet,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsetContextMenuToken(null);\n\t\t\t\t\t}} // Toggle to close the context menu\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<TokenModal\n\t\t\t\tisEditing={isEditingExistingToken}\n\t\t\t\tisOpen={isModalOpen}\n\t\t\t\ttoggleModal={toggleModal}\n\t\t\t\ttokenInfo={newToken}\n\t\t\t\tcgToken={cgToken}\n\t\t\t\tsetCgToken={(value: string) => handleAutocompleteChange(value)}\n\t\t\t\tautocompleteOptions={autocompleteOptions}\n\t\t\t\tshowAutocomplete={showAutocomplete}\n\t\t\t\thandleAutocompleteChange={(e) =>\n\t\t\t\t\thandleAutocompleteChange(e.target.value)\n\t\t\t\t}\n\t\t\t\thandleAutocompleteSelect={handleAutocompleteSelect}\n\t\t\t\tplatforms={platforms}\n\t\t\t\tselectedPlatform={selectedPlatform}\n\t\t\t\thandlePlatformChange={(e) => handlePlatformChange(e.target.value)}\n\t\t\t\tnewToken={newToken}\n\t\t\t\tsetNewToken={setNewToken}\n\t\t\t\thandleAddToken={handleAddToken}\n\t\t\t\thandleUpdateToken={handleUpdateToken}\n\t\t\t/>\n\t\t\t<TokenInfoModal\n\t\t\t\tisOpen={!!tokenInfoModalCGID}\n\t\t\t\ttoggleModal={() => setTokenInfoModalCGID(\"\")}\n\t\t\t\tcgTokenId={tokenInfoModalCGID}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import { useChains } from \"@/hooks\";\nimport {\n\ttype CG_TokenListItem as TokenListItemType,\n\tuseTokenInfo,\n} from \"@/utils/react-coinghecko\";\nimport { useEffect, useState } from \"react\";\nimport type { UserToken } from \"./types\";\n\nexport const useTokenManagmentUIState = (\n\ttokenList: TokenListItemType[] | undefined,\n) => {\n\tconst { chains } = useChains();\n\tconst [tokenInfoModalCGID, setTokenInfoModalCGID] = useState<string>(\"\");\n\tconst [isEditingExistingToken, setIsEditingExistingToken] = useState(true);\n\n\tconst [cgToken, setCgToken] = useState<string>(\"\");\n\tconst [newToken, setNewToken] = useState<UserToken>({\n\t\ttype: \"erc20\",\n\t\tname: \"\",\n\t\tsymbol: \"\",\n\t\tcoinGeckoId: \"\",\n\t\tdecimals: 0,\n\t\taddress: \"\",\n\t\tchainId: 1,\n\t\ticon: \"\",\n\t});\n\tconst [isModalOpen, setIsModalOpen] = useState(false);\n\tconst [autocompleteOptions, setAutocompleteOptions] = useState<\n\t\tTokenListItemType[]\n\t>([]);\n\tconst [showAutocomplete, setShowAutocomplete] = useState(false);\n\tconst [platforms, setPlatforms] = useState<{ [key: string]: string }>({});\n\tconst [selectedPlatform, setSelectedPlatform] = useState<string>(\"\");\n\tconst [contextMenuOpen, setContextMenuOpen] = useState<string | null>(null);\n\n\tconst { data: tokenInfo } = useTokenInfo(newToken.coinGeckoId || \"\");\n\n\tuseEffect(() => {\n\t\tif (cgToken && tokenList) {\n\t\t\tconst filteredOptions = tokenList.filter((token: TokenListItemType) =>\n\t\t\t\ttoken.id.toLowerCase().includes(cgToken.toLowerCase()),\n\t\t\t);\n\t\t\tsetAutocompleteOptions(filteredOptions);\n\t\t\tsetShowAutocomplete(true);\n\t\t} else {\n\t\t\tsetShowAutocomplete(false);\n\t\t}\n\t}, [cgToken, tokenList]);\n\n\tuseEffect(() => {\n\t\tif (tokenInfo) {\n\t\t\tsetNewToken((prevToken) => ({\n\t\t\t\t...prevToken,\n\t\t\t\tname: tokenInfo.name,\n\t\t\t\tsymbol: tokenInfo.symbol,\n\t\t\t\ticon: tokenInfo.image.small,\n\t\t\t\taddress: Object.values(tokenInfo.platforms)[0],\n\t\t\t}));\n\t\t\tsetPlatforms(tokenInfo.platforms);\n\t\t}\n\t}, [tokenInfo]);\n\n\tconst toggleModal = () => setIsModalOpen(!isModalOpen);\n\n\tconst handleAutocompleteChange = (value: string) => setCgToken(value);\n\n\tconst handleAutocompleteSelect = (token: TokenListItemType) => {\n\t\tsetNewToken({\n\t\t\t...newToken,\n\t\t\tcoinGeckoId: token.id,\n\t\t\tname: token.name,\n\t\t\tsymbol: token.symbol,\n\t\t});\n\t\tsetShowAutocomplete(false);\n\t};\n\n\tconst handlePlatformChange = (chainName: string) => {\n\t\tconst chain = chains.find((chain) =>\n\t\t\tchain.name?.toLocaleLowerCase().includes(chainName.toLocaleLowerCase()),\n\t\t);\n\t\tsetNewToken((prevToken) => ({\n\t\t\t...prevToken,\n\t\t\tchainId: chain?.chain_id || 1,\n\t\t\taddress: platforms[chainName],\n\t\t}));\n\t\tsetSelectedPlatform(platforms[chainName]);\n\t};\n\n\tconst toggleContextMenu = (address: string) => {\n\t\tsetContextMenuOpen((prev) => (prev === address ? null : address));\n\t};\n\n\treturn {\n\t\ttokenInfoModalCGID,\n\t\tsetTokenInfoModalCGID,\n\t\tcgToken,\n\t\tsetCgToken,\n\t\tnewToken,\n\t\tsetNewToken,\n\t\tisModalOpen,\n\t\tautocompleteOptions,\n\t\tshowAutocomplete,\n\t\tplatforms,\n\t\tselectedPlatform,\n\t\tcontextMenuOpen,\n\t\ttoggleModal,\n\t\thandleAutocompleteChange,\n\t\thandleAutocompleteSelect,\n\t\thandlePlatformChange,\n\t\ttoggleContextMenu,\n\t\tsetIsEditingExistingToken,\n\t\tisEditingExistingToken,\n\t};\n};\n","// import { useMoonTransaction } from \"@/hooks/useMoonTransaction\";\nimport React, { useState } from 'react';\n\nexport type TransactionFormProps = {\n  formProps?: React.FormHTMLAttributes<HTMLFormElement>;\n  inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n  buttonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n};\n\nexport const TransactionForm: React.FC<TransactionFormProps> = ({\n  formProps,\n  inputProps,\n  buttonProps,\n}) => {\n  const [to, setTo] = useState('');\n  const [value, setValue] = useState('');\n  // const { handleTransaction } = useMoonTransaction();\n\n  const handleSubmit = async (e: React.FormEvent) => {\n    e.preventDefault();\n    // await sendTransaction({ to, value });\n  };\n\n  return (\n    <form onSubmit={handleSubmit} {...formProps}>\n      <input\n        type=\"text\"\n        value={to}\n        onChange={(e) => setTo(e.target.value)}\n        placeholder=\"To Address\"\n        {...inputProps}\n      />\n      <input\n        type=\"text\"\n        value={value}\n        onChange={(e) => setValue(e.target.value)}\n        placeholder=\"Amount\"\n        {...inputProps}\n      />\n      <button type=\"submit\" {...buttonProps}>\n        Send Transaction\n      </button>\n    </form>\n  );\n};\n","import { formatEther } from 'ethers';\nimport React from 'react';\n\nexport interface TransactionReceiptProps {\n  txHash: string;\n  from: string;\n  to: string;\n  value: string;\n  gasUsed: string;\n  blockNumber: number;\n  status: 'success' | 'failure' | 'pending';\n  timestamp: number;\n  containerProps?: React.HTMLAttributes<HTMLDivElement>;\n  headerProps?: React.HTMLAttributes<HTMLDivElement>;\n  contentProps?: React.HTMLAttributes<HTMLDivElement>;\n  rowProps?: React.HTMLAttributes<HTMLDivElement>;\n  labelProps?: React.HTMLAttributes<HTMLSpanElement>;\n  valueProps?: React.HTMLAttributes<HTMLSpanElement>;\n  statusProps?: React.HTMLAttributes<HTMLDivElement>;\n}\n\nexport const TransactionReceipt: React.FC<TransactionReceiptProps> = ({\n  txHash,\n  from,\n  to,\n  value,\n  gasUsed,\n  blockNumber,\n  status,\n  timestamp,\n  containerProps,\n  headerProps,\n  contentProps,\n  rowProps,\n  labelProps,\n  valueProps,\n  statusProps,\n}) => {\n  const formatAddress = (address: string) =>\n    `${address.slice(0, 6)}...${address.slice(-4)}`;\n\n  const formatTimestamp = (timestamp: number) =>\n    new Date(timestamp * 1000).toLocaleString();\n\n  return (\n    <div\n      className=\"bg-white shadow-lg rounded-lg p-6 max-w-2xl mx-auto\"\n      {...containerProps}\n    >\n      <div className=\"text-2xl font-bold mb-4 text-gray-800\" {...headerProps}>\n        Transaction Receipt\n      </div>\n      <div className=\"space-y-3\" {...contentProps}>\n        <div className=\"flex justify-between items-center\" {...rowProps}>\n          <span className=\"text-gray-600 font-medium\" {...labelProps}>\n            Status:\n          </span>\n          <div\n            className={`px-3 py-1 rounded-full text-white ${\n              status === 'success'\n                ? 'bg-green-500'\n                : status === 'failure'\n                ? 'bg-red-500'\n                : 'bg-yellow-500'\n            }`}\n            {...statusProps}\n          >\n            {status.charAt(0).toUpperCase() + status.slice(1)}\n          </div>\n        </div>\n        <div className=\"flex justify-between items-center\" {...rowProps}>\n          <span className=\"text-gray-600 font-medium\" {...labelProps}>\n            Transaction Hash:\n          </span>\n          <span className=\"text-blue-600 truncate max-w-xs\" {...valueProps}>\n            {txHash}\n          </span>\n        </div>\n        <div className=\"flex justify-between items-center\" {...rowProps}>\n          <span className=\"text-gray-600 font-medium\" {...labelProps}>\n            From:\n          </span>\n          <span className=\"text-gray-800\" {...valueProps}>\n            {formatAddress(from)}\n          </span>\n        </div>\n        <div className=\"flex justify-between items-center\" {...rowProps}>\n          <span className=\"text-gray-600 font-medium\" {...labelProps}>\n            To:\n          </span>\n          <span className=\"text-gray-800\" {...valueProps}>\n            {formatAddress(to)}\n          </span>\n        </div>\n        <div className=\"flex justify-between items-center\" {...rowProps}>\n          <span className=\"text-gray-600 font-medium\" {...labelProps}>\n            Value:\n          </span>\n          <span className=\"text-gray-800\" {...valueProps}>\n            {formatEther(value)} ETH\n          </span>\n        </div>\n        <div className=\"flex justify-between items-center\" {...rowProps}>\n          <span className=\"text-gray-600 font-medium\" {...labelProps}>\n            Gas Used:\n          </span>\n          <span className=\"text-gray-800\" {...valueProps}>\n            {gasUsed}\n          </span>\n        </div>\n        <div className=\"flex justify-between items-center\" {...rowProps}>\n          <span className=\"text-gray-600 font-medium\" {...labelProps}>\n            Block Number:\n          </span>\n          <span className=\"text-gray-800\" {...valueProps}>\n            {blockNumber}\n          </span>\n        </div>\n        <div className=\"flex justify-between items-center\" {...rowProps}>\n          <span className=\"text-gray-600 font-medium\" {...labelProps}>\n            Timestamp:\n          </span>\n          <span className=\"text-gray-800\" {...valueProps}>\n            {formatTimestamp(timestamp)}\n          </span>\n        </div>\n      </div>\n    </div>\n  );\n};\n","// create a react functional component that is a ChainSelector\nimport { IconGas } from \"@/assets/icons\";\nimport { useChains, useFetchWalletBalances, useMoonAccount } from \"@/hooks\";\nimport { shortenAddress } from \"@/utils\";\nimport { formatUnits } from \"ethers\";\nimport React from \"react\";\n\ntype WalletSelectorProps = {\n\tselectProps?: React.SelectHTMLAttributes<HTMLSelectElement>;\n\toptionProps?: React.OptionHTMLAttributes<HTMLOptionElement>;\n};\n\nexport const WalletSelector = ({\n\tselectProps,\n\toptionProps,\n}: WalletSelectorProps) => {\n\tconst {\n\t\taccounts: wallets,\n\t\taccount: wallet,\n\t\tsetAccount: setWallet,\n\t} = useMoonAccount();\n\tconst { selectedChain: chain } = useChains();\n\tconst gasBalanceQueries = useFetchWalletBalances(\n\t\twallets,\n\t\tchain?.chain_id?.toString() || \"1\",\n\t);\n\t// console.log(\n\t//   \"gasBalanceQueries\",\n\t//   gasBalanceQueries.map((r) => r.data),\n\t//   gasBalanceQueries.map((r) => r.error)\n\t// );\n\tReact.useEffect(() => {\n\t\tif (!wallet && wallets.length > 0) setWallet(wallets[0]);\n\t}, [wallet, wallets, setWallet]);\n\n\treturn (\n\t\t<select\n\t\t\tclassName=\"max-h-[300px] bg-accent-color rounded-xl p-3 m-1 text-text-primary\"\n\t\t\tvalue={wallet || \"\"}\n\t\t\tonChange={(e) => setWallet(e.target.value)}\n\t\t\t{...selectProps}\n\t\t>\n\t\t\t{wallets.map((wal: string, i: number) => (\n\t\t\t\t<option key={wal} value={wal} className=\"p-2\" {...optionProps}>\n\t\t\t\t\t{shortenAddress(wal)} - <IconGas className=\"w-6 h-6\" />{\" \"}\n\t\t\t\t\t{formatUnits(\n\t\t\t\t\t\tgasBalanceQueries[i].data || \"0\",\n\t\t\t\t\t\t(chain?.native_currency as any)?.decimals || 18,\n\t\t\t\t\t)}\n\t\t\t\t</option>\n\t\t\t))}\n\t\t</select>\n\t);\n};\n","import { Input, type InputProps, Modal } from \"@/components\";\nimport { useMoonAccount } from \"@/hooks\";\nimport { shortenAddress } from \"@/utils/shortenAddress\";\nimport React, { useEffect, useMemo } from \"react\";\n\n/**\n * Wallet Selector Modal\n * Reusable component to select a wallet from a list of moon wallets associated with the moon account.\n * Default behavior will set the selected moon wallet when a wallet is selected.\n * controlSelectedWallet prop can be set to false to disable this behavior.\n */\ntype WalletSelectorProps = {\n\ttitle?: string;\n\theaderProps?: React.HTMLAttributes<HTMLDivElement>;\n\tbuttonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n\tinputProps?: InputProps;\n\tlistProps?: React.HTMLAttributes<HTMLDivElement>;\n\tlistItemProps?: React.HTMLAttributes<HTMLDivElement>;\n\tmodalProps?: React.HTMLAttributes<HTMLDivElement>;\n\tcustomButtonContent?: React.ReactNode;\n\tonChange?: (e: any) => void;\n\tcontrolSelectedWallet?: boolean;\n};\n\nexport const WalletSelectorModal = ({\n\ttitle,\n\theaderProps,\n\tbuttonProps,\n\tinputProps,\n\tlistProps,\n\tlistItemProps,\n\tmodalProps,\n\tcustomButtonContent,\n\tonChange,\n\tcontrolSelectedWallet = true,\n}: WalletSelectorProps) => {\n\tconst {\n\t\taccounts: wallets,\n\t\tsetAccount: setWallet,\n\t\taccount: wallet,\n\t\tcreateAccount: createWallet,\n\t\tlistAccounts: listWallets,\n\t} = useMoonAccount();\n\tconst [isOpen, setIsOpen] = React.useState(false);\n\tconst [searchTerm, setSearchTerm] = React.useState(\"\");\n\tconst [selectedWallet, setSelectedWallet] = React.useState<string | null>(\n\t\tnull,\n\t);\n\n\tuseEffect(() => {\n\t\tif (!selectedWallet && wallet) setSelectedWallet(wallet);\n\t}, [wallet, selectedWallet]);\n\n\tuseEffect(() => {\n\t\tif (!wallet && wallets.length > 0 && controlSelectedWallet)\n\t\t\tsetWallet(wallets[0]);\n\t}, [wallet, wallets, setWallet]);\n\n\tconst filteredWallets = useMemo(() => {\n\t\treturn wallets.filter((wallet: string) => {\n\t\t\tif (!wallet) return false;\n\t\t\treturn wallet.toLowerCase().includes(searchTerm.toLowerCase());\n\t\t});\n\t}, [wallets, searchTerm]);\n\n\tconst toggleModal = (e?: any) => {\n\t\te && e.preventDefault(); // Prevent form submission\n\t\tsetIsOpen(!isOpen);\n\t};\n\n\tconst handleWalletSelect = (wallet: string) => {\n\t\tif (wallet && controlSelectedWallet) setWallet(wallet);\n\t\tsetSelectedWallet(wallet);\n\t\ttoggleModal();\n\t\tconst fakeEvent = { target: { value: wallet } };\n\t\tonChange && onChange(fakeEvent);\n\t};\n\n\tconst createAndRefreshWallet = async () => {\n\t\tawait createWallet({});\n\t\tawait listWallets();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{customButtonContent ? (\n\t\t\t\t<button onClick={toggleModal} {...buttonProps}>\n\t\t\t\t\t{customButtonContent}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"bg-accent-color rounded-xl p-3 m-1 text-text-primary\"\n\t\t\t\t\tonClick={toggleModal}\n\t\t\t\t\t{...buttonProps}\n\t\t\t\t>\n\t\t\t\t\t{shortenAddress(selectedWallet) || \"Select Wallet\"}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t\t<Modal isOpen={isOpen} toggleModal={toggleModal} modalProps={modalProps}>\n\t\t\t\t{title && (\n\t\t\t\t\t<h2 className=\"text-xl font-semibold mb-4\" {...headerProps}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName=\"float-right text-text-primary\"\n\t\t\t\t\t\t\tonClick={createAndRefreshWallet}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t+ New\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</h2>\n\t\t\t\t)}\n\t\t\t\t<Input\n\t\t\t\t\tlabel=\"Search Wallets\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tplaceholder=\"Search wallets...\"\n\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n\t\t\t\t\tclassName=\"w-full p-2 mb-4 border border-gray-300 rounded\"\n\t\t\t\t\t{...inputProps}\n\t\t\t\t/>\n\t\t\t\t<div className=\"max-h-[300px] overflow-y-auto\" {...listProps}>\n\t\t\t\t\t{filteredWallets.map((wallet: string) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={wallet}\n\t\t\t\t\t\t\tonClick={() => handleWalletSelect(wallet)}\n\t\t\t\t\t\t\tclassName=\"p-2 cursor-pointer hover:bg-accent-color rounded-sm\"\n\t\t\t\t\t\t\t{...listItemProps}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{wallet}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</Modal>\n\t\t</>\n\t);\n};\n","import React, { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { useTheme } from \"@/context\";\nimport { useMoonAccount } from \"@/hooks\";\n\ninterface AccountSelectorProps {\n\tonAccountSelect: (account: string) => void;\n\tclassName?: string;\n}\n\nexport const AccountSelector: React.FC<AccountSelectorProps> = ({\n\tonAccountSelect,\n\tclassName,\n}) => {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst { accounts, account: selectedAccount, setAccount } = useMoonAccount();\n\tconst theme = useTheme();\n\n\tconst handleAccountSelect = (account: string) => {\n\t\tsetAccount(account);\n\t\tonAccountSelect(account);\n\t\tsetIsOpen(false);\n\t};\n\n\treturn (\n\t\t<div className={`relative ${className}`}>\n\t\t\t<motion.button\n\t\t\t\twhileHover={{ scale: 1.05 }}\n\t\t\t\twhileTap={{ scale: 0.95 }}\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName={`\n          flex items-center justify-between w-full px-4 py-2 text-left\n          bg-${theme?.colors.primary} text-${theme?.colors.text}\n          rounded-lg shadow-md hover:shadow-lg transition-all duration-300\n        `}\n\t\t\t>\n\t\t\t\t<span className=\"truncate\">\n\t\t\t\t\t{selectedAccount || \"Select an account\"}\n\t\t\t\t</span>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={`w-5 h-5 ml-2 transition-transform duration-300 ${isOpen ? \"rotate-180\" : \"\"}`}\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\td=\"M19 9l-7 7-7-7\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t</motion.button>\n\n\t\t\t<AnimatePresence>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<motion.ul\n\t\t\t\t\t\tinitial={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\texit={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\tclassName={`\n              absolute z-10 w-full mt-2 py-1 bg-${theme?.colors.background}\n              rounded-lg shadow-lg max-h-60 overflow-auto\n            `}\n\t\t\t\t\t>\n\t\t\t\t\t\t{accounts.map((account) => (\n\t\t\t\t\t\t\t<motion.li\n\t\t\t\t\t\t\t\tkey={account}\n\t\t\t\t\t\t\t\twhileHover={{ backgroundColor: theme?.colors.hover }}\n\t\t\t\t\t\t\t\tclassName={`\n                  px-4 py-2 cursor-pointer\n                  ${selectedAccount === account ? `bg-${theme?.colors.selected} text-${theme?.colors.selectedText}` : \"\"}\n                `}\n\t\t\t\t\t\t\t\tonClick={() => handleAccountSelect(account)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"truncate\">{account}</span>\n\t\t\t\t\t\t\t</motion.li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</motion.ul>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</div>\n\t);\n};\n","// types/Theme.ts\nimport type { AuthModalConfig } from \"./types\";\n\nexport type Theme = AuthModalConfig[\"theming\"] & {};\n\n// Default theme\nexport const defaultTheme: Theme = {\n\taccentColor: \"#3B82F6\",\n\tsuccessColor: \"#10B981\",\n\terrorColor: \"#EF4444\",\n\tinfoColor: \"#3B82F6\",\n\twarningColor: \"#F59E0B\",\n\tbackgroundColor: \"#FFFFFF\",\n\tbackgroundColorSecondary: \"#F3F4F6\",\n\ttextColor: \"#1F2937\",\n\ttextColorSecondary: \"#6B7280\",\n\tbuttonColor: \"#3B82F6\",\n\tbuttonColorSecondary: \"#E5E7EB\",\n\tfontFamily: \"Inter, sans-serif\",\n\tcolors: {\n\t\tprimary: \"#3B82F6\",\n\t\tsecondary: \"#6B7280\",\n\t\tbackground: \"#FFFFFF\",\n\t\tsurface: \"#F3F4F6\",\n\t\ttext: \"#1F2937\",\n\t\ttextSecondary: \"#6B7280\",\n\t\tborder: \"#E5E7EB\",\n\t\thover: \"#F3F4F6\",\n\t\tfocus: \"#3B82F6\",\n\t\tdisabled: \"#D1D5DB\",\n\t\tselected: \"#EBF5FF\",\n\t\tselectedText: \"#1E40AF\",\n\t},\n\tborderRadius: \"0.375rem\",\n\tboxShadow: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n\ttypography: {\n\t\tfontFamily: \"Inter, sans-serif\",\n\t\tfontSize: {\n\t\t\txs: \"0.75rem\",\n\t\t\tsm: \"0.875rem\",\n\t\t\tbase: \"1rem\",\n\t\t\tlg: \"1.125rem\",\n\t\t\txl: \"1.25rem\",\n\t\t\t\"2xl\": \"1.5rem\",\n\t\t},\n\t\tfontWeight: {\n\t\t\tlight: \"300\",\n\t\t\tnormal: \"400\",\n\t\t\tmedium: \"500\",\n\t\t\tsemibold: \"600\",\n\t\t\tbold: \"700\",\n\t\t},\n\t\tlineHeight: {\n\t\t\ttight: \"1.25\",\n\t\t\tnormal: \"1.5\",\n\t\t\trelaxed: \"1.75\",\n\t\t},\n\t},\n\tspacing: {\n\t\txs: \"0.25rem\",\n\t\tsm: \"0.5rem\",\n\t\tmd: \"1rem\",\n\t\tlg: \"1.5rem\",\n\t\txl: \"2rem\",\n\t},\n\ttransition: {\n\t\tfast: \"150ms\",\n\t\tnormal: \"300ms\",\n\t\tslow: \"500ms\",\n\t},\n};\n"],"mappings":"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","names":["import_react","import_jsx_runtime","React","session","import_react","import_react","import_jsx_runtime","React","session","import_react","import_jsx_runtime","React","import_wagmi","import_core","import_jsx_runtime","React","import_react","import_react","import_react","import_wagmi","import_react","import_wagmi","chainId","import_react","import_wagmi","address","import_react","import_wagmi","import_react","import_wagmi","chainId","config","import_react","import_react_query","import_react","import_wagmi","import_react","import_wagmi","address","import_react","import_wagmi","import_react_query","import_react","import_wagmi","address","import_react","import_wagmi","import_react","import_wagmi","address","import_react","import_wagmi","address","import_react_query","import_react","address","chainId","import_react","import_wagmi","import_react_query","import_react","import_react_query","import_react","import_react","import_wagmi","import_react","import_react_query","import_react","import_wagmi","import_react","import_wagmi","import_react","import_wagmi","import_wagmi","reconnect","address","estimateGasWagmi","status","import_react_query","import_react","import_react","import_react","import_usehooks_ts","import_react_query","import_react_query","import_ethers","import_react","import_react","useMoonSDK","useMoonSDK","wallet","useMoonSDK","import_react_query","import_react","useMoonSDK","import_jsx_runtime","import_react","import_wagmi","import_jsx_runtime","import_react_query","import_react","useMoonSDK","import_react","import_wagmi","import_jsx_runtime","useMoonSDK","React","import_react","import_react","import_jsx_runtime","config","useMoonSDK","import_jsx_runtime","config","React","import_jsx_runtime","config","import_jsx_runtime","config","import_react","import_jsx_runtime","config","useMoonSDK","error","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_wagmi","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React","useMoonSDK","response","import_framer_motion","import_react","import_jsx_runtime","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_react","import_framer_motion","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_framer_motion","import_jsx_runtime","import_jsx_runtime","useMoonSDK","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_framer_motion","import_jsx_runtime","supabase","import_react","import_usehooks_ts","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_framer_motion","import_fi","import_react_query","import_ethers","import_framer_motion","import_react","import_jsx_runtime","pkg","error","import_ethers","import_react_query","import_usehooks_ts","import_react","import_framer_motion","import_jsx_runtime","import_fi","import_jsx_runtime","import_react","import_fi","RadixDialog","import_framer_motion","import_jsx_runtime","ChainSelector","import_fi","import_jsx_runtime","import_ethers","import_jsx_runtime","import_jsx_runtime","error","ChainSelector","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react_query","import_react","import_usehooks_ts","useMoonSDK","import_react","import_jsx_runtime","mainnet","chain","selectedChain","import_jsx_runtime","useMoonSDK","React","estimateResult","import_react","import_framer_motion","import_fi","import_ethers","import_react_query","import_usehooks_ts","RadixSlider","RadixTooltip","import_fi","import_jsx_runtime","SlippageSettings","import_jsx_runtime","SwapDetails","DetailRow","import_react","import_fi","RadixDialog","import_framer_motion","import_jsx_runtime","TokenSelector","import_fi","import_jsx_runtime","TokenInput","TokenSelector","import_jsx_runtime","estimateResult","SlippageSettings","TokenInput","SwapDetails","import_react","import_usehooks_ts","import_jsx_runtime","React","tokenData","import_react","import_jsx_runtime","mainnet","chain","import_react","RadixDialog","import_framer_motion","import_jsx_runtime","List","import_react","import_jsx_runtime","supabase","uuidv4","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react","chain","import_jsx_runtime","React","import_react","import_jsx_runtime","import_ethers","import_jsx_runtime","timestamp","import_ethers","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","wallet","import_react","import_framer_motion","import_jsx_runtime"]}