deepsource-mcp-server
Version:
Model Context Protocol server for DeepSource
80 lines • 2.39 kB
JavaScript
/**
* @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