UNPKG

stellar-plus

Version:

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

54 lines (53 loc) 2.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FeeBumpWrapperPlugin = void 0; const tslib_1 = require("tslib"); const classic_sign_requirements_1 = require("../../../../../../stellar-plus/core/pipelines/classic-sign-requirements"); const fee_bump_1 = require("../../../../../../stellar-plus/core/pipelines/fee-bump"); const sign_transaction_1 = require("../../../../../../stellar-plus/core/pipelines/sign-transaction"); const types_1 = require("../../../../../../stellar-plus/core/pipelines/submit-transaction/types"); class FeeBumpWrapperPlugin { constructor(feeBumpHeader) { this.type = types_1.SubmitTransactionPipelineType.id; this.name = 'FeeBumpWrapperPlugin'; this.feeBumpHeader = feeBumpHeader; } preProcess(item, meta) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const { itemId } = meta; const { transaction } = item; if (transaction.innerTransaction) { throw new Error('Transaction is already a FeeBump, FeeBumpWrapperPlugin should not be used'); } // // // No fee bump is applied if both conditions are met: // - source is the same for the fee bump and the transaction // - fee in the original transaction is equal or higher than the fee in the fee bump // // A Fee bump for the same source account is only effective if the fee is increased in the process. // A lower or equal fee will result in errors during processing. // if (transaction.source === this.feeBumpHeader.header.source && transaction.fee >= this.feeBumpHeader.header.fee) { return item; } const feeBumpPipeline = new fee_bump_1.FeeBumpPipeline(); const feeBumpEnvelope = yield feeBumpPipeline.execute({ innerTransaction: transaction, feeBumpHeader: this.feeBumpHeader, }, itemId); const classicSignRequirementsPipeline = new classic_sign_requirements_1.ClassicSignRequirementsPipeline(); const classicSignRequirements = yield classicSignRequirementsPipeline.execute(feeBumpEnvelope, itemId); const signTransactionPipeline = new sign_transaction_1.SignTransactionPipeline(); const signedTransaction = yield signTransactionPipeline.execute({ transaction: feeBumpEnvelope, signatureRequirements: classicSignRequirements, signers: this.feeBumpHeader.signers, }, itemId); const updatedItem = Object.assign(Object.assign({}, item), { transaction: signedTransaction }); return updatedItem; }); } } exports.FeeBumpWrapperPlugin = FeeBumpWrapperPlugin;