← back to Dw War Room
src/data/ApiClient.ts
79 lines
// ═══════════════════════════════════════════════
// DW War Room 3D — API Client
// Fetches from both Governance (4020) and Boardroom (4040)
// ═══════════════════════════════════════════════
import type { DecisionStats, EscalationAlert, GovernanceStatus, MeetingState } from '../types';
const GOV_URL = import.meta.env.VITE_GOVERNANCE_URL || 'http://45.61.58.125:4020';
const BR_URL = import.meta.env.VITE_BOARDROOM_URL || 'http://45.61.58.125:4040';
const AUTH = import.meta.env.VITE_AUTH || btoa('admin:DWSecure2024!');
const headers: Record<string, string> = {
'Content-Type': 'application/json',
'Authorization': `Basic ${AUTH}`,
};
async function fetchJson<T>(url: string): Promise<T> {
const res = await fetch(url, { headers });
if (!res.ok) throw new Error(`${res.status}`);
return res.json();
}
// Governance API (port 4020)
export async function getGovernanceStatus(): Promise<GovernanceStatus> {
return fetchJson<GovernanceStatus>(`${GOV_URL}/api/governance/status`);
}
export async function getDecisionStats(): Promise<DecisionStats> {
return fetchJson<DecisionStats>(`${GOV_URL}/api/decisions/stats`);
}
export async function getActiveEscalations(): Promise<EscalationAlert[]> {
return fetchJson<EscalationAlert[]>(`${GOV_URL}/api/escalations/active`);
}
export async function getPendingDecisions(): Promise<any[]> {
return fetchJson<any[]>(`${GOV_URL}/api/decisions?status=pending`);
}
// Boardroom API (port 4040)
export async function getBoardroomStatus(): Promise<any> {
return fetchJson<any>(`${BR_URL}/api/status`);
}
export async function getActiveMeeting(): Promise<MeetingState> {
const data = await fetchJson<any>(`${BR_URL}/api/meetings/active`);
return {
active: data.active,
id: data.meeting?.id,
type: data.meeting?.meeting_type,
phase: data.meeting?.phase,
status: data.meeting?.status,
messages: data.messages || [],
};
}
export async function getAgents(): Promise<any> {
return fetchJson<any>(`${BR_URL}/api/agents`);
}
export async function getTeams(): Promise<any> {
return fetchJson<any>(`${BR_URL}/api/agents/teams`);
}
// System health from boardroom proxy
export async function getSystemHealth(): Promise<any> {
return fetchJson<any>(`${BR_URL}/api/system-health`);
}
// Activity feed from boardroom proxy
export async function getFeed(): Promise<any[]> {
return fetchJson<any[]>(`${BR_URL}/api/feed`);
}
// Agent schedules / activity
export async function getAgentActivity(): Promise<any[]> {
return fetchJson<any[]>(`${BR_URL}/api/agent-activity`);
}