export declare type Method = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head' | 'options'; export declare type OpenapiPaths = { [P in keyof Paths]: { [M in Method]?: unknown; }; }; export declare type OpArgType = OP extends { parameters?: { path?: infer P; query?: infer Q; body?: infer B; header?: unknown; cookie?: unknown; }; requestBody?: { content: { 'application/json': infer RB; }; }; } ? P & Q & (B extends Record ? B[keyof B] : unknown) & RB : Record; declare type OpResponseTypes = OP extends { responses: infer R; } ? { [S in keyof R]: R[S] extends { schema?: infer S; } ? S : R[S] extends { content: { 'application/json': infer C; }; } ? C : S extends 'default' ? R[S] : unknown; } : never; declare type _OpReturnType = 200 extends keyof T ? T[200] : 201 extends keyof T ? T[201] : 'default' extends keyof T ? T['default'] : unknown; export declare type OpReturnType = _OpReturnType>; declare type _OpDefaultReturnType = 'default' extends keyof T ? T['default'] : unknown; export declare type OpDefaultReturnType = _OpDefaultReturnType>; declare const never: unique symbol; declare type _OpErrorType = { [S in Exclude]: { status: S extends 'default' ? typeof never : S; data: T[S]; }; }[Exclude]; declare type Coalesce = [T] extends [never] ? D : T; export declare type OpErrorType = Coalesce<_OpErrorType>, { status: number; data: any; }>; export declare type CustomRequestInit = Omit & { readonly headers: Headers; }; export declare type Fetch = (url: string, init: CustomRequestInit) => Promise; export declare type _TypedFetch = (arg: OpArgType, init?: RequestInit) => Promise>>; export declare type TypedFetch = _TypedFetch & { Error: new (error: ApiError) => ApiError & { getActualType: () => OpErrorType; }; }; export declare type FetchArgType = F extends TypedFetch ? OpArgType : never; export declare type FetchReturnType = F extends TypedFetch ? OpReturnType : never; export declare type FetchErrorType = F extends TypedFetch ? OpErrorType : never; declare type _CreateFetch = [Q] extends [never] ? () => TypedFetch : (query: Q) => TypedFetch; export declare type CreateFetch = M extends 'post' | 'put' | 'patch' | 'delete' ? OP extends { parameters: { query: infer Q; }; } ? _CreateFetch : _CreateFetch : _CreateFetch; export declare type Middleware = (url: string, init: CustomRequestInit, next: Fetch) => Promise; export declare type FetchConfig = { baseUrl?: string; init?: RequestInit; use?: Middleware[]; }; export declare type Request = { baseUrl: string; method: Method; path: string; queryParams: string[]; payload: any; init?: RequestInit; fetch: Fetch; }; export declare type ApiResponse = { readonly headers: Headers; readonly url: string; readonly ok: boolean; readonly status: number; readonly statusText: string; readonly data: R; }; export declare class ApiError extends Error { readonly headers: Headers; readonly url: string; readonly status: number; readonly statusText: string; readonly data: any; constructor(response: Omit); } export {};