import { type RedisConnection } from './redis'; export type MutexKey = any; export interface MutexContext { key: string; lockId?: string; signal: AbortSignal; assertNotAborted(): void; } export type MutexFn = (didWait: boolean, context?: MutexContext) => Promise; export interface MutexOptions { key: MutexKey | MutexKey[]; fn: MutexFn; retryCount?: number; retryDelay?: number; renewInterval?: number; mode?: 'local' | 'redis'; redis?: RedisMutexProvider; signal?: AbortSignal; } export interface RedisMutexClient { eval(script: string, numberOfKeys: 1, key: string, ...args: Array): Promise | unknown; } export type RedisMutexProvider = () => RedisConnection; export interface MutexObservation { id: string; key: string; mode: 'local' | 'redis'; type: 'pending' | 'acquired' | 'released' | 'error' | 'failed'; startedAt: number; at: number; waited?: boolean; error?: unknown; } export type MutexObserver = (entry: MutexObservation) => void; export declare class MutexAcquisitionError extends Error { constructor(message?: string); } export declare function withMutex(options: MutexOptions): Promise; export declare function registerMutexObserver(observer: MutexObserver): () => void; export declare function withMutexes(options: Omit, 'key'> & { keys: Array['key']>; }): Promise; export declare function flattenMutexKey(key: MutexKey | MutexKey[]): string; export declare function resetMutexRedisConnection(): void; //# sourceMappingURL=mutex.d.ts.map