iso-web
Version:
Isomorphic web apis utilities for fetch, event target, signals, crypto and doh.
122 lines • 3.98 kB
TypeScript
/** biome-ignore-all lint/suspicious/noConfusingVoidType: its fine */
import type { RetryContext } from 'p-retry';
import type { Jsonifiable } from 'type-fest';
export type RequestInput = URL | string;
export interface RetryOptions {
/**
* The HTTP status codes to retry on.
*
* This includes both error status codes (4xx, 5xx) and success codes (2xx).
* For example, you can retry on 202 (Accepted) to poll until a resource
* is ready, or on 404 to wait for a resource to be created.
*
* @default [408, 413, 429, 500, 502, 503, 504]
*/
statusCodes?: number[];
/**
* The status codes to retry after
*
* Request will wait until the date, timeout, or timestamp given in the Retry-After header has passed to retry the request. If Retry-After is missing, the non-standard RateLimit-Reset header is used in its place as a fallback. If the provided status code is not in the list, the Retry-After header will be ignored.
*
* @default [413, 429, 503]
*/
afterStatusCodes?: number[];
/**
* The methods to retry
*
* @default ['get', 'put', 'head', 'delete', 'options', 'trace']
*/
methods?: string[];
/**
* 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`.
*
* @param context - The context of the retry
* @returns - Whether to retry the request
*/
shouldRetry?: (context: RetryContext) => boolean | Promise<boolean>;
/**
* Whether to [unref](https://nodejs.org/api/timers.html#timers_unref) the setTimeout's.
* @default false
*/
unref?: boolean | undefined;
/**
* The maximum time (in milliseconds) that the retried operation is allowed to run.
* @default Infinity
*/
maxRetryTime?: number | undefined;
/**
* The maximum amount of times to retry the operation.
* @default 10
*/
retries?: number | undefined;
/**
* The exponential factor to use.
* @default 2
*/
factor?: number | undefined;
/**
* The number of milliseconds before starting the first retry.
* @default 1000
*/
minTimeout?: number | undefined;
/**
* The maximum number of milliseconds between two retries.
* @default Infinity
*/
maxTimeout?: number | undefined;
/**
* Randomizes the timeouts by multiplying a factor between 1-2.
* @default false
*/
randomize?: boolean | undefined;
}
export interface RequestOptions {
fetch?: typeof globalThis.fetch;
redirect?: RequestRedirect;
body?: BodyInit | null;
method?: string;
headers?: HeadersInit;
signal?: AbortSignal;
keepalive?: boolean;
/**
* Timeout in milliseconds for the request, `false` to disable timeout
*
* @default 5000
*/
timeout?: number | false;
retry?: RetryOptions;
json?: Jsonifiable;
onResponse?: (response: Response, request: Request) => void | Response | Promise<Response | void>;
}
export interface JSONRequestOptions {
fetch?: typeof globalThis.fetch;
redirect?: RequestRedirect;
body?: Jsonifiable | null;
method?: string;
headers?: HeadersInit;
signal?: AbortSignal;
keepalive?: boolean;
/**
* Timeout in milliseconds for the request, `false` to disable timeout
*
* @default 5000
*/
timeout?: number | false;
retry?: RetryOptions;
onResponse?: (response: Response, request: Request) => void | Response | Promise<Response | void>;
}
/**
* Generic result with error
*/
export type MaybeResult<ResultType = unknown, ErrorType = Error> = {
error: ErrorType;
result?: undefined;
} | {
result: ResultType;
error?: undefined;
};
//# sourceMappingURL=types.d.ts.map