@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
82 lines (73 loc) • 2.58 kB
text/typescript
import { SWAP_DATA_CDN } from "@ledgerhq/ledger-cal-service";
import { CryptoCurrency, TokenCurrency } from "@ledgerhq/types-cryptoassets";
import { Account, AccountLike, TokenAccount } from "@ledgerhq/types-live";
import { getAccountCurrency, makeEmptyTokenAccount } from "../../../account";
import { getSwapProvider } from "../../providers/swap";
export const FILTER = {
centralised: "centralised",
decentralised: "decentralised",
float: "float",
fixed: "fixed",
} as const;
export type AccountTuple = {
account: Account | null | undefined;
subAccount: TokenAccount | null | undefined;
};
export function getAccountTuplesForCurrency(
currency: CryptoCurrency | TokenCurrency,
allAccounts: Account[],
hideEmpty?: boolean,
): AccountTuple[] {
if (currency.type === "TokenCurrency") {
return allAccounts
.filter(account => account.currency.id === currency.parentCurrency.id)
.map(account => ({
account,
subAccount:
(account.subAccounts &&
account.subAccounts.find(
(subAcc: TokenAccount) =>
subAcc.type === "TokenAccount" && subAcc.token.id === currency.id,
)) ||
makeEmptyTokenAccount(account, currency),
}))
.filter(a => (hideEmpty ? a.subAccount?.balance.gt(0) : true));
}
return allAccounts
.filter(account => account.currency.id === currency.id)
.map(account => ({
account,
subAccount: null,
}))
.filter(a => (hideEmpty ? a.account?.balance.gt(0) : true));
}
export const getAvailableAccountsById = (
id: string,
accounts: (AccountLike & { disabled?: boolean })[],
): (AccountLike & {
disabled?: boolean | undefined;
})[] =>
accounts
.filter(acc => getAccountCurrency(acc)?.id === id && !acc.disabled)
.sort((a, b) => b.balance.minus(a.balance).toNumber());
export const isRegistrationRequired = async (provider: string): Promise<boolean> => {
const { needsBearerToken, needsKYC } = await getSwapProvider(provider);
return needsBearerToken || needsKYC;
};
export const getProviderName = (provider: string): string => {
const { displayName } = SWAP_DATA_CDN[provider] ?? { displayName: "" };
return displayName;
};
export const getNoticeType = (provider: string): { message: string; learnMore: boolean } => {
switch (provider) {
case "cic":
return { message: "provider", learnMore: false };
case "changelly":
return {
message: "provider",
learnMore: false,
};
default:
return { message: "default", learnMore: true };
}
};