Spaces:
Running
Running
File size: 5,648 Bytes
b51f54a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
// 加载环境变量
require('dotenv').config();
// 环境检查
const envChecker = require('./src/utils/envChecker');
console.log('启动前检查环境配置...');
envChecker.enforceEnvCheck();
// 已适配GitHub Actions工作流新参数 (use_config_file, email_configs)
console.log('环境检查通过,已适配最新GitHub Actions工作流参数');
const cookieRefresher = require('./src/utils/cookieRefresher');
const keyManager = require('./src/utils/keyManager');
const config = require('./src/config/config');
// 解析命令行参数
const args = process.argv.slice(2);
const targetApiKey = args.length > 0 ? args[0] : null;
const forceRefresh = args.includes('--force') || args.includes('-f');
// 最小 Cookie 数量
const MIN_COOKIE_COUNT = config.refresh.minCookieCount;
// 获取Cookie刷新模式
const COOKIE_REFRESH_MODE = process.env.COOKIE_REFRESH_MODE || 'append';
// 主函数
async function main() {
console.log('===== 自动刷新 Cookie 开始 =====');
console.log(`最小 Cookie 数量: ${MIN_COOKIE_COUNT}`);
console.log(`Cookie 刷新模式: ${COOKIE_REFRESH_MODE} (${COOKIE_REFRESH_MODE === 'replace' ? '替换现有cookie' : '追加新cookie'})`);
if (targetApiKey) {
console.log(`指定刷新 API Key: ${targetApiKey}`);
}
if (forceRefresh) {
console.log('强制刷新模式: 忽略 Cookie 数量检查');
}
try {
// 获取所有 API Key
const apiKeys = keyManager.getAllApiKeys();
if (apiKeys.length === 0) {
console.log('警告: 系统中没有找到任何 API Key');
// 检查环境变量中是否有 API Keys
const envApiKeys = Object.keys(config.apiKeys);
if (envApiKeys.length > 0) {
console.log(`检测到环境变量中有 ${envApiKeys.length} 个 API Key,但尚未加载到系统中`);
console.log('正在重新初始化 API Keys...');
// 重新初始化 API Keys
keyManager.initializeApiKeys();
// 重新获取 API Keys
const refreshedApiKeys = keyManager.getAllApiKeys();
if (refreshedApiKeys.length > 0) {
console.log(`成功加载 ${refreshedApiKeys.length} 个 API Key,继续刷新流程`);
// 继续执行后续刷新逻辑
} else {
console.log('初始化后仍未找到 API Key,请检查配置');
console.log('===== 自动刷新 Cookie 结束 =====');
return;
}
} else {
console.log('环境变量中也没有配置 API Key,请先添加 API Key');
console.log('===== 自动刷新 Cookie 结束 =====');
return;
}
}
// 重新获取最新的 API Keys(可能已经通过上面的初始化更新了)
const updatedApiKeys = keyManager.getAllApiKeys();
console.log(`系统中共有 ${updatedApiKeys.length} 个 API Key`);
// 如果指定了特定的 API Key,检查它是否存在
if (targetApiKey && !updatedApiKeys.includes(targetApiKey)) {
console.error(`错误: 指定的 API Key "${targetApiKey}" 不存在`);
console.log('===== 自动刷新 Cookie 异常结束 =====');
return;
}
// 过滤需要处理的 API Keys
const keysToProcess = targetApiKey ? [targetApiKey] : updatedApiKeys;
// 按 Cookie 数量排序,优先处理 Cookie 数量少的 API Key
const sortedKeys = keysToProcess.sort((a, b) => {
const aCount = keyManager.getAllCookiesForApiKey(a).length;
const bCount = keyManager.getAllCookiesForApiKey(b).length;
return aCount - bCount; // 升序排列,Cookie 数量少的排在前面
});
// 检查每个 API Key 是否需要刷新
let refreshedCount = 0;
let needRefreshCount = 0;
for (const apiKey of sortedKeys) {
const cookies = keyManager.getAllCookiesForApiKey(apiKey);
console.log(`API Key: ${apiKey}, Cookie 数量: ${cookies.length}`);
// 判断是否需要刷新:强制刷新模式或 Cookie 数量低于阈值
if (forceRefresh || cookies.length < MIN_COOKIE_COUNT) {
needRefreshCount++;
if (forceRefresh) {
console.log(`强制刷新 API Key: ${apiKey}`);
} else {
console.log(`API Key ${apiKey} 的 Cookie 数量不足,需要刷新`);
}
// 执行刷新
console.log(`开始自动刷新 Cookie,目标 API Key: ${apiKey},最小 Cookie 数量: ${MIN_COOKIE_COUNT},刷新模式: ${COOKIE_REFRESH_MODE}`);
const result = await cookieRefresher.autoRefreshCookies(apiKey, MIN_COOKIE_COUNT);
if (result.success) {
refreshedCount++;
console.log(`刷新结果: ${result.message}`);
// 根据刷新模式输出额外的信息
if (COOKIE_REFRESH_MODE === 'replace') {
console.log(`使用替换模式: 现有cookie已全部标记为无效,系统现在只使用新cookie`);
} else {
console.log(`使用追加模式: 现有cookie已保留,新cookie已添加到系统`);
}
} else {
console.error(`刷新失败: ${result.message}`);
}
} else {
console.log(`API Key ${apiKey} 的 Cookie 数量足够,不需要刷新`);
}
}
console.log('===== 自动刷新 Cookie 完成 =====');
console.log(`共有 ${needRefreshCount} 个 API Key 需要刷新,成功刷新 ${refreshedCount} 个`);
} catch (error) {
console.error('自动刷新 Cookie 失败:', error);
console.log('===== 自动刷新 Cookie 异常结束 =====');
}
}
// 执行主函数
main().catch(console.error); |