mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 09:38:02 +00:00
feat: droid平台账户数据统计及调度能力
This commit is contained in:
@@ -26,6 +26,14 @@ const CLIENT_DEFINITIONS = {
|
||||
displayName: 'Codex Command Line Tool',
|
||||
description: 'Cursor/Codex command-line interface',
|
||||
icon: '🔷'
|
||||
},
|
||||
|
||||
DROID_CLI: {
|
||||
id: 'droid_cli',
|
||||
name: 'Droid CLI',
|
||||
displayName: 'Factory Droid CLI',
|
||||
description: 'Factory Droid platform command-line interface',
|
||||
icon: '🤖'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +41,8 @@ const CLIENT_DEFINITIONS = {
|
||||
const CLIENT_IDS = {
|
||||
CLAUDE_CODE: 'claude_code',
|
||||
GEMINI_CLI: 'gemini_cli',
|
||||
CODEX_CLI: 'codex_cli'
|
||||
CODEX_CLI: 'codex_cli',
|
||||
DROID_CLI: 'droid_cli'
|
||||
}
|
||||
|
||||
// 获取所有客户端定义
|
||||
|
||||
@@ -8,6 +8,7 @@ const { CLIENT_DEFINITIONS, getAllClientDefinitions } = require('./clientDefinit
|
||||
const ClaudeCodeValidator = require('./clients/claudeCodeValidator')
|
||||
const GeminiCliValidator = require('./clients/geminiCliValidator')
|
||||
const CodexCliValidator = require('./clients/codexCliValidator')
|
||||
const DroidCliValidator = require('./clients/droidCliValidator')
|
||||
|
||||
/**
|
||||
* 客户端验证器类
|
||||
@@ -26,6 +27,8 @@ class ClientValidator {
|
||||
return GeminiCliValidator
|
||||
case 'codex_cli':
|
||||
return CodexCliValidator
|
||||
case 'droid_cli':
|
||||
return DroidCliValidator
|
||||
default:
|
||||
logger.warn(`Unknown client ID: ${clientId}`)
|
||||
return null
|
||||
@@ -37,7 +40,7 @@ class ClientValidator {
|
||||
* @returns {Array<string>} 客户端ID列表
|
||||
*/
|
||||
static getSupportedClients() {
|
||||
return ['claude_code', 'gemini_cli', 'codex_cli']
|
||||
return ['claude_code', 'gemini_cli', 'codex_cli', 'droid_cli']
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -50,7 +50,11 @@ class ClaudeCodeValidator {
|
||||
return false
|
||||
}
|
||||
|
||||
const systemEntries = Array.isArray(body.system) ? body.system : []
|
||||
const systemEntries = Array.isArray(body.system) ? body.system : null
|
||||
if (!systemEntries) {
|
||||
return false
|
||||
}
|
||||
|
||||
for (const entry of systemEntries) {
|
||||
const rawText = typeof entry?.text === 'string' ? entry.text : ''
|
||||
const { bestScore } = bestSimilarityByTemplates(rawText)
|
||||
|
||||
57
src/validators/clients/droidCliValidator.js
Normal file
57
src/validators/clients/droidCliValidator.js
Normal file
@@ -0,0 +1,57 @@
|
||||
const logger = require('../../utils/logger')
|
||||
const { CLIENT_DEFINITIONS } = require('../clientDefinitions')
|
||||
|
||||
/**
|
||||
* Droid CLI 验证器
|
||||
* 检查请求是否来自 Factory Droid CLI
|
||||
*/
|
||||
class DroidCliValidator {
|
||||
static getId() {
|
||||
return CLIENT_DEFINITIONS.DROID_CLI.id
|
||||
}
|
||||
|
||||
static getName() {
|
||||
return CLIENT_DEFINITIONS.DROID_CLI.name
|
||||
}
|
||||
|
||||
static getDescription() {
|
||||
return CLIENT_DEFINITIONS.DROID_CLI.description
|
||||
}
|
||||
|
||||
static validate(req) {
|
||||
try {
|
||||
const userAgent = req.headers['user-agent'] || ''
|
||||
const factoryClientHeader = (req.headers['x-factory-client'] || '').toString().toLowerCase()
|
||||
|
||||
const uaMatch = /factory-cli\/(\d+\.\d+\.\d+)/i.exec(userAgent)
|
||||
const hasFactoryClientHeader =
|
||||
typeof factoryClientHeader === 'string' &&
|
||||
(factoryClientHeader.includes('droid') || factoryClientHeader.includes('factory-cli'))
|
||||
|
||||
if (!uaMatch && !hasFactoryClientHeader) {
|
||||
logger.debug(`Droid CLI validation failed - UA mismatch: ${userAgent}`)
|
||||
return false
|
||||
}
|
||||
|
||||
// 允许,通过基础验证
|
||||
logger.debug(
|
||||
`Droid CLI validation passed (UA: ${userAgent || 'N/A'}, header: ${factoryClientHeader || 'N/A'})`
|
||||
)
|
||||
return true
|
||||
} catch (error) {
|
||||
logger.error('Error in DroidCliValidator:', error)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
static getInfo() {
|
||||
return {
|
||||
id: this.getId(),
|
||||
name: this.getName(),
|
||||
description: this.getDescription(),
|
||||
icon: CLIENT_DEFINITIONS.DROID_CLI.icon
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = DroidCliValidator
|
||||
Reference in New Issue
Block a user