@hyperlane-xyz/widgets
Version:
Common react components for Hyperlane projects
73 lines • 2.72 kB
JavaScript
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