diff --git a/src/app.js b/src/app.js index 88b32fad..56eb4cb6 100644 --- a/src/app.js +++ b/src/app.js @@ -109,7 +109,7 @@ class Application { } else { this.app.use(corsMiddleware) } - + // 🆕 兜底中间件:处理Chrome插件兼容性(必须在认证之前) this.app.use(browserFallbackMiddleware) @@ -541,7 +541,7 @@ class Application { logger.info( `🔄 Cleanup tasks scheduled every ${config.system.cleanupInterval / 1000 / 60} minutes` ) - + // 🚨 启动限流状态自动清理服务 // 每5分钟检查一次过期的限流状态,确保账号能及时恢复调度 const rateLimitCleanupService = require('./services/rateLimitCleanupService') @@ -567,7 +567,7 @@ class Application { } catch (error) { logger.error('❌ Error cleaning up pricing service:', error) } - + // 停止限流清理服务 try { const rateLimitCleanupService = require('./services/rateLimitCleanupService') diff --git a/src/middleware/auth.js b/src/middleware/auth.js index a3f8c32a..21512645 100644 --- a/src/middleware/auth.js +++ b/src/middleware/auth.js @@ -771,7 +771,7 @@ const corsMiddleware = (req, res, next) => { // 🆕 检查是否为Chrome插件请求 const isChromeExtension = origin && origin.startsWith('chrome-extension://') - + // 设置CORS头 if (allowedOrigins.includes(origin) || !origin || isChromeExtension) { res.header('Access-Control-Allow-Origin', origin || '*') diff --git a/src/middleware/browserFallback.js b/src/middleware/browserFallback.js index d8b66083..df81ae38 100644 --- a/src/middleware/browserFallback.js +++ b/src/middleware/browserFallback.js @@ -8,43 +8,45 @@ const browserFallbackMiddleware = (req, res, next) => { const userAgent = req.headers['user-agent'] || '' const origin = req.headers['origin'] || '' const authHeader = req.headers['authorization'] || req.headers['x-api-key'] || '' - + // 检查是否为Chrome插件或浏览器请求 const isChromeExtension = origin.startsWith('chrome-extension://') const isBrowserRequest = userAgent.includes('Mozilla/') && userAgent.includes('Chrome/') const hasApiKey = authHeader.startsWith('cr_') // 我们的API Key格式 - + if ((isChromeExtension || isBrowserRequest) && hasApiKey) { // 为Chrome插件请求添加特殊标记 req.isBrowserFallback = true req.originalUserAgent = userAgent - + // 🆕 关键修改:伪装成claude-cli请求以绕过客户端限制 req.headers['user-agent'] = 'claude-cli/1.0.110 (external, cli, browser-fallback)' - + // 确保设置正确的认证头 if (!req.headers['authorization'] && req.headers['x-api-key']) { req.headers['authorization'] = `Bearer ${req.headers['x-api-key']}` } - + // 添加必要的Anthropic头 if (!req.headers['anthropic-version']) { req.headers['anthropic-version'] = '2023-06-01' } - + if (!req.headers['anthropic-dangerous-direct-browser-access']) { 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(` Origin: "${origin}"`) logger.api(` Modified User-Agent: "${req.headers['user-agent']}"`) } - + next() } module.exports = { browserFallbackMiddleware -} \ No newline at end of file +}