import type { Db } from 'mongodb'; import type { IContainer } from 'node-cqrs'; import type { IViewLocker } from '../interfaces/index.ts'; import { AbstractMongoAccessor } from './AbstractMongoAccessor.ts'; import type { MongoProjectionDataParams } from './MongoProjectionDataParams.ts'; export type MongoViewLockerParams = MongoProjectionDataParams & { /** * (Optional) Time-to-live (TTL) duration (in milliseconds) for which a view remains locked. * The lock is automatically prolonged while still held by this instance. * * @default MongoViewLocker.DEFAULT_VIEW_LOCK_TTL */ viewLockTtl?: number; /** * (Optional) MongoDB collection name used to store view locks. * * @default MongoViewLocker.DEFAULT_COLLECTION */ viewLocksCollection?: string; }; /** * MongoDB-backed implementation of IViewLocker. * * Uses a MongoDB document with token + lockedTill semantics to acquire a distributed view lock. * The lock is automatically prolonged at half the TTL interval to prevent expiration * while processing is in progress. * * Collection name: `ncqrs_view_locks` */ export declare class MongoViewLocker extends AbstractMongoAccessor implements IViewLocker { #private; static DEFAULT_VIEW_LOCK_TTL: number; static DEFAULT_COLLECTION: string; constructor(o: Partial> & MongoViewLockerParams); protected initialize(db: Db): Promise; get ready(): boolean; lock(): Promise; private scheduleLockProlongation; private cancelLockProlongation; private prolongLock; unlock(): Promise; once(event: 'ready'): Promise; }