diff --git a/src/index.ts b/src/index.ts index ff951c59..0e9cb575 100644 --- a/src/index.ts +++ b/src/index.ts @@ -148,7 +148,9 @@ export function throttling(octokit: Octokit, octokitOptions: OctokitOptions) { ~~error.response.headers["x-ratelimit-reset"] * 1000, ).getTime(); const retryAfter = Math.max( - Math.ceil((rateLimitReset - Date.now()) / 1000), + // Add one second so we retry _after_ the reset time + // https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#exceeding-the-rate-limit + Math.ceil((rateLimitReset - Date.now()) / 1000) + 1, 0, ); const wantRetry = await emitter.trigger( diff --git a/test/events.test.ts b/test/events.test.ts index 51421459..16e8a16b 100644 --- a/test/events.test.ts +++ b/test/events.test.ts @@ -133,8 +133,8 @@ describe("Events", function () { throttle: { onRateLimit: (retryAfter, options, octokitFromOptions) => { expect(octokit).toBe(octokitFromOptions); - expect(retryAfter).toBeLessThan(32); - expect(retryAfter).toBeGreaterThan(28); + expect(retryAfter).toBeLessThan(33); + expect(retryAfter).toBeGreaterThan(29); expect(options).toMatchObject({ method: "GET", url: "/route2",