import { ChangePacketId, ChangePlantProcessingResultUpdateItem, ISyncable, SyncableRef, ViewQueryDictToResolvedViewQueryDict } from '@syncable/core'; import { Observable } from 'rxjs'; import { Dict } from 'tslang'; import { Connection } from '../connection'; import { IServerGenericParams } from './server'; export declare type QueuedChangeProcessor = (clock: number) => Promise; export interface BroadcastChangeResult { group: string; id: ChangePacketId; clock: number; creations: ISyncable[]; updates: ChangePlantProcessingResultUpdateItem[]; removals: SyncableRef[]; } export interface IServerAdapter { connection$: Observable>; broadcast$: Observable; subscribe(group: string): Promise; unsubscribe(group: string): Promise; broadcast(data: BroadcastChangeResult): Promise; queueChange(group: string, changePacketId: ChangePacketId, processor: QueuedChangeProcessor): Promise; resolveQueryToContextDependencyRefsDict(context: TGenericParams['context']): Promise>; preloadQueryMetadata(group: string, context: TGenericParams['context'], viewQueryName: TViewQueryName): Promise; loadSyncablesByQuery(group: string, context: TGenericParams['context'], resolvedViewQueryDict: Partial>, loadedKeySet: Set): Promise; loadSyncablesByRefs(group: string, refs: SyncableRef[]): Promise; saveSyncables(group: string, createdSyncables: TGenericParams['syncableObject']['syncable'][], updatedSyncables: TGenericParams['syncableObject']['syncable'][], removedSyncableRefs: SyncableRef[]): Promise; handleNotifications(group: string, notifications: TGenericParams['notification'][], id: ChangePacketId): Promise; }