import { IStorage } from '../core'; import { CreateApiClientOptions, ExtractParamsType, ExtractResultType } from './types/api.interface'; import { CreateEndpoint, Endpoint as EndpointType, EndpointConfig } from './types/endpoint.interface'; import { QueryOptions, QueryResult } from './types/query.interface'; type EndpointsResult = F extends (create: any) => Promise ? R : never; type EndpointsMap = { [K in keyof EndpointsResult]: EndpointType[K]>, ExtractResultType[K]>>; }; export declare class ApiClient Promise>>> { /** Хранилище запросов */ private queryStorage; /** Флаг завершённой инициализации */ private _initialized; /** Промис текущей инициализации (для дедупликации параллельных вызовов) */ private _initPromise; /** Снапшот для гидрации, отложенный до завершения init (если hydrate вызван раньше) */ private _pendingHydration; private readonly cacheableHeaderKeys; private readonly globalCacheConfig; private readonly baseQueryConfig; private readonly storageExternal; private readonly globalRetryConfig; private readonly createEndpoints; /** Реестр эндпоинтов */ private endpoints; constructor(options: Omit & { endpoints: EndpointsFn; }); init(): Promise; private _doInit; private initializeEndpoints; private ensureInitialized; /** * Получает все эндпоинты с улучшенной типизацией * @returns Типизированный объект эндпоинтов */ getEndpoints(): EndpointsMap; /** * Выполняет запрос к API с типизацией и обработкой ошибок * @param endpointName Имя эндпоинта (с подсказками TypeScript) * @param params Параметры запроса (с типизацией) * @param options Опции запроса * @returns Promise с типизированным результатом запроса */ request & string>(endpointName: K, params: ExtractParamsType[K]>, options?: QueryOptions): Promise[K]>, Error>>; /** * Снимок кэша для дегидрации (SSR: сервер → HTML → клиент). * * Возвращает всё состояние кэш-хранилища (записи API с абсолютными `expiresAt`, * поэтому TTL переживает перенос на клиент). Симметрично `dehydrateModule` для * synapse-модулей. Типичный серверный рецепт: `await api.request(...)` для * прогрева → `await api.dehydrate()` → сериализовать в HTML. */ dehydrate(): Promise>; /** * Гидрация кэша снапшотом с сервера. * * - Вызванная ДО `init()` — снапшот запоминается и применяется сразу после * создания хранилища (init не перезатрёт серверное состояние). * - Вызванная ПОСЛЕ `init()` — немедленно заменяет состояние кэша и * перестраивает индекс тегов. * * После гидрации первый `request()`/`getCachedSync()` с теми же параметрами * попадёт в кэш — на клиенте не будет повторного сетевого запроса. */ hydrate(state: Record): Promise; /** * Доступ к экземпляру хранилища кэша (для ручных сценариев SSR/отладки). */ getStorage(): IStorage | null; destroy(): Promise; } export {};