Review a leader-elected cleanup worker

src/cleanup-worker-types.tsTypeScript
@@ -0,0 +1,21 @@
1+export interface Lease {
2+ ownerId: string;
3+ fencingToken: number;
4+ expiresAtMs: number;
5+}
6+
7+export interface CleanupDependencies {
8+ clock: { nowMs(): number };
9+ leases: {
10+ acquire(ownerId: string): Promise<Lease | null>;
11+ renew(lease: Lease): Promise<Lease | null>;
12+ release(lease: Lease): Promise<void>;
13+ };
14+ records: {
15+ deleteBatch(
16+ olderThanMs: number,
17+ limit: number,
18+ fencingToken: number,
19+ ): Promise<number>;
20+ };
21+}