UNPKG

@lifi/sdk

Version:

LI.FI Any-to-Any Cross-Chain-Swap SDK

37 lines 1.99 kB
import { getCallsStatus } from 'viem/experimental'; import { getAction } from 'viem/utils'; import { LiFiErrorCode } from '../../errors/constants.js'; import { TransactionError } from '../../errors/errors.js'; import { waitForResult } from '../../utils/waitForResult.js'; export const waitForBatchTransactionReceipt = async (client, batchHash) => { return waitForResult(async () => { const callsDetails = await getAction(client, getCallsStatus, 'getCallsStatus')({ id: batchHash, }); // EIP-5792 specs was updated to return 100 for pending transactions https://eips.ethereum.org/EIPS/eip-5792 if (callsDetails.status === 'PENDING' || callsDetails.status === 100) { return undefined; } // EIP-5792 specs was updated to return 200 for confirmed transactions https://eips.ethereum.org/EIPS/eip-5792 if (callsDetails.status === 'CONFIRMED' || callsDetails.status === 200) { if (!callsDetails.receipts?.length || !callsDetails.receipts.every((receipt) => receipt.transactionHash) || callsDetails.receipts.some((receipt) => receipt.status === 'reverted')) { throw new TransactionError(LiFiErrorCode.TransactionFailed, 'Transaction was reverted.'); } const transactionReceipt = callsDetails.receipts.at(-1); return transactionReceipt; } if (callsDetails.status === 400) { throw new TransactionError(LiFiErrorCode.TransactionCanceled, 'Transaction was canceled.'); } if (callsDetails.status === 500) { throw new TransactionError(LiFiErrorCode.TransactionFailed, 'Transaction failed.'); } throw new TransactionError(LiFiErrorCode.TransactionNotFound, 'Transaction not found.'); }, 5000, 3, (_, error) => { return !(error instanceof TransactionError); }); }; //# sourceMappingURL=waitForBatchTransactionReceipt.js.map