UNPKG

@ledgerhq/coin-icon

Version:
123 lines 4.57 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTxHistory = exports.fetchOperationList = exports.getOperations = exports.getCurrentBlockHeight = exports.getAccount = 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 constants_1 = require("../constants"); const logic_1 = require("../logic"); const logs_1 = require("@ledgerhq/logs"); const querystring_1 = __importDefault(require("querystring")); const config_1 = require("../config"); /** * Returns Testnet API URL if the current network is testnet * * @param {network} network */ function getApiUrl(network) { const currencyConfig = (0, config_1.getCoinConfig)(); let apiUrl = currencyConfig.infra.indexer; if ((0, logic_1.isTestnet)(network)) { apiUrl = currencyConfig.infra.indexer_testnet; } return apiUrl; } async function fetch(url) { const { data } = await (0, network_1.default)({ method: "GET", url, }); if (data.Error) { (0, logs_1.log)("icon-error", data.Error, { url, }); throw new Error(data.Error); } return data; } const getAccount = async (addr, network) => { const data = await fetch(`${getApiUrl(network)}/addresses/details/${addr}`); return data; }; exports.getAccount = getAccount; const getCurrentBlockHeight = async (network) => { const data = await fetch(`${getApiUrl(network)}/blocks`); return data?.[0].number; }; exports.getCurrentBlockHeight = getCurrentBlockHeight; /** * Returns true if account is the signer */ function isSender(transaction, addr) { return transaction.from_address === addr; } /** * Map transaction to an Operation Type */ function getOperationType(transaction, addr) { return isSender(transaction, addr) ? "OUT" : "IN"; } /** * Map transaction to a correct Operation Value (affecting account balance) */ function getOperationValue(transaction, addr) { if (isSender(transaction, addr)) { return transaction.value ? new bignumber_js_1.BigNumber(transaction.value).plus(transaction.transaction_fee) : new bignumber_js_1.BigNumber(0); } else { return transaction.value ? new bignumber_js_1.BigNumber(transaction.value) : new bignumber_js_1.BigNumber(0); } } /** * Map the ICON history transaction to a Ledger Live Operation */ function txToOperation(accountId, addr, transaction) { const type = getOperationType(transaction, addr); return { id: (0, operation_1.encodeOperationId)(accountId, transaction.hash, type), accountId, fee: new bignumber_js_1.BigNumber(transaction.transaction_fee), value: getOperationValue(transaction, addr), type, hash: transaction.hash, blockHash: null, blockHeight: transaction.block_number, date: new Date(transaction.block_timestamp / 1000), senders: [transaction.from_address], recipients: [transaction.to_address], extra: {}, hasFailed: transaction.status !== "0x1", }; } /** * Fetch operation list */ const getOperations = async (accountId, addr, skip, network, maxLength) => { return await (0, exports.fetchOperationList)(accountId, addr, skip, network, maxLength); }; exports.getOperations = getOperations; const fetchOperationList = async (accountId, addr, skip, network, maxLength, prevOperations = []) => { const data = await (0, exports.getTxHistory)(addr, skip, network); const operations = data.map((transaction) => txToOperation(accountId, addr, transaction)); const mergedOp = [...prevOperations, ...operations]; if (operations.length < constants_1.LIMIT || operations.length >= maxLength) { return mergedOp; } return await (0, exports.fetchOperationList)(accountId, addr, skip + constants_1.LIMIT, network, maxLength, mergedOp); }; exports.fetchOperationList = fetchOperationList; const getTxHistory = async (addr, skip, network, limit = constants_1.LIMIT) => { const query = querystring_1.default.stringify({ skip: skip, limit: limit, }); const data = await fetch(`${getApiUrl(network)}/transactions/address/${addr}?${query}`); return data; }; exports.getTxHistory = getTxHistory; //# sourceMappingURL=index.js.map