| | 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 |
| | } |
| |
|