UNPKG

mcp-swagger-parser

Version:

Enterprise-grade OpenAPI/Swagger specification parser for Model Context Protocol (MCP) projects

147 lines 5.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CustomHeadersManager = void 0; const generators_1 = require("./generators"); /** * 自定义请求头管理器 */ class CustomHeadersManager { constructor(config = {}, options = {}) { this.config = config; this.protectedHeaders = new Set([ 'content-type', 'content-length', 'host', 'connection', 'transfer-encoding', 'upgrade', ...(options.protectedHeaders || []) ]); this.debugMode = options.debugMode || false; } /** * 获取所有自定义请求头 */ async getHeaders(context) { const headers = {}; try { // 1. 添加静态头 if (this.config.static) { Object.assign(headers, this.config.static); if (this.debugMode) { console.log('Added static headers:', this.config.static); } } // 2. 添加环境变量头 if (this.config.env) { const envHeaders = await this.resolveEnvHeaders(this.config.env); Object.assign(headers, envHeaders); if (this.debugMode) { console.log('Added env headers:', envHeaders); } } // 3. 添加动态头 if (this.config.dynamic) { const dynamicHeaders = await this.resolveDynamicHeaders(this.config.dynamic); Object.assign(headers, dynamicHeaders); if (this.debugMode) { console.log('Added dynamic headers:', dynamicHeaders); } } // 4. 添加条件头 if (this.config.conditional) { const conditionalHeaders = await this.resolveConditionalHeaders(this.config.conditional, context); Object.assign(headers, conditionalHeaders); if (this.debugMode) { console.log('Added conditional headers:', conditionalHeaders); } } // 5. 过滤受保护的头 const filteredHeaders = this.filterProtectedHeaders(headers); if (this.debugMode) { console.log('Final custom headers:', filteredHeaders); } return filteredHeaders; } catch (error) { console.error('Error resolving custom headers:', error); return {}; } } async resolveEnvHeaders(envConfig) { const headers = {}; for (const [headerName, envName] of Object.entries(envConfig)) { const value = process.env[envName]; if (value) { headers[headerName] = value; } else if (this.debugMode) { console.warn(`Environment variable ${envName} not found for header ${headerName}`); } } return headers; } async resolveDynamicHeaders(dynamicConfig) { const headers = {}; for (const [headerName, generator] of Object.entries(dynamicConfig)) { try { let value; if (typeof generator === 'string') { // 字符串形式,查找预定义函数 const predefinedFn = (0, generators_1.getPredefinedGenerator)(generator); if (predefinedFn) { value = await predefinedFn(); } else { console.warn(`Unknown predefined generator: ${generator}`); continue; } } else if (typeof generator === 'function') { // 函数形式,直接调用 value = await generator(); } else { console.warn(`Invalid generator type for header ${headerName}`); continue; } if (value) { headers[headerName] = value; } } catch (error) { console.warn(`Failed to generate dynamic header ${headerName}:`, error); } } return headers; } async resolveConditionalHeaders(conditionalConfig, context) { const headers = {}; for (const rule of conditionalConfig) { try { if (rule.condition(context)) { Object.assign(headers, rule.headers); } } catch (error) { console.warn('Error evaluating conditional header rule:', error); } } return headers; } filterProtectedHeaders(headers) { const filtered = {}; for (const [key, value] of Object.entries(headers)) { const normalizedKey = key.toLowerCase(); if (!this.protectedHeaders.has(normalizedKey)) { filtered[key] = value; } else if (this.debugMode) { console.warn(`Protected header ignored: ${key}`); } } return filtered; } } exports.CustomHeadersManager = CustomHeadersManager; //# sourceMappingURL=CustomHeadersManager.js.map