@@ -3,8 +3,6 @@ import {fetchCached as fetch} from "./fetch.js";
3
3
4
4
const { GITHUB_TOKEN } = process . env ;
5
5
6
- let ratelimitReset ;
7
-
8
6
export async function fetchGithub ( path , options ) {
9
7
return ( await requestGithub ( path , options ) ) . body ;
10
8
}
@@ -20,19 +18,18 @@ export async function requestGithub(
20
18
let response ;
21
19
let headers ;
22
20
for ( let attempt = 0 , maxAttempts = 3 ; attempt < maxAttempts ; ++ attempt ) {
23
- if ( ratelimitReset ) {
24
- console . warn ( `x-ratelimit-reset ${ ratelimitReset } ` ) ;
25
- const ratelimitDelay = new Date ( ratelimitReset * 1000 ) - Date . now ( ) ;
26
- await new Promise ( ( resolve ) => setTimeout ( resolve , ratelimitDelay ) ) ;
27
- ratelimitDelay = null ;
28
- }
29
21
response = await fetch ( url , { ...( authorization && { authorization} ) , accept} ) ;
30
- headers = response . headers ;
31
- if ( headers [ "x-ratelimit-remaining" ] === "0" ) ratelimitReset = headers [ "x-ratelimit-reset" ] ;
22
+ headers = Object . fromEntries ( response . headers . entries ( ) ) ;
32
23
if ( response . ok ) break ;
24
+ if ( headers [ "x-ratelimit-remaining" ] === "0" ) {
25
+ const ratelimitDelay = new Date ( headers [ "x-ratelimit-reset" ] * 1000 ) - Date . now ( ) ;
26
+ console . warn ( `x-ratelimit-reset ${ headers [ "x-ratelimit-reset" ] } ` , ratelimitDelay ) ;
27
+ await new Promise ( ( resolve ) => setTimeout ( resolve , ratelimitDelay ) ) ;
28
+ continue ;
29
+ }
33
30
if ( headers [ "retry-after" ] ) {
34
- console . warn ( ` retry-after ${ retryAfter } ` ) ;
35
- const retryDelay = retryAfter * 1000 ;
31
+ const retryDelay = headers [ " retry-after" ] * 1000 ;
32
+ console . warn ( `retry-after ${ headers [ "retry-after" ] } ` , retryDelay ) ;
36
33
await new Promise ( ( resolve ) => setTimeout ( resolve , retryDelay ) ) ;
37
34
continue ;
38
35
}
0 commit comments