feat: 实现 Claude Code headers 动态管理功能

- 创建 claudeCodeHeadersService 管理各账号的 Claude Code headers
- 自动捕获成功请求的 headers 并按账号存储在 Redis
- 智能版本管理,只保留最新版本的 headers
- OpenAI 转发时根据账号动态获取对应的 headers
- 添加管理端点查看和清除各账号的 headers 信息
- 完整支持 Claude Code 必需的 beta headers

解决了 "This credential is only authorized for use with Claude Code" 错误
避免了固定版本号带来的风控问题

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
shaw
2025-07-22 16:03:31 +08:00
parent b2ad2a4a61
commit dabf3bf7ea
6 changed files with 410 additions and 12 deletions

View File

@@ -241,21 +241,22 @@ const originalError = logger.error;
const originalWarn = logger.warn;
const originalInfo = logger.info;
logger.error = function(message, metadata = {}) {
logger.error = function(message, ...args) {
logger.stats.errors++;
return originalError.call(this, message, metadata);
return originalError.call(this, message, ...args);
};
logger.warn = function(message, metadata = {}) {
logger.warn = function(message, ...args) {
logger.stats.warnings++;
return originalWarn.call(this, message, metadata);
return originalWarn.call(this, message, ...args);
};
logger.info = function(message, metadata = {}) {
if (metadata.type === 'request') {
logger.info = function(message, ...args) {
// 检查是否是请求类型的日志
if (args.length > 0 && typeof args[0] === 'object' && args[0].type === 'request') {
logger.stats.requests++;
}
return originalInfo.call(this, message, metadata);
return originalInfo.call(this, message, ...args);
};
// 📈 获取日志统计