File size: 3,624 Bytes
b5e1f18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
// 读取并解析API_KEYS环境变量
// 避免循环依赖,不要在此处引用logger

// 添加自己的简单日志函数,防止循环依赖
function log(level, message) {
  // 只在控制台输出,不写入文件
  const timestamp = new Date().toISOString();
  if (level === 'ERROR') {
    console.error(`[ERROR] ${timestamp} ${message}`);
  } else if (level === 'WARN') {
    console.warn(`[WARN] ${timestamp} ${message}`);
  } else {
    console.log(`[INFO] ${timestamp} ${message}`);
  }
}

// 解析API Keys配置
let apiKeysConfig = {};
try {
    if (process.env.API_KEYS) {
        // 解析API Keys字符串为对象
        apiKeysConfig = JSON.parse(process.env.API_KEYS);
        log('INFO', '正在从环境变量加载API Keys...');
        log('INFO', `成功解析API Keys,包含 ${Object.keys(apiKeysConfig).length} 个键`);
    }
} catch (error) {
    log('ERROR', '解析API_KEYS环境变量失败:' + error.message);
    log('ERROR', '请确保API_KEYS是有效的JSON格式');
}

// 导出配置
module.exports = {
    port: process.env.PORT || 3000,
    
    // 日志配置
    log: {
        level: process.env.LOG_LEVEL || 'INFO', // ERROR, WARN, INFO, DEBUG, TRACE
        format: process.env.LOG_FORMAT || 'colored', // colored, json, text
        toFile: process.env.LOG_TO_FILE === 'true' || false,
        maxSize: parseInt(process.env.LOG_MAX_SIZE || '10', 10) * 1024 * 1024, // 默认10MB
        maxFiles: parseInt(process.env.LOG_MAX_FILES || '10', 10) // 保留最近10个日志文件
    },

    // 合并API Keys设置
    apiKeys: {
        ...apiKeysConfig,
        ...Object.fromEntries(
            Object.entries(process.env)
                .filter(([key]) => key.startsWith('API_KEY_'))
                .map(([key, value]) => {
                    const apiKey = key.replace('API_KEY_', 'sk-');
                    try {
                        // 尝试解析JSON字符串,支持数组格式的cookie
                        const parsed = JSON.parse(value);
                        return [apiKey, parsed];
                    } catch (e) {
                        // 如果不是JSON,直接作为字符串处理
                        return [apiKey, value];
                    }
                })
        )
    },

    defaultRotationStrategy: process.env.ROTATION_STRATEGY || 'round-robin',
    
    // 添加代理配置
    proxy: {
        enabled: process.env.PROXY_ENABLED === 'true' || false,
        url: process.env.PROXY_URL || 'http://127.0.0.1:7890',
    },
    
    // GitHub相关配置
    github: {
        token: process.env.GITHUB_TOKEN,
        owner: process.env.GITHUB_OWNER,
        repo: process.env.GITHUB_REPO,
        workflowId: process.env.GITHUB_WORKFLOW_ID,
        triggerWorkflow: process.env.TRIGGER_WORKFLOW === 'true'
    },
    
    // 工作流参数
    workflowParams: {
        number: parseInt(process.env.REGISTER_NUMBER || '2', 10),
        maxWorkers: parseInt(process.env.REGISTER_MAX_WORKERS || '1', 10),
        emailServer: process.env.REGISTER_EMAIL_SERVER || 'TempEmail',
        ingestToOneapi: process.env.REGISTER_INGEST_TO_ONEAPI === 'true',
        uploadArtifact: process.env.REGISTER_UPLOAD_ARTIFACT === 'true',
        useConfigFile: process.env.REGISTER_USE_CONFIG_FILE !== 'false',
        emailConfigs: process.env.REGISTER_EMAIL_CONFIGS || '[]'
    },
    
    // 刷新配置
    refresh: {
        cron: process.env.REFRESH_CRON || '0 */6 * * *',
        minCookieCount: parseInt(process.env.MIN_COOKIE_COUNT || '2', 10),
        enabled: process.env.ENABLE_AUTO_REFRESH === 'true'
    }
};