/** * Configuration management for the MCP server * Handles environment variables and configuration loading */ export interface NASConfig { host?: string; username?: string; password?: string; protocol?: 'smb' | 'ftp' | 'sftp'; } export interface ServerConfig { host?: string; username?: string; port?: number; keyPath?: string; } export interface RouterConfig { host?: string; username?: string; password?: string; } export interface EmailConfig { host?: string; port?: number; user?: string; password?: string; from?: string; secure?: boolean; } export interface AppConfig { nas: NASConfig; server: ServerConfig; router: RouterConfig; email: EmailConfig; footballApiKey?: string; gameApiKey?: string; } class ConfigManager { private config: AppConfig; constructor() { this.config = this.loadConfig(); } private loadConfig(): AppConfig { return { nas: { host: process.env.NAS_HOST, username: process.env.NAS_USERNAME, password: process.env.NAS_PASSWORD, protocol: (process.env.NAS_PROTOCOL as 'smb' | 'ftp' | 'sftp') || 'smb', }, server: { host: process.env.SERVER_HOST, username: process.env.SERVER_USERNAME, port: process.env.SERVER_PORT ? parseInt(process.env.SERVER_PORT) : 22, keyPath: process.env.SERVER_KEY_PATH, }, router: { host: process.env.ROUTER_HOST, username: process.env.ROUTER_USERNAME, password: process.env.ROUTER_PASSWORD, }, email: { host: process.env.EMAIL_HOST, port: process.env.EMAIL_PORT ? parseInt(process.env.EMAIL_PORT) : 587, user: process.env.EMAIL_USER, password: process.env.EMAIL_PASSWORD, from: process.env.EMAIL_FROM, secure: process.env.EMAIL_SECURE === 'true', }, footballApiKey: process.env.FOOTBALL_API_KEY, gameApiKey: process.env.GAME_API_KEY, }; } getConfig(): AppConfig { return this.config; } getNASConfig(): NASConfig { return this.config.nas; } getServerConfig(): ServerConfig { return this.config.server; } getRouterConfig(): RouterConfig { return this.config.router; } getEmailConfig(): EmailConfig { return this.config.email; } reload(): void { this.config = this.loadConfig(); } } export const configManager = new ConfigManager();