// Type definitions for redlock 3.0 // Project: https://github.com/mike-marcacci/node-redlock // Definitions by: Ilya Mochalov // BendingBender // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 import * as Promise from 'bluebird'; import { EventEmitter } from 'events'; export = Redlock; declare namespace Redlock { type Callback = (err: any, value?: T) => void; class Lock { redlock: Redlock; resource: string; value: string | null; expiration: number; constructor(redlock: Redlock, resource: string, value: string | null, expiration: number); unlock(callback?: Callback): Promise; extend(ttl: number, callback?: Callback): Promise; } interface Options { driftFactor?: number; retryCount?: number; retryDelay?: number; retryJitter?: number; lockScript?(origLockScript: string): string; unlockScript?(origUnlockScript: string): string; extendScript?(origExtendScript: string): string; } class LockError extends Error { readonly name: 'LockError'; constructor(message?: string); } interface CompatibleRedisClient { eval(args: any[], callback?: (err: Error | null, res: any) => void): any; eval(...args: any[]): any; } } declare class Redlock extends EventEmitter { LockError: typeof Redlock.LockError; Lock: typeof Redlock.Lock; driftFactor: number; retryCount: number; retryDelay: number; retryJitter: number; servers: Redlock.CompatibleRedisClient[]; constructor(clients: Redlock.CompatibleRedisClient[], options?: Redlock.Options); acquire(resource: string, ttl: number, callback?: Redlock.Callback): Promise; lock(resource: string, ttl: number, callback?: Redlock.Callback): Promise; disposer(resource: string, ttl: number, errorHandler?: Redlock.Callback): Promise.Disposer; release(lock: Redlock.Lock, callback?: Redlock.Callback): Promise; unlock(lock: Redlock.Lock, callback?: Redlock.Callback): Promise; extend(lock: Redlock.Lock, ttl: number, callback?: Redlock.Callback): Promise; addListener(event: 'clientError', listener: (err: any) => void): this; on(event: 'clientError', listener: (err: any) => void): this; once(event: 'clientError', listener: (err: any) => void): this; removeListener(event: 'clientError', listener: (err: any) => void): this; }