UNPKG

zkverifyjs

Version:

Submit proofs to zkVerify and query proof state with ease using our npm package.

149 lines 5.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleTransaction = void 0; exports.performSignAndSend = performSignAndSend; const enums_js_1 = require("../../enums.js"); const index_js_1 = require("./errors/index.js"); const index_js_2 = require("../helpers/index.js"); const index_js_3 = require("./transactionInfo/index.js"); const index_js_4 = require("./handlers/index.js"); /** * Handles transaction execution, signing, and event handling. */ const handleTransaction = async (api, submitExtrinsic, account, signer, emitter, options, transactionType, batchCount) => { const transactionInfo = (0, index_js_3.initializeTransactionInfo)(transactionType, options, batchCount); let resolveTx; let rejectTx; const txPromise = new Promise((res, rej) => { resolveTx = res; rejectTx = rej; }); let unsubscribeFn; let isCompleted = false; const cleanupTransaction = () => { if (unsubscribeFn) { try { unsubscribeFn(); } catch (err) { console.debug('Error during transaction cleanup:', err); } unsubscribeFn = undefined; } }; const handleUnsubscribeFn = (fn) => { if (typeof fn !== 'function') return; if (isCompleted) { try { fn(); } catch (err) { console.debug('Error during late transaction cleanup:', err); } return; } unsubscribeFn = fn; }; const cancelTransaction = (error) => { isCompleted = true; cleanupTransaction(); if (transactionInfo.status !== enums_js_1.TransactionStatus.Error) { transactionInfo.status = enums_js_1.TransactionStatus.Error; try { const errObj = error instanceof Error ? error : new Error(String(error)); (0, index_js_1.handleError)(emitter, api, transactionInfo, errObj, true); } catch (err) { rejectTx(err); return; } } rejectTx(error); }; const finalizeTransaction = async (result) => { if (transactionInfo.status === enums_js_1.TransactionStatus.Error) return; try { await (0, index_js_4.handleFinalized)(api, transactionInfo, result.dispatchError, emitter, transactionType); isCompleted = true; cleanupTransaction(); resolveTx(transactionInfo); } catch (error) { cancelTransaction(error); } }; try { const unsubscribeResult = performSignAndSend(submitExtrinsic, account, signer ? { signer, nonce: options.nonce } : { nonce: options.nonce }, async (result) => { try { if (transactionInfo.status === enums_js_1.TransactionStatus.Error) return; if (result.status.isBroadcast) { const txHash = result.txHash.toString(); transactionInfo.txHash = txHash; (0, index_js_2.safeEmit)(emitter, enums_js_1.ZkVerifyEvents.Broadcast, { txHash, }); } if (result.status.isInBlock) { if (!transactionInfo.txHash) { transactionInfo.txHash = result.txHash.toString(); } transactionInfo.blockHash = result.status.asInBlock.toString(); await (0, index_js_4.handleInBlock)(api, result.events, transactionInfo, emitter, transactionType); } if (result.status.isFinalized) { await finalizeTransaction(result); } else if (result.status.isInvalid) { throw new Error('Transaction is invalid.'); } } catch (error) { try { cancelTransaction(error); } catch (cancelError) { console.debug('Error during transaction cancellation:', cancelError); } } }); if (typeof unsubscribeResult === 'function') { handleUnsubscribeFn(unsubscribeResult); } else if (unsubscribeResult && typeof unsubscribeResult.then === 'function') { void (async () => { try { handleUnsubscribeFn(await unsubscribeResult); } catch (error) { if (!isCompleted) { cancelTransaction(error); } } })(); } } catch (error) { cancelTransaction(error); } return txPromise; }; exports.handleTransaction = handleTransaction; /** * Handles signing and sending transactions. */ function performSignAndSend(submitExtrinsic, account, options, callback) { if (typeof account === 'string' && options?.signer) { return submitExtrinsic.signAndSend(account, options, callback); } else if (typeof account !== 'string') { return options ? submitExtrinsic.signAndSend(account, options, callback) : submitExtrinsic.signAndSend(account, callback); } throw new Error('Unsupported account or signer type.'); } //# sourceMappingURL=index.js.map