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 <noreply@anthropic.com>
This commit is contained in:
root
2026-01-22 15:14:22 +08:00
parent 24f825f60d
commit 83cbaf7c3e
7 changed files with 13 additions and 30 deletions

View File

@@ -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倍

View File

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

View File

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

View File

@@ -508,7 +508,7 @@ class QuotaCardService {
redemptionData.apiKeyId,
parseFloat(redemptionData.quotaAdded)
)
actualDeducted = result.actualDeducted
;({ actualDeducted } = result)
}
// 注意:时间卡撤销比较复杂,这里简化处理,不回退时间

View File

@@ -45,9 +45,9 @@ class UnifiedGeminiScheduler {
}
// 🔧 辅助方法:检查账户是否激活(兼容字符串和布尔值)
_isActive(isActive) {
_isActive(activeValue) {
// 兼容布尔值 true 和字符串 'true'
return isActive === true || isActive === 'true'
return activeValue === true || activeValue === 'true'
}
// 🎯 统一调度Gemini账号

View File

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

View File

@@ -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: [