UNPKG

stellar-plus

Version:

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

54 lines (53 loc) 2.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SignTransactionPipeline = void 0; const tslib_1 = require("tslib"); const stellar_sdk_1 = require("@stellar/stellar-sdk"); const types_1 = require("../../../../stellar-plus/core/pipelines/sign-transaction/types"); const error_1 = require("../../../../stellar-plus/error"); 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 SignTransactionPipeline extends conveyor_belts_1.ConveyorBelt { constructor(plugins) { super({ type: types_1.SignTransactionPipelineType.id, plugins: plugins || [], }); } process(item, itemId) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const { transaction, signatureRequirements, signers } = item; if (signatureRequirements.length === 0) { throw errors_1.PSIGError.noRequirementsProvided((0, conveyor_belt_1.extractConveyorBeltErrorMeta)(item, this.getMeta(itemId)), transaction); } if (signers.length === 0) { throw errors_1.PSIGError.noSignersProvided((0, conveyor_belt_1.extractConveyorBeltErrorMeta)(item, this.getMeta(itemId)), transaction); } const passphrase = transaction.networkPassphrase; let signedTransaction = transaction; for (const requirement of signatureRequirements) { const signer = signers.find((s) => s.getPublicKey() === requirement.publicKey); if (!signer) throw errors_1.PSIGError.signerNotFound((0, conveyor_belt_1.extractConveyorBeltErrorMeta)(item, this.getMeta(itemId)), transaction, requirement.publicKey, signers.map((s) => s.getPublicKey())); if (!signer.signatureSchema) { try { signedTransaction = stellar_sdk_1.TransactionBuilder.fromXDR(yield signer.sign(signedTransaction), passphrase); } catch (error) { throw errors_1.PSIGError.couldntSignTransaction(error, (0, conveyor_belt_1.extractConveyorBeltErrorMeta)(item, this.getMeta(itemId)), transaction, signer.getPublicKey()); } } else { throw error_1.StellarPlusError.unexpectedError({ message: 'Multisignature support not implemented yet', source: 'PipelineSignTransaction', details: `The signer has a signature schema. The signature schema is: ${signer.signatureSchema}.`, }); } } return signedTransaction; }); } } exports.SignTransactionPipeline = SignTransactionPipeline;