nexus-react-core
Version:
A comprehensive React toolkit with services, hooks, and Redux store management
163 lines • 5.37 kB
JavaScript
;
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