mongochangestream
Version:
Sync MongoDB collections via change streams into any database.
68 lines (67 loc) • 2.86 kB
TypeScript
import { EventEmitter } from 'eventemitter3';
import type { Redis } from 'ioredis';
import { type Collection, type Db } from 'mongodb';
import { type QueueOptions } from 'prom-utils';
import type { ChangeOptions, ChangeStreamOptions, Events, JSONSchema, OperationType, ProcessChangeStreamRecords, ProcessInitialScanRecords, ScanOptions, State, SyncOptions } from './types.js';
/**
* Get Redis keys used for the collection.
*/
export declare const getKeys: (collection: Collection, options: SyncOptions) => {
scanCompletedKey: string;
lastScanIdKey: string;
changeStreamTokenKey: string;
schemaKey: string;
lastChangeProcessedAtKey: string;
lastScanProcessedAtKey: string;
resyncKey: string;
};
export declare function initSync<ExtendedEvents extends EventEmitter.ValidEventTypes>(redis: Redis, collection: Collection, options?: SyncOptions): {
runInitialScan: <T = any>(processRecords: ProcessInitialScanRecords, options?: QueueOptions & ScanOptions<T>) => Promise<{
start: () => Promise<void>;
stop: () => Promise<void>;
restart: () => Promise<void>;
state: Pick<{
get: () => State;
change: (newState: State) => void;
waitForChange: (...newStates: State[]) => Promise<void>;
is: (...states: State[]) => boolean;
canChange: (newState: State) => boolean;
maybeChange: (newState: State) => boolean;
getElapsedTime: () => number;
}, "get" | "is">;
}>;
processChangeStream: <T extends OperationType[] | undefined = undefined>(processRecords: ProcessChangeStreamRecords<T>, options?: QueueOptions & ChangeStreamOptions<T>) => Promise<{
start: () => Promise<void>;
stop: () => Promise<void>;
restart: () => Promise<void>;
state: Pick<{
get: () => State;
change: (newState: State) => void;
waitForChange: (...newStates: State[]) => Promise<void>;
is: (...states: State[]) => boolean;
canChange: (newState: State) => boolean;
maybeChange: (newState: State) => boolean;
getElapsedTime: () => number;
}, "get" | "is">;
}>;
reset: () => Promise<void>;
getCollectionSchema: (db: Db) => Promise<JSONSchema>;
detectSchemaChange: (db: Db, options?: ChangeOptions) => Promise<{
start: () => void;
stop: () => void;
}>;
detectResync: (resyncCheckInterval?: number) => {
start: () => void;
stop: () => void;
};
keys: {
scanCompletedKey: string;
lastScanIdKey: string;
changeStreamTokenKey: string;
schemaKey: string;
lastChangeProcessedAtKey: string;
lastScanProcessedAtKey: string;
resyncKey: string;
};
emitter: EventEmitter<Events | ExtendedEvents, any>;
};