import { useCallback, useMemo } from 'react'; import { usePersSDK } from '../providers/PersSDKProvider'; import { Web3Manager } from '@explorins/pers-sdk/web3'; import type { TokenBalance, TokenBalanceRequest, TokenCollectionRequest, TokenCollection, TokenMetadata, AccountOwnedTokensResult } from '@explorins/pers-sdk/web3'; import type { TokenDTO } from '@explorins/pers-sdk/token'; // ChainData type - matches what Web3Manager.getChainDataById returns type ChainData = Awaited>; // Re-export for convenience export type { AccountOwnedTokensResult } from '@explorins/pers-sdk/web3'; /** * React hook for Web3 operations in the PERS SDK * * Provides comprehensive Web3 functionality including token balance queries, * metadata retrieval, collection management, IPFS resolution, and blockchain * explorer integration. Supports multi-chain operations. * * Note: Wallet addresses should be obtained from `user.wallets` via `usePersSDK()`. * * @returns Web3 hook with methods for blockchain operations * * @example * ```typescript * function Web3Component() { * const { user } = usePersSDK(); * const { getTokenBalance, getTokenMetadata } = useWeb3(); * * // Get wallet address from user * const walletAddress = user?.wallets?.[0]?.address; * * const loadTokenData = async () => { * if (!walletAddress) { * console.log('No wallet connected'); * return; * } * * const balance = await getTokenBalance({ * walletAddress, * contractAddress: '0x123...', * chainId: 1 * }); * * console.log('Token balance:', balance); * }; * * return ( * * {walletAddress ? ( * * Wallet: {walletAddress} *