import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'; import { ApiResponse } from '@stock-bot/types'; /** * Base API client that all service clients extend */ export abstract class BaseApiClient { protected client: AxiosInstance; constructor(baseURL: string, config?: AxiosRequestConfig) { this.client = axios.create({ baseURL, timeout: 10000, // 10 seconds timeout ...config }); // Add response interceptor for consistent error handling this.client.interceptors.response.use( (response) => response.data, (error) => { // Format error for consistent error handling const formattedError = { status: error.response?.status || 500, message: error.response?.data?.error || error.message || 'Unknown error', originalError: error }; return Promise.reject(formattedError); } ); } /** * Get the health status of a service */ async getHealth(): Promise> { return this.client.get('/api/health'); } }