@ledgerhq/coin-multiversx
Version:
Ledger MultiversX Coin integration
69 lines • 2.96 kB
JavaScript
;
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