UNPKG

@ledgerhq/coin-multiversx

Version:
65 lines 2.72 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 buildOptimisticOperation_1 = require("./buildOptimisticOperation"); const buildTransaction_1 = require("./buildTransaction"); const account_1 = require("@ledgerhq/coin-framework/account"); const logic_1 = require("./logic"); const constants_1 = require("./constants"); /** * 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(); } // Collect data for an ESDT transfer const { subAccounts } = account; const { subAccountId } = transaction; const tokenAccount = !subAccountId ? null : subAccounts && subAccounts.find(ta => ta.id === subAccountId); await signerContext(deviceId, signer => signer.setAddress(account.freshAddressPath)); if (tokenAccount) { const { token } = await (0, account_1.decodeTokenAccountId)(tokenAccount.id); if (!token) { throw new Error("Invalid token"); } await signerContext(deviceId, signer => signer.provideESDTInfo(token.ticker, (0, logic_1.extractTokenId)(token.id), token.units[0].magnitude, constants_1.CHAIN_ID, token.ledgerSignature)); } const unsignedTx = await (0, buildTransaction_1.buildTransactionToSign)(account, transaction); o.next({ type: "device-signature-requested", }); const { signature } = await signerContext(deviceId, signer => signer.sign(account.freshAddressPath, unsignedTx)); if (cancelled) return; o.next({ type: "device-signature-granted", }); if (!signature) { throw new Error("No signature"); } const parsedUnsignedTx = JSON.parse(unsignedTx); const operation = (0, buildOptimisticOperation_1.buildOptimisticOperation)(account, transaction, parsedUnsignedTx); o.next({ type: "signed", signedOperation: { operation, signature: signature.toString("hex"), rawData: parsedUnsignedTx, }, }); } main().then(() => o.complete(), e => o.error(e)); return () => { cancelled = true; }; }); exports.buildSignOperation = buildSignOperation; exports.default = exports.buildSignOperation; //# sourceMappingURL=signOperation.js.map