UNPKG

@shagital/atomic-lock

Version:

Universal atomic locking with pluggable drivers (Redis, SQLite, File, Memory)

75 lines (74 loc) 1.99 kB
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<boolean>; tryAcquireMultiple(keys: string[], lockValue: string, expiryInSeconds: number): Promise<boolean>; release(key: string, lockValue: string): Promise<boolean>; releaseMultiple(keys: string[], lockValue: string): Promise<number>; exists?(key: string): Promise<boolean>; getLockInfo?(key: string): Promise<LockInfo | null>; cleanup?(): Promise<void>; close?(): Promise<void>; } 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; }