UNPKG

@openocean.finance/widget-sdk

Version:

OpenOcean Any-to-Any Cross-Chain-Swap SDK

40 lines 1.93 kB
import { waitForTransactionReceipt as waitForTransactionReceiptInternal } from 'viem/actions'; import { OpenOceanErrorCode } from '../../errors/constants.js'; import { TransactionError } from '../../errors/errors.js'; import { getPublicClient } from './publicClient.js'; export async function waitForTransactionReceipt({ client, chainId, txHash, onReplaced, }) { let { transactionReceipt, replacementReason } = await waitForReceipt(client, txHash, onReplaced); if (!transactionReceipt?.status) { const publicClient = await getPublicClient(chainId); const result = await waitForReceipt(publicClient, txHash, onReplaced); transactionReceipt = result.transactionReceipt; replacementReason = result.replacementReason; } if (transactionReceipt?.status === 'reverted') { throw new TransactionError(OpenOceanErrorCode.TransactionFailed, 'Transaction was reverted.'); } // We should only allow repriced transaction to continue the execution. // Cancelled and replaced transactions should be treated as failed. if (replacementReason === 'cancelled' || replacementReason === 'replaced') { throw new TransactionError(OpenOceanErrorCode.TransactionCanceled, 'Transaction was canceled or replaced.'); } return transactionReceipt; } async function waitForReceipt(client, txHash, onReplaced) { let replacementReason; let transactionReceipt; try { transactionReceipt = await waitForTransactionReceiptInternal(client, { hash: txHash, onReplaced: (response) => { replacementReason = response.reason; onReplaced?.(response); }, }); } catch { // We can ignore errors from waitForTransactionReceipt as we have a status check fallback } return { transactionReceipt, replacementReason }; } //# sourceMappingURL=waitForTransactionReceipt.js.map