UNPKG

@lifi/sdk

Version:

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

51 lines 2.13 kB
import { ServerError } from '../errors/errors.js'; import { getStatus } from '../services/api.js'; import { waitForResult } from '../utils/waitForResult.js'; import { getSubstatusMessage } from './processMessages.js'; const TRANSACTION_HASH_OBSERVERS = {}; export async function waitForTransactionStatus(statusManager, txHash, step, processType, interval = 5_000) { const _getStatus = () => { return getStatus({ fromChain: step.action.fromChainId, fromAddress: step.action.fromAddress, toChain: step.action.toChainId, txHash, ...(step.tool !== 'custom' && { bridge: step.tool }), }) .then((statusResponse) => { switch (statusResponse.status) { case 'DONE': return statusResponse; case 'PENDING': statusManager?.updateProcess(step, processType, 'PENDING', { substatus: statusResponse.substatus, substatusMessage: statusResponse.substatusMessage || getSubstatusMessage(statusResponse.status, statusResponse.substatus), txLink: statusResponse.bridgeExplorerLink, }); return undefined; case 'NOT_FOUND': return undefined; default: return Promise.reject(); } }) .catch((e) => { if (process.env.NODE_ENV === 'development') { console.debug('Fetching status from backend failed.', e); } return undefined; }); }; let status = TRANSACTION_HASH_OBSERVERS[txHash]; if (!status) { status = waitForResult(_getStatus, interval); TRANSACTION_HASH_OBSERVERS[txHash] = status; } const resolvedStatus = await status; if (!('receiving' in resolvedStatus)) { throw new ServerError("Status doesn't contain destination chain information."); } return resolvedStatus; } //# sourceMappingURL=waitForTransactionStatus.js.map