mcp-swagger-parser
Version:
Enterprise-grade OpenAPI/Swagger specification parser for Model Context Protocol (MCP) projects
147 lines • 5.38 kB
JavaScript
;
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