@ledgerhq/coin-near
Version:
56 lines (51 loc) • 2.04 kB
text/typescript
import { Account, AccountRaw } from "@ledgerhq/types-live";
import { BigNumber } from "bignumber.js";
import type { NearAccount, NearAccountRaw, NearResources, NearResourcesRaw } from "./types";
export function toNearResourcesRaw(r: NearResources): NearResourcesRaw {
const { stakedBalance, pendingBalance, availableBalance, storageUsageBalance, stakingPositions } =
r;
return {
stakedBalance: stakedBalance.toString(),
pendingBalance: pendingBalance.toString(),
availableBalance: availableBalance.toString(),
storageUsageBalance: storageUsageBalance.toString(),
stakingPositions: stakingPositions.map(({ staked, validatorId, available, pending }) => ({
staked: staked.toString(),
available: available.toString(),
pending: pending.toString(),
validatorId,
})),
};
}
export function fromNearResourcesRaw(r: NearResourcesRaw): NearResources {
const {
stakedBalance,
pendingBalance,
availableBalance,
storageUsageBalance,
stakingPositions = [],
} = r;
return {
stakedBalance: new BigNumber(stakedBalance),
pendingBalance: new BigNumber(pendingBalance),
availableBalance: new BigNumber(availableBalance),
storageUsageBalance: new BigNumber(storageUsageBalance),
stakingPositions: stakingPositions.map(({ staked, validatorId, available, pending }) => ({
staked: new BigNumber(staked),
available: new BigNumber(available),
pending: new BigNumber(pending),
validatorId,
})),
};
}
export function assignToAccountRaw(account: Account, accountRaw: AccountRaw) {
const nearAccount = account as NearAccount;
if (nearAccount.nearResources) {
(accountRaw as NearAccountRaw).nearResources = toNearResourcesRaw(nearAccount.nearResources);
}
}
export function assignFromAccountRaw(accountRaw: AccountRaw, account: Account) {
const nearResourcesRaw = (accountRaw as NearAccountRaw).nearResources;
if (nearResourcesRaw)
(account as NearAccount).nearResources = fromNearResourcesRaw(nearResourcesRaw);
}