From 83cbaf7c3ea292db8a649e81b101b4a3f5a19ddb Mon Sep 17 00:00:00 2001 From: root Date: Thu, 22 Jan 2026 15:14:22 +0800 Subject: [PATCH] fix: resolve all ESLint errors - droidRelayService: add missing keyId variable declaration - quotaCardService: use object destructuring for actualDeducted - apiKeyService: remove unused variables and duplicate requires - redis: remove shadowed logger/config requires - unifiedGeminiScheduler: rename isActive param to avoid shadow - commonHelper: add comments to empty catch blocks - testPayloadHelper: prefix unused model param with underscore Co-Authored-By: Claude Opus 4.5 --- src/models/redis.js | 5 ----- src/services/apiKeyService.js | 20 +------------------- src/services/droidRelayService.js | 2 ++ src/services/quotaCardService.js | 2 +- src/services/unifiedGeminiScheduler.js | 4 ++-- src/utils/commonHelper.js | 8 ++++++-- src/utils/testPayloadHelper.js | 2 +- 7 files changed, 13 insertions(+), 30 deletions(-) diff --git a/src/models/redis.js b/src/models/redis.js index e91014fc..e91383db 100644 --- a/src/models/redis.js +++ b/src/models/redis.js @@ -4916,7 +4916,6 @@ redisClient.removeFromIndex = async function (indexKey, id) { // 迁移全局统计数据(从 API Key 数据聚合) redisClient.migrateGlobalStats = async function () { - const logger = require('../utils/logger') logger.info('🔄 开始迁移全局统计数据...') const keyIds = await this.scanApiKeyIds() @@ -4978,8 +4977,6 @@ redisClient.migrateGlobalStats = async function () { // 确保月份索引完整(后台检查,补充缺失的月份) redisClient.ensureMonthlyMonthsIndex = async function () { - const logger = require('../utils/logger') - // 扫描所有月份 key const monthlyKeys = await this.client.keys('usage:model:monthly:*') const allMonths = new Set() @@ -5064,7 +5061,6 @@ redisClient.getApiKeyCount = async function () { // 清理过期的系统分钟统计数据(启动时调用) redisClient.cleanupSystemMetrics = async function () { - const logger = require('../utils/logger') logger.info('🧹 清理过期的系统分钟统计数据...') const keys = await this.scanKeys('system:metrics:minute:*') @@ -5074,7 +5070,6 @@ redisClient.cleanupSystemMetrics = async function () { } // 计算当前分钟时间戳和保留窗口 - const config = require('../../config/config') const metricsWindow = config.system?.metricsWindow || 5 const currentMinute = Math.floor(Date.now() / 60000) const keepAfter = currentMinute - metricsWindow * 2 // 保留窗口的2倍 diff --git a/src/services/apiKeyService.js b/src/services/apiKeyService.js index 79249acc..bf3d1745 100644 --- a/src/services/apiKeyService.js +++ b/src/services/apiKeyService.js @@ -162,7 +162,7 @@ class ApiKeyService { const hashedKey = this._hashApiKey(apiKey) // 处理 permissions - const permissionsValue = permissions + const _permissionsValue = permissions const keyData = { id: keyId, @@ -235,14 +235,6 @@ class ApiKeyService { logger.success(`🔑 Generated new API key: ${name} (${keyId})`) - // 解析 permissions 用于返回 - let parsedPermissions = keyData.permissions - try { - parsedPermissions = JSON.parse(keyData.permissions) - } catch (e) { - // 不是 JSON,保持原值(传统 Key 的字符串格式) - } - return { id: keyId, apiKey, // 只在创建时返回完整的key @@ -410,14 +402,6 @@ class ApiKeyService { tags = [] } - // 解析 permissions(聚合 Key 为数组,传统 Key 为字符串) - let permissions = keyData.permissions || 'all' - try { - permissions = JSON.parse(keyData.permissions) - } catch (e) { - // 不是 JSON,保持原值 - } - // 解析 serviceRates let serviceRates = {} try { @@ -1549,7 +1533,6 @@ class ApiKeyService { const realCost = costInfo.costs.total let ratedCost = realCost if (realCost > 0) { - const serviceRatesService = require('./serviceRatesService') const service = serviceRatesService.getService(accountType, model) ratedCost = await this.calculateRatedCost(keyId, service, realCost) } @@ -1761,7 +1744,6 @@ class ApiKeyService { const realCostWithDetails = costInfo.totalCost || 0 let ratedCostWithDetails = realCostWithDetails if (realCostWithDetails > 0) { - const serviceRatesService = require('./serviceRatesService') const service = serviceRatesService.getService(accountType, model) ratedCostWithDetails = await this.calculateRatedCost(keyId, service, realCostWithDetails) } diff --git a/src/services/droidRelayService.js b/src/services/droidRelayService.js index 2ca40d4c..8e663611 100644 --- a/src/services/droidRelayService.js +++ b/src/services/droidRelayService.js @@ -405,6 +405,7 @@ class DroidRelayService { ) { return new Promise((resolve, reject) => { const url = new URL(apiUrl) + const keyId = apiKeyData?.id const bodyString = JSON.stringify(processedBody) const contentLength = Buffer.byteLength(bodyString) const requestHeaders = { @@ -1198,6 +1199,7 @@ class DroidRelayService { skipUsageRecord = false ) { const { data } = response + const keyId = apiKeyData?.id // 从响应中提取 usage 数据 const usage = data.usage || {} diff --git a/src/services/quotaCardService.js b/src/services/quotaCardService.js index 668a222f..98625096 100644 --- a/src/services/quotaCardService.js +++ b/src/services/quotaCardService.js @@ -508,7 +508,7 @@ class QuotaCardService { redemptionData.apiKeyId, parseFloat(redemptionData.quotaAdded) ) - actualDeducted = result.actualDeducted + ;({ actualDeducted } = result) } // 注意:时间卡撤销比较复杂,这里简化处理,不回退时间 diff --git a/src/services/unifiedGeminiScheduler.js b/src/services/unifiedGeminiScheduler.js index 3316e7da..7a1f65c6 100644 --- a/src/services/unifiedGeminiScheduler.js +++ b/src/services/unifiedGeminiScheduler.js @@ -45,9 +45,9 @@ class UnifiedGeminiScheduler { } // 🔧 辅助方法:检查账户是否激活(兼容字符串和布尔值) - _isActive(isActive) { + _isActive(activeValue) { // 兼容布尔值 true 和字符串 'true' - return isActive === true || isActive === 'true' + return activeValue === true || activeValue === 'true' } // 🎯 统一调度Gemini账号 diff --git a/src/utils/commonHelper.js b/src/utils/commonHelper.js index 9eb870df..1af5a00c 100644 --- a/src/utils/commonHelper.js +++ b/src/utils/commonHelper.js @@ -333,10 +333,14 @@ const getAppVersion = () => { if (fs.existsSync(versionFile)) { return fs.readFileSync(versionFile, 'utf8').trim() } - } catch {} + } catch { + // ignore + } try { return require('../../package.json').version - } catch {} + } catch { + // ignore + } return '1.0.0' } diff --git a/src/utils/testPayloadHelper.js b/src/utils/testPayloadHelper.js index f3a49066..656f6ba9 100644 --- a/src/utils/testPayloadHelper.js +++ b/src/utils/testPayloadHelper.js @@ -245,7 +245,7 @@ async function sendStreamTestRequest(options) { * @param {number} options.maxTokens - 最大输出 token(默认 100) * @returns {object} 测试请求体 */ -function createGeminiTestPayload(model = 'gemini-2.5-pro', options = {}) { +function createGeminiTestPayload(_model = 'gemini-2.5-pro', options = {}) { const { prompt = 'hi', maxTokens = 100 } = options return { contents: [