export declare class Client<paths extends Api.PathsAbstract, UseExt extends Api.Ext.UseExt> {
    readonly options: Readonly<Api.ClientOptions>;
    readonly useExt: UseExt;
    readonly middlewares: Api.Middleware[];
    private mokerByPath;
    abortControllers: Record<string, AbortController>;
    constructor(clientOptions: Partial<Api.ClientOptions> | undefined, useExt: UseExt);
    generateUUID(): string;
    /**
     * Зарегистрировать middleware
     */
    use(middleware: Api.Middleware): void;
    /**
     * Создать объект запроса
     *
     * После создания объекта он заполняется необходимыми данными и выполняет запросы к API с помощью APIRequest2.call();
     *
     * Опционально generic указывать нельзя, поэтому необходимо дублировать определение fetchStyle, [см.](https://github.com/Microsoft/TypeScript/issues/26242)
     *
     * @param path Путь метода API
     * @param fieldsNarrow Список получаемых полей, для методов API с моделью. Если объект запроса переиспользуется, и список полей меняется, указывайте его непосредственно при вызове `api.call()`
     */
    gen<Path extends Api.Path<paths>, FieldsNarrow extends Api.ParamsFields<Api.ClientRequestContext<paths, Path, UseExt>>>(path: Path, fieldsNarrow?: FieldsNarrow): Api.ClientRequest<Api.ClientRequestContext<paths, Path, UseExt>, FieldsNarrow>;
    /**
     * Создать объект запроса, не описанного в OpenAPI
     */
    genAny<Params extends Record<string, any>, Result = any, FieldsNarrow extends Api.Ext.Schemas['Fields'] | undefined = undefined>(path: Api.PathAbstract, fieldsNarrow?: FieldsNarrow): Api.ClientRequestCustom<UseExt, Params, Result>;
    /**
     * Создать контекст выполнения запроса
     */
    genMiddlewareCtx(clientRequest: Api.ClientRequest<any, any, any>, data: Record<string, any>): Omit<Api.MiddlewareCallbackParams, 'request'>;
    /**
     * Обработчик middleware.onRequest
     *
     * @param request Запрос для обработки
     * @param middlewareCtx Контекст выполнения запроса
     * @return Новый экземпляр `Request` или `Response` при модификации запроса, или undefined
     */
    middlewareOnRequest(request: Request, middlewareCtx: Api.MiddlewareCallbackParams): Promise<Request | Response | undefined>;
    /**
     * Обработчик middleware.onResponse
     *
     * @param `error` Ошибка, переданная для обработки
     * @param middlewareCtx
     * @return Новый экземпляр `Response` при успешной обработке или выбрасывает ошибку
     */
    middlewareOnError(error: Error | unknown, middlewareCtx: Api.MiddlewareCallbackParams): Promise<Response | never>;
    /**
     * Обработчик middleware.onResponse
     *
     * @param response Ответ для обработки
     * @param middlewareCtx Контекст выполнения запроса
     * @return Новый экземпляр `Response` при модификации ответа, или undefined
     */
    middlewareOnResponse(response: Response, middlewareCtx: Api.MiddlewareCallbackParams): Promise<Response>;
    /**
     * Установить генератор данных вместо реальных запросов к серверу для конкретного метода API
     */
    setMocker<Result extends Api.Mocker.Result = Api.Mocker.Result, Params extends Api.Mocker.Params = Api.Mocker.Params>(path: Api.Path<paths>, mocker: Api.Mocker.Options<Result, Params>): void;
}
