diff --git a/src/error-request.ts b/src/error-request.ts index 59589c9e..622e423d 100644 --- a/src/error-request.ts +++ b/src/error-request.ts @@ -1,6 +1,13 @@ -// @ts-ignore +import type { Octokit } from "@octokit/core"; +import { RequestError } from "@octokit/request-error"; +import { RetryState, RequestOptionsWithRequest } from "./types"; -export async function errorRequest(octokit, state, error, options) { +export async function errorRequest( + octokit: Octokit, + state: RetryState, + error: RequestError, + options: RequestOptionsWithRequest +) { if (!error.request || !error.request.request) { // address https://github.com/octokit/plugin-retry.js/issues/8 throw error; diff --git a/src/types.js b/src/types.js new file mode 100644 index 00000000..e69de29b diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 00000000..9302f83c --- /dev/null +++ b/src/types.ts @@ -0,0 +1,12 @@ +import { RequestOptions, RequestRequestOptions } from "@octokit/types"; + +export interface RetryState { + enabled: boolean; + retryAfterBaseValue: number; + doNotRetry: number[]; + retries: number; +} + +export interface RequestOptionsWithRequest extends RequestOptions { + request: RequestRequestOptions; +} diff --git a/src/wrap-request.ts b/src/wrap-request.ts index 079afe01..1f31f407 100644 --- a/src/wrap-request.ts +++ b/src/wrap-request.ts @@ -1,14 +1,20 @@ -// @ts-ignore +import { OctokitResponse } from "@octokit/types"; import Bottleneck from "bottleneck/light"; +import { RetryState, RequestOptionsWithRequest } from "./types"; -// @ts-ignore -export async function wrapRequest(state, request, options) { +export async function wrapRequest( + state: RetryState, + request: ( + options: RequestOptionsWithRequest + ) => Promise>, + options: RequestOptionsWithRequest +) { const limiter = new Bottleneck(); - // @ts-ignore limiter.on("failed", function (error, info) { const maxRetries = ~~error.request.request.retries; const after = ~~error.request.request.retryAfter; + options.request.retryCount = info.retryCount + 1; if (maxRetries > info.retryCount) { @@ -18,5 +24,8 @@ export async function wrapRequest(state, request, options) { } }); - return limiter.schedule(request, options); + return limiter.schedule, RequestOptionsWithRequest>( + request, + options + ); }