import type { Db } from 'mongodb'; import type { IContainer } from 'node-cqrs'; import type { IEvent, IEventLocker } from '../interfaces/index.ts'; import { AbstractMongoAccessor } from './AbstractMongoAccessor.ts'; import type { MongoProjectionDataParams } from './MongoProjectionDataParams.ts'; export type MongoEventLockerParams = MongoProjectionDataParams & { /** * (Optional) Time-to-live (TTL) duration in milliseconds * for which an event remains in the "processing" state until released. * * @default MongoEventLocker.DEFAULT_EVENT_LOCK_TTL */ eventLockTtl?: number; /** * (Optional) MongoDB collection name used to store per-event processing locks. * * @default MongoEventLocker.DEFAULT_EVENT_LOCKS_COLLECTION */ eventLocksCollection?: string; /** * (Optional) MongoDB collection name used to store the last processed event per projection. * * @default MongoEventLocker.DEFAULT_VIEW_LOCKS_COLLECTION */ viewLocksCollection?: string; }; /** * MongoDB-backed implementation of IEventLocker. * * Uses two collections: * - `ncqrs_event_locks`: tracks per-event processing state * - `ncqrs_view_locks`: stores the last processed event per projection * * Event lock state machine: nil → processing → processed */ export declare class MongoEventLocker extends AbstractMongoAccessor implements IEventLocker { #private; static DEFAULT_EVENT_LOCK_TTL: number; static DEFAULT_EVENT_LOCKS_COLLECTION: string; static DEFAULT_VIEW_LOCKS_COLLECTION: string; constructor(o: Partial> & MongoEventLockerParams); protected initialize(db: Db): Promise; tryMarkAsProjecting(event: IEvent): Promise; markAsProjected(event: IEvent): Promise; markAsLastEvent(event: IEvent): Promise; getLastEvent(): Promise; }