durable-locks
Version:
A distributed locking mechanism using Cloudflare Durable Objects.
34 lines (31 loc) • 970 B
text/typescript
import { DurableObject } from 'cloudflare:workers';
type Lock = {
lease: number;
deadline: number;
};
type Success = {
success: true;
} & Lock;
type Failed = {
success: false;
reason: "NO_LONGER_VALID" | "BORROWED";
};
type Result = Success | Failed;
declare class DurableLock extends DurableObject {
alarm(): Promise<void>;
fetch(request: Request): Promise<Response>;
acquire(ttl: number, lease?: number): Promise<Result>;
release(lease: number): Promise<Failed | {
success: true;
}>;
isLocked(): Promise<boolean>;
private hardDeadline;
}
declare function useDurableLock(namespace: DurableObjectNamespace<DurableLock>, id: string): {
acquire: (ttl: number, lease?: number) => Promise<Result>;
release: (lease: number) => Promise<Failed | {
success: true;
}>;
isLocked: () => Promise<boolean>;
};
export { DurableLock, type Failed, type Lock, type Result, type Success, useDurableLock };