// Client for the trading floor HTTP API. All paths are relative; in dev the Vite // proxy forwards /api to the FastAPI backend, so the browser sees one origin. export interface TraderInfo { name: string; lastname: string; model_name: string; } export interface Holding { symbol: string; quantity: number; price: number; avg_cost: number; market_value: number; unrealized_pnl: number; } export interface Transaction { symbol: string; quantity: number; price: number; timestamp: string; rationale: string; } export interface TimePoint { datetime: string; value: number; } // Mirrors the full backend payload; the dashboard renders a subset of these fields. export interface TraderDetail extends TraderInfo { balance: number; strategy: string; portfolio_value: number; pnl: number; holdings: Holding[]; transactions: Transaction[]; time_series: TimePoint[]; } export interface LogRow { datetime: string; type: string; message: string; color: string; } export interface MarketInfo { source: "massive" | "simulator"; is_market_open: boolean; } async function get(path: string): Promise { const r = await fetch(path); if (!r.ok) throw new Error(`${path} failed: ${r.status}`); return r.json() as Promise; } export function getTraders(): Promise { return get("/api/traders"); } export function getTrader(name: string): Promise { return get(`/api/traders/${encodeURIComponent(name)}`); } export function getTraderLogs(name: string, lastN = 13): Promise { return get(`/api/traders/${encodeURIComponent(name)}/logs?last_n=${lastN}`); } export function getMarket(): Promise { return get("/api/market"); }