From befe860188335c8cc9656da96a7117999da60a71 Mon Sep 17 00:00:00 2001 From: mindesbunister Date: Wed, 16 Jul 2025 16:24:26 +0200 Subject: [PATCH] Fix API URL handling for Docker deployment - Replace hardcoded localhost URLs with dynamic host detection from request headers - Supports both development (localhost:3001) and Docker (localhost:9000 -> 3000) environments - Uses host header to determine correct protocol and port for internal API calls - Updated execute-dex, validate, and orders APIs to use dynamic baseUrl - Ensures proper API communication in containerized environments --- app/api/trading/execute-dex/route.js | 9 +++++++-- app/api/trading/orders/route.js | 7 ++++++- app/api/trading/validate/route.js | 7 ++++++- test-trade-validation.js | 8 ++++++-- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/app/api/trading/execute-dex/route.js b/app/api/trading/execute-dex/route.js index 118c478..ddac9f9 100644 --- a/app/api/trading/execute-dex/route.js +++ b/app/api/trading/execute-dex/route.js @@ -18,6 +18,11 @@ export async function POST(request) { toCoin } = body + // Get the base URL from the request + const host = request.headers.get('host') || 'localhost:3000' + const protocol = host.includes('localhost') ? 'http' : 'https' + const baseUrl = `${protocol}://${host}` + console.log('๐Ÿ”„ Execute DEX trade request:', { symbol, side, @@ -66,7 +71,7 @@ export async function POST(request) { console.log('๐Ÿ” Validating wallet balance before DEX trade...') try { - const validationResponse = await fetch(`${process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3000'}/api/trading/validate`, { + const validationResponse = await fetch(`${baseUrl}/api/trading/validate`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ @@ -197,7 +202,7 @@ export async function POST(request) { // Add trade to history with clear spot swap indication try { // Use localhost for internal container communication - await fetch('http://localhost:3001/api/trading/history', { + await fetch(`${baseUrl}/api/trading/history`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ diff --git a/app/api/trading/orders/route.js b/app/api/trading/orders/route.js index 9510e41..ccaff98 100644 --- a/app/api/trading/orders/route.js +++ b/app/api/trading/orders/route.js @@ -106,6 +106,11 @@ export async function POST(request) { const body = await request.json() const { action, orderId, ...orderData } = body + // Get the base URL from the request + const host = request.headers.get('host') || 'localhost:3000' + const protocol = host.includes('localhost') ? 'http' : 'https' + const baseUrl = `${protocol}://${host}` + if (action === 'add') { // Load existing orders const pendingOrders = loadPendingOrders() @@ -187,7 +192,7 @@ export async function POST(request) { try { // Execute the trade by calling the trading API - const tradeResponse = await fetch('http://localhost:3000/api/trading', { + const tradeResponse = await fetch(`${baseUrl}/api/trading`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ diff --git a/app/api/trading/validate/route.js b/app/api/trading/validate/route.js index 379879e..ce8463c 100644 --- a/app/api/trading/validate/route.js +++ b/app/api/trading/validate/route.js @@ -7,10 +7,15 @@ export async function POST(request) { console.log(`๐Ÿ” Validating trade: ${side} ${amount} ${symbol} (USD: ${amountUSD})`) + // Get the base URL from the request or use localhost for development + const host = request.headers.get('host') || 'localhost:3000' + const protocol = host.includes('localhost') ? 'http' : 'https' + const baseUrl = `${protocol}://${host}` + // Fetch real wallet balance from the wallet API let walletBalance try { - const walletResponse = await fetch(`${process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3000'}/api/wallet/balance`) + const walletResponse = await fetch(`${baseUrl}/api/wallet/balance`) const walletData = await walletResponse.json() if (walletData.success && walletData.wallet) { diff --git a/test-trade-validation.js b/test-trade-validation.js index e693eb0..2b77198 100644 --- a/test-trade-validation.js +++ b/test-trade-validation.js @@ -2,6 +2,9 @@ const testTradeValidation = async () => { console.log('๐Ÿงช Testing trade validation with fixed amountUSD...') + // Use port 9000 for Docker or 3001 for local dev + const apiUrl = process.env.DOCKER_MODE ? 'http://localhost:9000' : 'http://localhost:3001' + const tradeData = { symbol: 'USDCUSD', side: 'BUY', @@ -11,10 +14,11 @@ const testTradeValidation = async () => { tradingPair: 'USDCUSD/USDC' } - console.log('๐Ÿš€ Sending test trade:', tradeData) + console.log('๐Ÿš€ Sending test trade to:', apiUrl) + console.log('๐Ÿš€ Trade data:', tradeData) try { - const response = await fetch('http://localhost:3001/api/trading/execute-dex', { + const response = await fetch(`${apiUrl}/api/trading/execute-dex`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(tradeData)