UNPKG

@hyperlane-xyz/widgets

Version:

Common react components for Hyperlane projects

73 lines 2.72 kB
import { useAccount, useConnect, useDisconnect, useNetwork, } from '@starknet-react/core'; import { useCallback, useMemo } from 'react'; import { useStarknetkitConnectModal } from 'starknetkit'; import { ProtocolType } from '@hyperlane-xyz/utils'; import { widgetLogger } from '../logger.js'; const logger = widgetLogger.child({ module: 'widgets/walletIntegrations/starknetWallet', }); function toStarknetkitConnector(connector) { const icon = typeof connector.icon === 'string' ? connector.icon : connector.icon ? { light: connector.icon.light, dark: connector.icon.dark, } : undefined; return { id: connector.id, name: connector.name, ...(icon ? { icon } : {}), }; } export function useStarknetAccount(_multiProvider) { const { address, isConnected } = useAccount(); return useMemo(() => ({ protocol: ProtocolType.Starknet, addresses: address ? [{ address }] : [], isReady: !!isConnected, }), [address, isConnected]); } export function useStarknetWalletDetails() { const { connector } = useAccount(); return useMemo(() => ({ name: connector?.id === 'argentX' ? 'Ready Wallet' : connector?.name || 'Starknet Wallet', logoUrl: typeof connector?.icon === 'string' ? connector.icon : connector?.icon?.light, }), [connector]); } export function useStarknetConnectFn() { const { connectAsync, connectors } = useConnect(); const { starknetkitConnectModal } = useStarknetkitConnectModal({ connectors: connectors.map(toStarknetkitConnector), }); return useCallback(async () => { const { connector } = await starknetkitConnectModal(); if (!connector) { logger.error('No Starknet wallet connectors available'); return; } const selectedConnector = connectors.find((c) => c.id === connector.id); if (!selectedConnector) { logger.error(`Selected Starknet connector ${connector.id} is not registered with @starknet-react/core`); return; } await connectAsync({ connector: selectedConnector }); }, [connectAsync, connectors, starknetkitConnectModal]); } export function useStarknetDisconnectFn() { const { disconnectAsync } = useDisconnect(); return disconnectAsync; } export function useStarknetActiveChain(_multiProvider) { const { chain } = useNetwork(); return useMemo(() => ({ chainDisplayName: chain?.name, chainName: chain?.id ? chain.id.toString() : undefined, }), [chain]); } //# sourceMappingURL=starknetWallet.js.map