| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- const fs = require('node:fs');
- const path = require('node:path');
- const crypto = require('node:crypto');
- const { getConfigFilePath } = require('../utils/paths.cjs');
- const defaultConfig = {
- api_key: '',
- base_url: '',
- model_name: 'gpt-3.5-turbo',
- image_model: {
- provider: 'volcengine',
- base_url: 'https://ark.cn-beijing.volces.com/api/v3',
- api_key: '',
- model_name: '',
- status: 'untested',
- tested_at: '',
- last_error: '',
- },
- file_parser: {
- provider: 'local',
- mineru_token: '',
- },
- developer_mode: false,
- real_time_render: true,
- analytics_client_id: '',
- analytics_created_at: '',
- };
- function createAnalyticsClientId() {
- return crypto.randomUUID();
- }
- function createAnalyticsCreatedAt() {
- return new Date().toISOString().slice(0, 10);
- }
- function normalizeConfig(config) {
- const fileParser = config && config.file_parser ? config.file_parser : {};
- return {
- ...defaultConfig,
- ...config,
- image_model: {
- ...defaultConfig.image_model,
- ...(config && config.image_model ? config.image_model : {}),
- },
- file_parser: {
- provider: fileParser.provider || defaultConfig.file_parser.provider,
- mineru_token: fileParser.mineru_token || defaultConfig.file_parser.mineru_token,
- },
- };
- }
- function createConfigStore(app) {
- const configFile = getConfigFilePath(app);
- function persist(config) {
- fs.mkdirSync(path.dirname(configFile), { recursive: true });
- fs.writeFileSync(configFile, JSON.stringify(config, null, 2), 'utf-8');
- }
- function withAnalyticsIdentity(config) {
- if (config.analytics_client_id && config.analytics_created_at) {
- return config;
- }
- return {
- ...config,
- analytics_client_id: config.analytics_client_id || createAnalyticsClientId(),
- analytics_created_at: config.analytics_created_at || createAnalyticsCreatedAt(),
- };
- }
- return {
- getConfigFilePath() {
- return configFile;
- },
- load() {
- if (!fs.existsSync(configFile)) {
- const config = withAnalyticsIdentity(normalizeConfig());
- persist(config);
- return config;
- }
- try {
- const raw = fs.readFileSync(configFile, 'utf-8');
- const config = normalizeConfig(JSON.parse(raw));
- const nextConfig = withAnalyticsIdentity(config);
- if (nextConfig !== config) {
- persist(nextConfig);
- }
- return nextConfig;
- } catch (error) {
- throw new Error(`配置文件读取失败:${error.message}`);
- }
- },
- save(config) {
- try {
- const currentConfig = fs.existsSync(configFile)
- ? normalizeConfig(JSON.parse(fs.readFileSync(configFile, 'utf-8')))
- : normalizeConfig();
- const nextConfig = withAnalyticsIdentity(normalizeConfig({
- ...config,
- analytics_client_id: config?.analytics_client_id || currentConfig.analytics_client_id,
- analytics_created_at: config?.analytics_created_at || currentConfig.analytics_created_at,
- }));
- persist(nextConfig);
- return { success: true, message: '配置已保存', config_path: configFile };
- } catch (error) {
- throw new Error(`配置文件保存失败:${error.message}`);
- }
- },
- };
- }
- module.exports = {
- createConfigStore,
- };
|