stellar-plus
Version:
beta version of stellar-plus, an all-in-one sdk for the Stellar blockchain
55 lines (54 loc) • 2.82 kB
JavaScript
;
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;