UNPKG

@node-elion/syncron

Version:

Provides a simple way to delivery models between sender and receiver

94 lines (93 loc) 3.57 kB
import { IdList, ModelId, ModelPrototype, ModelSubscribeEventBatchSize, ModelSubscribeEventKeepAliveCheckPendingPeriod, ModelSubscribeEventKeepAlivePeriod, ModelSubscribeEventLike, ModelSubscribeEventMetaField, ModelSubscribeEventQueWaitTime, ModelSubscriberEventFirstContentSendSize, JSONLike } from "./types"; export type CustomTriggerOnEmit = { getAll: ModelEventSubscriber["config"]["getAll"]; getAllIds: ModelEventSubscriber["config"]["getAllIds"]; onUpdate: ModelEventSubscriber["onUpdate"]; modelState: Map<ModelId, ModelPrototype>; }; export type OnEmitResponse = { shouldUpdateIndexes: boolean; }; export type CustomTrigger = { name?: string; allowOptimization: boolean; on: (params: CustomTriggerOnEmit, data: JSONLike) => Promise<OnEmitResponse>; }; export type CustomTriggers = { [key: string]: CustomTrigger; }; export declare enum ModelRequestStrategy { "parallel" = 0, "sequence" = 1 } export type SubscribeConfig = { trackModelName: string; idParamName: string; getAll?: () => Promise<ModelPrototype[]>; modelRequest?: { strategy?: ModelRequestStrategy; }; getAllIds: () => Promise<IdList>; getById: (id: ModelId) => Promise<ModelPrototype>; sanitizeModel: (body: ModelPrototype) => Promise<ModelPrototype>; track: (trackIdentifier: string, onTrackEvent: ModelEventSubscriber["onTrackEvent"]) => void; removeTrack: (trackIdentifier: string) => Promise<void>; onModelEvent: (event: ModelSubscribeEventLike[]) => void; batchSize?: number | ModelSubscribeEventBatchSize; optimization?: { publisherModelEventOptimization?: boolean; subscriberPostModelEventOptimization?: boolean; }; firstContentSend?: { size?: number | ModelSubscriberEventFirstContentSendSize; } | false; queWaitTime?: number | ModelSubscribeEventQueWaitTime; metaFields?: ModelSubscribeEventMetaField; customTriggers?: CustomTriggers; keepAlive: { period?: number | ModelSubscribeEventKeepAlivePeriod; pendingPeriod?: number | ModelSubscribeEventKeepAliveCheckPendingPeriod; onKeepAlive: () => Promise<boolean>; }; }; export type SimpleSubscribeConfig = { trackName: string; track: (trackIdentifier: string, onTrackEvent: ModelEventSubscriber["onTrackEvent"]) => void; removeTrack: (trackIdentifier: string) => Promise<void>; }; export declare class ModelEventSubscriber { private config; private queue; private sendQueue; private queueTimeout; private keepAliveTimeout; private modelState; private modelStateIndexes; private trackIdentifiers; static simpleSubscribe(params: SimpleSubscribeConfig, onEvent: (data: JSONLike) => void): { unsubscribe: () => void; }; constructor(config: SubscribeConfig); getBatchDefault(idList?: IdList, strategy?: ModelRequestStrategy): Promise<ModelPrototype[]>; private generateTrackIdentifier; init(): Promise<void>; private setModel; private deleteModel; private setIdToIndex; private getStateIdList; private pushToQueue; private pushToSendQueue; private onKeepAliveCheck; private optimizeQueue; private optimizeSendQueue; private updateMetaFields; private onQueueStep; private performQue; private onTrackEvent; private findIndexDiff; private onUpdate; regenerateState(): Promise<void>; regenerateIndexes(forceMetaUpgrade?: boolean): Promise<void>; regenerateMeta(): Promise<void>; unsubscribe(): Promise<void>; }