import Alpaca from "@alpacahq/alpaca-trade-api"; const alpaca = new Alpaca({ keyId: process.env.ALPACA_API_KEY!, secretKey: process.env.ALPACA_SECRET_KEY!, baseUrl: process.env.ALPACA_BASE_URL || "https://paper-api.alpaca.markets", dataBaseUrl: process.env.ALPACA_DATA_URL || "https://data.alpaca.markets", retryOnError: false, }); export async function loader({ request }: { request: Request }) { const url = new URL(request.url); const ticker = url.searchParams.get("ticker")?.toUpperCase() || "AAPL"; try { // Test different timeframes const timeframes = ["1Day", "1Min", "5Min"]; const results: any = {}; for (const tf of timeframes) { try { console.log(`test-alpaca: testing ${ticker} with timeframe ${tf}`); const bars = await alpaca.getBarsV2(ticker, { timeframe: tf as any, limit: 3, }); const barsArray = []; for await (const bar of bars) { barsArray.push(bar); } results[tf] = { count: barsArray.length, sample: barsArray[0] }; console.log(`test-alpaca: ${tf} -> ${barsArray.length} bars`); } catch (e) { results[tf] = { error: e instanceof Error ? e.message : String(e) }; } } // Test popular stocks const symbols = ["AAPL", "MSFT", "SPY", "QQQ"]; const symbolResults: any = {}; const startDate = new Date(); startDate.setDate(startDate.getDate() - 30); const start = startDate.toISOString().split('T')[0]; for (const sym of symbols) { try { const bars = await alpaca.getBarsV2(sym, { timeframe: "1D", limit: 3, start, }); const barsArray = []; for await (const bar of bars) barsArray.push(bar); symbolResults[sym] = barsArray.length; } catch (e) { symbolResults[sym] = e instanceof Error ? e.message : String(e); } } return Response.json({ ticker, timeframeResults: results, symbolResults, }); } catch (error) { console.error("test-alpaca error:", error); return Response.json({ error: error instanceof Error ? error.message : String(error), ticker }, { status: 500 }); } }