@shagital/atomic-lock
Version:
Universal atomic locking with pluggable drivers (Redis, SQLite, File, Memory)
75 lines (74 loc) • 1.99 kB
TypeScript
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;
}