/**
* Backend API Service
* Client for communicating with AegisAI backend
*/
import { API_CONFIG } from '../constants';
import type { AnalysisResponse, IncidentResponse, StatsResponse } from '../types';
const API_BASE = API_CONFIG.BASE_URL;
/**
* Analyze a frame using backend
* @param base64Image - Base64 encoded image
* @returns Analysis result
*/
export const analyzeFrameViaBackend = async (
base64Image: string
): Promise<AnalysisResponse | null> => {
try {
const response = await fetch(`${API_BASE}/api/analyze`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ image: base64Image })
});
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error('Backend analysis error:', error);
return null;
}
};
/**
* Get recent incidents from backend
*/
export const getIncidents = async (
limit = 50,
severity?: string
): Promise<IncidentResponse[]> => {
try {
const params = new URLSearchParams({ limit: limit.toString() });
if (severity) params.append('severity', severity);
const response = await fetch(`${API_BASE}/api/incidents?${params}`);
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
const data = await response.json();
return data.incidents || data;
} catch (error) {
console.error('Failed to fetch incidents:', error);
return [];
}
};
/**
* Get system statistics from backend
*/
export const getStats = async (): Promise<StatsResponse | null> => {
try {
const response = await fetch(`${API_BASE}/api/stats`);
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('Failed to fetch stats:', error);
return null;
}
};
/**
* Check backend health
*/
export const checkBackendHealth = async (): Promise<boolean> => {
try {
const response = await fetch(`${API_BASE}/health`, {
signal: AbortSignal.timeout(5000) // 5 second timeout
});
return response.ok;
} catch (error) {
console.error('Backend health check failed:', error);
return false;
}
};