From b8677c9f6bd15c2322144799d036f5b789292984 Mon Sep 17 00:00:00 2001 From: Badri Narayanan S Date: Thu, 25 Dec 2025 22:00:48 +0530 Subject: [PATCH] feat: show remaining time for rate-limited accounts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Display rate limit remaining duration in Status column (e.g., "limited (1h23m45s)") instead of just "rate-limited" 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/server.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/server.js b/src/server.js index 39d50ed..5484482 100644 --- a/src/server.js +++ b/src/server.js @@ -10,6 +10,7 @@ import { sendMessage, sendMessageStream, listModels, getModelQuotas } from './cl import { forceRefresh } from './token-extractor.js'; import { REQUEST_BODY_LIMIT } from './constants.js'; import { AccountManager } from './account-manager.js'; +import { formatDuration } from './utils/helpers.js'; const app = express(); @@ -224,7 +225,15 @@ app.get('/account-limits', async (req, res) => { // Get status and error from accountLimits const accLimit = accountLimits.find(a => a.email === acc.email); - const accStatus = acc.isInvalid ? 'invalid' : (acc.isRateLimited ? 'rate-limited' : (accLimit?.status || 'ok')); + let accStatus; + if (acc.isInvalid) { + accStatus = 'invalid'; + } else if (acc.isRateLimited) { + const remaining = acc.rateLimitResetTime ? acc.rateLimitResetTime - Date.now() : 0; + accStatus = remaining > 0 ? `limited (${formatDuration(remaining)})` : 'rate-limited'; + } else { + accStatus = accLimit?.status || 'ok'; + } // Get reset time from quota API const claudeModel = sortedModels.find(m => m.includes('claude'));