UNPKG

@ledgerhq/coin-near

Version:
65 lines 2.83 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getOperations = void 0; const operation_1 = require("@ledgerhq/ledger-wallet-framework/operation"); const live_network_1 = __importDefault(require("@ledgerhq/live-network")); const bignumber_js_1 = require("bignumber.js"); const config_1 = require("../config"); const fetchTransactions = async (address) => { const currencyConfig = (0, config_1.getCoinConfig)(); const response = await (0, live_network_1.default)({ url: `${currencyConfig.infra.API_NEARBLOCKS_INDEXER}/v1/account/${address}/txns-only`, }); return response.data.txns || []; }; function isSender(transaction, address) { return transaction.signer_account_id === address; } function getOperationType(transaction, address) { switch (transaction.actions?.at(0)?.method) { case "deposit_and_stake": return "STAKE"; case "unstake": case "unstake_all": return "UNSTAKE"; case "withdraw": case "withdraw_all": return "WITHDRAW_UNSTAKED"; default: return isSender(transaction, address) ? "OUT" : "IN"; } } function getOperationValue(transaction, type) { const amount = transaction.actions?.at(0)?.deposit || 0; if (type === "OUT") { return new bignumber_js_1.BigNumber(amount).plus(transaction.outcomes_agg.transaction_fee); } return new bignumber_js_1.BigNumber(amount); } async function transactionToOperation(accountId, address, transaction) { const type = getOperationType(transaction, address); return { id: (0, operation_1.encodeOperationId)(accountId, transaction.transaction_hash, type), accountId, fee: new bignumber_js_1.BigNumber(transaction.outcomes_agg.transaction_fee || 0), value: getOperationValue(transaction, type), type, hash: transaction.transaction_hash, blockHash: transaction.included_in_block_hash, blockHeight: transaction.block.block_height, date: new Date(parseFloat(transaction.block_timestamp) / 1000000), extra: {}, senders: transaction.signer_account_id ? [transaction.signer_account_id] : [], recipients: transaction.receiver_account_id ? [transaction.receiver_account_id] : [], hasFailed: !transaction.outcomes.status, }; } const getOperations = async (accountId, address) => { const rawTransactions = await fetchTransactions(address); return await Promise.all(rawTransactions.map(transaction => transactionToOperation(accountId, address, transaction))); }; exports.getOperations = getOperations; //# sourceMappingURL=indexer.js.map