import type { Redis } from 'ioredis'; import type { IContainer } from 'node-cqrs'; import type { IViewLocker } from '../interfaces/index.ts'; import { AbstractRedisAccessor } from './AbstractRedisAccessor.ts'; import type { RedisProjectionDataParams } from './RedisProjectionDataParams.ts'; export type RedisViewLockerParams = RedisProjectionDataParams & { /** * (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 120_000 */ viewLockTtl?: number; }; /** * Redis-backed implementation of IViewLocker. * * Uses a Redis key with NX+PX semantics to acquire a distributed view lock. * The lock is automatically prolonged at half the TTL interval via `PEXPIRE` * to prevent expiration while processing is in progress. * * Key format: `{keyPrefix}:viewlock:{projectionName}:{schemaVersion}` */ export declare class RedisViewLocker extends AbstractRedisAccessor implements IViewLocker { #private; constructor(o: Partial> & RedisViewLockerParams); protected initialize(_redis: Redis): void; get ready(): boolean; lock(): Promise; private scheduleLockProlongation; private cancelLockProlongation; private prolongLock; unlock(): Promise; once(event: 'ready'): Promise; }