import type { OptionalRestArgs, SchedulableFunctionReference, Scheduler, } from "convex/server"; import { Effect } from "effect"; export interface ConfectScheduler { runAfter( delayMs: number, functionReference: FuncRef, ...args: OptionalRestArgs ): Effect.Effect; runAt( timestamp: number | Date, functionReference: FuncRef, ...args: OptionalRestArgs ): Effect.Effect; } export class ConfectSchedulerImpl implements ConfectScheduler { constructor(private scheduler: Scheduler) {} runAfter( delayMs: number, functionReference: FuncRef, ...args: OptionalRestArgs ): Effect.Effect { return Effect.promise(() => this.scheduler.runAfter(delayMs, functionReference, ...args), ); } runAt( timestamp: number | Date, functionReference: FuncRef, ...args: OptionalRestArgs ): Effect.Effect { return Effect.promise(() => this.scheduler.runAt(timestamp, functionReference, ...args), ); } }