rubic-sdk-next
Version:
Simplify dApp creation
133 lines • 5.85 kB
JavaScript
;
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