Fix: Eslint.

This commit is contained in:
gerlofvanek 2025-01-18 20:22:51 +01:00
parent 9e24d9a12a
commit 5d381d4b73
2 changed files with 64 additions and 95 deletions

View file

@ -497,48 +497,48 @@ const CacheManager = {
},
get: function(key) {
try {
const itemStr = localStorage.getItem(key);
if (!itemStr) {
return null;
}
let item;
try {
item = JSON.parse(itemStr);
} catch (parseError) {
console.error('Failed to parse cached item:', parseError);
localStorage.removeItem(key);
return null;
}
if (!item || typeof item.expiresAt !== 'number' || !item.hasOwnProperty('value')) {
console.warn('Invalid cache item structure for key:', key);
localStorage.removeItem(key);
return null;
}
const now = Date.now();
if (now < item.expiresAt) {
return {
value: item.value,
remainingTime: item.expiresAt - now
};
}
localStorage.removeItem(key);
return null;
} catch (error) {
console.error("Cache retrieval error:", error);
try {
localStorage.removeItem(key);
} catch (removeError) {
console.error("Failed to remove invalid cache entry:", removeError);
}
try {
const itemStr = localStorage.getItem(key);
if (!itemStr) {
return null;
}
},
let item;
try {
item = JSON.parse(itemStr);
} catch (parseError) {
console.error('Failed to parse cached item:', parseError);
localStorage.removeItem(key);
return null;
}
if (!item || typeof item.expiresAt !== 'number' || !Object.prototype.hasOwnProperty.call(item, 'value')) {
console.warn('Invalid cache item structure for key:', key);
localStorage.removeItem(key);
return null;
}
const now = Date.now();
if (now < item.expiresAt) {
return {
value: item.value,
remainingTime: item.expiresAt - now
};
}
localStorage.removeItem(key);
return null;
} catch (error) {
console.error("Cache retrieval error:", error);
try {
localStorage.removeItem(key);
} catch (removeError) {
console.error("Failed to remove invalid cache entry:", removeError);
}
return null;
}
},
cleanup: function(aggressive = false) {
const now = Date.now();
@ -1001,37 +1001,6 @@ function filterAndSortData() {
return filteredData;
}
function getPriceWithFallback(coin, latestPrices) {
const getPriceKey = (coin) => {
const lowerCoin = coin.toLowerCase();
if (lowerCoin === 'firo' || lowerCoin === 'zcoin') {
return 'zcoin';
}
if (lowerCoin === 'bitcoin cash') {
return 'bitcoin-cash';
}
if (lowerCoin === 'particl anon' || lowerCoin === 'particl blind') {
return 'particl';
}
return coinNameToSymbol[coin] || lowerCoin;
};
const priceKey = getPriceKey(coin);
const livePrice = latestPrices[priceKey]?.usd;
if (livePrice !== undefined && livePrice !== null) {
return livePrice;
}
if (window.tableRateModule) {
const fallback = window.tableRateModule.getFallbackValue(priceKey);
if (fallback !== null) {
return fallback;
}
}
return null;
}
async function calculateProfitLoss(fromCoin, toCoin, fromAmount, toAmount, isOwnOffer) {
return new Promise((resolve) => {
if (!latestPrices) {
@ -1136,7 +1105,7 @@ async function fetchLatestPrices() {
try {
console.log('Initiating fresh price data fetch...');
const existingCache = CacheManager.get(PRICES_CACHE_KEY, true);
let fallbackData = existingCache ? existingCache.value : null;
const fallbackData = existingCache ? existingCache.value : null;
const url = `${offersConfig.apiEndpoints.coinGecko}/simple/price?ids=bitcoin,bitcoin-cash,dash,dogecoin,decred,litecoin,particl,pivx,monero,zano,wownero,zcoin&vs_currencies=USD,BTC&api_key=${offersConfig.apiKeys.coinGecko}`;
const response = await fetch('/json/readurl', {
method: 'POST',

View file

@ -156,7 +156,7 @@ const api = {
.join(',');
const url = `${config.apiEndpoints.coinGecko}/simple/price?ids=${coinIds}&vs_currencies=usd,btc&include_24hr_vol=true&include_24hr_change=true&api_key=${config.apiKeys.coinGecko}`;
const response = await api.makePostRequest(url, {
'User-Agent': 'Mozilla/5.0',
'Accept': 'application/json',
@ -283,28 +283,28 @@ const rateLimiter = {
cryptocompare: 1000
},
requestQueue: {},
canMakeRequest: function(apiName) {
const now = Date.now();
const lastRequest = this.lastRequestTime[apiName] || 0;
return (now - lastRequest) >= this.minRequestInterval[apiName];
},
updateLastRequestTime: function(apiName) {
this.lastRequestTime[apiName] = Date.now();
},
getWaitTime: function(apiName) {
const now = Date.now();
const lastRequest = this.lastRequestTime[apiName] || 0;
return Math.max(0, this.minRequestInterval[apiName] - (now - lastRequest));
},
queueRequest: async function(apiName, requestFn) {
if (!this.requestQueue[apiName]) {
this.requestQueue[apiName] = Promise.resolve();
}
try {
await this.requestQueue[apiName];
@ -313,11 +313,11 @@ const rateLimiter = {
if (waitTime > 0) {
await new Promise(resolve => setTimeout(resolve, waitTime));
}
this.updateLastRequestTime(apiName);
return await requestFn();
};
this.requestQueue[apiName] = executeRequest();
return await this.requestQueue[apiName];
@ -397,7 +397,7 @@ displayCoinData: (coin, data) => {
if (coin === 'BTC') {
btcPriceDiv.style.display = 'none';
} else {
priceBtcElement.textContent = isError ? 'N/A' : `${priceBTC.toFixed(8)}`;
priceBtcElement.textContent = isError ? 'N/A' : `${priceBTC.toFixed(8)} BTC`;
btcPriceDiv.style.display = 'flex';
}
}
@ -419,8 +419,9 @@ displayCoinData: (coin, data) => {
}
updateUI(false);
} catch (error) {
updateUI(true);
}
logger.error('Failed to parse cache item:', error.message);
localStorage.removeItem(key);
}
},
showLoader: () => {
@ -525,7 +526,7 @@ displayCoinData: (coin, data) => {
if (price < 0.001) return price.toFixed(8);
if (price < 1) return price.toFixed(4);
if (price < 1000) return price.toFixed(2);
return price.toFixed(0);
return price.toFixed(1);
},
setActiveContainer: (containerId) => {
@ -1002,7 +1003,6 @@ const app = {
await chartModule.updateChart('BTC');
app.updateResolutionButtons('BTC');
const chartTitle = document.getElementById('chart-title');
if (chartTitle) {
chartTitle.textContent = 'Price Chart (BTC)';
@ -1210,7 +1210,7 @@ setupEventListeners: () => {
app.isRefreshing = true;
ui.showLoader();
chartModule.showChartLoader();
try {
ui.hideErrorMessage();
cache.clear();
@ -1237,13 +1237,13 @@ setupEventListeners: () => {
if (!coinData) {
throw new Error(`No data received`);
}
coinData.displayName = coin.displayName || coin.symbol;
ui.displayCoinData(coin.symbol, coinData);
const cacheKey = `coinData_${coin.symbol}`;
cache.set(cacheKey, coinData);
} catch (coinError) {
console.warn(`Failed to update ${coin.symbol}: ${coinError.message}`);
failedCoins.push(coin.symbol);
@ -1270,7 +1270,7 @@ setupEventListeners: () => {
let countdown = 5;
ui.displayErrorMessage(`${failureMessage} (${countdown}s)`);
const countdownInterval = setInterval(() => {
countdown--;
if (countdown > 0) {
@ -1468,7 +1468,7 @@ sortTable: (columnIndex) => {
}
};
return (parseTime(bValue) - parseTime(aValue)) * sortOrder;
case 5: // Rate
case 6: // Market +/-
aValue = getSafeTextContent(a.cells[columnIndex]);
@ -1478,13 +1478,13 @@ sortTable: (columnIndex) => {
aValue = parseFloat(aValue.replace(/[^\d.-]/g, '') || '0');
bValue = parseFloat(bValue.replace(/[^\d.-]/g, '') || '0');
return (aValue - bValue) * sortOrder;
case 7: // Trade
const aCell = a.cells[columnIndex];
const bCell = b.cells[columnIndex];
//console.log('aCell:', aCell ? aCell.outerHTML : 'null');
//console.log('bCell:', bCell ? bCell.outerHTML : 'null');
aValue = getSafeTextContent(aCell.querySelector('a')) ||
getSafeTextContent(aCell.querySelector('button')) ||
getSafeTextContent(aCell);
@ -1494,14 +1494,14 @@ sortTable: (columnIndex) => {
aValue = aValue.toLowerCase();
bValue = bValue.toLowerCase();
//console.log(`Comparing trade actions: "${aValue}" vs "${bValue}"`);
if (aValue === bValue) return 0;
if (aValue === "swap") return -1 * sortOrder;
if (bValue === "swap") return 1 * sortOrder;
return aValue.localeCompare(bValue) * sortOrder;
default:
aValue = getSafeTextContent(a.cells[columnIndex]);
bValue = getSafeTextContent(b.cells[columnIndex]);