UNPKG

@openocean.finance/widget-sdk

Version:

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

58 lines (54 loc) 1.47 kB
import type { Client, Hash, WalletCallReceipt as _WalletCallReceipt, } from 'viem' import { waitForCallsStatus } from 'viem/experimental' import { getAction } from 'viem/utils' import { OpenOceanErrorCode } from '../../errors/constants.js' import { TransactionError } from '../../errors/errors.js' export type WalletCallReceipt = _WalletCallReceipt< bigint, 'success' | 'reverted' > export const waitForBatchTransactionReceipt = async ( client: Client, batchHash: Hash ): Promise<WalletCallReceipt> => { const { receipts, status, statusCode } = await getAction( client, waitForCallsStatus, 'waitForCallsStatus' )({ id: batchHash, timeout: 300_000, }) if ( status === 'success' || // @ts-expect-error: for backwards compatibility status === 'CONFIRMED' ) { if ( !receipts?.length || !receipts.every((receipt) => receipt.transactionHash) || receipts.some((receipt) => receipt.status === 'reverted') ) { throw new TransactionError( OpenOceanErrorCode.TransactionFailed, 'Transaction was reverted.' ) } const transactionReceipt = receipts.at(-1)! return transactionReceipt } if (statusCode >= 400 && statusCode < 500) { throw new TransactionError( OpenOceanErrorCode.TransactionCanceled, 'Transaction was canceled.' ) } throw new TransactionError( OpenOceanErrorCode.TransactionFailed, 'Transaction failed.' ) }