UNPKG

@renproject/ren

Version:

Official Ren JavaScript SDK for bridging crypto assets cross-chain.

75 lines 3.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultTransactionHandler = void 0; const utils_1 = require("@renproject/utils"); const chainTransactionHandler = async (tx, { retries = 1, } = {}) => { while (true) { switch (tx.progress.status) { case utils_1.ChainTransactionStatus.Ready: if (!tx.submit) { throw new utils_1.ErrorWithCode(`${tx.chain} transaction doesn't have a submit handler.`, utils_1.RenJSError.PARAMETER_ERROR); } await utils_1.utils.tryNTimes(async (i) => { try { tx.submit && (await tx.submit()); } catch (error) { // Log error every 10 attempts. if ((i + 1) % 10 === 0) { console.error(error); } throw error; } }, retries); break; case utils_1.ChainTransactionStatus.Confirming: await new Promise((resolve, reject) => resolve(utils_1.utils.tryNTimes(async (i) => { try { await tx.wait(); } catch (error) { if (utils_1.ErrorWithCode.isErrorWithCode(error) && error.code === utils_1.RenJSError.CHAIN_TRANSACTION_REVERTED) { reject(error); throw error; } // Log error every 10 attempts. if ((i + 1) % 10 === 0) { console.error(error); } throw error; } }, retries))); break; case utils_1.ChainTransactionStatus.Reverted: throw new utils_1.ErrorWithCode(`${tx.chain} transaction reverted${tx.progress.revertReason ? ` with reason: ${tx.progress.revertReason}` : ``}`, tx.chain === "RenVM" ? utils_1.RenJSError.RENVM_TRANSACTION_REVERTED : utils_1.RenJSError.CHAIN_TRANSACTION_REVERTED); case utils_1.ChainTransactionStatus.Done: return; } } }; /** * See [[RenJS.defaultTransactionHandler]]. */ const createTransactionHandler = (retries = -1) => { const fn = async (tx) => { await chainTransactionHandler(tx.in, { retries }); await chainTransactionHandler(tx.renVM, { retries }); for (const setupKey of Object.keys(tx.outSetup || {})) { await chainTransactionHandler(tx.outSetup[setupKey], { retries }); } await chainTransactionHandler(tx.out, { retries }); }; fn.withRetries = (newRetries) => createTransactionHandler(newRetries); return fn; }; /** * See [[RenJS.defaultTransactionHandler]]. */ exports.defaultTransactionHandler = createTransactionHandler(); //# sourceMappingURL=defaultTransactionHandler.js.map