export type LockItem = { uid: string; lockedBy?: string; createdOn: Date; }; export type LockAcquireInput = { lockUid: string; requestedBy?: string; }; export type LockAcquireResult = { available: boolean; lockItem: LockItem; }; export type LockReleaseInput = { lockUid: string; }; export declare class LockNotFoundError extends Error { } export interface ILockRepository { acquireLock(input: LockAcquireInput): Promise; releaseLock(input: LockReleaseInput): Promise; getLock(lockUid: string): Promise; } export interface ExecuteSequentialInput { lockUid: string; requestedBy?: string; lockTimeout?: number; lockPolling?: number; operation: () => Promise; } export declare class ExclusiveOperationResult { skipped: boolean; result?: T; } export interface ExecuteExclusiveInput { lockUid: string; requestedBy?: string; lockTimeout?: number; operation: () => Promise; } export interface IOperationLockService { executeSequential(input: ExecuteSequentialInput): Promise; executeExclusive(input: ExecuteExclusiveInput): Promise>; }