UNPKG

nexus-react-core

Version:

A comprehensive React toolkit with services, hooks, and Redux store management

163 lines 5.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFAULT_TOKENS = void 0; exports.fetchPricesFromCoinGecko = fetchPricesFromCoinGecko; exports.convertDGNToTarget = convertDGNToTarget; exports.executeTradeOrder = executeTradeOrder; exports.getTradingHistory = getTradingHistory; exports.getWalletBalance = getWalletBalance; exports.convertTargetToDGN = convertTargetToDGN; exports.fetchPricesFromBinance = fetchPricesFromBinance; const apiCall_1 = require("../hooks/apiCall"); const axios_1 = __importDefault(require("axios")); // Default tokens configuration exports.DEFAULT_TOKENS = [ { name: "Bitcoin", symbol: "BTC", coingeckoId: "bitcoin", }, { name: "Ethereum", symbol: "ETH", coingeckoId: "ethereum", }, { name: "USDT", symbol: "USDT", coingeckoId: "tether", }, { name: "DGN", symbol: "DGN", coingeckoId: "solana", }, ]; // Fetch prices from CoinGecko API async function fetchPricesFromCoinGecko(tokens = exports.DEFAULT_TOKENS) { try { const ids = tokens.map((token) => token.coingeckoId).join(","); const response = await fetch(`https://api.coingecko.com/api/v3/simple/price?ids=${ids}&vs_currencies=usd&include_24hr_change=true`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); const priceMap = new Map(); Object.entries(data).forEach(([id, priceInfo]) => { priceMap.set(id, { price: priceInfo.usd || 0, change24h: priceInfo.usd_24h_change || 0, }); }); return priceMap; } catch (error) { console.error("Error fetching prices from CoinGecko:", error); return new Map(); } } // Convert DGN to target token function convertDGNToTarget(dgnAmount, priceMap, targetSymbol) { const dgnPriceUSD = priceMap.get("solana")?.price ?? 0; let targetPriceUSD = 0; switch (targetSymbol) { case "ETH": targetPriceUSD = priceMap.get("ethereum")?.price ?? 0; break; case "BTC": targetPriceUSD = priceMap.get("bitcoin")?.price ?? 0; break; case "USDT": targetPriceUSD = priceMap.get("tether")?.price ?? 0; break; } if (dgnPriceUSD === 0 || targetPriceUSD === 0) { return 0; } const dgnValueUSD = dgnAmount * dgnPriceUSD; return dgnValueUSD / targetPriceUSD; } // Execute trade order async function executeTradeOrder(order) { try { const response = await (0, apiCall_1.apiCall)("/trade/execute", "POST", order); return response; } catch (error) { console.error("Error executing trade order:", error); throw error; } } // Get trading history async function getTradingHistory() { try { const response = await (0, apiCall_1.apiCall)("/trade/history", "GET"); return response || []; } catch (error) { console.error("Error fetching trading history:", error); return []; } } // Get user wallet balance async function getWalletBalance() { try { const response = await (0, apiCall_1.apiCall)("/wallet/balance", "GET"); return response || {}; } catch (error) { console.error("Error fetching wallet balance:", error); return {}; } } // Convert target tokens to DGN function convertTargetToDGN(targetAmount, priceMap, fromSymbol) { const dgnPriceUSD = priceMap.get('solana')?.price ?? 0; let fromPriceUSD = 0; switch (fromSymbol) { case 'ETH': fromPriceUSD = priceMap.get('ethereum')?.price ?? 0; break; case 'BTC': fromPriceUSD = priceMap.get('bitcoin')?.price ?? 0; break; case 'USDT': fromPriceUSD = priceMap.get('tether')?.price ?? 0; break; default: throw new Error('Invalid source symbol'); } if (dgnPriceUSD === 0 || fromPriceUSD === 0) { throw new Error('Failed to get valid prices for conversion'); } const fromValueInUSD = targetAmount * fromPriceUSD; const dgnAmount = fromValueInUSD / dgnPriceUSD; return dgnAmount; } // Fetch prices from Binance API async function fetchPricesFromBinance() { const symbolMap = { bitcoin: 'BTCUSDT', ethereum: 'ETHUSDT', tether: 'USDTUSDT', // Binance does not provide USDT/USDT; you may skip or handle separately solana: 'SOLUSDT', }; const prices = {}; for (const token of exports.DEFAULT_TOKENS) { const symbol = symbolMap[token.coingeckoId]; if (!symbol || symbol === 'USDTUSDT') { // Optionally handle USDT as 1 USD constant prices[token.symbol] = 1; continue; } const url = `https://api.binance.com/api/v3/ticker/24hr?symbol=${symbol}`; const resp = await axios_1.default.get(url); const data = resp.data; prices[token.symbol] = parseFloat(data.lastPrice); } return prices; } //# sourceMappingURL=trade.js.map