survey-mcp-server
Version:
Survey management server handling survey creation, response collection, analysis, and reporting with database access for data management
81 lines (80 loc) • 2.16 kB
TypeScript
import { BaseService, ServiceConfig, HealthCheckResult } from './base.js';
declare module 'axios' {
interface InternalAxiosRequestConfig {
metadata?: {
startTime: number;
endTime: number;
};
}
interface AxiosRequestConfig {
metadata?: {
startTime: number;
endTime?: number;
};
}
}
export interface ApiEndpoint {
name: string;
baseUrl: string;
timeout?: number;
retryConfig?: {
maxAttempts: number;
baseDelay: number;
};
headers?: Record<string, string>;
rateLimit?: {
requestsPerMinute: number;
burstSize: number;
};
}
export interface ApiRequest {
endpoint: string;
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
path: string;
data?: any;
params?: Record<string, any>;
headers?: Record<string, string>;
timeout?: number;
skipSecurityCheck?: boolean;
}
export interface ApiResponse<T = any> {
data: T;
status: number;
statusText: string;
headers: Record<string, string>;
responseTime: number;
}
export interface RateLimitState {
requests: number[];
lastRequest: Date;
}
export declare class ExternalApiService extends BaseService {
private endpoints;
private clients;
private rateLimitStates;
private requestCount;
private errorCount;
constructor(config?: Partial<ServiceConfig>);
private initializeEndpoints;
registerEndpoint(endpoint: ApiEndpoint): void;
protected performHealthCheck(): Promise<HealthCheckResult>;
private checkEndpointHealth;
makeRequest<T = any>(request: ApiRequest): Promise<ApiResponse<T>>;
private checkRateLimit;
private isRetryableError;
private sanitizeHeaders;
getEndpointStats(): {
[endpointName: string]: any;
};
getServiceStats(): {
requestCount: number;
errorCount: number;
successRate: number;
endpoints: string[];
endpointStats: {
[endpointName: string]: any;
};
};
shutdown(): Promise<void>;
}
export declare const externalApiService: ExternalApiService;