From 3b8e084b2ee35789b47ee88455aeff60dfb4ed24 Mon Sep 17 00:00:00 2001 From: gerlofvanek <gerlof@particl.io> Date: Thu, 16 Jan 2025 16:34:36 +0100 Subject: [PATCH] Simplified API requests and remove debug. --- basicswap/static/js/offerstable.js | 143 +++++++++-------------------- 1 file changed, 44 insertions(+), 99 deletions(-) diff --git a/basicswap/static/js/offerstable.js b/basicswap/static/js/offerstable.js index f088072..57f8b97 100644 --- a/basicswap/static/js/offerstable.js +++ b/basicswap/static/js/offerstable.js @@ -1168,86 +1168,6 @@ async function getMarketRate(fromCoin, toCoin) { }); } -async function fetchPricesWithApiKey(baseUrl) { - try { - console.log('Attempting price fetch with API key...'); - const apiKeys = getAPIKeys(); - const urlWithKey = `${baseUrl}&api_key=${offersConfig.apiKeys.coinGecko}`; - - const response = await fetch('/json/readurl', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - url: urlWithKey, - headers: {} - }) - }); - - const data = await response.json(); - - if (data.error && data.error.includes('429')) { - console.log('Rate limited, will retry...'); - return null; - } - - if (!data || data.error) { - console.warn('Invalid price data received:', data); - return null; - } - - return data; - } catch (error) { - console.warn('Failed to fetch prices with API key:', error); - return null; - } -} - -async function fetchPricesWithoutApiKey(baseUrl) { - try { - console.log('Attempting price fetch without API key...'); - const response = await fetch('/json/readurl', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - url: baseUrl, - headers: {} - }) - }); - - if (!response.ok) { - return null; - } - - const data = await response.json(); - console.log('Received price data (no API key):', data); - - if (data.error || !data || typeof data !== 'object' || Array.isArray(data)) { - console.warn('Invalid price data received:', data); - return null; - } - - const hasValidPrices = Object.values(data).some(coin => - coin && typeof coin === 'object' && - typeof coin.usd === 'number' && - !isNaN(coin.usd) - ); - - if (!hasValidPrices) { - console.warn('No valid price data found in response'); - return null; - } - - return data; - } catch (error) { - console.warn('Failed to fetch prices without API key:', error); - return null; - } -} - function getEmptyPriceData() { return { 'bitcoin': { usd: null, btc: null }, @@ -1289,30 +1209,56 @@ async function fetchLatestPrices() { await new Promise(resolve => setTimeout(resolve, delay)); } - data = await fetchPricesWithApiKey(baseUrl); + try { + console.log('Attempting price fetch with API key...'); + const urlWithKey = `${baseUrl}&api_key=${offersConfig.apiKeys.coinGecko}`; + + const response = await fetch('/json/readurl', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + url: urlWithKey, + headers: {} + }) + }); - if (!data) { - console.log('API key attempt failed, trying without API key...'); - data = await fetchPricesWithoutApiKey(baseUrl); - } + const responseData = await response.json(); - if (!data) { - retryCount++; - if (retryCount < MAX_RETRIES) { - console.log(`Attempt ${retryCount} failed, will retry...`); + if (responseData.error) { + if (responseData.error.includes('429')) { + console.log('Rate limited, retrying...'); + } else { + console.warn('Invalid price data received:', responseData); + } + retryCount++; + continue; } + + const hasValidPrices = Object.values(responseData).some(coin => + coin && typeof coin === 'object' && + typeof coin.usd === 'number' && + !isNaN(coin.usd) + ); + + if (!hasValidPrices) { + console.warn('No valid price data found in response'); + retryCount++; + continue; + } + + data = responseData; + break; + + } catch (error) { + console.warn('Error fetching prices:', error); + retryCount++; } } if (!data) { - console.warn('All price fetch attempts failed, falling back to cache or N/A values'); - const expiredCache = CacheManager.get(PRICES_CACHE_KEY); - if (expiredCache && expiredCache.value) { - console.log('Using expired cache data'); - latestPrices = expiredCache.value; - return expiredCache.value; - } - + console.warn('All price fetch attempts failed, using empty price data'); const naData = getEmptyPriceData(); latestPrices = naData; return naData; @@ -1321,7 +1267,7 @@ async function fetchLatestPrices() { console.log('Successfully fetched fresh price data'); latestPrices = data; CacheManager.set(PRICES_CACHE_KEY, data, CACHE_DURATION); - + Object.entries(data).forEach(([coin, prices]) => { if (prices && typeof prices.usd === 'number' && !isNaN(prices.usd)) { tableRateModule.setFallbackValue(coin, prices.usd); @@ -1678,7 +1624,6 @@ async function updateOffersTable() { if (validOffers.length === 0) { handleNoOffersScenario(); - finishTableRender(); return; }