/** * Settings management — in-memory settings with persistence via saveStateSync. * Depends on: state.js (SETTINGS_DEFAULTS, saveStateSync via the index snapshot callback) */ const { SETTINGS_DEFAULTS } = require('./state.js'); let currentSettings = { ...SETTINGS_DEFAULTS }; let runtimeProxyPort = SETTINGS_DEFAULTS.proxyPort; let _saveState = null; // injected by index.js function init(saveStateFn) { _saveState = saveStateFn; } function applyLoaded(loaded) { currentSettings = { ...SETTINGS_DEFAULTS, ...loaded }; if (currentSettings.proxyPort) runtimeProxyPort = currentSettings.proxyPort; } function getSettings() { return { ...currentSettings }; } function updateSettings(patch) { if (!patch || typeof patch !== 'object') return { requiresRestart: false }; let requiresRestart = false; if (typeof patch.proxyPort === 'number' && patch.proxyPort > 0 && patch.proxyPort < 65536) { if (patch.proxyPort !== currentSettings.proxyPort) requiresRestart = true; currentSettings.proxyPort = patch.proxyPort; runtimeProxyPort = patch.proxyPort; } if (typeof patch.connectProxyPort === 'number' && patch.connectProxyPort > 0 && patch.connectProxyPort < 65536) { if (patch.connectProxyPort !== currentSettings.connectProxyPort) requiresRestart = true; currentSettings.connectProxyPort = patch.connectProxyPort; } if (typeof patch.readyTimeoutMs === 'number') currentSettings.readyTimeoutMs = patch.readyTimeoutMs; if (typeof patch.notifyOnDisconnect === 'boolean') currentSettings.notifyOnDisconnect = patch.notifyOnDisconnect; if (typeof patch.notifyOnTunnelError === 'boolean') currentSettings.notifyOnTunnelError = patch.notifyOnTunnelError; if (typeof patch.debug === 'boolean') currentSettings.debug = patch.debug; if (typeof patch.disableOnFileUrls === 'boolean') currentSettings.disableOnFileUrls = patch.disableOnFileUrls; if (typeof patch.backupRetention === 'number') currentSettings.backupRetention = patch.backupRetention; if (typeof patch.backupIntervalHours === 'number') currentSettings.backupIntervalHours = patch.backupIntervalHours; if (typeof patch.tunnelAutoReconnect === 'boolean') currentSettings.tunnelAutoReconnect = patch.tunnelAutoReconnect; if (_saveState) _saveState(); return { requiresRestart }; } function getProxyPort() { return runtimeProxyPort; } function setProxyPort(port) { if (typeof port === 'number' && port > 0 && port < 65536) runtimeProxyPort = port; } function getReadyTimeoutMs() { return currentSettings.readyTimeoutMs; } function getTunnelAutoReconnect() { return !!currentSettings.tunnelAutoReconnect; } module.exports = { init, applyLoaded, getSettings, updateSettings, getProxyPort, setProxyPort, getReadyTimeoutMs, getTunnelAutoReconnect };