declare const E: ErrorConstructor; interface AsyncRetryContext { readonly error: unknown; readonly attemptNumber: number; readonly retriesLeft: number; } interface AsyncRetryOptions { /** Callback invoked on each retry. Receives a context object containing the error and retry state information. The `onFailedAttempt` function can return a promise. For example, to add extra delay, especially useful reading `Retry-After` header. If the `onFailedAttempt` function throws, all retries will be aborted and the original promise will reject with the thrown error. */ onFailedAttempt?: (context: AsyncRetryContext) => void | Promise; /** * @deprecated Use `onFailedAttempt` instead. This is added only to be compatible with `async-retry` */ onRetry?: (error: unknown, attemptNumber: number) => void | Promise; /** Decide if a retry should occur based on the context. Returning true triggers a retry, false aborts with the error. It is only called if `retries` and `maxRetryTime` have not been exhausted. It is not called for `TypeError` (except network errors) and `AbortError`. In the example above, the operation will be retried unless the error is an instance of `CustomError`. */ shouldRetry?: (context: AsyncRetryContext) => boolean | Promise; /** * @deprecated Use `retries` w/ `Number.POSITIVE_INFINITY` instead */ forever?: boolean; /** The maximum amount of times to retry the operation. @default 10 */ retries?: number; /** The exponential factor to use. @default 2 */ factor?: number; /** The number of milliseconds before starting the first retry. @default 1000 */ minTimeout?: number; /** The maximum number of milliseconds between two retries. @default Infinity */ maxTimeout?: number; /** Randomizes the timeouts by multiplying with a factor between 1 and 2. @default true */ randomize?: boolean; /** The maximum time (in milliseconds) that the retried operation is allowed to run. @default Infinity */ maxRetryTime?: number; /** You can abort retrying using [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController). */ signal?: AbortSignal; /** Prevents retry timeouts from keeping the process alive. Only affects platforms with a `.unref()` method on timeouts, such as Node.js. @default false */ unref?: boolean; } declare class AsyncRetryAbortError extends E { name: string; cause?: unknown; constructor(message: string | Error | unknown); } declare function asyncRetry(callback: (bail: (reason?: unknown) => never, attemptNumber: number) => PromiseLike | T, retryOptions?: AsyncRetryOptions): Promise; declare function makeRetriable(fn: (...args: Args) => PromiseLike | Result, options?: AsyncRetryOptions): (this: unknown, ...args: Args) => Promise; export { AsyncRetryAbortError, asyncRetry, makeRetriable }; export type { AsyncRetryContext, AsyncRetryOptions };