UNPKG

rubic-sdk-next

Version:
133 lines 5.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CrossChainStatusManager = void 0; const tx_status_1 = require("../../../core/blockchain/web3-public-service/web3-public/models/tx-status"); const injector_1 = require("../../../core/injector/injector"); const get_src_tx_status_1 = require("../../common/status-manager/utils/get-src-tx-status"); /** * Contains methods for getting cross-chain trade statuses. */ class CrossChainStatusManager { /** * @deprecated Use * Returns cross-chain trade statuses on the source and target networks. * The result consists of statuses of the source and target transactions and destination tx hash. * @example * ```ts * const tradeData = { * fromBlockchain: BLOCKCHAIN_NAME.FANTOM, * toBlockchain: BLOCKCHAIN_NAME.BSC, * txTimestamp: 1658241570024, * srxTxHash: '0xd2263ca82ac0fce606cb75df27d7f0dc94909d41a58c37563bd6772496cb8924' * }; * const tradeType = CROSS_CHAIN_TRADE_TYPE.VIA; * const crossChainStatus = await sdk.crossChainStatusManager.getCrossChainStatus(tradeData, tradeType); * console.log('Source transaction status', crossChainStatus.srcTxStatus); * console.log('Destination transaction status', crossChainStatus.dstTxStatus); * console.log('Destination transaction hash', crossChainStatus.dstTxHash); * ``` * @param data Data needed to calculate statuses. * @param tradeType Cross-chain trade type. * @returns Object with transaction statuses and hash. */ async getCrossChainStatus(data, tradeType) { const { fromBlockchain, srcTxHash } = data; let srcTxStatus = await (0, get_src_tx_status_1.getSrcTxStatus)(fromBlockchain, srcTxHash); const dstTxData = await this.getDstTxData(srcTxStatus, data, tradeType); if (dstTxData.status === tx_status_1.TX_STATUS.FAIL && srcTxStatus === tx_status_1.TX_STATUS.PENDING) { srcTxStatus = tx_status_1.TX_STATUS.FAIL; } return { srcTxStatus, dstTxStatus: dstTxData.status, dstTxHash: dstTxData.hash, ...(dstTxData.extraInfo && { extraInfo: dstTxData.extraInfo }) }; } async getCrossChainStatusExtended(rubicId, srcHash, fromBlockchain) { let srcTxStatus = await (0, get_src_tx_status_1.getSrcTxStatus)(fromBlockchain, srcHash); const dstTxData = await this.getDstTxDataExtended(srcTxStatus, rubicId, srcHash); if (dstTxData.status === tx_status_1.TX_STATUS.FAIL && srcTxStatus === tx_status_1.TX_STATUS.PENDING) { srcTxStatus = tx_status_1.TX_STATUS.FAIL; } return { srcTxStatus, dstTxStatus: dstTxData.status, dstTxHash: dstTxData.hash, ...(dstTxData.extraInfo && { extraInfo: dstTxData.extraInfo }) }; } async getDstTxDataExtended(srcTxStatus, rubicId, srcHash) { if (srcTxStatus === tx_status_1.TX_STATUS.FAIL) { return { hash: null, status: tx_status_1.TX_STATUS.FAIL }; } if (srcTxStatus === tx_status_1.TX_STATUS.PENDING) { return { hash: null, status: tx_status_1.TX_STATUS.PENDING }; } const txStatusData = await injector_1.Injector.rubicApiService.fetchCrossChainTxStatusExtended(srcHash, rubicId); if (txStatusData.status === tx_status_1.TX_STATUS.SUCCESS) { return { status: tx_status_1.TX_STATUS.SUCCESS, hash: txStatusData.destinationTxHash }; } if (txStatusData.status === 'REVERTED') { return { status: tx_status_1.TX_STATUS.FALLBACK, hash: txStatusData.destinationTxHash }; } if (txStatusData.status === 'NOT_FOUND' || txStatusData.status === 'LONG_PENDING') { return { status: tx_status_1.TX_STATUS.PENDING, hash: null }; } return { status: txStatusData.status, hash: txStatusData.destinationTxHash }; } /** * @deprecated * Get destination transaction status and hash based on source transaction status, * source transaction receipt, trade data and type. * @param srcTxStatus Source transaction status. * @param tradeData Trade data. * @param tradeType Cross-chain trade type. * @returns Cross-chain transaction status and hash. */ async getDstTxData(srcTxStatus, tradeData, _tradeType) { if (srcTxStatus === tx_status_1.TX_STATUS.FAIL) { return { hash: null, status: tx_status_1.TX_STATUS.FAIL }; } if (srcTxStatus === tx_status_1.TX_STATUS.PENDING) { return { hash: null, status: tx_status_1.TX_STATUS.PENDING }; } const txStatusData = await injector_1.Injector.rubicApiService.fetchCrossChainTxStatus(tradeData.srcTxHash); if (txStatusData.status === tx_status_1.TX_STATUS.SUCCESS) { return { status: tx_status_1.TX_STATUS.SUCCESS, hash: txStatusData.destinationTxHash }; } if (txStatusData.status === 'REVERTED') { return { status: tx_status_1.TX_STATUS.FALLBACK, hash: txStatusData.destinationTxHash }; } if (txStatusData.status === 'NOT_FOUND' || txStatusData.status === 'LONG_PENDING') { return { status: tx_status_1.TX_STATUS.PENDING, hash: null }; } return { status: txStatusData.status, hash: txStatusData.destinationTxHash }; } } exports.CrossChainStatusManager = CrossChainStatusManager; //# sourceMappingURL=cross-chain-status-manager.js.map