UNPKG

@ledgerhq/coin-stellar

Version:
41 lines 1.77 kB
import { Observable } from "rxjs"; import { FeeNotLoaded } from "@ledgerhq/errors"; import { buildTransaction } from "./buildTransaction"; import { buildOptimisticOperation } from "./buildOptimisticOperation"; export function buildSignOperation(signerContext) { return function signOperation({ account, deviceId, transaction }) { return new Observable(obs => { let cancelled = false; async function main() { obs.next({ type: "device-signature-requested" }); if (cancelled) { return; } if (!transaction.fees) { throw new FeeNotLoaded(); } const unsigned = await 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 buildOptimisticOperation(account, transaction); obs.next({ type: "signed", signedOperation: { operation, signature: unsigned.toXDR(), }, }); } main().then(() => obs.complete(), err => obs.error(err)); return () => { cancelled = true; }; }); }; } //# sourceMappingURL=signOperation.js.map