UNPKG

@hyperlane-xyz/widgets

Version:

Common react components for Hyperlane projects

60 lines 2.87 kB
import { useCallback } from 'react'; import { assert, retryAsync } from '@hyperlane-xyz/utils'; import { useGatewayApi } from './radix/hooks/useGatewayApi.js'; import { useRdt } from './radix/hooks/useRdt.js'; export { useRadixAccount, useRadixActiveChain, useRadixConnectFn, useRadixDisconnectFn, useRadixWalletDetails, } from './radixWallet.js'; export function useRadixSwitchNetwork(multiProvider) { const onSwitchNetwork = useCallback(async (chainName) => { const displayName = multiProvider.getChainMetadata(chainName).displayName || chainName; // Radix does not have switch capability throw new Error(`Radix wallet must be connected to origin chain ${displayName}`); }, [multiProvider]); return { switchNetwork: onSwitchNetwork }; } export function useRadixWatchAsset(_multiProvider) { const onAddAsset = useCallback(async (_token, _activeChainName) => { throw new Error('Watch asset not available for Radix'); }, []); return { addAsset: onAddAsset }; } export function useRadixTransactionFns(multiProvider) { const rdt = useRdt(); const gatewayApi = useGatewayApi(); const { switchNetwork } = useRadixSwitchNetwork(multiProvider); const onSendTx = useCallback(async ({ tx, chainName: _, activeChainName: __, }) => { assert(rdt, `radix dapp toolkit is not defined`); assert(gatewayApi, `gateway api is not defined`); const transaction = tx.transaction; assert(typeof transaction.manifest === 'string', `transaction manifests needs to be a string`); const transactionResult = await rdt.walletApi.sendTransaction({ transactionManifest: transaction.manifest, version: 1, }); if (transactionResult.isErr()) { throw new Error(String(transactionResult.error), { cause: transactionResult.error, }); } const confirm = async () => { assert(transactionResult.isOk(), `Radix tx failed: ${transactionResult}`); const receipt = await retryAsync(() => gatewayApi.transaction.getCommittedDetails(transactionResult.value.transactionIntentHash), 5, 5000); return { type: tx.type, receipt: { ...receipt, transactionHash: transactionResult.value.transactionIntentHash, }, }; }; return { hash: transactionResult.value.transactionIntentHash, confirm }; }, [rdt, gatewayApi]); const onMultiSendTx = useCallback(async ({ txs: _, chainName: __, activeChainName: ___, }) => { throw new Error('Multi Transactions not supported on Radix'); }, []); return { sendTransaction: onSendTx, sendMultiTransaction: onMultiSendTx, switchNetwork, }; } //# sourceMappingURL=radix.js.map