| import axios from 'axios'; | |
| import { getApiUrl, getAdminApiKey } from '../config'; | |
| import { logger } from '../logger'; | |
| const AI_API_BASE_URL = getApiUrl().replace(/\/$/, ""); | |
| const apiKey = getAdminApiKey(); | |
| /** | |
| * Centralized Axios client for internal API communication (Edtech API). | |
| * Standardizes headers, timeouts, and error logging. | |
| */ | |
| export const apiClient = axios.create({ | |
| baseURL: AI_API_BASE_URL, | |
| timeout: 30000, // 30s timeout for AI operations | |
| headers: { | |
| 'Content-Type': 'application/json', | |
| 'Authorization': `Bearer ${apiKey}` | |
| } | |
| }); | |
| // Response interceptor for consistent error logging | |
| apiClient.interceptors.response.use( | |
| (response) => response, | |
| (error) => { | |
| const url = error.config?.url; | |
| const status = error.response?.status; | |
| const message = error.response?.data?.error || error.message; | |
| logger.error(`[API_CLIENT] Error calling ${url} (Status: ${status}): ${message}`); | |
| return Promise.reject(error); | |
| } | |
| ); | |