@renproject/ren
Version:
Official Ren JavaScript SDK for bridging crypto assets cross-chain.
75 lines • 3.19 kB
JavaScript
;
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