| const logger = require('../utils/logger') |
|
|
| |
| |
| |
| |
| const browserFallbackMiddleware = (req, res, next) => { |
| const userAgent = req.headers['user-agent'] || '' |
| const origin = req.headers['origin'] || '' |
|
|
| const extractHeader = (value) => { |
| let candidate = value |
|
|
| if (Array.isArray(candidate)) { |
| candidate = candidate.find((item) => typeof item === 'string' && item.trim()) |
| } |
|
|
| if (typeof candidate !== 'string') { |
| return '' |
| } |
|
|
| let trimmed = candidate.trim() |
| if (!trimmed) { |
| return '' |
| } |
|
|
| if (/^Bearer\s+/i.test(trimmed)) { |
| trimmed = trimmed.replace(/^Bearer\s+/i, '').trim() |
| } |
|
|
| return trimmed |
| } |
|
|
| const apiKeyHeader = |
| extractHeader(req.headers['x-api-key']) || extractHeader(req.headers['x-goog-api-key']) |
| const normalizedKey = extractHeader(req.headers['authorization']) || apiKeyHeader |
|
|
| |
| const isChromeExtension = origin.startsWith('chrome-extension://') |
| const isBrowserRequest = userAgent.includes('Mozilla/') && userAgent.includes('Chrome/') |
| const hasApiKey = normalizedKey.startsWith('cr_') |
|
|
| if ((isChromeExtension || isBrowserRequest) && hasApiKey) { |
| |
| req.isBrowserFallback = true |
| req.originalUserAgent = userAgent |
|
|
| |
| req.headers['user-agent'] = 'claude-cli/1.0.110 (external, cli, browser-fallback)' |
|
|
| |
| if (!req.headers['authorization'] && apiKeyHeader) { |
| req.headers['authorization'] = `Bearer ${apiKeyHeader}` |
| } |
|
|
| |
| 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(` Original User-Agent: "${req.originalUserAgent}"`) |
| logger.api(` Origin: "${origin}"`) |
| logger.api(` Modified User-Agent: "${req.headers['user-agent']}"`) |
| } |
|
|
| next() |
| } |
|
|
| module.exports = { |
| browserFallbackMiddleware |
| } |
|
|