import { AxiosRequestConfig } from 'axios'; import { BaseService, ServiceConfig, ServiceResponse } from "./base-service.js"; export interface ExternalApiConfig extends ServiceConfig { baseURL?: string; apiKey?: string; headers?: Record; rateLimit?: { requests: number; windowMs: number; }; } export interface ApiRequest { url: string; method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'; data?: any; params?: Record; headers?: Record; } export interface RateLimitState { requests: number; windowStart: number; blocked: boolean; } export declare class ExternalApiService extends BaseService { private apiConfig; private client; private rateLimit?; private rateLimitState; constructor(apiConfig: ExternalApiConfig); /** * Make a GET request */ get(url: string, params?: Record, config?: AxiosRequestConfig): Promise>; /** * Make a POST request */ post(url: string, data?: any, config?: AxiosRequestConfig): Promise>; /** * Make a PUT request */ put(url: string, data?: any, config?: AxiosRequestConfig): Promise>; /** * Make a DELETE request */ delete(url: string, config?: AxiosRequestConfig): Promise>; /** * Generic request method */ private makeRequest; /** * Check rate limiting */ private checkRateLimit; /** * Sanitize request to prevent injection attacks */ private sanitizeRequest; /** * Sanitize HTTP headers */ private sanitizeHeaders; /** * Handle request interceptor */ private handleRequest; /** * Handle request error */ private handleRequestError; /** * Handle response interceptor */ private handleResponse; /** * Handle response error */ private handleResponseError; /** * Health check implementation */ healthCheck(): Promise; /** * Get rate limit status */ getRateLimitStatus(): { enabled: boolean; requests: number; limit: number; windowMs: number; blocked: boolean; resetTime?: number; }; /** * Reset rate limit (useful for testing) */ resetRateLimit(): void; /** * Update API configuration */ updateConfig(config: Partial): void; }