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 type QueuedChangeProcessor = (clock: number) => Promise; export interface BroadcastChangeResult { group: string; id: ChangePacketId; clock: number; creations: ISyncable[]; updates: ChangePlantProcessingResultUpdateItem[]; removals: SyncableRef[]; } export interface IServerAdapter< TGenericParams extends IServerGenericParams = IServerGenericParams > { 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< TViewQueryName extends keyof TGenericParams['context']['queryMetadataDict'] >( group: string, context: TGenericParams['context'], viewQueryName: TViewQueryName, ): Promise; loadSyncablesByQuery( group: string, context: TGenericParams['context'], resolvedViewQueryDict: Partial< ViewQueryDictToResolvedViewQueryDict >, 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; }