declare module 'openapi-typescript-fetch/fetcher' { import { CreateFetch, FetchConfig, Middleware, OpenapiPaths } from 'openapi-typescript-fetch/types'; export const Fetcher: { for: >() => { configure: (config: FetchConfig) => void; use: (mw: Middleware) => number; path:

(path: P) => { method: (method: M) => { create: CreateFetch; }; }; }; }; } declare module 'openapi-typescript-fetch/index' { import { Fetcher } from 'openapi-typescript-fetch/fetcher'; import { arrayRequestBody } from 'openapi-typescript-fetch/utils'; import type { ApiResponse, FetchArgType, FetchReturnType, FetchErrorType, Middleware, OpArgType, OpErrorType, OpDefaultReturnType, OpReturnType, TypedFetch } from 'openapi-typescript-fetch/types'; import { ApiError } from 'openapi-typescript-fetch/types'; export type { OpArgType, OpErrorType, OpDefaultReturnType, OpReturnType, FetchArgType, FetchReturnType, FetchErrorType, ApiResponse, Middleware, TypedFetch, }; export { Fetcher, ApiError, arrayRequestBody }; } declare module 'openapi-typescript-fetch/types' { export type Method = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head' | 'options'; export type OpenapiPaths = { [P in keyof Paths]: { [M in Method]?: unknown; }; }; type NonNever = [T] extends [never | undefined] ? unknown : T; export type OpArgType = OP extends { parameters?: { path?: infer P; query?: infer Q; body?: infer B; header?: unknown; cookie?: unknown; }; requestBody?: { content: { 'application/json': infer RB; }; }; } ? NonNever

& NonNever & (B extends Record ? NonNever : unknown) & NonNever : Record; 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; type _OpReturnType = 200 extends keyof T ? T[200] : 201 extends keyof T ? T[201] : 204 extends keyof T ? T[204] : 'default' extends keyof T ? T['default'] : unknown; export type OpReturnType = _OpReturnType>; type _OpDefaultReturnType = 'default' extends keyof T ? T['default'] : unknown; export type OpDefaultReturnType = _OpDefaultReturnType>; const never: unique symbol; type _OpErrorType = { [S in Exclude]: { status: S extends 'default' ? typeof never : S; data: T[S]; }; }[Exclude]; type Coalesce = [T] extends [never] ? D : T; export type OpErrorType = Coalesce<_OpErrorType>, { status: number; data: any; }>; export type CustomRequestInit = Omit & { readonly headers: Headers; }; export type Fetch = (url: string, init: CustomRequestInit) => Promise; export type _TypedFetch = (arg: OpArgType, init?: RequestInit & { baseUrl?: string; }) => Promise>>; export type TypedFetch = _TypedFetch & { Error: new (error: ApiError) => ApiError & { getActualType: () => OpErrorType; }; }; export type FetchArgType = F extends TypedFetch ? OpArgType : never; export type FetchReturnType = F extends TypedFetch ? OpReturnType : never; export type FetchErrorType = F extends TypedFetch ? OpErrorType : never; type _CreateFetch = [Q] extends [never] ? () => TypedFetch : (query: Q) => TypedFetch; export type CreateFetch = M extends 'post' | 'put' | 'patch' | 'delete' ? OP extends { parameters: { query: infer Q; }; } ? _CreateFetch : _CreateFetch : _CreateFetch; export type Middleware = (url: string, init: CustomRequestInit, next: Fetch) => Promise; export type FetchConfig = { baseUrl?: string | (() => string); init?: RequestInit; use?: Middleware[]; }; export type Request = { baseUrl: string; method: Method; path: string; queryParams: string[]; payload: any; init?: RequestInit; fetch: Fetch; }; export type ApiResponse = { readonly headers: Headers; readonly url: string; readonly ok: boolean; readonly status: number; readonly statusText: string; readonly data: R; }; export class ApiError extends Error { readonly headers: Headers; readonly url: string; readonly status: number; readonly statusText: string; readonly data: any; constructor(response: Omit); } export {}; } declare module 'openapi-typescript-fetch/utils' { /** * Helper to merge params when request body is an array */ export function arrayRequestBody(array: T[], params?: O): T[] & O; } declare module 'openapi-typescript-fetch' { import main = require('openapi-typescript-fetch/index'); export = main; }