Mohanp76's picture
Deploy project
5545e4d
Raw
History Blame Contribute Delete
1.74 kB
// 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<T>(path: string): Promise<T> {
const r = await fetch(path);
if (!r.ok) throw new Error(`${path} failed: ${r.status}`);
return r.json() as Promise<T>;
}
export function getTraders(): Promise<TraderInfo[]> {
return get("/api/traders");
}
export function getTrader(name: string): Promise<TraderDetail> {
return get(`/api/traders/${encodeURIComponent(name)}`);
}
export function getTraderLogs(name: string, lastN = 13): Promise<LogRow[]> {
return get(`/api/traders/${encodeURIComponent(name)}/logs?last_n=${lastN}`);
}
export function getMarket(): Promise<MarketInfo> {
return get("/api/market");
}