deepsource-mcp-server
Version:
Model Context Protocol server for DeepSource
153 lines • 4.71 kB
JavaScript
/**
* @fileoverview Default configuration values for the DeepSource MCP server
*
* This module centralizes all default configuration values, providing
* a single source of truth for server settings and constants.
*
* @packageDocumentation
*/
import { VERSION } from '../version.js';
/**
* Default server configuration
*/
export const DEFAULT_SERVER_CONFIG = {
name: 'deepsource-mcp-server',
version: VERSION,
autoRegisterTools: true,
autoStart: false,
logLevel: 'INFO',
};
/**
* Default API configuration
*/
export const DEFAULT_API_CONFIG = {
baseUrl: 'https://api.deepsource.io/graphql',
timeout: 30000,
maxRetries: 3,
retryBaseDelay: 1000,
};
/**
* Default tool discovery configuration
*/
export const DEFAULT_DISCOVERY_CONFIG = {
directories: ['./src/tools', './plugins'],
patterns: ['*.tool.js', '*.tool.mjs'],
recursive: true,
includeCategories: [],
excludeCategories: [],
includeTags: [],
excludeTags: ['deprecated', 'experimental'],
};
/**
* Environment-specific discovery configuration
*/
export const DISCOVERY_CONFIG_BY_ENV = {
production: {
excludeTags: ['deprecated', 'experimental', 'development', 'test'],
includeCategories: ['core', 'analytics', 'security', 'compliance'],
},
development: {
excludeTags: ['deprecated'],
directories: ['./src/tools', './plugins', './src/tools/dev'],
},
test: {
directories: ['./src/tools/test'],
excludeTags: [],
},
};
/**
* Tool categories enum
*/
export var ToolCategory;
(function (ToolCategory) {
ToolCategory["CORE"] = "core";
ToolCategory["ANALYTICS"] = "analytics";
ToolCategory["SECURITY"] = "security";
ToolCategory["COMPLIANCE"] = "compliance";
ToolCategory["UTILITIES"] = "utilities";
ToolCategory["DEVELOPMENT"] = "development";
ToolCategory["EXPERIMENTAL"] = "experimental";
})(ToolCategory || (ToolCategory = {}));
/**
* Tool tags enum
*/
export var ToolTag;
(function (ToolTag) {
ToolTag["STABLE"] = "stable";
ToolTag["BETA"] = "beta";
ToolTag["ALPHA"] = "alpha";
ToolTag["DEPRECATED"] = "deprecated";
ToolTag["EXPERIMENTAL"] = "experimental";
ToolTag["DEVELOPMENT"] = "development";
ToolTag["TEST"] = "test";
})(ToolTag || (ToolTag = {}));
/**
* Get configuration for the current environment
*
* @param env - Environment name (defaults to NODE_ENV or 'development')
* @returns Merged configuration for the environment
*/
export function getEnvironmentConfig(env) {
const environment = env || process.env.NODE_ENV || 'development';
return {
server: DEFAULT_SERVER_CONFIG,
api: DEFAULT_API_CONFIG,
discovery: {
...DEFAULT_DISCOVERY_CONFIG,
...(DISCOVERY_CONFIG_BY_ENV[environment] || {}),
},
};
}
/**
* Validation thresholds for configuration
*/
export const CONFIG_VALIDATION = {
/** Minimum timeout in milliseconds */
MIN_TIMEOUT: 1000,
/** Maximum timeout in milliseconds */
MAX_TIMEOUT: 300000,
/** Minimum retry attempts */
MIN_RETRIES: 0,
/** Maximum retry attempts */
MAX_RETRIES: 10,
/** Valid log levels */
VALID_LOG_LEVELS: ['DEBUG', 'INFO', 'WARN', 'ERROR'],
};
/**
* Validate server configuration
*
* @param config - Configuration to validate
* @throws Error if configuration is invalid
*/
export function validateServerConfig(config) {
if (config.logLevel && !CONFIG_VALIDATION.VALID_LOG_LEVELS.includes(config.logLevel)) {
throw new Error(`Invalid log level: ${config.logLevel}`);
}
if (config.name && config.name.trim().length === 0) {
throw new Error('Server name cannot be empty');
}
}
/**
* Validate API configuration
*
* @param config - Configuration to validate
* @throws Error if configuration is invalid
*/
export function validateApiConfig(config) {
if (config.timeout !== undefined) {
if (config.timeout < CONFIG_VALIDATION.MIN_TIMEOUT ||
config.timeout > CONFIG_VALIDATION.MAX_TIMEOUT) {
throw new Error(`Timeout must be between ${CONFIG_VALIDATION.MIN_TIMEOUT} and ${CONFIG_VALIDATION.MAX_TIMEOUT}`);
}
}
if (config.maxRetries !== undefined) {
if (config.maxRetries < CONFIG_VALIDATION.MIN_RETRIES ||
config.maxRetries > CONFIG_VALIDATION.MAX_RETRIES) {
throw new Error(`Max retries must be between ${CONFIG_VALIDATION.MIN_RETRIES} and ${CONFIG_VALIDATION.MAX_RETRIES}`);
}
}
if (config.baseUrl && !config.baseUrl.startsWith('http')) {
throw new Error('API base URL must start with http:// or https://');
}
}
//# sourceMappingURL=default.js.map