diff --git a/src/webui/index.js b/src/webui/index.js index f2cd228..a47daf9 100644 --- a/src/webui/index.js +++ b/src/webui/index.js @@ -287,7 +287,7 @@ export function mountWebUI(app, dirname, accountManager) { */ app.post('/api/config', (req, res) => { try { - const { debug, logLevel, maxRetries, retryBaseMs, retryMaxMs, persistTokenCache, defaultCooldownMs, maxWaitBeforeErrorMs, maxAccounts, accountSelection } = req.body; + const { debug, logLevel, maxRetries, retryBaseMs, retryMaxMs, persistTokenCache, defaultCooldownMs, maxWaitBeforeErrorMs, maxAccounts, accountSelection, rateLimitDedupWindowMs, maxConsecutiveFailures, extendedCooldownMs, capacityRetryDelayMs, maxCapacityRetries } = req.body; // Only allow updating specific fields (security) const updates = {}; @@ -316,6 +316,21 @@ export function mountWebUI(app, dirname, accountManager) { if (typeof maxAccounts === 'number' && maxAccounts >= 1 && maxAccounts <= 100) { updates.maxAccounts = maxAccounts; } + if (typeof rateLimitDedupWindowMs === 'number' && rateLimitDedupWindowMs >= 1000 && rateLimitDedupWindowMs <= 30000) { + updates.rateLimitDedupWindowMs = rateLimitDedupWindowMs; + } + if (typeof maxConsecutiveFailures === 'number' && maxConsecutiveFailures >= 1 && maxConsecutiveFailures <= 10) { + updates.maxConsecutiveFailures = maxConsecutiveFailures; + } + if (typeof extendedCooldownMs === 'number' && extendedCooldownMs >= 10000 && extendedCooldownMs <= 300000) { + updates.extendedCooldownMs = extendedCooldownMs; + } + if (typeof capacityRetryDelayMs === 'number' && capacityRetryDelayMs >= 500 && capacityRetryDelayMs <= 10000) { + updates.capacityRetryDelayMs = capacityRetryDelayMs; + } + if (typeof maxCapacityRetries === 'number' && maxCapacityRetries >= 1 && maxCapacityRetries <= 10) { + updates.maxCapacityRetries = maxCapacityRetries; + } // Account selection strategy validation if (accountSelection && typeof accountSelection === 'object') { const validStrategies = ['sticky', 'round-robin', 'hybrid'];