aegisai / frontend / src / services / apiServices.ts
apiServices.ts
Raw
/**
 * 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;
  }
};