Files
WYF-koubo/electron/mapi/systemConfig.ts
T
2026-06-19 18:45:55 +08:00

132 lines
4.1 KiB
TypeScript

import axios from 'axios'
import * as fs from 'fs'
import * as path from 'path'
import { app } from 'electron'
import { AUTH_SERVER_URL } from './auth/config'
import { withoutUnsupportedProxy } from './httpClient'
interface SystemConfig {
aliyun_bailian_api_key: string
aliyun_bailian_base_url: string
aliyun_oss_access_key_id: string
aliyun_oss_access_key_secret: string
aliyun_oss_bucket: string
aliyun_oss_region: string
volcengine_api_key: string
volcengine_model: string
runninghub_api_key: string
runninghub_workflow_id_1: string
runninghub_workflow_id_2: string
runninghub_tts_webapp_id_v2: string
runninghub_tts_webapp_id_v3: string
runninghub_tts_v2_audio_node: string
runninghub_tts_v2_text_node: string
runninghub_tts_v2_emotion_node: string
cloud_beauty_base_url: string
cloud_beauty_api_key: string
cloud_beauty_default_mode: string
cloud_beauty_enabled: string
update_url: string
}
let cachedConfig: SystemConfig | null = null
let lastFetchTime = 0
const FALLBACK: SystemConfig = {
aliyun_bailian_api_key: '',
aliyun_bailian_base_url: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
aliyun_oss_access_key_id: '',
aliyun_oss_access_key_secret: '',
aliyun_oss_bucket: '',
aliyun_oss_region: 'oss-cn-beijing',
volcengine_api_key: '',
volcengine_model: 'doubao-seed-2-0-mini-260215',
runninghub_api_key: '',
runninghub_workflow_id_1: '2013514129943826433',
runninghub_workflow_id_2: '2013514129943826433',
runninghub_tts_webapp_id_v2: '1965614643077070850',
runninghub_tts_webapp_id_v3: '2028779949334728706',
runninghub_tts_v2_audio_node: '13',
runninghub_tts_v2_text_node: '14',
runninghub_tts_v2_emotion_node: '15',
cloud_beauty_base_url: '',
cloud_beauty_api_key: '',
cloud_beauty_default_mode: '256m',
cloud_beauty_enabled: 'false',
update_url: ''
}
function getConfigFilePath(): string {
try {
return path.join(app.getPath('userData'), 'systemConfig.json')
} catch {
return path.join(process.cwd(), 'data', 'systemConfig.json')
}
}
function loadFromFile(): SystemConfig | null {
try {
const filePath = getConfigFilePath()
if (fs.existsSync(filePath)) {
const data = fs.readFileSync(filePath, 'utf-8')
const parsed = JSON.parse(data)
if (parsed && typeof parsed === 'object') {
return { ...FALLBACK, ...parsed }
}
}
} catch {}
return null
}
function saveToFile(config: SystemConfig): void {
try {
const filePath = getConfigFilePath()
const dir = path.dirname(filePath)
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true })
}
fs.writeFileSync(filePath, JSON.stringify(config, null, 2), 'utf-8')
} catch {}
}
export async function fetchElectronSystemConfig(): Promise<SystemConfig> {
const now = Date.now()
try {
const baseUrl = AUTH_SERVER_URL.replace(/\/api\/?$/, '').replace(/\/$/, '')
const response = await axios.get(`${baseUrl}/api/system/config/public`, withoutUnsupportedProxy({
timeout: 5000,
params: { _t: now },
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate',
Pragma: 'no-cache'
}
}))
if (response.data?.success && response.data?.config) {
cachedConfig = { ...FALLBACK, ...response.data.config }
lastFetchTime = now
saveToFile(cachedConfig)
return cachedConfig
}
} catch (error) {
console.warn('[ElectronSystemConfig] 获取系统配置失败:', error)
}
return cachedConfig || loadFromFile() || FALLBACK
}
export function getElectronSystemConfigSync(): SystemConfig {
if (cachedConfig) return cachedConfig
const fileConfig = loadFromFile()
if (fileConfig) {
cachedConfig = fileConfig
return cachedConfig
}
return FALLBACK
}
export function clearElectronConfigCache(): void {
cachedConfig = null
lastFetchTime = 0
}