@node-elion/syncron
Version:
Provides a simple way to delivery models between sender and receiver
94 lines (93 loc) • 3.57 kB
TypeScript
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>;
}