shaw
bd10032857
fix: 移除Unicode清理逻辑,恢复与main分支一致的转发流程
...
- 移除app.js中的JSON解析错误处理中间件
- 移除api.js中的cleanUnicodeString和cleanUnicodeInObject函数
- 移除handleMessagesRequest中的Unicode清理调用
- 确保转发逻辑与main远程分支完全一致
问题原因:
- Unicode清理逻辑会修改请求体,可能导致某些情况下的JSON解析错误
- Claude API本身能够处理Unicode问题,不需要在中转服务中预处理
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-21 09:29:27 +08:00
shaw
cb29b3f7e4
fix: 代理ip使用重构为统一方法
2025-08-20 23:21:32 +08:00
shaw
a45c832278
feat: 统一代理配置管理,支持IPv4/IPv6协议族选择
...
- 新增统一代理工具 ProxyHelper,支持 SOCKS5/HTTP/HTTPS 代理
- 添加 IPv4/IPv6 协议族配置选项,默认使用 IPv4 确保兼容性
- 移除 OpenAI 路由中硬编码的 family: 4 限制
- 统一 8 个服务文件中的代理创建逻辑,避免重复维护
- 支持 OAuth 和 token 交换过程中的代理使用
- 新增配置项:PROXY_USE_IPV4(默认 true)
- 向后兼容:现有配置无需手动更新
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-20 22:36:34 +08:00
shaw
4aa562be21
fix: 去除logger自动添加metadata字段
2025-08-20 21:45:48 +08:00
Wesley Liddick
d27c84b13b
Merge pull request #262 from mouyong/dev
...
fix(proxy): 强制 SOCKS5 代理使用 IPv4
2025-08-20 21:43:40 +08:00
mouyong
5af8913954
refactor(backend): 统一账户平台标识字段
...
WHAT: 统一 Claude 账户的平台标识,从 claude-oauth 改为 claude
WHY: 简化平台标识命名规范,提高前后端数据一致性,为多平台支持奠定基础
HOW: 在账户创建和查询接口中添加 platform 字段支持;更新 claudeAccountService 默认平台标识;保持向后兼容性,旧数据自动使用默认值
2025-08-20 21:40:24 +08:00
Feng Yue
b0ad541f5d
Merge remote-tracking branch 'f3n9/main' into azure-openai
2025-08-20 18:59:15 +08:00
mouyong
5ae136a5dc
style: 移除尾随逗号
...
WHAT: 移除 SocksProxyAgent 配置对象中的尾随逗号
WHY: 保持代码格式的一致性和整洁性,符合项目的代码规范
HOW: 删除 family: 4 后的尾随逗号;无功能变更;纯格式化修改
2025-08-20 09:45:55 +08:00
shaw
af379f22aa
fix: openai的responses去除text参数
2025-08-20 09:39:51 +08:00
mouyong
b1f2b4f6c1
fix(proxy): 强制 SOCKS5 代理使用 IPv4
...
WHAT: 为 SOCKS5 代理配置添加 family: 4 选项强制使用 IPv4 地址族
WHY: 解决 IPv4 主机名在代理连接时被意外解析到 IPv6 地址的问题,确保代理连接的稳定性和可预期性
HOW: 在 SocksProxyAgent 构造函数中添加 family: 4 配置选项;保持与现有 HTTP/HTTPS 代理的兼容性;无破坏性变更
2025-08-20 09:34:02 +08:00
iRubbish
1ee71ffbc9
feat: 完善 API Keys 批量删除功能并修复搜索跨选择问题
...
## 主要改进
### 🔧 核心修复
- 修复搜索时勾选状态无法保存的问题
- 优化全选/取消全选逻辑,支持跨搜索结果保持选择状态
- 改进批量删除的用户体验
- 添加 Unicode 字符处理中间件,提升请求体解析稳定性
### 🎯 具体变更
- **路由修复**: 解决批量删除路由匹配问题,调整路由顺序
- **API客户端**: 修复 DELETE 方法支持请求体数据传输
- **前端逻辑**: 分离筛选和搜索的监听器,搜索时保持已选中状态
- **全选优化**: 取消全选时只移除当前页选中项,保留其他页面选择
- **Unicode处理**: 添加无效 UTF-16 代理对清理和错误处理机制
- **配置管理**: 将 .mcp.json 添加到 .gitignore,避免本地配置被提交
### 🚀 用户体验提升
- 支持跨搜索结果批量选择和删除
- 批量删除按钮显示选中数量
- 智能的全选状态管理
- 更好的 Unicode 字符处理容错性
### 🧪 测试验证
- 验证搜索切换时选择状态保持
- 确认批量删除功能正常工作
- 检查 Redis 数据清理完整性
- 测试 Unicode 字符处理稳定性
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-19 09:59:54 +08:00
shaw
539411d593
fix: openai的responses去除text参数
2025-08-18 19:15:49 +08:00
iRubbish
f642fa7095
feat: 实现 API Keys 批量删除后端功能
...
- 新增 DELETE /admin/api-keys/batch 端点
- 支持批量删除最多100个API Keys
- 完整的请求参数验证(数组格式、数量限制、ID有效性)
- 逐个删除并记录成功/失败状态
- 详细的错误信息和日志记录
- 返回成功/失败统计结果
请求格式: { "keyIds": ["key1", "key2", ...] }
响应格式: { "success": true, "data": { "successCount": 2, "failedCount": 0, "errors": [] } }
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-18 17:00:26 +08:00
Feng Yue
77338276db
Merge remote-tracking branch 'f3n9/main' into user-management-new
2025-08-18 15:32:17 +08:00
shaw
d11b7c5e3e
fix: openai的api转发剔除多余参数
2025-08-18 11:13:01 +08:00
shaw
65ba0ffb8f
feat: 优化 Gemini 项目ID处理逻辑
...
- 统一使用账户配置的项目ID,忽略客户端请求中的project参数
- 增强日志记录,更清晰地追踪项目ID的使用情况
- 移除无用的 geminiAuthInterceptor 中间件
- 移除调试用的 console.log
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-18 09:33:15 +08:00
shaw
77f80ef1f4
fix: claude token统计问题
2025-08-17 00:41:16 +08:00
shaw
681cb8cd82
feat: 优化 Claude 模型缓存费用计算,支持 5 分钟和 1 小时两种缓存类型
...
- 在 pricingService 中硬编码 1 小时缓存价格(Opus: $30/MTok, Sonnet: $6/MTok, Haiku: $1.6/MTok)
- 更新 usage 捕获逻辑以分别记录 ephemeral_5m 和 ephemeral_1h 缓存 tokens
- 改进费用计算逻辑,正确计算两种缓存类型的费用
- 新增 recordUsageWithDetails 方法支持详细的缓存数据
- 保持向后兼容性,支持旧的数据格式
- 删除测试脚本 test-openai-refresh.js
- 修复 OpenAI token 刷新逻辑
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-16 22:31:20 +08:00
shaw
812e98355f
feat: 实现 OpenAI token 自动刷新功能并优化账户管理界面
...
主要更改:
1. OpenAI Token 自动刷新
- 实现 refreshAccessToken 函数,支持 OAuth 2.0 refresh_token grant type
- 使用 Codex CLI 官方 CLIENT_ID (app_EMoamEEZ73f0CkXaXp7hrann)
- 支持 SOCKS5 和 HTTP/HTTPS 代理
- 自动更新 access token、id token 和 refresh token
2. 账户管理界面优化
- 移除手动刷新 token 按钮(桌面端和移动端)
- 保留后端自动刷新机制
- 优化代码结构,删除不再需要的函数和变量
3. 测试和文档
- 添加 test-openai-refresh.js 测试脚本
- 创建详细的实现文档
技术细节:
- Token 端点: https://auth.openai.com/oauth/token
- 默认有效期: 1小时
- 加密存储: AES-256-CBC
所有平台现在都支持自动 token 刷新:
✅ Claude - OAuth 自动刷新
✅ Gemini - Google OAuth2 自动刷新
✅ OpenAI - OAuth 自动刷新(新实现)
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-15 16:56:44 +08:00
Feng Yue
71ce1e33b7
fix: API key limit now only counts active keys and uses config value
...
- Modified API key limit to count only active (non-deleted) keys instead of all keys
- Fixed frontend to use MAX_API_KEYS_PER_USER environment variable instead of hardcoded value
- Added activeApiKeysCount computed property to filter deleted keys
- Updated user profile endpoint to include maxApiKeysPerUser config
- Enhanced user store to persist and retrieve config values
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-15 13:36:05 +08:00
KevinLiao
b0622bdcbd
Merge branch 'main' of https://github.com/Wei-Shaw/claude-relay-service
2025-08-14 16:44:20 +08:00
KevinLiao
0e5f4e03c1
feat: 新增Claude账号订阅类型设置
...
1. OAuth可自动判断订阅类型,Setup Token请自行选择。无论那种类型都可以自己改
2. 优化调度,Pro账号不再接受opus模型请求的调度
2025-08-14 16:43:58 +08:00
Feng Yue
6b4ce99237
fix: usage stats issue
2025-08-14 16:16:27 +08:00
Feng Yue
c80446ae98
fix: include deletion metadata in user API keys response
...
- Add isDeleted, deletedAt, deletedBy, deletedByType fields to getUserApiKeys service method
- Include deletion fields in user routes API keys response
- Add debug logging to dashboard component to troubleshoot deleted keys count
- Ensure frontend can properly identify and count deleted API keys
This fixes the issue where deleted API keys count was always showing 0
instead of the actual number of deleted keys.
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-14 16:02:11 +08:00
Feng Yue
4509f303e6
feat: enhance user API keys view and fix admin cost display
...
- Add deleted API keys display to user's My API Keys view
- Show deleted status with gray indicator and "Deleted" badge
- Display deletion date and hide delete button for deleted keys
- Fix cost calculation in admin deleted API keys tab
- Add getCostStats call to properly populate cost data
- Support includeDeleted parameter in user API keys endpoint
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-14 15:25:22 +08:00
Wesley Liddick
1144b9b5ff
Merge pull request #246 from iRubbish/feat/webhook-account-notification
...
feat: 添加账号禁用异常状态 Webhook 通知功能 (已格式化)
2025-08-14 14:31:14 +08:00
iRubbish
2b77fdc06c
fix: 修复 ESLint 代码质量问题
...
- 修复正则表达式中不必要的转义字符
- 使用对象解构优化代码风格
- 修复未使用变量的命名规范
- 确保所有修改文件通过 ESLint 检查
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-14 14:14:01 +08:00
Feng Yue
aff9966ed1
feat: management of deleted keys
2025-08-14 12:42:39 +08:00
Feng Yue
5d850a7c1c
chore: remove regenerate api key functionality
2025-08-14 11:59:42 +08:00
Feng Yue
70e87de639
fix: user stats in admin panel again
2025-08-14 11:38:57 +08:00
Feng Yue
9efe429912
fix: user stats in admin panel
2025-08-14 11:38:51 +08:00
Feng Yue
8ea150a975
feat: enhance user API key management and implement soft delete
...
- Redirect users to API Keys tab after login instead of overview
- Remove Token Limit and Daily Cost Limit from user API key details modal
- Implement soft delete for API keys to preserve usage statistics
- Add admin endpoint to view deleted API keys with metadata
- Track deletion metadata (deletedBy, deletedAt, deletedByType)
- Ensure deleted API keys cannot be restored
- Include deleted key stats in user totals while excluding from active count
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-14 11:38:46 +08:00
Feng Yue
c413fddec0
fix: user stats again x4
2025-08-14 11:38:41 +08:00
Feng Yue
2756671117
fix: user stats
2025-08-14 11:38:23 +08:00
Feng Yue
aa86e062f1
fix: user apiKey creation issue
2025-08-14 11:38:04 +08:00
Feng Yue
eb150b4937
feat: 实现完整用户管理系统和LDAP认证集成
...
- 新增LDAP认证服务支持用户登录验证
- 实现用户服务包含会话管理和权限控制
- 添加用户专用路由和API端点
- 扩展认证中间件支持用户和管理员双重身份
- 新增用户仪表板、API密钥管理和使用统计界面
- 完善前端用户管理组件和路由配置
- 支持用户自助API密钥创建和管理
- 添加管理员用户管理功能包含角色权限控制
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-14 11:36:45 +08:00
shaw
5428462f55
fix: 修复 OpenAI 账户代理配置保存问题
...
- 修复 OAuth 方式添加 OpenAI 账户时缺少 priority 字段
- 修复创建 OpenAI 账户时错误检查 proxy.enabled 导致代理未保存
- 添加 OpenAI OAuth token 交换时的 SOCKS5 代理支持
- 添加 OpenAI API 请求转发时的代理支持
- 参考 Claude/Gemini 实现统一代理处理逻辑
2025-08-13 22:44:48 +08:00
weidian
e01e539108
feat: 添加账号异常状态 Webhook 通知功能
...
## 功能概述
- 新增账号禁用/异常状态的 Webhook 实时通知机制
- 支持 Claude OAuth、Claude Console、Gemini 三种平台的账号监控
- 提供完整的 Webhook 管理 API 和配置选项
## 主要变更
### 新增文件
- `src/utils/webhookNotifier.js`: Webhook 通知核心服务
- `src/routes/webhook.js`: Webhook 管理 API 路由
### 功能集成
- Claude OAuth 账号:unauthorized 状态 + token 刷新错误通知
- Claude Console 账号:blocked 状态通知
- Gemini 账号:token 刷新错误通知
### 配置支持
- 新增环境变量:WEBHOOK_ENABLED, WEBHOOK_URLS, WEBHOOK_TIMEOUT, WEBHOOK_RETRIES
- 支持多个 Webhook URL 并发通知
- 自动重试机制(指数退避)+ 超时保护
### 管理端点
- POST /admin/webhook/test: 测试连通性
- POST /admin/webhook/test-notification: 发送测试通知
- GET /admin/webhook/config: 查看配置信息
## 通知格式
```json
{
"type": "account_anomaly",
"data": {
"accountId": "uuid",
"accountName": "账号名称",
"platform": "claude-oauth|claude-console|gemini",
"status": "unauthorized|blocked|error",
"errorCode": "CLAUDE_OAUTH_UNAUTHORIZED",
"reason": "具体异常原因",
"timestamp": "2025-01-13T10:30:00.000Z"
}
}
```
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-13 17:52:46 +08:00
Wesley Liddick
ceb1749859
Merge pull request #243 from tanaer/fixed
...
Fixed: 新增 Claude Console 账户限流机制开关
2025-08-13 17:49:47 +08:00
wt
8142c3356a
feat: 新增 Claude Console 账户限流机制开关 Lint format
2025-08-13 17:04:47 +08:00
wt
ab02acd008
Prettier format
2025-08-13 15:04:47 +08:00
wt
f9e8157e07
Fix: Claude Console 账户的限流开关
2025-08-13 11:24:20 +08:00
shaw
4ca9674772
feat: 完善多平台账户管理和API Keys页面展示
...
- 修复OpenAI路由中的gpt-5模型ID处理
- 增强统一调度器的账户选择日志输出
- 优化OAuth流程中的账户类型处理
- 完善API Keys页面的多平台账户信息展示
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-12 17:55:45 +08:00
shaw
3a563b8dd2
fix: 优化 OpenAI Codex API 的 gpt-5 模型 ID 处理
...
- 自动将 gpt-5-xxx 格式的模型 ID 标准化为 gpt-5
- 解决 Codex API 不接受具体版本模型 ID 的问题
- 添加日志记录模型标准化过程
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-12 15:50:34 +08:00
shaw
b06fa5efe8
fix: 修复OpenAI类型账号数据统计问题
...
- 修复API Key请求次数、费用、token统计无法记录的问题
- 修复OpenAI账户今日使用统计显示空白的问题
- 修复模型使用详情记录缺失的问题
- 统一OpenAI账户统计数据格式与其他平台保持一致
主要修改:
1. openaiRoutes.js: 将req.apiKeyData改为req.apiKey,与中间件保持一致
2. admin.js: 为OpenAI账户列表接口添加使用统计获取逻辑
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-12 14:21:01 +08:00
Wesley Liddick
c761b4f3c7
Merge pull request #234 from tanaer/bugfix
...
Fixes: Gemini账户调度状态在页面刷新后与实际设置不符
2025-08-11 17:08:59 +08:00
wt
0f66ea7d4a
Fixes: Gemini账户调度状态在页面刷新后与实际设置不符
2025-08-11 16:48:34 +08:00
shaw
ed1f23152d
fix: redis服务改为expose并支持Codex cli的api转发
2025-08-11 15:54:59 +08:00
shaw
4643bd8aad
fix: 解决Codex cli转发流式响应中断问题
2025-08-11 14:40:02 +08:00
shaw
f462684f97
feat: 实现OpenAI账户管理和统一调度系统
...
- 新增 OpenAI 账户管理服务,支持多账户轮询和负载均衡
- 实现统一的 OpenAI API 调度器,智能选择最优账户
- 优化成本计算器,支持更精确的 token 计算
- 更新模型定价数据,包含最新的 OpenAI 模型价格
- 增强 API Key 管理,支持更灵活的配额控制
- 改进管理界面,添加教程视图和账户分组管理
- 优化限流配置组件,提供更直观的用户体验
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-08-11 13:58:43 +08:00