rate-limits.mjs
1 #!/usr/bin/env node 2 /** 3 * Rate Limit Status CLI 4 * 5 * Usage: 6 * npm run rate-limits # Show active rate limits 7 * npm run rate-limits:clear # Clear all active rate limits (manual override) 8 * node scripts/rate-limits.mjs --clear zenrows # Clear a specific API 9 */ 10 import { 11 getRateLimitStatus, 12 clearRateLimit, 13 getSkipStages, 14 API_STAGE_MAP, 15 } from '../src/utils/rate-limit-scheduler.js'; 16 17 const args = process.argv.slice(2); 18 const clearMode = args.includes('--clear'); 19 const clearTarget = args.find(a => !a.startsWith('--')); 20 21 if (clearMode) { 22 if (clearTarget) { 23 if (!API_STAGE_MAP[clearTarget]) { 24 console.error(`Unknown API: ${clearTarget}`); 25 console.error(`Known APIs: ${Object.keys(API_STAGE_MAP).join(', ')}`); 26 process.exit(1); 27 } 28 clearRateLimit(clearTarget); 29 console.log(`✅ Cleared rate limit for: ${clearTarget}`); 30 } else { 31 // Clear all 32 const active = getRateLimitStatus(); 33 if (active.length === 0) { 34 console.log('No active rate limits to clear.'); 35 } else { 36 for (const limit of active) { 37 clearRateLimit(limit.api); 38 console.log(`✅ Cleared rate limit for: ${limit.api} (was: ${limit.reason})`); 39 } 40 } 41 } 42 process.exit(0); 43 } 44 45 // Status mode 46 const active = getRateLimitStatus(); 47 const skipped = getSkipStages(); 48 49 if (active.length === 0) { 50 console.log('✅ No active rate limits. All pipeline stages running normally.\n'); 51 } else { 52 console.log(`⏸️ ${active.length} active rate limit(s):\n`); 53 for (const limit of active) { 54 console.log(` API: ${limit.api}`); 55 console.log(` Stages: ${limit.stages.join(', ')}`); 56 console.log(` Reason: ${limit.reason}`); 57 console.log(` Resets: ${limit.resetAt} (~${limit.waitMinutes} min)`); 58 console.log(''); 59 } 60 } 61 62 if (skipped.size > 0) { 63 console.log(`Dynamically skipped stages: ${Array.from(skipped).join(', ')}`); 64 console.log(''); 65 } 66 67 console.log('To clear all rate limits: npm run rate-limits:clear'); 68 console.log('To clear a specific API: node scripts/rate-limits.mjs --clear <api>');