@ledgerhq/coin-hedera
Version:
Ledger Hedera Coin integration
97 lines (82 loc) • 2.32 kB
text/typescript
import type { CommonDeviceTransactionField as DeviceTransactionField } from "@ledgerhq/ledger-wallet-framework/transaction/common";
import type { AccountLike, Account } from "@ledgerhq/types-live";
import { HEDERA_TRANSACTION_MODES, MAP_STAKING_MODE_TO_METHOD } from "./constants";
import { isTokenAssociateTransaction, isStakingTransaction } from "./logic/utils";
import type { Transaction, TransactionStatus } from "./types";
async function getDeviceTransactionConfig({
transaction,
status: { estimatedFees },
}: {
account: AccountLike;
parentAccount?: Account;
transaction: Transaction;
status: TransactionStatus;
}): Promise<Array<DeviceTransactionField>> {
const fields: Array<DeviceTransactionField> = [];
if (isStakingTransaction(transaction)) {
fields.push({
type: "text",
label: "Method",
value: MAP_STAKING_MODE_TO_METHOD[transaction.mode],
});
if (!estimatedFees.isZero()) {
fields.push({
type: "fees",
label: "Fees",
});
}
if (typeof transaction.properties?.stakingNodeId === "number") {
fields.push({
type: "text",
label: "Staked Node ID",
value: transaction.properties.stakingNodeId.toString(),
});
}
if (transaction.memo) {
fields.push({
type: "text",
label: "Memo",
value: transaction.memo,
});
}
return fields;
}
const method = (() => {
if (isTokenAssociateTransaction(transaction)) return "Associate Token";
else if (transaction.useAllAmount) return "Transfer All";
else return "Transfer";
})();
fields.push({
type: "text",
label: "Method",
value: method,
});
if (!isTokenAssociateTransaction(transaction)) {
fields.push({
type: "amount",
label: "Amount",
});
}
if (!estimatedFees.isZero()) {
fields.push({
type: "fees",
label: "Fees",
});
}
if (transaction.mode === HEDERA_TRANSACTION_MODES.Send && transaction.gasLimit) {
fields.push({
type: "text",
label: "Gas Limit",
value: transaction.gasLimit.toString(),
});
}
if (transaction.memo) {
fields.push({
type: "text",
label: "Memo",
value: transaction.memo,
});
}
return fields;
}
export default getDeviceTransactionConfig;