Skip to main content
Glama
HealthEndpointConfig.ts3.01 kB
/** * サービス初期化の定数定義 */ const DEFAULT_POLLING_INTERVAL = 100; // ms const DEFAULT_DEPENDENCY_TIMEOUT = 5000; // ms export interface HealthEndpointConfig { port: number; host: string; enabled: boolean; path: string; } export interface ServerConfig { healthEndpoint: HealthEndpointConfig; healthCheckInterval: number; dependencyTimeout: number; pollingInterval: number; } export class ConfigValidator { private static validatePort(port: number): number { if (!Number.isInteger(port) || port < 1 || port > 65535) { throw new Error(`Invalid port number: ${port}. Must be between 1 and 65535`); } return port; } private static validateHost(host: string): string { if (!host || typeof host !== 'string' || host.trim().length === 0) { throw new Error(`Invalid host: ${host}. Must be a non-empty string`); } return host.trim(); } private static validatePath(path: string): string { if (!path || typeof path !== 'string' || !path.startsWith('/')) { throw new Error(`Invalid path: ${path}. Must start with '/'`); } return path; } private static validateInterval(interval: number, name: string): number { if (!Number.isInteger(interval) || interval < 100) { throw new Error(`Invalid ${name}: ${interval}. Must be at least 100ms`); } return interval; } public static validateHealthEndpointConfig(env: NodeJS.ProcessEnv): HealthEndpointConfig { const rawPort = env.HEALTH_PORT || '8080'; const port = parseInt(rawPort, 10); if (isNaN(port)) { throw new Error(`Invalid HEALTH_PORT value: ${rawPort}. Must be a valid number`); } return { port: this.validatePort(port), host: this.validateHost(env.HEALTH_HOST || '127.0.0.1'), enabled: env.HEALTH_ENDPOINT === 'true', path: this.validatePath(env.HEALTH_PATH || '/health') }; } public static validateServerConfig(env: NodeJS.ProcessEnv): ServerConfig { const healthCheckInterval = parseInt(env.HEALTH_CHECK_INTERVAL || '30000', 10); const dependencyTimeout = parseInt(env.DEPENDENCY_TIMEOUT || DEFAULT_DEPENDENCY_TIMEOUT.toString(), 10); const pollingInterval = parseInt(env.POLLING_INTERVAL || DEFAULT_POLLING_INTERVAL.toString(), 10); if (isNaN(healthCheckInterval)) { throw new Error(`Invalid HEALTH_CHECK_INTERVAL: ${env.HEALTH_CHECK_INTERVAL}`); } if (isNaN(dependencyTimeout)) { throw new Error(`Invalid DEPENDENCY_TIMEOUT: ${env.DEPENDENCY_TIMEOUT}`); } if (isNaN(pollingInterval)) { throw new Error(`Invalid POLLING_INTERVAL: ${env.POLLING_INTERVAL}`); } return { healthEndpoint: this.validateHealthEndpointConfig(env), healthCheckInterval: this.validateInterval(healthCheckInterval, 'healthCheckInterval'), dependencyTimeout: this.validateInterval(dependencyTimeout, 'dependencyTimeout'), pollingInterval: this.validateInterval(pollingInterval, 'pollingInterval') }; } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/masamunet/npm-dev-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server