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