import type { Queue } from "../core/queue.ts"; export type JobStatus = 'waiting' | 'delayed' | 'reserved' | 'done' | 'failed'; export interface JobMeta { /** Job name */ name: string; /** Time to run - number of seconds to run the job */ ttr?: number; /** Number of seconds to delay job execution from now */ delaySeconds?: number; /** Job priority - higher numbers = higher priority (processed first) */ priority?: number; /** Job pushed at */ pushedAt?: Date; /** Job reserved at */ reservedAt?: Date; /** Job done at */ doneAt?: Date; /** SQS receipt handle */ receiptHandle?: string; } /** * Job context object passed to handlers containing full job information. */ export interface JobContext { /** Job ID */ id: string; /** Job payload */ payload: T; /** Job meta: ttr, delaySeconds, priority, pushedAt, reservedAt, doneAt, receiptHandle */ meta: JobMeta; /** Job pushed at */ pushedAt?: Date; /** Job reserved at */ reservedAt?: Date; } /** * Type for a single job handler function. */ export type JobHandler = (job: JobContext, queue: Queue) => Promise | void; /** * Type mapping all job types to their corresponding handlers. * Ensures type safety and completeness of handler registration. */ export type JobHandlers = { [K in keyof TJobMap]: JobHandler; }; export interface QueueMessage { id: string; /** Job payload */ payload: unknown; /** Job meta: ttr, delaySeconds, priority, pushedAt, reservedAt, doneAt, receiptHandle */ meta: JobMeta; } export type QueueEvent = { type: 'beforePush'; name: string; payload: any; meta: JobMeta; } | { type: 'afterPush'; id: string; name: string; payload: any; meta: JobMeta; } | { type: 'beforeExec'; id: string; name: string; payload: any; meta: JobMeta; } | { type: 'afterExec'; id: string; name: string; payload: any; meta: JobMeta; result: any; } | { type: 'afterError'; id: string; name: string; payload: any; meta: JobMeta; error: unknown; }; export interface BaseJobOptions { /** Time to run - number of seconds to run the job */ ttr?: number; } export interface WithPriority { /** Job priority - higher numbers = higher priority (processed first) */ priority?: number; } export interface WithDelay { /** Number of seconds to delay job execution from now */ delaySeconds?: number; } export interface JobOptions extends BaseJobOptions, WithPriority, WithDelay { } export interface JobRequestFull extends BaseJobOptions, WithPriority, WithDelay { /** Job payload */ payload: TPayload; } export interface BaseJobRequest extends BaseJobOptions { /** Job payload */ payload: TPayload; }