stellar-plus
Version:
beta version of stellar-plus, an all-in-one sdk for the Stellar blockchain
76 lines (75 loc) • 5.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ClassicTransactionPipeline = void 0;
const tslib_1 = require("tslib");
const build_transaction_1 = require("../../../../stellar-plus/core/pipelines/build-transaction");
const classic_sign_requirements_1 = require("../../../../stellar-plus/core/pipelines/classic-sign-requirements");
const types_1 = require("../../../../stellar-plus/core/pipelines/classic-transaction/types");
const sign_transaction_1 = require("../../../../stellar-plus/core/pipelines/sign-transaction");
const submit_transaction_1 = require("../../../../stellar-plus/core/pipelines/submit-transaction");
const horizon_1 = require("../../../../stellar-plus/horizon");
const multi_belt_pipeline_1 = require("../../../../stellar-plus/utils/pipeline/multi-belt-pipeline");
class ClassicTransactionPipeline extends multi_belt_pipeline_1.MultiBeltPipeline {
constructor(networkConfig, options) {
const internalConstructorArgs = {
beltType: types_1.ClassicTransactionPipelineType.id,
plugins: (options === null || options === void 0 ? void 0 : options.plugins) || [],
};
super(Object.assign(Object.assign({}, internalConstructorArgs), { type: types_1.ClassicTransactionPipelineType.id }));
this.networkConfig = networkConfig;
this.horizonHandler = new horizon_1.HorizonHandlerClient(this.networkConfig);
}
process(item, itemId) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { txInvocation, operations, options } = item;
const executionPlugins = [];
if (options === null || options === void 0 ? void 0 : options.executionPlugins)
executionPlugins.push(...options.executionPlugins);
// ======================= Build Transaction ==========================
const buildTransactionPipelinePlugins = this.getInnerPluginsByType(executionPlugins, 'BuildTransactionPipeline');
const builTransactionPipeline = new build_transaction_1.BuildTransactionPipeline(buildTransactionPipelinePlugins);
const builtTx = yield builTransactionPipeline.execute({
header: txInvocation.header,
horizonHandler: this.horizonHandler,
operations,
networkPassphrase: this.networkConfig.networkPassphrase,
}, itemId);
// ======================= Calculate classic requirements ==========================
const classicSignRequirementsPipelinePlugins = this.getInnerPluginsByType(executionPlugins, 'ClassicSignRequirementsPipeline');
const classicSignRequirementsPipeline = new classic_sign_requirements_1.ClassicSignRequirementsPipeline(classicSignRequirementsPipelinePlugins);
const classicSignatureRequirements = yield classicSignRequirementsPipeline.execute(builtTx, itemId);
// ======================= Sign Transaction ==========================
const signTransactionPipelinePlugins = this.getInnerPluginsByType(executionPlugins, 'SignTransactionPipeline');
const signTransactionPipeline = new sign_transaction_1.SignTransactionPipeline(signTransactionPipelinePlugins);
const signedTransaction = yield signTransactionPipeline.execute({
transaction: builtTx,
signatureRequirements: classicSignatureRequirements,
signers: txInvocation.signers,
}, itemId);
// ======================= Submit Transaction ==========================
const submitTransactionPipelinePlugins = this.getInnerPluginsByType(executionPlugins, 'SubmitTransactionPipeline');
const submitTransactionPipeline = new submit_transaction_1.SubmitTransactionPipeline(submitTransactionPipelinePlugins);
const submissionResult = yield submitTransactionPipeline.execute({
transaction: signedTransaction,
networkHandler: this.horizonHandler,
}, itemId);
if (this.isSimpleOutput(options)) {
return submissionResult;
}
const verboseOutput = (options === null || options === void 0 ? void 0 : options.verboseOutput)
? {
buildTransactionPipelineOutput: builtTx,
classicSignRequirementsPipelineOutput: classicSignatureRequirements,
signTransactionPipelineOutput: signedTransaction,
submitTransactionPipelineOutput: submissionResult,
}
: {};
return Object.assign(Object.assign({}, verboseOutput), { classicTransactionOutput: submissionResult, hash: (options === null || options === void 0 ? void 0 : options.includeHashOutput) ? submissionResult.response.hash : undefined });
});
}
// expand with other options in the future that might require verbose output
isSimpleOutput(options) {
return !(options === null || options === void 0 ? void 0 : options.includeHashOutput) && !(options === null || options === void 0 ? void 0 : options.verboseOutput);
}
}
exports.ClassicTransactionPipeline = ClassicTransactionPipeline;