Skip to content

Commit 47be8ae

Browse files
committed
handle retry
1 parent 38fe893 commit 47be8ae

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

src/github.js

+9-12
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ import {fetchCached as fetch} from "./fetch.js";
33

44
const {GITHUB_TOKEN} = process.env;
55

6-
let ratelimitReset;
7-
86
export async function fetchGithub(path, options) {
97
return (await requestGithub(path, options)).body;
108
}
@@ -20,19 +18,18 @@ export async function requestGithub(
2018
let response;
2119
let headers;
2220
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-
}
2921
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());
3223
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+
}
3330
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);
3633
await new Promise((resolve) => setTimeout(resolve, retryDelay));
3734
continue;
3835
}

0 commit comments

Comments
 (0)