Files
cloud-mcp/src/storage/config.ts
2026-01-06 17:35:52 +08:00

88 lines
1.8 KiB
TypeScript

/**
* 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 AppConfig {
nas: NASConfig;
server: ServerConfig;
router: RouterConfig;
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,
},
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;
}
reload(): void {
this.config = this.loadConfig();
}
}
export const configManager = new ConfigManager();