import type { RedisOptions } from 'ioredis'; import type { StatsTracker } from './stats.js'; import type { RetryStrategyConfig } from '@omnitron-dev/titan/utils'; import type { DLQCleanupConfig } from './dlq-manager.js'; import type { ILogger } from '@omnitron-dev/titan/types'; export interface RotifMessage { id: string; channel: string; payload: T; timestamp: number; attempt: number; ack: () => Promise; } export interface RotifConfig { redis: RedisOptions | string; logger?: ILogger; disableDelayed?: boolean; checkDelayInterval?: number; maxRetries?: number; maxStreamLength?: number; minStreamId?: string; blockInterval?: number; deduplicationTTL?: number; scheduledBatchSize?: number; retryDelay?: number | ((attempt: number, msg: RotifMessage) => number); retryStrategy?: RetryStrategyConfig; localRoundRobin?: boolean; disablePendingMessageRecovery?: boolean; pendingCheckInterval?: number; pendingIdleThreshold?: number; groupNameFn?: (pattern: string) => string; consumerNameFn?: () => string; generateDedupKey?: ({ channel, payload, group, pattern, }: { channel: string; payload: any; group?: string; pattern?: string; }) => string; dlqCleanup?: DLQCleanupConfig; dlqKey?: string; messageConcurrency?: number; enablePipelining?: boolean; pipelineBatchSize?: number; enableHealthCheck?: boolean; healthCheckInterval?: number; enableBackpressure?: boolean; backpressureThreshold?: number; enableFieldPooling?: boolean; } export interface Subscription { id: string; pattern: string; group: string; handler: (msg: RotifMessage) => Promise; options?: SubscribeOptions; unsubscribe(removePattern?: boolean): Promise; pause(): void; resume(): void; isPaused: boolean; stats(): SubscriptionStats; statsTracker?: StatsTracker; inflightCount: number; } export interface SubscriptionStats { messages: number; retries: number; failures?: number; lastMessageAt?: number; } export interface PublishOptions { delayMs?: number; deliverAt?: number | Date; attempt?: number; exactlyOnce?: boolean; deduplicationTTL?: number; dedupKey?: string; } export interface PublishResult { success: boolean; messageIds: string[]; status: 'published' | 'scheduled' | 'duplicate' | 'no_subscribers'; patternCount: number; } export interface SubscribeOptions { groupName?: string; consumerName?: string; startFrom?: '$' | '0' | string; maxRetries?: number; retryDelay?: number | ((attempt: number, msg: RotifMessage) => number); retryStrategy?: RetryStrategyConfig; } //# sourceMappingURL=types.d.ts.map