@ledgerhq/coin-near
Version:
53 lines (40 loc) • 1.57 kB
text/typescript
import { encodeAccountId } from "@ledgerhq/ledger-wallet-framework/account/accountId";
import type { GetAccountShape } from "@ledgerhq/ledger-wallet-framework/bridge/jsHelpers";
import { makeSync, mergeOps } from "@ledgerhq/ledger-wallet-framework/bridge/jsHelpers";
import { getAccount, getOperations } from "./api";
import { NearAccount } from "./types";
export const getAccountShape: GetAccountShape<NearAccount> = async info => {
const { address, initialAccount, currency, derivationMode } = info;
const oldOperations = initialAccount?.operations || [];
const accountId = encodeAccountId({
type: "js",
version: "2",
currencyId: currency.id,
xpubOrAddress: address,
derivationMode,
});
const { blockHeight, balance, spendableBalance, nearResources } = await getAccount(address);
const newOperations = await getOperations(accountId, address);
const operations = mergeOps(oldOperations, newOperations);
const shape = {
id: accountId,
balance,
spendableBalance,
operationsCount: operations.length,
blockHeight,
nearResources,
};
return { ...shape, operations };
};
const postSync = (initial: NearAccount, synced: NearAccount): NearAccount => {
const pendingOperations = initial.pendingOperations || [];
if (pendingOperations.length === 0) {
return synced;
}
const { operations } = synced;
synced.pendingOperations = pendingOperations.filter(
po => !operations.some(o => o.hash === po.hash),
);
return synced;
};
export const sync = makeSync({ getAccountShape, postSync });