finops-mcp-server
Version:
MCP server for FinOps Center cost optimization integration
260 lines • 6.78 kB
TypeScript
/**
* Configuration and Utility Type Definitions
*
* This file contains TypeScript type definitions for server configuration,
* command-line options, error response types, and logging interfaces.
*/
export interface ServerConfig {
apiUrl: string;
apiKey: string;
customerId?: string;
environment?: string;
timeout?: number;
retryAttempts?: number;
logLevel?: LogLevel;
maxConcurrentRequests?: number;
requestQueueSize?: number;
cacheEnabled?: boolean;
cacheTTL?: number;
validateSSL?: boolean;
allowedOrigins?: string[];
rateLimitEnabled?: boolean;
rateLimitRequests?: number;
rateLimitWindow?: number;
}
export interface CommandLineArgs {
"api-url"?: string;
"api-key"?: string;
"customer-id"?: string;
environment?: string;
timeout?: number;
"retry-attempts"?: number;
"log-level"?: string;
"max-concurrent-requests"?: number;
"cache-enabled"?: boolean;
"cache-ttl"?: number;
"validate-ssl"?: boolean;
"rate-limit-enabled"?: boolean;
"rate-limit-requests"?: number;
"rate-limit-window"?: number;
stdio?: boolean;
help?: boolean;
version?: boolean;
}
export interface EnvironmentConfig {
name: string;
apiUrl: string;
description?: string;
timeout?: number;
retryAttempts?: number;
rateLimitRequests?: number;
rateLimitWindow?: number;
}
export interface EnvironmentConfigs {
development: EnvironmentConfig;
staging: EnvironmentConfig;
production: EnvironmentConfig;
[key: string]: EnvironmentConfig;
}
export declare enum LogLevel {
DEBUG = "debug",
INFO = "info",
WARN = "warn",
ERROR = "error",
SILENT = "silent"
}
export interface LoggerConfig {
level: LogLevel;
format: "json" | "text";
timestamp: boolean;
correlationId: boolean;
redactSensitive: boolean;
outputFile?: string;
maxFileSize?: number;
maxFiles?: number;
}
export interface ErrorResponse {
error: {
code: string;
message: string;
details?: any;
timestamp?: string;
correlationId?: string;
stack?: string;
};
}
export interface ValidationErrorResponse extends ErrorResponse {
error: {
code: "VALIDATION_ERROR";
message: string;
details: {
field: string;
value: any;
constraint: string;
expected?: string;
}[];
timestamp: string;
correlationId?: string;
};
}
export interface AuthenticationErrorResponse extends ErrorResponse {
error: {
code: "AUTHENTICATION_ERROR" | "AUTHORIZATION_ERROR";
message: string;
details?: {
reason: string;
suggestion?: string;
};
timestamp: string;
correlationId?: string;
};
}
export interface NetworkErrorResponse extends ErrorResponse {
error: {
code: "NETWORK_ERROR" | "TIMEOUT_ERROR" | "CONNECTION_ERROR";
message: string;
details?: {
url?: string;
method?: string;
statusCode?: number;
retryAttempt?: number;
};
timestamp: string;
correlationId?: string;
};
}
export interface Logger {
debug(message: string, meta?: LogMeta): void;
info(message: string, meta?: LogMeta): void;
warn(message: string, meta?: LogMeta): void;
error(message: string, error?: Error, meta?: LogMeta): void;
child(meta: LogMeta): Logger;
}
export interface LogMeta {
correlationId?: string;
userId?: string;
operation?: string;
duration?: number;
statusCode?: number;
url?: string;
method?: string;
[key: string]: any;
}
export interface LogEntry {
timestamp: string;
level: LogLevel;
message: string;
meta?: LogMeta;
error?: {
name: string;
message: string;
stack?: string;
};
}
export interface PerformanceMetrics {
requestCount: number;
errorCount: number;
averageResponseTime: number;
p95ResponseTime: number;
p99ResponseTime: number;
successRate: number;
lastResetTime: string;
}
export interface OperationMetrics {
operation: string;
count: number;
totalDuration: number;
averageDuration: number;
minDuration: number;
maxDuration: number;
errorCount: number;
lastExecuted: string;
}
export interface HealthCheck {
name: string;
status: "healthy" | "unhealthy" | "degraded";
message?: string;
duration?: number;
timestamp: string;
details?: Record<string, any>;
}
export interface HealthStatus {
status: "healthy" | "unhealthy" | "degraded";
timestamp: string;
uptime: number;
version: string;
checks: HealthCheck[];
metrics?: PerformanceMetrics;
}
export interface ConfigValidationRule {
field: string;
required: boolean;
type: "string" | "number" | "boolean" | "array" | "object";
validator?: (value: any) => boolean;
errorMessage?: string;
}
export interface ConfigValidationResult {
isValid: boolean;
errors: Array<{
field: string;
message: string;
value?: any;
}>;
}
export interface RetryConfig {
attempts: number;
delay: number;
backoffFactor: number;
maxDelay: number;
retryCondition?: (error: Error) => boolean;
}
export interface CacheConfig {
enabled: boolean;
ttl: number;
maxSize: number;
keyPrefix?: string;
}
export interface RateLimitConfig {
enabled: boolean;
requests: number;
window: number;
skipSuccessfulRequests?: boolean;
skipFailedRequests?: boolean;
}
export type ConfigKey = keyof ServerConfig;
export type RequiredConfig = Pick<ServerConfig, "apiUrl" | "apiKey">;
export type OptionalConfig = Partial<Omit<ServerConfig, "apiUrl" | "apiKey">>;
export interface DefaultConfig {
timeout: number;
retryAttempts: number;
logLevel: LogLevel;
maxConcurrentRequests: number;
requestQueueSize: number;
cacheEnabled: boolean;
cacheTTL: number;
validateSSL: boolean;
rateLimitEnabled: boolean;
rateLimitRequests: number;
rateLimitWindow: number;
}
export interface ConfigBuilder {
fromCommandLine(args: CommandLineArgs): ConfigBuilder;
fromEnvironment(env: string): ConfigBuilder;
withDefaults(defaults?: Partial<ServerConfig>): ConfigBuilder;
validate(): ConfigValidationResult;
build(): ServerConfig;
}
export interface StartupConfig {
server: ServerConfig;
logger: LoggerConfig;
performance: {
metricsEnabled: boolean;
metricsInterval: number;
};
health: {
enabled: boolean;
endpoint?: string;
interval: number;
};
}
//# sourceMappingURL=config.d.ts.map