UNPKG

@ledgerhq/coin-near

Version:
71 lines 2.87 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 network_1 = __importDefault(require("@ledgerhq/live-network/network")); const bignumber_js_1 = require("bignumber.js"); const operation_1 = require("@ledgerhq/coin-framework/operation"); const config_1 = require("../config"); const DEFAULT_TRANSACTIONS_LIMIT = 100; const getIndexerUrl = (route) => { const currencyConfig = (0, config_1.getCoinConfig)(); return `${currencyConfig.infra.API_NEAR_INDEXER}${route || ""}`; }; const fetchTransactions = async (address, limit = DEFAULT_TRANSACTIONS_LIMIT) => { const route = `/transactions?limit=${limit}&account=${address}&date=${new Date().getTime()}`; const { data } = await (0, network_1.default)({ method: "GET", url: getIndexerUrl(route), }); return data?.records || []; }; function isSender(transaction, address) { return transaction.sender === address; } function getOperationType(transaction, address) { switch (transaction.actions[0]?.data?.method_name) { 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[0].data.deposit || 0; if (type === "OUT") { return new bignumber_js_1.BigNumber(amount).plus(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.hash, type), accountId, fee: new bignumber_js_1.BigNumber(transaction.fee || 0), value: getOperationValue(transaction, type), type, hash: transaction.hash, blockHash: transaction.block_hash, blockHeight: transaction.height, date: new Date(transaction.time), extra: {}, senders: transaction.sender ? [transaction.sender] : [], recipients: transaction.receiver ? [transaction.receiver] : [], hasFailed: !transaction.success, }; } 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