@ledgerhq/coin-stellar
Version:
Ledger Stellar Coin integration
45 lines • 2 kB
JavaScript
;
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