import { Observable } from 'rxjs';
/**
 * Options for acquiring a distributed lock.
 * @category Platform
 */
export interface DistributedLockOptions {
    /**
     * The maximum time to wait for the lock to be acquired on the server.
     * @default 2000.
     */
    acquisitionTimeoutMillis?: number;
    /**
     * The maximum time the lock can be held before it is automatically released.
     * If not specified, the lock will be held until explicitly released or the connection is lost.
     * @default undefined (no limit).
     */
    maxHoldTimeMillis?: number;
}
/**
 * A handler for a distributed lock that can be released.
 * @category Platform
 */
export interface DistributedLock {
    /**
     * Releases the lock by sending a release message to the server.
     * The release process runs asynchronously. Use `observeRelease()` to be notified when the release completes.
     * @returns A promise that resolves when the release message is sent, or undefined for backward compatibility.
     */
    release(): Promise<void>;
    /**
     * Whether the lock has been released.
     * @returns True if the lock has been released.
     */
    isReleased(): boolean;
    /**
     * Observes when the lock is released (It may be released due to a connection issue)
     * @returns An observable that emits when the lock is released.
     */
    observeRelease(): Observable<void>;
    /** The resource identifier (mutex name) that was locked. */
    get resourceId(): string;
    /** Unique lock instance ID within the system. */
    get lockId(): string;
}
