* Delay execution to respect rate limits
()
| 94 | * Delay execution to respect rate limits |
| 95 | */ |
| 96 | async function respectRateLimits(): Promise<void> { |
| 97 | // If we have very few requests remaining, add delay |
| 98 | if (apiRateLimit.remaining < 5 && apiRateLimit.resetTime) { |
| 99 | const timeUntilReset = apiRateLimit.resetTime.getTime() - Date.now(); |
| 100 | |
| 101 | // If reset time is in the future, delay until reset |
| 102 | if (timeUntilReset > 0) { |
| 103 | console.log( |
| 104 | `Rate limit low (${apiRateLimit.remaining} remaining). Waiting ${timeUntilReset}ms until reset`, |
| 105 | ); |
| 106 | await new Promise((resolve) => |
| 107 | setTimeout(resolve, Math.min(timeUntilReset + 1000, 60000)), |
| 108 | ); // Max 1 minute wait |
| 109 | } |
| 110 | } else { |
| 111 | // Add a small delay between requests to avoid hitting rate limits |
| 112 | await new Promise((resolve) => setTimeout(resolve, DEFAULT_DELAY)); |
| 113 | } |
| 114 | } |
| 115 | |
| 116 | /** |
| 117 | * Make a GitHub API request with rate limit handling |
no test coverage detected