/** * useResolvedIdentity Hook * * Resolve ENS names and avatars using viem. * Uses discriminated union for type-safe status handling. */ import { ChainTypeEnum } from '@openfort/openfort-js'; /** * Resolved identity state - discriminated union */ type ResolvedIdentity = { status: 'idle'; } | { status: 'loading'; } | { status: 'error'; error: Error; } | { status: 'success'; name: string | null; avatar: string | null; }; interface UseResolvedIdentityOptions { /** Address to resolve (empty string if not available yet) */ address: string; /** Chain type for resolution */ chainType?: ChainTypeEnum; /** ENS chain ID. Only chainId 1 (mainnet) supports ENS. Default 0 = do not resolve. */ ensChainId?: number; /** Enable/disable the query (for conditional fetching without breaking React rules) */ enabled?: boolean; } /** * Hook for resolving addresses to ENS names and avatars. * * Uses viem for ENS resolution. Supports Solana name services in the future. * * @example Basic usage * ```tsx * function Profile({ address }: { address: string }) { * const identity = useResolvedIdentity({ address }); * * switch (identity.status) { * case 'idle': * return null; * case 'loading': * return
Resolving...
; * case 'error': * returnError: {identity.error.message}
; * case 'success': * return ( *{identity.name ?? address}
*