UNPKG

@ledgerhq/coin-hedera

Version:
182 lines 7.33 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildOptimisticOperation = void 0; const helpers_1 = require("@ledgerhq/ledger-wallet-framework/account/helpers"); const operation_1 = require("@ledgerhq/ledger-wallet-framework/operation"); const bignumber_js_1 = __importDefault(require("bignumber.js")); const invariant_1 = __importDefault(require("invariant")); const constants_1 = require("../constants"); const utils_1 = require("../logic/utils"); const buildOptimisticTokenAssociateOperation = async ({ account, transaction, }) => { (0, invariant_1.default)((0, utils_1.isTokenAssociateTransaction)(transaction), "invalid transaction properties"); const fee = transaction.maxFee ?? new bignumber_js_1.default(0); const type = "ASSOCIATE_TOKEN"; const operation = { id: (0, operation_1.encodeOperationId)(account.id, "", type), hash: "", type, value: fee, fee, blockHash: null, blockHeight: null, senders: [account.freshAddress.toString()], recipients: [transaction.recipient], accountId: account.id, date: new Date(), extra: { associatedTokenId: transaction.properties.token.contractAddress, }, }; return operation; }; const buildOptimisticCoinOperation = async ({ account, transaction, transactionType, }) => { const fee = transactionType === "FEES" ? transaction.amount : (transaction.maxFee ?? new bignumber_js_1.default(0)); const value = transaction.amount; const type = transactionType ?? "OUT"; const [_, recipientAddress] = await (0, utils_1.safeParseAccountId)(transaction.recipient); const recipientWithoutChecksum = recipientAddress?.accountId ?? transaction.recipient; const memo = transaction.memo; const operation = { id: (0, operation_1.encodeOperationId)(account.id, "", type), hash: "", type, value, fee, blockHash: null, blockHeight: null, senders: [account.freshAddress.toString()], recipients: [recipientWithoutChecksum], accountId: account.id, date: new Date(), extra: { ...(memo && { memo }), }, }; return operation; }; const buildOptimisticHTSTokenOperation = async ({ account, tokenAccount, transaction, }) => { const fee = transaction.maxFee ?? new bignumber_js_1.default(0); const value = transaction.amount; const type = "OUT"; const [_, recipientAddress] = await (0, utils_1.safeParseAccountId)(transaction.recipient); const recipientWithoutChecksum = recipientAddress?.accountId ?? transaction.recipient; const memo = transaction.memo; const coinOperation = await buildOptimisticCoinOperation({ account, transaction: { ...transaction, amount: fee, }, transactionType: "FEES", }); const operation = { ...coinOperation, subOperations: [ { id: (0, operation_1.encodeOperationId)(tokenAccount.id, "", type), hash: "", type, value, fee, blockHash: null, blockHeight: null, senders: [account.freshAddress.toString()], recipients: [recipientWithoutChecksum], accountId: tokenAccount.id, date: new Date(), extra: { ...(memo && { memo }), }, }, ], }; return operation; }; const buildOptimisticERC20TokenOperation = async ({ account, tokenAccount, transaction, }) => { const fee = transaction.maxFee ?? new bignumber_js_1.default(0); const value = transaction.amount; const type = "OUT"; const memo = transaction.memo; const coinOperation = await buildOptimisticCoinOperation({ account, transaction: { ...transaction, amount: fee, }, transactionType: "FEES", }); const operation = { ...coinOperation, subOperations: [ { id: (0, operation_1.encodeOperationId)(tokenAccount.id, "", type), hash: "", type, value, fee, blockHash: null, blockHeight: null, senders: [account.freshAddress.toString()], recipients: [transaction.recipient], accountId: tokenAccount.id, date: new Date(), extra: { ...(memo && { memo }), }, }, ], }; return operation; }; const buildOptimisticUpdateAccountOperation = async ({ account, transaction, }) => { (0, invariant_1.default)((0, utils_1.isStakingTransaction)(transaction), "invalid transaction properties"); const fee = transaction.maxFee ?? new bignumber_js_1.default(0); const value = transaction.amount; const type = constants_1.MAP_STAKING_MODE_TO_OPERATION_TYPE[transaction.mode]; const operation = { id: (0, operation_1.encodeOperationId)(account.id, "", type), hash: "", type, value, fee, blockHash: null, blockHeight: null, senders: [account.freshAddress.toString()], recipients: [transaction.recipient], accountId: account.id, date: new Date(), extra: { memo: transaction.memo ?? null, targetStakingNodeId: transaction.properties?.stakingNodeId ?? null, previousStakingNodeId: account.hederaResources?.delegation?.nodeId ?? null, }, }; return operation; }; const buildOptimisticOperation = async ({ account, transaction, }) => { const subAccount = (0, helpers_1.findSubAccountById)(account, transaction.subAccountId || ""); const isHTSTokenTransaction = transaction.mode === constants_1.HEDERA_TRANSACTION_MODES.Send && subAccount?.token.tokenType === "hts"; const isERC20TokenTransaction = transaction.mode === constants_1.HEDERA_TRANSACTION_MODES.Send && subAccount?.token.tokenType === "erc20"; if ((0, utils_1.isTokenAssociateTransaction)(transaction)) { return buildOptimisticTokenAssociateOperation({ account, transaction }); } else if (isHTSTokenTransaction) { return buildOptimisticHTSTokenOperation({ account, tokenAccount: subAccount, transaction }); } else if (isERC20TokenTransaction) { return buildOptimisticERC20TokenOperation({ account, tokenAccount: subAccount, transaction }); } else if (transaction.mode === constants_1.HEDERA_TRANSACTION_MODES.Redelegate || transaction.mode === constants_1.HEDERA_TRANSACTION_MODES.Undelegate || transaction.mode === constants_1.HEDERA_TRANSACTION_MODES.Delegate) { return buildOptimisticUpdateAccountOperation({ account, transaction }); } else { return buildOptimisticCoinOperation({ account, transaction }); } }; exports.buildOptimisticOperation = buildOptimisticOperation; //# sourceMappingURL=buildOptimisticOperation.js.map