import { CreateApiClientOptions } from '../types/api.interface';
import { Endpoint as EndpointType, EndpointConfig, EndpointState, RequestResponseModify } from '../types/endpoint.interface';
import { QueryOptions, QueryResult, Unsubscribe } from '../types/query.interface';
import { QueryStorage } from './query-storage';
export interface EndpointClassOptions<RequestParams extends Record<string, any>, RequestResponse> {
    name: string;
    queryStorage: QueryStorage;
    config: EndpointConfig<RequestParams, RequestResponse>;
    cacheableHeaderKeys: CreateApiClientOptions['cacheableHeaderKeys'];
    globalCacheConfig: CreateApiClientOptions['cache'];
    globalRetryConfig: CreateApiClientOptions['retry'];
    baseQueryConfig: CreateApiClientOptions['baseQuery'];
}
export declare class EndpointClass<RequestParams extends Record<string, any>, RequestResponse> implements EndpointType<RequestParams, RequestResponse> {
    private endpointSubscribers;
    /** Сколько раз был вызван метод request */
    fetchCounts: number;
    meta: EndpointType['meta'];
    private name;
    private queryStorage;
    private configCurrentEndpoint;
    private cacheableHeaderKeys;
    private globalRetryConfig;
    private baseQueryConfig;
    private queryFunction;
    /** Массив заголовков, которые нужно включить в ключ кэширования */
    private cacheableHeaders;
    private prepareHeaders;
    /** Карта in-flight запросов для дедупликации (cacheKey → Promise) */
    private inflightRequests;
    constructor(options: EndpointClassOptions<RequestParams, RequestResponse>);
    request(params: RequestParams, options?: QueryOptions): RequestResponseModify<RequestResponse>;
    /**
     * Определяет итоговую конфигурацию retry: вызов → эндпоинт → глобальная
     */
    private resolveRetryConfig;
    /**
     * Выполняет сетевой запрос с кэшированием, дедупликацией и retry
     */
    private executeRequest;
    /**
     * Выполняет HTTP-запрос с retry, инвалидацией тегов и кэшированием результата
     */
    private executeFetch;
    /**
     * Выполняет HTTP-запрос с повторными попытками
     */
    private fetchWithRetry;
    /**
     * Уведомляет подписчиков эндпоинта об изменении состояния
     */
    private notifyEndpointSubscribers;
    /**
     * Синхронное чтение результата из кэша (fast-path для SSR-гидрации).
     *
     * Возвращает закэшированный результат БЕЗ сетевого запроса и без async-тика,
     * поэтому хук может отдать серверные данные уже на первом рендере (без вспышки
     * loading после гидрации). Работает только когда:
     *  - хранилище синхронное (Memory/LocalStorage);
     *  - у эндпоинта нет заголовков, влияющих на ключ кэша (`cacheableHeaders`) —
     *    иначе ключ нельзя воспроизвести синхронно (заголовки готовятся async);
     *  - кэширование для эндпоинта включено и запись не протухла.
     *
     * Во всех остальных случаях возвращает `undefined` — вызывающий откатывается
     * на обычный async-`request()`.
     */
    getCachedSync(params: RequestParams): QueryResult<RequestResponse, Error> | undefined;
    /**
     * Подписка на инвалидацию кэша, затрагивающую этот эндпоинт. Колбэк вызывается,
     * когда инвалидируется любой из тегов эндпоинта (`meta.tags`) — например, после
     * мутации соседнего эндпоинта с `invalidatesTags`. Используется хуком `useApiQuery`
     * для авто-рефетча (паритет с поведением React Query).
     */
    onCacheInvalidate(listener: VoidFunction): Unsubscribe;
    subscribe(cb: (state: EndpointState) => void): Unsubscribe;
    reset(): Promise<void>;
    destroy(): void;
}
