154 lines
4.8 KiB
JavaScript
154 lines
4.8 KiB
JavaScript
// Configuration management for environment-based settings
|
|
const os = require('os');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
|
|
class Config {
|
|
constructor() {
|
|
this.env = process.env.NODE_ENV || 'development';
|
|
this.defaults = {
|
|
apiUrl: process.env.pickleglass_API_URL || 'http://localhost:9001',
|
|
apiTimeout: 10000,
|
|
|
|
webUrl: process.env.pickleglass_WEB_URL || 'http://localhost:3000',
|
|
|
|
enableJWT: false,
|
|
fallbackToHeaderAuth: false,
|
|
|
|
cacheTimeout: 5 * 60 * 1000,
|
|
enableCaching: true,
|
|
|
|
syncInterval: 0,
|
|
healthCheckInterval: 30 * 1000,
|
|
|
|
defaultWindowWidth: 400,
|
|
defaultWindowHeight: 60,
|
|
|
|
enableOfflineMode: true,
|
|
enableFileBasedCommunication: false,
|
|
enableSQLiteStorage: true,
|
|
|
|
logLevel: 'info',
|
|
enableDebugLogging: false
|
|
};
|
|
|
|
this.config = { ...this.defaults };
|
|
this.loadEnvironmentConfig();
|
|
this.loadUserConfig();
|
|
}
|
|
|
|
loadEnvironmentConfig() {
|
|
if (process.env.pickleglass_API_URL) {
|
|
this.config.apiUrl = process.env.pickleglass_API_URL;
|
|
console.log(`[Config] API URL from env: ${this.config.apiUrl}`);
|
|
}
|
|
|
|
if (process.env.pickleglass_WEB_URL) {
|
|
this.config.webUrl = process.env.pickleglass_WEB_URL;
|
|
console.log(`[Config] Web URL from env: ${this.config.webUrl}`);
|
|
}
|
|
|
|
if (process.env.pickleglass_API_TIMEOUT) {
|
|
this.config.apiTimeout = parseInt(process.env.pickleglass_API_TIMEOUT);
|
|
}
|
|
|
|
if (process.env.pickleglass_ENABLE_JWT) {
|
|
this.config.enableJWT = process.env.pickleglass_ENABLE_JWT === 'true';
|
|
}
|
|
|
|
if (process.env.pickleglass_CACHE_TIMEOUT) {
|
|
this.config.cacheTimeout = parseInt(process.env.pickleglass_CACHE_TIMEOUT);
|
|
}
|
|
|
|
if (process.env.pickleglass_LOG_LEVEL) {
|
|
this.config.logLevel = process.env.pickleglass_LOG_LEVEL;
|
|
}
|
|
|
|
if (process.env.pickleglass_DEBUG) {
|
|
this.config.enableDebugLogging = process.env.pickleglass_DEBUG === 'true';
|
|
}
|
|
|
|
if (this.env === 'production') {
|
|
this.config.enableDebugLogging = false;
|
|
this.config.logLevel = 'warn';
|
|
} else if (this.env === 'development') {
|
|
this.config.enableDebugLogging = true;
|
|
this.config.logLevel = 'debug';
|
|
}
|
|
}
|
|
|
|
loadUserConfig() {
|
|
try {
|
|
const userConfigPath = this.getUserConfigPath();
|
|
if (fs.existsSync(userConfigPath)) {
|
|
const userConfig = JSON.parse(fs.readFileSync(userConfigPath, 'utf-8'));
|
|
this.config = { ...this.config, ...userConfig };
|
|
console.log('[Config] User config loaded from:', userConfigPath);
|
|
}
|
|
} catch (error) {
|
|
console.warn('[Config] Failed to load user config:', error.message);
|
|
}
|
|
}
|
|
|
|
getUserConfigPath() {
|
|
const configDir = path.join(os.homedir(), '.pickleglass');
|
|
if (!fs.existsSync(configDir)) {
|
|
fs.mkdirSync(configDir, { recursive: true });
|
|
}
|
|
return path.join(configDir, 'config.json');
|
|
}
|
|
|
|
get(key) {
|
|
return this.config[key];
|
|
}
|
|
|
|
set(key, value) {
|
|
this.config[key] = value;
|
|
}
|
|
|
|
getAll() {
|
|
return { ...this.config };
|
|
}
|
|
|
|
saveUserConfig() {
|
|
try {
|
|
const userConfigPath = this.getUserConfigPath();
|
|
const userConfig = { ...this.config };
|
|
|
|
Object.keys(this.defaults).forEach(key => {
|
|
if (userConfig[key] === this.defaults[key]) {
|
|
delete userConfig[key];
|
|
}
|
|
});
|
|
|
|
fs.writeFileSync(userConfigPath, JSON.stringify(userConfig, null, 2));
|
|
console.log('[Config] User config saved to:', userConfigPath);
|
|
} catch (error) {
|
|
console.error('[Config] Failed to save user config:', error);
|
|
}
|
|
}
|
|
|
|
reset() {
|
|
this.config = { ...this.defaults };
|
|
this.loadEnvironmentConfig();
|
|
}
|
|
|
|
isDevelopment() {
|
|
return this.env === 'development';
|
|
}
|
|
|
|
isProduction() {
|
|
return this.env === 'production';
|
|
}
|
|
|
|
shouldLog(level) {
|
|
const levels = ['debug', 'info', 'warn', 'error'];
|
|
const currentLevelIndex = levels.indexOf(this.config.logLevel);
|
|
const requestedLevelIndex = levels.indexOf(level);
|
|
return requestedLevelIndex >= currentLevelIndex;
|
|
}
|
|
}
|
|
|
|
const config = new Config();
|
|
|
|
module.exports = config; |