1 line
7.1 KiB
JSON
1 line
7.1 KiB
JSON
{"repo": "bzcasper/prompt-optimizer-2.0.0", "files": {"packages/mcp-server/src/config/environment.ts": {"d7fbd7b7daa5c7146292a53fd1c3dec47169d4f4": {"t": 1785745597.9248917, "n": 2989, "h": "5efc28446a0325a9", "c": "/**\n * 环境变量配置管理\n *\n * 注意:环境变量已通过 preload-env.js 在应用启动前加载\n * 这里的 config() 调用是备用加载机制\n */\n\nimport { config } from 'dotenv';\n\n// 备用环境变量加载(preload-env.js 已经处理了主要加载)\nconfig();\n\n// 导入共享常量\nconst CUSTOM_API_PATTERN = /^VITE_CUSTOM_API_(KEY|BASE_URL|MODEL)_(.+)$/;\nconst SUFFIX_PATTERN = /^[a-zA-Z0-9_-]+$/;\nconst MAX_SUFFIX_LENGTH = 50;\n\n/**\n * 扫描动态自定义模型环境变量\n * 查找 VITE_CUSTOM_API_*_suffix 模式的环境变量\n */\nfunction scanDynamicCustomEnvVars(): Record<string, string> {\n const dynamicMappings: Record<string, string> = {};\n\n // 使用共享的正则表达式模式\n const customApiPattern = CUSTOM_API_PATTERN;\n\n Object.keys(process.env).forEach(key => {\n const match = key.match(customApiPattern);\n if (match) {\n const [, configType, suffix] = match;\n\n // 验证后缀名(不能为空,不能包含特殊字符,不能超过长度限制)\n if (!suffix || suffix.length > MAX_SUFFIX_LENGTH || !SUFFIX_PATTERN.test(suffix)) {\n console.warn(`[MCP Environment] Invalid suffix in ${key}: ${suffix}`);\n return;\n }\n\n // 生成对应的MCP环境变量名(保持suffix原始大小写)\n const mcpKey = `CUSTOM_API_${configType}_${suffix}`;\n dynamicMappings[key] = mcpKey;\n }\n });\n\n console.log(`[MCP Environment] Found ${Object.keys(dynamicMappings).length} dynamic custom environment variables`);\n\n return dynamicMappings;\n}\n\n// 静态环境变量映射\nconst staticEnvMappings = {\n 'VITE_OPENAI_API_KEY': 'OPENAI_API_KEY',\n 'VITE_GEMINI_API_KEY': 'GEMINI_API_KEY',\n 'VITE_DEEPSEEK_API_KEY': 'DEEPSEEK_API_KEY',\n 'VITE_ZHIPU_API_KEY': 'ZHIPU_API_KEY',\n 'VITE_SILICONFLOW_API_KEY': 'SILICONFLOW_API_KEY',\n 'VITE_CUSTOM_API_KEY': 'CUSTOM_API_KEY',\n 'VITE_CUSTOM_API_BASE_URL': 'CUSTOM_API_BASE_URL',\n 'VITE_CUSTOM_API_MODEL': 'CUSTOM_API_MODEL'\n};\n\n// 动态环境变量映射\nconst dynamicEnvMappings = scanDynamicCustomEnvVars();\n\n// 合并所有环境变量映射\nconst allEnvMappings = {\n ...staticEnvMappings,\n ...dynamicEnvMappings\n};\n\n// 执行环境变量映射\nObject.entries(allEnvMappings).forEach(([viteKey, mcpKey]) => {\n if (process.env[viteKey] && !process.env[mcpKey]) {\n process.env[mcpKey] = process.env[viteKey];\n console.log(`[MCP Environment] Mapped ${viteKey} -> ${mcpKey}`);\n }\n});\n\nexport interface MCPServerConfig {\n httpPort: number;\n logLevel: 'debug' | 'info' | 'warn' | 'error';\n defaultLanguage: string;\n preferredModelProvider?: string;\n}\n\nexport function loadConfig(): MCPServerConfig {\n return {\n httpPort: parseInt(process.env.MCP_HTTP_PORT || '3000'),\n logLevel: (process.env.MCP_LOG_LEVEL as 'debug' | 'info' | 'warn' | 'error') || 'debug',\n defaultLanguage: process.env.MCP_DEFAULT_LANGUAGE || 'zh',\n preferredModelProvider: process.env.MCP_DEFAULT_MODEL_PROVIDER\n };\n}\n\nexport function validateConfig(config: MCPServerConfig): void {\n if (config.httpPort < 1 || config.httpPort > 65535) {\n throw new Error('HTTP port must be between 1 and 65535');\n }\n\n const validLogLevels = ['debug', 'info', 'warn', 'error'];\n if (!validLogLevels.includes(config.logLevel)) {\n throw new Error(`Log level must be one of: ${validLogLevels.join(', ')}`);\n }\n}\n"}, "088af1706cadd1c355e6114abac15b3ca7746083": {"t": 1785754637.6079466, "n": 2989, "h": "5efc28446a0325a9", "c": "/**\n * 环境变量配置管理\n *\n * 注意:环境变量已通过 preload-env.js 在应用启动前加载\n * 这里的 config() 调用是备用加载机制\n */\n\nimport { config } from 'dotenv';\n\n// 备用环境变量加载(preload-env.js 已经处理了主要加载)\nconfig();\n\n// 导入共享常量\nconst CUSTOM_API_PATTERN = /^VITE_CUSTOM_API_(KEY|BASE_URL|MODEL)_(.+)$/;\nconst SUFFIX_PATTERN = /^[a-zA-Z0-9_-]+$/;\nconst MAX_SUFFIX_LENGTH = 50;\n\n/**\n * 扫描动态自定义模型环境变量\n * 查找 VITE_CUSTOM_API_*_suffix 模式的环境变量\n */\nfunction scanDynamicCustomEnvVars(): Record<string, string> {\n const dynamicMappings: Record<string, string> = {};\n\n // 使用共享的正则表达式模式\n const customApiPattern = CUSTOM_API_PATTERN;\n\n Object.keys(process.env).forEach(key => {\n const match = key.match(customApiPattern);\n if (match) {\n const [, configType, suffix] = match;\n\n // 验证后缀名(不能为空,不能包含特殊字符,不能超过长度限制)\n if (!suffix || suffix.length > MAX_SUFFIX_LENGTH || !SUFFIX_PATTERN.test(suffix)) {\n console.warn(`[MCP Environment] Invalid suffix in ${key}: ${suffix}`);\n return;\n }\n\n // 生成对应的MCP环境变量名(保持suffix原始大小写)\n const mcpKey = `CUSTOM_API_${configType}_${suffix}`;\n dynamicMappings[key] = mcpKey;\n }\n });\n\n console.log(`[MCP Environment] Found ${Object.keys(dynamicMappings).length} dynamic custom environment variables`);\n\n return dynamicMappings;\n}\n\n// 静态环境变量映射\nconst staticEnvMappings = {\n 'VITE_OPENAI_API_KEY': 'OPENAI_API_KEY',\n 'VITE_GEMINI_API_KEY': 'GEMINI_API_KEY',\n 'VITE_DEEPSEEK_API_KEY': 'DEEPSEEK_API_KEY',\n 'VITE_ZHIPU_API_KEY': 'ZHIPU_API_KEY',\n 'VITE_SILICONFLOW_API_KEY': 'SILICONFLOW_API_KEY',\n 'VITE_CUSTOM_API_KEY': 'CUSTOM_API_KEY',\n 'VITE_CUSTOM_API_BASE_URL': 'CUSTOM_API_BASE_URL',\n 'VITE_CUSTOM_API_MODEL': 'CUSTOM_API_MODEL'\n};\n\n// 动态环境变量映射\nconst dynamicEnvMappings = scanDynamicCustomEnvVars();\n\n// 合并所有环境变量映射\nconst allEnvMappings = {\n ...staticEnvMappings,\n ...dynamicEnvMappings\n};\n\n// 执行环境变量映射\nObject.entries(allEnvMappings).forEach(([viteKey, mcpKey]) => {\n if (process.env[viteKey] && !process.env[mcpKey]) {\n process.env[mcpKey] = process.env[viteKey];\n console.log(`[MCP Environment] Mapped ${viteKey} -> ${mcpKey}`);\n }\n});\n\nexport interface MCPServerConfig {\n httpPort: number;\n logLevel: 'debug' | 'info' | 'warn' | 'error';\n defaultLanguage: string;\n preferredModelProvider?: string;\n}\n\nexport function loadConfig(): MCPServerConfig {\n return {\n httpPort: parseInt(process.env.MCP_HTTP_PORT || '3000'),\n logLevel: (process.env.MCP_LOG_LEVEL as 'debug' | 'info' | 'warn' | 'error') || 'debug',\n defaultLanguage: process.env.MCP_DEFAULT_LANGUAGE || 'zh',\n preferredModelProvider: process.env.MCP_DEFAULT_MODEL_PROVIDER\n };\n}\n\nexport function validateConfig(config: MCPServerConfig): void {\n if (config.httpPort < 1 || config.httpPort > 65535) {\n throw new Error('HTTP port must be between 1 and 65535');\n }\n\n const validLogLevels = ['debug', 'info', 'warn', 'error'];\n if (!validLogLevels.includes(config.logLevel)) {\n throw new Error(`Log level must be one of: ${validLogLevels.join(', ')}`);\n }\n}\n"}}}} |