import { NextResponse } from 'next/server'; import { getClients } from '@/lib/clients'; import { getInstruments } from '@/lib/db'; import { resolveContracts, getAllCachedContracts } from '@/lib/contract-resolver'; /** * GET /api/instruments/contracts * Returns cached resolved contracts (fast, no external calls). */ export async function GET() { return NextResponse.json(getAllCachedContracts()); } /** * POST /api/instruments/contracts * Triggers a fresh resolve of all enabled instruments via Tradovate + yfinance. * Returns the resolved contracts with volume data. */ export async function POST() { try { const clients = getClients(); // Find first client with a valid token let accessToken: string | null = null; for (const [, c] of clients) { const token = (c as any).accessInfo?.accessToken; if (token) { accessToken = token; break; } } if (!accessToken) { return NextResponse.json({ error: 'No authenticated client available' }, { status: 503 }); } const instruments = getInstruments().filter((i) => i.enabled); const symbols = instruments.map((i) => i.symbol); const resolved = await resolveContracts(symbols, accessToken); return NextResponse.json(resolved); } catch (err: any) { console.error('[POST /api/instruments/contracts]', err); return NextResponse.json({ error: err?.message ?? 'Resolve failed' }, { status: 500 }); } }