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, RequestResponse> { name: string; queryStorage: QueryStorage; config: EndpointConfig; cacheableHeaderKeys: CreateApiClientOptions['cacheableHeaderKeys']; globalCacheConfig: CreateApiClientOptions['cache']; globalRetryConfig: CreateApiClientOptions['retry']; baseQueryConfig: CreateApiClientOptions['baseQuery']; } export declare class EndpointClass, RequestResponse> implements EndpointType { 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); request(params: RequestParams, options?: QueryOptions): RequestResponseModify; /** * Определяет итоговую конфигурацию 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 | undefined; /** * Подписка на инвалидацию кэша, затрагивающую этот эндпоинт. Колбэк вызывается, * когда инвалидируется любой из тегов эндпоинта (`meta.tags`) — например, после * мутации соседнего эндпоинта с `invalidatesTags`. Используется хуком `useApiQuery` * для авто-рефетча (паритет с поведением React Query). */ onCacheInvalidate(listener: VoidFunction): Unsubscribe; subscribe(cb: (state: EndpointState) => void): Unsubscribe; reset(): Promise; destroy(): void; }