/** * PubSubManager - Manages dedicated subscriber connections for pub/sub waiting. * * ioredis clients in subscribe mode cannot run regular commands, * so we lazily create a duplicate connection for subscriptions. */ import { EventEmitter } from "events"; import { RedisClient } from "../core/types"; import { Logger } from "../core/logger"; export interface PubSubManagerConfig { /** Original Redis clients (used for publish only) */ clients: RedisClient[]; /** Optional user-provided subscriber clients */ subscriberClients?: RedisClient[]; /** Key prefix for channel names */ keyPrefix: string; /** Logger instance */ logger: Logger; } export declare class PubSubManager extends EventEmitter { private readonly config; private subscriber; private initialized; private initPromise; private readonly channelListeners; private messageHandler; private ownsSubscriber; constructor(config: PubSubManagerConfig); /** Lazily initialize subscriber connection */ private ensureInitialized; private doInitialize; /** Subscribe to a channel with a callback */ subscribe(channel: string, listener: (message: string) => void): Promise; /** Unsubscribe a listener from a channel */ unsubscribe(channel: string, listener?: (message: string) => void): Promise; /** Publish to a channel (uses original client, NOT subscriber) */ publish(channel: string, message: string): Promise; /** Wait for a message on a channel with timeout */ waitForMessage(channel: string, timeoutMs: number): Promise; /** Synchronous subscribe (after ensureInitialized) — adds listener and triggers Redis SUBSCRIBE */ private subscribeSync; /** Get number of active channel subscriptions */ getSubscriptionCount(): number; /** Shut down subscriber connections */ shutdown(): Promise; } //# sourceMappingURL=pubsub-manager.d.ts.map