import { StorageType } from '../storage.interface';
import { Middleware, StorageAction, SyncMiddleware } from '../utils/middleware-module';
/**
 * Общая часть кросс-табных мидлвар (`broadcast`/`shared-worker` и их sync-аналогов).
 *
 * Все четыре мидлвары были почти-побайтовыми копиями — различались только (a) классом
 * канала (`SyncBroadcastChannel` vs `WorkerChannel`), (b) значением `name` и (c) префиксом
 * в сообщениях об ошибках. Оба класса канала намеренно зеркалят один и тот же API
 * ({@link SharedStateChannel}) — это и есть шов, через который фабрика получает канал.
 *
 * Async и sync фабрики оставлены раздельными: они порождают разные типы мидлвар
 * (async — с `await`/`doDelete`; sync — синхронные, `doRemove`).
 */
export interface SharedStateChannel<T> {
    subscribe(handler: (message: {
        type: string;
        payload?: T;
    }) => void | Promise<void>): () => void;
    setSyncHandler(handler: () => T | Promise<T>): void;
    broadcast(type: string, payload?: T): void;
    requestSync(): Promise<T | null>;
    close(): void;
}
export interface SharedStateMiddlewareProps {
    storageType: StorageType;
    storageName: string;
}
interface SharedStateFactoryConfig {
    /** Значение поля `name` мидлвары (например, 'broadcast'). Публичная часть API. */
    name: string;
    /** Префикс в сообщениях об ошибках, чтобы логи оставались атрибутируемыми (например, 'broadcastMiddleware'). */
    label: string;
    /** Фабрика канала — единственное отличие между конкретными мидлварами. */
    createChannel: (channelName: string) => SharedStateChannel<StorageAction>;
}
/**
 * Фабрика async кросс-табной мидлвары. Возвращает `(props) => Middleware` — ту же
 * сигнатуру, что у публичных `broadcastMiddleware`/`sharedWorkerMiddleware`.
 */
export declare function createSharedStateMiddleware(config: SharedStateFactoryConfig): (props: SharedStateMiddlewareProps) => Middleware;
interface SyncSharedStateFactoryConfig {
    name: string;
    label: string;
    createChannel: (channelName: string) => SharedStateChannel<StorageAction>;
}
/**
 * Фабрика sync кросс-табной мидлвары. Возвращает `(props) => SyncMiddleware` — ту же
 * сигнатуру, что у публичных `syncBroadcastMiddleware`/`syncSharedWorkerMiddleware`.
 */
export declare function createSyncSharedStateMiddleware(config: SyncSharedStateFactoryConfig): (props: SharedStateMiddlewareProps) => SyncMiddleware;
export {};
