@ledgerhq/coin-near
Version:
71 lines • 2.87 kB
JavaScript
;
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