UNPKG

deepsource-mcp-server

Version:
80 lines 2.39 kB
/** * @fileoverview Configuration management for DeepSource MCP Server * @packageDocumentation */ import { createLogger } from '../utils/logging/logger.js'; const logger = createLogger('DeepSourceMCP:Config'); /** * Default configuration values */ const defaultConfig = { apiBaseUrl: 'https://api.deepsource.io/graphql/', requestTimeout: 30000, logLevel: 'DEBUG', }; /** * Validates the configuration * @throws Error if configuration is invalid */ function validateConfig(config) { if (!config.apiKey) { throw new Error('DEEPSOURCE_API_KEY environment variable is not set'); } // Validate timeout is a positive number if (config.requestTimeout && (typeof config.requestTimeout !== 'number' || config.requestTimeout <= 0)) { throw new Error('Request timeout must be a positive number'); } return config; } /** * Loads configuration from environment variables */ function loadConfigFromEnv() { return { apiKey: process.env.DEEPSOURCE_API_KEY, apiBaseUrl: process.env.DEEPSOURCE_API_BASE_URL, requestTimeout: process.env.DEEPSOURCE_REQUEST_TIMEOUT ? parseInt(process.env.DEEPSOURCE_REQUEST_TIMEOUT, 10) : undefined, logFile: process.env.LOG_FILE, logLevel: process.env.LOG_LEVEL, }; } /** * Gets the current configuration * @returns The validated configuration * @throws Error if configuration is invalid */ export function getConfig() { const envConfig = loadConfigFromEnv(); // Merge with defaults const mergedConfig = { ...defaultConfig, ...Object.fromEntries(Object.entries(envConfig).filter(([, value]) => value !== undefined)), }; logger.debug('Loading configuration', { hasApiKey: Boolean(mergedConfig.apiKey), apiBaseUrl: mergedConfig.apiBaseUrl, requestTimeout: mergedConfig.requestTimeout, logLevel: mergedConfig.logLevel, }); return validateConfig(mergedConfig); } /** * Checks if the API key is configured * @returns True if API key is set */ export function hasApiKey() { return Boolean(process.env.DEEPSOURCE_API_KEY); } /** * Gets the API key from configuration * @returns The API key * @throws Error if API key is not set */ export function getApiKey() { const config = getConfig(); return config.apiKey; } //# sourceMappingURL=index.js.map