API Reference

Complete API documentation for the ReliableScheduler class.

Constructor

      new ReliableScheduler(()
    

Creates a new scheduler instance with the provided Durable Object storage. @param storage - Durable Object storage instance @param options - Optional configuration @param options.maxConcurrentTasks - Maximum number of tasks to process concurrently (default: 10)

Static Methods

      static generateTaskId(prefix: string = "task"): string
    

Generate a unique task ID. Default prefix is 'task'.

Core Execution

runNow()

      runNow((): void
    

Start a task immediately with eviction safety. Sets a 30s safety alarm for automatic retry. @param options.maxRetries - Override default retry count (default: 3, use Infinity for infinite loop tasks) @param options.priority - Task priority: 0=high, 1=medium, 2=low (default: 1)

schedule()

      schedule((): void
    

Schedule a task to run at a future time (Unix timestamp or Date). @param options.priority - Task priority: 0=high, 1=medium, 2=low (default: 1)

alarm()

      alarm(): Effect.Effect<void, never, never>
    

Call this from your Durable Object's alarm handler to process scheduled tasks.

register()

      register(taskName: string, handler: TaskHandler): void
    

Register a named task handler. The handler receives taskId and params, and can access SchedulerService via yield* SchedulerService in Effect context.

Task Management

getTask()

      getTask(taskId: string): Effect.Effect<Task | undefined, never, never>
    

Get a single task by ID. Returns undefined if not found.

getTasks()

      getTasks(status?: TaskStatus): Effect.Effect<Task[], never, never>
    

Get all tasks, optionally filtered by status.

cancelTask()

      cancelTask(taskId: string): Effect.Effect<boolean, never, never>
    

Cancel and delete a task. Returns true if successful, false if task not found.

pauseTask()

      pauseTask(taskId: string): Effect.Effect<boolean, never, never>
    

Pause a running task. Returns true if successful, false if task not found or cannot be paused.

resumeTask()

      resumeTask(taskId: string): Effect.Effect<boolean, never, never>
    

Resume a paused task. Returns true if successful, false if task not found or not paused.

completeTask()

      completeTask(taskId: string): Effect.Effect<void, never, never>
    

Mark a task as complete and clean up its state.

Progress & Steps

checkpoint()

      checkpoint(taskId: string, key: string, value: unknown): Effect.Effect<void, never, never>
    

Save progress for a task. Use this to mark completion of expensive operations.

getCheckpoint()

      getCheckpoint(taskId: string, key: string): Effect.Effect<unknown, never, never>
    

Retrieve saved progress for a task. Returns undefined if not found.

runSteps()

      runSteps((): void
    

Execute a multi-step task with automatic progress tracking, pause/resume support, checkpointing, and optional auto-completion.

runSubSteps()

      runSubSteps(taskId: string, stepName: string, stepIndex: number, totalSteps: number, subStepCount: number, subStepDuration: number, onSubStep?: (subStepIndex: number) => Promise<void> | Effect.Effect<void>): Effect.Effect<void, never, never>
    

Helper for sub-step execution within a step. Handles pause checks and progress tracking automatically.

Utilities

clearCompleted()

      clearCompleted(): Effect.Effect<number, never, never>
    

Delete all completed tasks. Returns the count of deleted tasks.

clearAll()

      clearAll(): Effect.Effect<number, never, never>
    

Delete all tasks regardless of status. Returns the count of deleted tasks.

formatTaskForUI()

      formatTaskForUI(task: Task): any
    

Format a task object for UI consumption with standardized fields.

getHandler()

      getHandler(taskName: string): TaskHandler | undefined
    

Get a registered handler by name. Returns undefined if not found.

Types

TaskStatus

      type TaskStatus = "pending" | "running" | "paused" | "completed" | "failed"
    

Task

      interface Task {
  taskId: string;
  taskName: string;
  params: unknown;
  scheduledAt: number;
  startedAt: number;
  status: TaskStatus;
  safetyAlarmAt?: number;
  progress: Record<string, unknown>;
  retryCount?: number;
  maxRetries?: number;
  pausedAt?: number;
}
    

TaskHandler

      type TaskHandler = (
  scheduler: ReliableScheduler,
  taskId: string,
  params: unknown
) => Effect.Effect<void>