UNPKG

@ledgerhq/coin-algorand

Version:
45 lines 1.83 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"); /** * Sign Transaction with Ledger hardware */ const buildSignOperation = (signerContext) => ({ account, transaction, deviceId }) => new rxjs_1.Observable(o => { let cancelled = false; async function main() { if (!transaction.fees) { throw new errors_1.FeeNotLoaded(); } const algoTx = await (0, buildTransaction_1.buildTransactionPayload)(account, transaction); const toSign = (0, buildTransaction_1.encodeToSign)(algoTx); const { freshAddressPath } = account; o.next({ type: "device-signature-requested" }); const { signature } = await signerContext(deviceId, signer => signer.sign(freshAddressPath, toSign)); if (cancelled) return; o.next({ type: "device-signature-granted" }); if (!signature) { throw new Error("No signature"); } const toBroadcast = (0, buildTransaction_1.encodeToBroadcast)(algoTx, signature); const operation = (0, buildOptimisticOperation_1.buildOptimisticOperation)(account, transaction); o.next({ type: "signed", signedOperation: { operation, signature: toBroadcast.toString("hex"), }, }); } main().then(() => o.complete(), e => o.error(e)); return () => { cancelled = true; }; }); exports.buildSignOperation = buildSignOperation; exports.default = exports.buildSignOperation; //# sourceMappingURL=signOperation.js.map