export type RequestMethod = "GET" | "HEAD" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS" | (string & {}); export type RequestParamValue = boolean | string | number | null | undefined | Array; export type RequestParams = Record; export type JsonObjectBody = Record; export type RequestBody = JsonObjectBody | BodyInit | null; export type RequestResponseType = "json" | "text" | "response" | "stream" | "arrayBuffer" | "blob" | "void"; export type RequestPriorityValue = RequestInit extends { priority?: infer Priority; } ? Priority : "high" | "low" | "auto"; export type RetryBackoff = "linear" | "exponential" | "fixed" | ((attempt: number, delayMs: number) => number); export type RetryOptions = { attempts: number; delayMs?: number; backoff?: RetryBackoff; jitter?: boolean | number; retryOnStatus?: number[] | ((status: number) => boolean); retryOnError?: (error: unknown, attempt: number) => boolean; respectRetryAfter?: boolean; retryNonIdempotent?: boolean; retryKeepalive?: boolean; }; export type RequestMetadata = { data: T; status: number; statusText: string; headers: Headers; response: Response; }; export type FetchImplementation = typeof fetch; export type Request = { url: string | URL; headers?: HeadersInit; method?: RequestMethod; params?: RequestParams; body?: RequestBody; responseType?: RequestResponseType; returnMetadata?: boolean; okStatuses?: number[] | ((status: number) => boolean); retries?: number; retry?: RetryOptions; fetch?: FetchImplementation; proxy?: string; timeout?: number; keepalive?: boolean; credentials?: RequestCredentials; mode?: RequestMode; cache?: RequestCache; redirect?: RequestRedirect; referrer?: string; referrerPolicy?: ReferrerPolicy; integrity?: string; priority?: RequestPriorityValue; signal?: AbortSignal; }; type NativeRequestInit = RequestInit & { fetch?: FetchImplementation; proxy?: string; priority?: RequestPriorityValue; }; type RequestErrorDetails = { status: number; statusText: string; headers?: Headers; response?: unknown; responseText?: string; rawResponse?: Response; }; export declare class RequestError extends Error { status: number; statusText: string; headers: Headers; response?: unknown; responseText: string; rawResponse?: Response; constructor(message: string, details: RequestErrorDetails); constructor(message: string, status: number, statusText: string, response?: unknown); } export declare class RequestParseError extends RequestError { constructor(message: string, details: RequestErrorDetails); } export declare class RequestTimeoutError extends Error { timeout: number; constructor(timeout: number); } export declare function request(input: RequestInfo | URL, init?: NativeRequestInit): Promise; export declare function request(req: Request & { responseType: "response"; returnMetadata: true; }): Promise>; export declare function request(req: Request & { responseType: "response"; returnMetadata?: false; }): Promise; export declare function request(req: Request & { responseType: "stream"; returnMetadata: true; }): Promise | null>>; export declare function request(req: Request & { responseType: "stream"; returnMetadata?: false; }): Promise | null>; export declare function request(req: Request & { responseType: "arrayBuffer"; returnMetadata: true; }): Promise>; export declare function request(req: Request & { responseType: "arrayBuffer"; returnMetadata?: false; }): Promise; export declare function request(req: Request & { responseType: "blob"; returnMetadata: true; }): Promise>; export declare function request(req: Request & { responseType: "blob"; returnMetadata?: false; }): Promise; export declare function request(req: Request & { responseType: "void"; returnMetadata: true; }): Promise>; export declare function request(req: Request & { responseType: "void"; returnMetadata?: false; }): Promise; export declare function request(req: Request & { responseType: "text"; returnMetadata: true; }): Promise>; export declare function request(req: Request & { responseType: "text"; returnMetadata?: false; }): Promise; export declare function request(req: Request & { responseType?: "json"; returnMetadata: true; }): Promise>; export declare function request(req: Request & { responseType?: "json"; returnMetadata?: false; }): Promise; export {};