mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 00:53:33 +00:00
Fix Prettier formatting issues
- Remove trailing whitespace and fix indentation in src/app.js - Format whitespace in src/middleware/auth.js - Fix formatting and add missing newline in src/middleware/browserFallback.js 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -109,7 +109,7 @@ class Application {
|
|||||||
} else {
|
} else {
|
||||||
this.app.use(corsMiddleware)
|
this.app.use(corsMiddleware)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🆕 兜底中间件:处理Chrome插件兼容性(必须在认证之前)
|
// 🆕 兜底中间件:处理Chrome插件兼容性(必须在认证之前)
|
||||||
this.app.use(browserFallbackMiddleware)
|
this.app.use(browserFallbackMiddleware)
|
||||||
|
|
||||||
@@ -541,7 +541,7 @@ class Application {
|
|||||||
logger.info(
|
logger.info(
|
||||||
`🔄 Cleanup tasks scheduled every ${config.system.cleanupInterval / 1000 / 60} minutes`
|
`🔄 Cleanup tasks scheduled every ${config.system.cleanupInterval / 1000 / 60} minutes`
|
||||||
)
|
)
|
||||||
|
|
||||||
// 🚨 启动限流状态自动清理服务
|
// 🚨 启动限流状态自动清理服务
|
||||||
// 每5分钟检查一次过期的限流状态,确保账号能及时恢复调度
|
// 每5分钟检查一次过期的限流状态,确保账号能及时恢复调度
|
||||||
const rateLimitCleanupService = require('./services/rateLimitCleanupService')
|
const rateLimitCleanupService = require('./services/rateLimitCleanupService')
|
||||||
@@ -567,7 +567,7 @@ class Application {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('❌ Error cleaning up pricing service:', error)
|
logger.error('❌ Error cleaning up pricing service:', error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 停止限流清理服务
|
// 停止限流清理服务
|
||||||
try {
|
try {
|
||||||
const rateLimitCleanupService = require('./services/rateLimitCleanupService')
|
const rateLimitCleanupService = require('./services/rateLimitCleanupService')
|
||||||
|
|||||||
@@ -771,7 +771,7 @@ const corsMiddleware = (req, res, next) => {
|
|||||||
|
|
||||||
// 🆕 检查是否为Chrome插件请求
|
// 🆕 检查是否为Chrome插件请求
|
||||||
const isChromeExtension = origin && origin.startsWith('chrome-extension://')
|
const isChromeExtension = origin && origin.startsWith('chrome-extension://')
|
||||||
|
|
||||||
// 设置CORS头
|
// 设置CORS头
|
||||||
if (allowedOrigins.includes(origin) || !origin || isChromeExtension) {
|
if (allowedOrigins.includes(origin) || !origin || isChromeExtension) {
|
||||||
res.header('Access-Control-Allow-Origin', origin || '*')
|
res.header('Access-Control-Allow-Origin', origin || '*')
|
||||||
|
|||||||
@@ -8,43 +8,45 @@ const browserFallbackMiddleware = (req, res, next) => {
|
|||||||
const userAgent = req.headers['user-agent'] || ''
|
const userAgent = req.headers['user-agent'] || ''
|
||||||
const origin = req.headers['origin'] || ''
|
const origin = req.headers['origin'] || ''
|
||||||
const authHeader = req.headers['authorization'] || req.headers['x-api-key'] || ''
|
const authHeader = req.headers['authorization'] || req.headers['x-api-key'] || ''
|
||||||
|
|
||||||
// 检查是否为Chrome插件或浏览器请求
|
// 检查是否为Chrome插件或浏览器请求
|
||||||
const isChromeExtension = origin.startsWith('chrome-extension://')
|
const isChromeExtension = origin.startsWith('chrome-extension://')
|
||||||
const isBrowserRequest = userAgent.includes('Mozilla/') && userAgent.includes('Chrome/')
|
const isBrowserRequest = userAgent.includes('Mozilla/') && userAgent.includes('Chrome/')
|
||||||
const hasApiKey = authHeader.startsWith('cr_') // 我们的API Key格式
|
const hasApiKey = authHeader.startsWith('cr_') // 我们的API Key格式
|
||||||
|
|
||||||
if ((isChromeExtension || isBrowserRequest) && hasApiKey) {
|
if ((isChromeExtension || isBrowserRequest) && hasApiKey) {
|
||||||
// 为Chrome插件请求添加特殊标记
|
// 为Chrome插件请求添加特殊标记
|
||||||
req.isBrowserFallback = true
|
req.isBrowserFallback = true
|
||||||
req.originalUserAgent = userAgent
|
req.originalUserAgent = userAgent
|
||||||
|
|
||||||
// 🆕 关键修改:伪装成claude-cli请求以绕过客户端限制
|
// 🆕 关键修改:伪装成claude-cli请求以绕过客户端限制
|
||||||
req.headers['user-agent'] = 'claude-cli/1.0.110 (external, cli, browser-fallback)'
|
req.headers['user-agent'] = 'claude-cli/1.0.110 (external, cli, browser-fallback)'
|
||||||
|
|
||||||
// 确保设置正确的认证头
|
// 确保设置正确的认证头
|
||||||
if (!req.headers['authorization'] && req.headers['x-api-key']) {
|
if (!req.headers['authorization'] && req.headers['x-api-key']) {
|
||||||
req.headers['authorization'] = `Bearer ${req.headers['x-api-key']}`
|
req.headers['authorization'] = `Bearer ${req.headers['x-api-key']}`
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加必要的Anthropic头
|
// 添加必要的Anthropic头
|
||||||
if (!req.headers['anthropic-version']) {
|
if (!req.headers['anthropic-version']) {
|
||||||
req.headers['anthropic-version'] = '2023-06-01'
|
req.headers['anthropic-version'] = '2023-06-01'
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!req.headers['anthropic-dangerous-direct-browser-access']) {
|
if (!req.headers['anthropic-dangerous-direct-browser-access']) {
|
||||||
req.headers['anthropic-dangerous-direct-browser-access'] = 'true'
|
req.headers['anthropic-dangerous-direct-browser-access'] = 'true'
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.api(`🔧 Browser fallback activated for ${isChromeExtension ? 'Chrome extension' : 'browser'} request`)
|
logger.api(
|
||||||
|
`🔧 Browser fallback activated for ${isChromeExtension ? 'Chrome extension' : 'browser'} request`
|
||||||
|
)
|
||||||
logger.api(` Original User-Agent: "${req.originalUserAgent}"`)
|
logger.api(` Original User-Agent: "${req.originalUserAgent}"`)
|
||||||
logger.api(` Origin: "${origin}"`)
|
logger.api(` Origin: "${origin}"`)
|
||||||
logger.api(` Modified User-Agent: "${req.headers['user-agent']}"`)
|
logger.api(` Modified User-Agent: "${req.headers['user-agent']}"`)
|
||||||
}
|
}
|
||||||
|
|
||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
browserFallbackMiddleware
|
browserFallbackMiddleware
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user