import { Redis } from 'ioredis'; /** * Type definitions for atomic-lock */ export interface LockOptions { expiryInSeconds?: number; maxRetries?: number; circuitBreakerThreshold?: number; circuitBreakerResetTime?: number; maxFailureEntries?: number; } export interface CircuitBreakerStats { isOpen: boolean; failureCount: number; lastFailure?: number; nextAttemptAt?: number; } export interface LockInfo { key: string; value: string; expiresAt: number; createdAt?: number; } export interface LockDriver { tryAcquire(key: string, lockValue: string, expiryInSeconds: number): Promise; tryAcquireMultiple(keys: string[], lockValue: string, expiryInSeconds: number): Promise; release(key: string, lockValue: string): Promise; releaseMultiple(keys: string[], lockValue: string): Promise; exists?(key: string): Promise; getLockInfo?(key: string): Promise; cleanup?(): Promise; close?(): Promise; } export interface RedisConnectionOptions { host?: string; port?: number; password?: string; username?: string; db?: number; family?: 4 | 6; connectTimeout?: number; commandTimeout?: number; retryDelayOnFailover?: number; maxRetriesPerRequest?: number | null; lazyConnect?: boolean; keepAlive?: number; keyPrefix?: string; } export interface RedisConfig { client?: Redis; url?: string; host?: string; port?: number; password?: string; username?: string; db?: number; options?: RedisConnectionOptions; } export interface FileConfig { lockDir: string; cleanupInterval?: number; } export interface SQLiteConfig { db: any; } export interface MemoryConfig { } export interface DriverConfig { driver: 'redis' | 'file' | 'sqlite' | 'memory'; redis?: RedisConfig; file?: FileConfig; sqlite?: SQLiteConfig; memory?: MemoryConfig; }