Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
mudeerapi.abasa.com
/
nodetest-backup30April26
/
src
/
services
/
Filename :
currencyService.js
back
Copy
import axios from 'axios'; const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours const cache = new Map(); // key: currencyCode (lowercase) -> { rateToUsd, fetchedAt } function getCached(currencyCode) { const key = (currencyCode || '').toLowerCase(); const entry = cache.get(key); if (!entry) return null; if (Date.now() - entry.fetchedAt > CACHE_TTL_MS) { cache.delete(key); return null; } return entry; } function setCached(currencyCode, rateToUsd, fetchedAt = Date.now()) { const key = (currencyCode || '').toLowerCase(); cache.set(key, { rateToUsd, fetchedAt }); } const PRIMARY_BASE = 'https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies'; const FALLBACK_BASE = 'https://latest.currency-api.pages.dev/v1/currencies'; export async function fetchRateToUsd(baseCurrency) { if (!baseCurrency || typeof baseCurrency !== 'string') { throw new Error('baseCurrency is required'); } const code = baseCurrency.trim().toLowerCase(); if (code === 'usd') return { rateToUsd: 1, fetchedAt: Date.now(), raw: { usd: 1 } }; const cached = getCached(code); if (cached != null) { return { rateToUsd: cached.rateToUsd, fetchedAt: cached.fetchedAt, raw: { [code]: { usd: cached.rateToUsd } }, }; } const urlPrimary = `${PRIMARY_BASE}/${code}.min.json`; const urlFallback = `${FALLBACK_BASE}/${code}.min.json`; let data; try { const res = await axios.get(urlPrimary, { timeout: 10000 }); data = res.data; } catch (err) { try { const res = await axios.get(urlFallback, { timeout: 10000 }); data = res.data; } catch (err2) { throw new Error(`Currency API failed for ${baseCurrency}: ${err.message}`); } } const rates = data[code]; if (!rates || typeof rates.usd !== 'number') { throw new Error(`No USD rate found for ${baseCurrency}`); } const rateToUsd = rates.usd; const fetchedAt = Date.now(); setCached(code, rateToUsd, fetchedAt); return { rateToUsd, fetchedAt, raw: data }; } export async function convertToUsd(amount, baseCurrency) { if (baseCurrency && (baseCurrency.trim().toUpperCase() === 'USD')) { return { amountUsd: Number(amount), rate: 1, fetchedAt: Date.now() }; } const { rateToUsd, fetchedAt } = await fetchRateToUsd(baseCurrency || 'USD'); // rateToUsd = USD per 1 unit of base currency (e.g. 1 PKR = 0.00358 USD) const amountUsd = Number(amount) * rateToUsd; return { amountUsd, rate: rateToUsd, fetchedAt }; }