import { Redis } from 'ioredis'; import { Middleware } from './middleware.js'; import { RotifConfig, RotifMessage, Subscription, PublishOptions, SubscribeOptions } from './types.js'; import { createRetryDelayFn } from '@omnitron-dev/titan/utils'; import { type DLQCleanupConfig } from './dlq-manager.js'; interface HealthStatus { connected: boolean; lastPingMs: number; lastCheckTime: number; consecutiveFailures: number; } export declare class NotificationManager { redis: Redis; config: RotifConfig; private logger; private middleware; private subscriptions; private active; private delayTimeoutId?; private activePatterns; private initializationDefer; private subClient?; private dlqClient?; private consumerLoops; private luaScripts; private roundRobinIndices; private dlqSubscriptionPromise?; private dlqManager; private dlqKey; private healthCheckTimer?; private healthStatus; private backpressureStates; private patternMatcherCache; private enableFieldPooling; constructor(config: RotifConfig); private startHealthCheck; getHealthStatus(): HealthStatus; private shouldApplyBackpressure; private updateBackpressure; loadLuaScripts(): Promise; runLuaScript(scriptName: string, keys: string[], args: (string | number)[]): Promise; use(mw: Middleware): void; waitUntilReady(): Promise; destroy(): Promise; publish(channel: string, payload: any, options?: PublishOptions): Promise; publishBatch(messages: Array<{ channel: string; payload: any; options?: PublishOptions; }>): Promise>; subscribe(pattern: string, handler: (msg: RotifMessage) => Promise, options?: SubscribeOptions): Promise; private startDelayScheduler; stopAll(): Promise; subscribeToDLQ(handler: (msg: RotifMessage) => Promise): Promise; requeueFromDLQ(count?: number): Promise; private subscribeToPatternUpdates; private startSharedConsumerLoop; private syncPatterns; private ensureStreamGroup; private getRoundRobinIndex; getDLQStats(): Promise; getDLQMessages(options?: { channel?: string; limit?: number; offset?: number; maxAge?: number; }): Promise; cleanupDLQ(): Promise; clearDLQ(): Promise; updateDLQConfig(config: Partial): void; static RetryStrategies: { readonly aggressive: () => import("@omnitron-dev/titan/utils").RetryStrategyConfig; readonly conservative: () => import("@omnitron-dev/titan/utils").RetryStrategyConfig; readonly immediate: () => import("@omnitron-dev/titan/utils").RetryStrategyConfig; readonly linear: (baseDelay?: number) => import("@omnitron-dev/titan/utils").RetryStrategyConfig; readonly fibonacci: (baseDelay?: number) => import("@omnitron-dev/titan/utils").RetryStrategyConfig; readonly none: () => import("@omnitron-dev/titan/utils").RetryStrategyConfig; readonly exponential: (baseDelay?: number, multiplier?: number, maxDelay?: number, jitter?: number) => import("@omnitron-dev/titan/utils").RetryStrategyConfig; }; static createRetryDelayFn: typeof createRetryDelayFn; getSubscriptionStats(): { count: number; active: number; paused: number; }; } export {}; //# sourceMappingURL=rotif.d.ts.map