UNPKG

@ledgerhq/live-common

Version:
58 lines (53 loc) 2.24 kB
import { AccountBridge } from "@ledgerhq/types-live"; import { AccountAwaitingSendPendingOperations } from "@ledgerhq/errors"; import BigNumber from "bignumber.js"; import { getAlpacaApi } from "./alpaca"; import { transactionToIntent } from "./utils"; import { GenericTransaction } from "./types"; // => alpaca validateIntent export function genericGetTransactionStatus( network, kind, ): AccountBridge<any>["getTransactionStatus"] { return async (account, transaction: GenericTransaction) => { const alpacaApi = getAlpacaApi(account.currency.id, kind); const draftTransaction = { mode: transaction?.mode ?? "send", recipient: transaction.recipient, amount: transaction.amount ?? new BigNumber(0), useAllAmount: !!transaction.useAllAmount, assetReference: transaction.assetReference || "", assetOwner: transaction.assetOwner || "", subAccountId: transaction.subAccountId || "", memoType: transaction.memoType || "", memoValue: transaction.memoValue || "", family: transaction.family, feesStrategy: transaction.feesStrategy, data: transaction.data, }; if (alpacaApi.getChainSpecificRules) { const chainSpecificValidation = alpacaApi.getChainSpecificRules(); if (chainSpecificValidation.getTransactionStatus.throwIfPendingOperation) { if (account.pendingOperations.length > 0) { throw new AccountAwaitingSendPendingOperations(); } } } const { errors, warnings, estimatedFees, amount, totalSpent, totalFees } = await alpacaApi.validateIntent( transactionToIntent(account, draftTransaction, alpacaApi.computeIntentType), { value: transaction.fees ? BigInt(transaction.fees.toString()) : 0n }, ); return { errors, warnings, totalFees: typeof totalFees === "bigint" ? new BigNumber(totalFees.toString()) : undefined, estimatedFees: !transaction.fees || transaction.fees.isZero() ? new BigNumber(estimatedFees.toString()) : transaction.fees, amount: transaction.amount.eq(0) ? new BigNumber(amount.toString()) : transaction.amount, totalSpent: new BigNumber(totalSpent.toString()), }; }; }