UNPKG

stellar-plus

Version:

beta version of stellar-plus, an all-in-one sdk for the Stellar blockchain

55 lines (54 loc) 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SimulateTransactionPipeline = void 0; const tslib_1 = require("tslib"); const stellar_sdk_1 = require("@stellar/stellar-sdk"); const types_1 = require("../../../../stellar-plus/core/pipelines/simulate-transaction/types"); const conveyor_belt_1 = require("../../../../stellar-plus/error/helpers/conveyor-belt"); const conveyor_belts_1 = require("../../../../stellar-plus/utils/pipeline/conveyor-belts"); const errors_1 = require("./errors"); class SimulateTransactionPipeline extends conveyor_belts_1.ConveyorBelt { constructor(plugins) { super({ type: types_1.SimulateTransactionPipelineType.id, plugins: plugins || [], }); } process(item, itemId) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const { transaction, rpcHandler } = item; let simulationResponse; try { simulationResponse = yield rpcHandler.simulateTransaction(transaction); } catch (e) { throw errors_1.PSIError.failedToSimulateTransaction(e, (0, conveyor_belt_1.extractConveyorBeltErrorMeta)(item, this.getMeta(itemId))); } if (stellar_sdk_1.rpc.Api.isSimulationError(simulationResponse)) { throw errors_1.PSIError.simulationFailed(simulationResponse, (0, conveyor_belt_1.extractConveyorBeltErrorMeta)(item, this.getMeta(itemId))); } if (stellar_sdk_1.rpc.Api.isSimulationRestore(simulationResponse) && simulationResponse.result) { return { response: simulationResponse, assembledTransaction: this.assembleTransaction(transaction, simulationResponse, item, itemId), }; } if (stellar_sdk_1.rpc.Api.isSimulationSuccess(simulationResponse)) { return { response: simulationResponse, assembledTransaction: this.assembleTransaction(transaction, simulationResponse, item, itemId), }; } throw errors_1.PSIError.simulationResultCouldNotBeVerified(simulationResponse, (0, conveyor_belt_1.extractConveyorBeltErrorMeta)(item, this.getMeta(itemId))); }); } assembleTransaction(transaction, simulationResponse, item, itemId) { try { return stellar_sdk_1.rpc.assembleTransaction(transaction, simulationResponse).build(); } catch (error) { throw errors_1.PSIError.failedToAssembleTransaction(error, simulationResponse, transaction, (0, conveyor_belt_1.extractConveyorBeltErrorMeta)(item, this.getMeta(itemId))); } } } exports.SimulateTransactionPipeline = SimulateTransactionPipeline;