UNPKG

@ledgerhq/coin-stellar

Version:
45 lines 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildSignOperation = void 0; const rxjs_1 = require("rxjs"); const errors_1 = require("@ledgerhq/errors"); const buildTransaction_1 = require("./buildTransaction"); const buildOptimisticOperation_1 = require("./buildOptimisticOperation"); function buildSignOperation(signerContext) { return function signOperation({ account, deviceId, transaction }) { return new rxjs_1.Observable(obs => { let cancelled = false; async function main() { obs.next({ type: "device-signature-requested" }); if (cancelled) { return; } if (!transaction.fees) { throw new errors_1.FeeNotLoaded(); } const unsigned = await (0, buildTransaction_1.buildTransaction)(account, transaction); const unsignedPayload = Buffer.from(unsigned.signatureBase()); // Sign by device const { signature } = await signerContext(deviceId, signer => signer.signTransaction(account.freshAddressPath, unsignedPayload)); unsigned.addSignature(account.freshAddress, signature.toString("base64")); obs.next({ type: "device-signature-granted", }); const operation = await (0, buildOptimisticOperation_1.buildOptimisticOperation)(account, transaction); obs.next({ type: "signed", signedOperation: { operation, signature: unsigned.toXDR(), }, }); } main().then(() => obs.complete(), err => obs.error(err)); return () => { cancelled = true; }; }); }; } exports.buildSignOperation = buildSignOperation; //# sourceMappingURL=signOperation.js.map