/** * Blocking list waiters: BLPOP/BRPOP (SPEC_E). * In-memory wait queues by key; single delivery; wake on LPUSH/RPUSH. */ export type BlockKind = 'BLPOP' | 'BRPOP'; export type ConnectionId = string | number; export type WaiterResolve = (value: [Buffer, Buffer] | null) => void; /** Engine operations the manager needs to deliver elements on wake. */ export interface BlockingEngine { lpop(key: Buffer, count: null): unknown; rpop(key: Buffer, count: null): unknown; } export interface BlockingManagerOptions { maxWaitersPerKey?: number; maxTotalWaiters?: number; maxKeysPerWait?: number; clock?: () => number; } /** * @param engine - RESPlite engine (for lpop/rpop on wake) * @param opts - limits default to 10000 waiters per key, 50000 in total and 128 keys per wait; clock defaults to Date.now */ export declare function createBlockingManager(engine: BlockingEngine, opts?: BlockingManagerOptions): { deferWakeups(): void; flushWakeups(): void; registerWaiter: (keys: Buffer[], kind: BlockKind, timeoutSeconds: number, resolve: WaiterResolve, connectionId: ConnectionId) => { error?: string; }; wakeup: (key: Buffer | string) => void; cancel: (connectionId: ConnectionId) => void; blockedClientCount: () => number; }; export type BlockingManager = ReturnType;