UNPKG

@ledgerhq/coin-multiversx

Version:
69 lines 2.96 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.sync = exports.getAccountShape = void 0; const index_1 = require("@ledgerhq/coin-framework/account/index"); const jsHelpers_1 = require("@ledgerhq/coin-framework/bridge/jsHelpers"); const index_2 = require("@ledgerhq/coin-framework/serialization/index"); const api_1 = require("./api"); const buildSubAccounts_1 = __importDefault(require("./buildSubAccounts")); const reconciliation_1 = require("./reconciliation"); const logic_1 = require("./logic"); const getAccountShape = async (info, syncConfig) => { const { address, initialAccount, currency, derivationMode } = info; const accountId = (0, index_1.encodeAccountId)({ type: "js", version: "2", currencyId: currency.id, xpubOrAddress: address, derivationMode, }); const oldOperations = initialAccount?.operations || []; // Needed for incremental synchronisation const startAt = oldOperations.length ? Math.floor(oldOperations[0].date.valueOf() / 1000) : 0; const account = await (0, api_1.getAccount)(address); const delegations = await (0, api_1.getAccountDelegations)(address); let subAccounts = []; const hasTokens = await (0, api_1.hasESDTTokens)(address); if (hasTokens) { const tokenAccounts = await (0, buildSubAccounts_1.default)({ currency, accountId: accountId, accountAddress: address, existingAccount: initialAccount, syncConfig, }); if (tokenAccounts) { subAccounts = (0, reconciliation_1.reconciliateSubAccounts)(tokenAccounts, initialAccount); } } const delegationBalance = (0, logic_1.computeDelegationBalance)(delegations); // Merge new operations with the previously synced ones const newOperations = await (0, api_1.getEGLDOperations)(accountId, address, startAt, subAccounts); const operations = (0, jsHelpers_1.mergeOps)(oldOperations, newOperations); return { id: accountId, balance: account.balance.plus(delegationBalance), spendableBalance: account.balance, operationsCount: operations.length, blockHeight: account.blockHeight, multiversxResources: { nonce: account.nonce, delegations, isGuarded: account.isGuarded, }, subAccounts, operations: operations.map(op => { const subOperations = (0, index_2.inferSubOperations)(op.hash, subAccounts); return { ...op, subOperations, }; }), }; }; exports.getAccountShape = getAccountShape; exports.sync = (0, jsHelpers_1.makeSync)({ getAccountShape: exports.getAccountShape }); //# sourceMappingURL=synchronisation.js.map