@workglow/job-queue 0.0.126 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  "sources": ["../src/job/Job.ts", "../src/job/JobError.ts", "../src/job/JobQueueClient.ts", "../src/job/JobStorageConverters.ts", "../src/job/JobQueueServer.ts", "../src/limiter/NullLimiter.ts", "../src/job/JobQueueWorker.ts", "../src/limiter/CompositeLimiter.ts", "../src/limiter/ConcurrencyLimiter.ts", "../src/limiter/DelayLimiter.ts", "../src/limiter/EvenlySpacedRateLimiter.ts", "../src/limiter/ILimiter.ts", "../src/limiter/RateLimiter.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { JobStatus } from \"@workglow/storage\";\nimport { JobError } from \"./JobError\";\nimport type { JobProgressListener } from \"./JobQueueEventListeners\";\n\nexport { JobStatus };\n\n/**\n * Context for job execution\n */\nexport interface IJobExecuteContext {\n signal: AbortSignal;\n updateProgress: (\n progress: number,\n message?: string,\n details?: Record<string, any> | null\n ) => Promise<void>;\n}\n\n/**\n * Details about a job that reflect the structure in the database.\n */\nexport type JobConstructorParam<Input, Output> = {\n id?: unknown;\n jobRunId?: string;\n queueName?: string;\n input: Input;\n output?: Output | null;\n error?: string | null;\n errorCode?: string | null;\n fingerprint?: string;\n maxRetries?: number;\n status?: JobStatus;\n createdAt?: Date;\n deadlineAt?: Date | null;\n lastRanAt?: Date | null;\n runAfter?: Date | null;\n completedAt?: Date | null;\n runAttempts?: number;\n progress?: number;\n progressMessage?: string;\n progressDetails?: Record<string, any> | null;\n /** The ID of the worker that claimed this job, null if unclaimed */\n workerId?: string | null;\n};\n\nexport type JobClass<Input, Output> = new (\n param: JobConstructorParam<Input, Output>\n) => Job<Input, Output>;\n\n/**\n * A job that can be executed by a JobQueue.\n *\n * @template Input - The type of the job's input\n * @template Output - The type of the job's output\n */\nexport class Job<Input, Output> {\n public id: unknown;\n public jobRunId: string | undefined;\n public queueName: string | undefined;\n public input: Input;\n public maxRetries: number;\n public createdAt: Date;\n public fingerprint: string | undefined;\n public status: JobStatus = JobStatus.PENDING;\n public runAfter: Date;\n public output: Output | null = null;\n public runAttempts: number = 0;\n public lastRanAt: Date | null = null;\n public completedAt: Date | null = null;\n public deadlineAt: Date | null = null;\n public error: string | null = null;\n public errorCode: string | null = null;\n public progress: number = 0;\n public progressMessage: string = \"\";\n public progressDetails: Record<string, any> | null = null;\n /** The ID of the worker that claimed this job */\n public workerId: string | null = null;\n\n constructor({\n queueName,\n input,\n jobRunId,\n id,\n error = null,\n errorCode = null,\n fingerprint = undefined,\n output = null,\n maxRetries = 10,\n createdAt = new Date(),\n completedAt = null,\n status = JobStatus.PENDING,\n deadlineAt = null,\n runAttempts = 0,\n lastRanAt = null,\n runAfter = new Date(),\n progress = 0,\n progressMessage = \"\",\n progressDetails = null,\n workerId = null,\n }: JobConstructorParam<Input, Output>) {\n this.runAfter = runAfter ?? new Date();\n this.createdAt = createdAt ?? new Date();\n this.lastRanAt = lastRanAt ?? null;\n this.deadlineAt = deadlineAt ?? null;\n this.completedAt = completedAt ?? null;\n\n this.queueName = queueName;\n this.id = id;\n this.jobRunId = jobRunId;\n this.status = status;\n this.fingerprint = fingerprint;\n this.input = input;\n this.maxRetries = maxRetries;\n this.runAttempts = runAttempts;\n this.output = output;\n this.error = error;\n this.errorCode = errorCode;\n this.progress = progress;\n this.progressMessage = progressMessage;\n this.progressDetails = progressDetails;\n this.workerId = workerId ?? null;\n }\n\n async execute(_input: Input, _context: IJobExecuteContext): Promise<Output> {\n throw new JobError(\"Method not implemented.\");\n }\n\n public progressListeners: Set<JobProgressListener> = new Set();\n\n /**\n * Update the job's progress (for direct execution without a worker)\n * @param progress - Progress value between 0 and 100\n * @param message - Optional progress message\n * @param details - Optional progress details\n */\n public async updateProgress(\n progress: number,\n message: string = \"\",\n details: Record<string, any> | null = null\n ): Promise<void> {\n this.progress = progress;\n this.progressMessage = message;\n this.progressDetails = details;\n\n // Notify direct listeners\n for (const listener of this.progressListeners) {\n listener(progress, message, details);\n }\n }\n\n /**\n * Adds a progress listener for this job\n *\n * Only used if run directly (not via a queue)\n *\n * @param listener - The callback function to be called when progress updates occur\n * @returns A cleanup function to remove the listener\n */\n public onJobProgress(listener: JobProgressListener): () => void {\n this.progressListeners.add(listener);\n\n return () => {\n this.progressListeners.delete(listener);\n };\n }\n}\n",
6
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseError } from \"@workglow/util\";\n\nexport class JobError extends BaseError {\n public static type: string = \"JobError\";\n public retryable = false;\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job not being found\n *\n * Examples: job.id is undefined, job.id is not found in the storage, etc.\n */\nexport class JobNotFoundError extends JobError {\n public static type: string = \"JobNotFoundError\";\n constructor(message: string = \"Job not found\") {\n super(message);\n }\n}\n\n/**\n * A job error that is retryable\n *\n * Examples: network timeouts, temporary unavailability of an external service, or rate-limiting\n */\nexport class RetryableJobError extends JobError {\n public static type: string = \"RetryableJobError\";\n constructor(\n message: string,\n public retryDate?: Date\n ) {\n super(message);\n this.retryable = true;\n }\n}\n\n/**\n * A job error that is not retryable\n *\n * Examples: invalid input, missing required parameters, or a permanent failure of\n * an external service, permission errors, running out of money for an API, etc.\n */\nexport class PermanentJobError extends JobError {\n public static type: string = \"PermanentJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by an abort signal,\n * meaning the client aborted the job on purpose,\n * not by the queue going down or similar.\n *\n * Example: job.abort()\n */\nexport class AbortSignalJobError extends PermanentJobError {\n public static type: string = \"AbortSignalJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job being disabled\n *\n * Examples: job.disable()\n */\nexport class JobDisabledError extends PermanentJobError {\n public static type: string = \"JobDisabledError\";\n}\n",
6
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseError } from \"@workglow/util\";\n\nexport class JobError extends BaseError {\n public static override type: string = \"JobError\";\n public retryable = false;\n constructor(override readonly message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job not being found\n *\n * Examples: job.id is undefined, job.id is not found in the storage, etc.\n */\nexport class JobNotFoundError extends JobError {\n public static override type: string = \"JobNotFoundError\";\n constructor(message: string = \"Job not found\") {\n super(message);\n }\n}\n\n/**\n * A job error that is retryable\n *\n * Examples: network timeouts, temporary unavailability of an external service, or rate-limiting\n */\nexport class RetryableJobError extends JobError {\n public static override type: string = \"RetryableJobError\";\n constructor(\n message: string,\n public retryDate?: Date\n ) {\n super(message);\n this.retryable = true;\n }\n}\n\n/**\n * A job error that is not retryable\n *\n * Examples: invalid input, missing required parameters, or a permanent failure of\n * an external service, permission errors, running out of money for an API, etc.\n */\nexport class PermanentJobError extends JobError {\n public static override type: string = \"PermanentJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by an abort signal,\n * meaning the client aborted the job on purpose,\n * not by the queue going down or similar.\n *\n * Example: job.abort()\n */\nexport class AbortSignalJobError extends PermanentJobError {\n public static override type: string = \"AbortSignalJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job being disabled\n *\n * Examples: job.disable()\n */\nexport class JobDisabledError extends PermanentJobError {\n public static override type: string = \"JobDisabledError\";\n}\n",
7
7
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IQueueStorage, JobStatus, JobStorageFormat, QueueChangePayload } from \"@workglow/storage\";\nimport { EventEmitter } from \"@workglow/util\";\nimport { Job } from \"./Job\";\nimport {\n AbortSignalJobError,\n JobDisabledError,\n JobError,\n JobNotFoundError,\n PermanentJobError,\n RetryableJobError,\n} from \"./JobError\";\nimport {\n JobProgressListener,\n JobQueueEventListener,\n JobQueueEventListeners,\n JobQueueEventParameters,\n JobQueueEvents,\n} from \"./JobQueueEventListeners\";\nimport type { JobQueueServer } from \"./JobQueueServer\";\nimport { storageToClass } from \"./JobStorageConverters\";\n\n/**\n * Handle returned when submitting a job, providing methods to interact with the job\n */\nexport interface JobHandle<Output> {\n readonly id: unknown;\n waitFor(): Promise<Output>;\n abort(): Promise<void>;\n onProgress(callback: JobProgressListener): () => void;\n}\n\n/**\n * Options for creating a JobQueueClient\n */\nexport interface JobQueueClientOptions<Input, Output> {\n readonly storage: IQueueStorage<Input, Output>;\n readonly queueName: string;\n}\n\n/**\n * Client for submitting jobs and monitoring their progress.\n * Connect to a JobQueueServer for same-process optimization,\n * or use storage subscriptions for cross-process communication.\n */\nexport class JobQueueClient<Input, Output> {\n public readonly queueName: string;\n protected readonly storage: IQueueStorage<Input, Output>;\n protected readonly events = new EventEmitter<JobQueueEventListeners<Input, Output>>();\n protected server: JobQueueServer<Input, Output> | null = null;\n protected storageUnsubscribe: (() => void) | null = null;\n\n /**\n * Map of job IDs to their pending promise resolvers\n */\n protected readonly activeJobPromises: Map<\n unknown,\n Array<{\n resolve: (value: Output) => void;\n reject: (err: JobError) => void;\n }>\n > = new Map();\n\n /**\n * Map of job IDs to their progress listeners\n */\n protected readonly jobProgressListeners: Map<unknown, Set<JobProgressListener>> = new Map();\n\n /**\n * Last known progress state for each job\n */\n protected readonly lastKnownProgress: Map<\n unknown,\n {\n readonly progress: number;\n readonly message: string;\n readonly details: Record<string, unknown> | null;\n }\n > = new Map();\n\n constructor(options: JobQueueClientOptions<Input, Output>) {\n this.queueName = options.queueName;\n this.storage = options.storage;\n }\n\n /**\n * Attach to a local JobQueueServer for same-process event optimization.\n * When attached, events flow directly from server without storage polling.\n */\n public attach(server: JobQueueServer<Input, Output>): void {\n if (this.server) {\n this.detach();\n }\n this.server = server;\n server.addClient(this);\n\n // Unsubscribe from storage if we were using it\n if (this.storageUnsubscribe) {\n this.storageUnsubscribe();\n this.storageUnsubscribe = null;\n }\n }\n\n /**\n * Detach from the current server\n */\n public detach(): void {\n if (this.server) {\n this.server.removeClient(this);\n this.server = null;\n }\n }\n\n /**\n * Connect to storage for cross-process communication (when no local server).\n * Uses storage subscriptions to receive job updates.\n */\n public connect(): void {\n if (this.server) {\n return; // Already connected via server\n }\n\n if (this.storageUnsubscribe) {\n return; // Already subscribed\n }\n\n this.storageUnsubscribe = this.storage.subscribeToChanges(\n (change: QueueChangePayload<Input, Output>) => {\n this.handleStorageChange(change);\n }\n );\n }\n\n /**\n * Disconnect from storage subscriptions\n */\n public disconnect(): void {\n if (this.storageUnsubscribe) {\n this.storageUnsubscribe();\n this.storageUnsubscribe = null;\n }\n this.detach();\n }\n\n /**\n * Submit a job to the queue\n */\n public async submit(\n input: Input,\n options?: {\n readonly jobRunId?: string;\n readonly fingerprint?: string;\n readonly maxRetries?: number;\n readonly runAfter?: Date;\n readonly deadlineAt?: Date;\n }\n ): Promise<JobHandle<Output>> {\n const job: JobStorageFormat<Input, Output> = {\n queue: this.queueName,\n input,\n job_run_id: options?.jobRunId,\n fingerprint: options?.fingerprint,\n max_retries: options?.maxRetries ?? 10,\n run_after: options?.runAfter?.toISOString() ?? new Date().toISOString(),\n deadline_at: options?.deadlineAt?.toISOString() ?? null,\n completed_at: null,\n status: JobStatus.PENDING,\n };\n\n const id = await this.storage.add(job);\n\n return this.createJobHandle(id);\n }\n\n /**\n * Submit multiple jobs to the queue\n */\n public async submitBatch(\n inputs: readonly Input[],\n options?: {\n readonly jobRunId?: string;\n readonly maxRetries?: number;\n }\n ): Promise<readonly JobHandle<Output>[]> {\n const handles: JobHandle<Output>[] = [];\n for (const input of inputs) {\n const handle = await this.submit(input, options);\n handles.push(handle);\n }\n return handles;\n }\n\n /**\n * Get a job by ID\n */\n public async getJob(id: unknown): Promise<Job<Input, Output> | undefined> {\n if (!id) throw new JobNotFoundError(\"Cannot get undefined job\");\n const job = await this.storage.get(id);\n if (!job) return undefined;\n return this.storageToClass(job);\n }\n\n /**\n * Get jobs by run ID\n */\n public async getJobsByRunId(runId: string): Promise<readonly Job<Input, Output>[]> {\n if (!runId) throw new JobNotFoundError(\"Cannot get jobs by undefined runId\");\n const jobs = await this.storage.getByRunId(runId);\n return jobs.map((job) => this.storageToClass(job));\n }\n\n /**\n * Peek at jobs in the queue\n */\n public async peek(status?: JobStatus, num?: number): Promise<readonly Job<Input, Output>[]> {\n const jobs = await this.storage.peek(status, num);\n return jobs.map((job) => this.storageToClass(job));\n }\n\n /**\n * Get the size of the queue\n */\n public async size(status?: JobStatus): Promise<number> {\n return this.storage.size(status);\n }\n\n /**\n * Get the output for an input (if job completed)\n */\n public async outputForInput(input: Input): Promise<Output | null> {\n if (!input) throw new JobNotFoundError(\"Cannot get output for undefined input\");\n return this.storage.outputForInput(input);\n }\n\n /**\n * Wait for a job to complete\n */\n public async waitFor(jobId: unknown): Promise<Output> {\n if (!jobId) throw new JobNotFoundError(\"Cannot wait for undefined job\");\n\n const job = await this.getJob(jobId);\n if (!job) throw new JobNotFoundError(`Job ${jobId} not found`);\n\n if (job.status === JobStatus.COMPLETED) {\n return job.output as Output;\n }\n if (job.status === JobStatus.DISABLED) {\n throw new JobDisabledError(`Job ${jobId} was disabled`);\n }\n if (job.status === JobStatus.FAILED) {\n throw this.buildErrorFromJob(job);\n }\n\n const { promise, resolve, reject } = Promise.withResolvers<Output>();\n promise.catch(() => {}); // Prevent unhandled rejection\n\n const promises = this.activeJobPromises.get(jobId) || [];\n promises.push({ resolve, reject });\n this.activeJobPromises.set(jobId, promises);\n\n return promise;\n }\n\n /**\n * Abort a job\n */\n public async abort(jobId: unknown): Promise<void> {\n if (!jobId) throw new JobNotFoundError(\"Cannot abort undefined job\");\n await this.storage.abort(jobId);\n this.events.emit(\"job_aborting\", this.queueName, jobId);\n }\n\n /**\n * Abort all jobs in a job run\n */\n public async abortJobRun(jobRunId: string): Promise<void> {\n if (!jobRunId) throw new JobNotFoundError(\"Cannot abort job run with undefined jobRunId\");\n const jobs = await this.getJobsByRunId(jobRunId);\n await Promise.allSettled(\n jobs.map((job) => {\n if (job.status === JobStatus.PROCESSING || job.status === JobStatus.PENDING) {\n return this.abort(job.id);\n }\n })\n );\n }\n\n /**\n * Subscribe to progress updates for a specific job\n */\n public onJobProgress(jobId: unknown, listener: JobProgressListener): () => void {\n if (!this.jobProgressListeners.has(jobId)) {\n this.jobProgressListeners.set(jobId, new Set());\n }\n const listeners = this.jobProgressListeners.get(jobId)!;\n listeners.add(listener);\n\n return () => {\n const listeners = this.jobProgressListeners.get(jobId);\n if (listeners) {\n listeners.delete(listener);\n if (listeners.size === 0) {\n this.jobProgressListeners.delete(jobId);\n }\n }\n };\n }\n\n // ========================================================================\n // Event handling\n // ========================================================================\n\n public on<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): void {\n this.events.on(event, listener);\n }\n\n public off<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): void {\n this.events.off(event, listener);\n }\n\n public once<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): void {\n this.events.once(event, listener);\n }\n\n public waitOn<Event extends JobQueueEvents>(\n event: Event\n ): Promise<JobQueueEventParameters<Event, Input, Output>> {\n return this.events.waitOn(event) as Promise<JobQueueEventParameters<Event, Input, Output>>;\n }\n\n /**\n * Subscribes to an event and returns a function to unsubscribe\n * @param event - The event name to subscribe to\n * @param listener - The listener function to add\n * @returns a function to unsubscribe from the event\n */\n public subscribe<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): () => void {\n return this.events.subscribe(event, listener);\n }\n\n // ========================================================================\n // Internal methods called by JobQueueServer for same-process optimization\n // ========================================================================\n\n /**\n * Called by server when a job starts processing\n * @internal\n */\n public handleJobStart(jobId: unknown): void {\n this.lastKnownProgress.set(jobId, {\n progress: 0,\n message: \"\",\n details: null,\n });\n this.events.emit(\"job_start\", this.queueName, jobId);\n }\n\n /**\n * Called by server when a job completes\n * @internal\n */\n public handleJobComplete(jobId: unknown, output: Output): void {\n this.events.emit(\"job_complete\", this.queueName, jobId, output);\n\n const promises = this.activeJobPromises.get(jobId);\n if (promises) {\n promises.forEach(({ resolve }) => resolve(output));\n }\n this.cleanupJob(jobId);\n }\n\n /**\n * Called by server when a job fails\n * @internal\n */\n public handleJobError(jobId: unknown, error: string, errorCode?: string): void {\n this.events.emit(\"job_error\", this.queueName, jobId, error);\n\n const promises = this.activeJobPromises.get(jobId);\n if (promises) {\n const jobError = this.buildErrorFromCode(error, errorCode);\n promises.forEach(({ reject }) => reject(jobError));\n }\n this.cleanupJob(jobId);\n }\n\n /**\n * Called by server when a job is disabled\n * @internal\n */\n public handleJobDisabled(jobId: unknown): void {\n this.events.emit(\"job_disabled\", this.queueName, jobId);\n\n const promises = this.activeJobPromises.get(jobId);\n if (promises) {\n promises.forEach(({ reject }) => reject(new JobDisabledError(\"Job was disabled\")));\n }\n this.cleanupJob(jobId);\n }\n\n /**\n * Called by server when a job is retried\n * @internal\n */\n public handleJobRetry(jobId: unknown, runAfter: Date): void {\n this.events.emit(\"job_retry\", this.queueName, jobId, runAfter);\n }\n\n /**\n * Called by server when job progress updates\n * @internal\n */\n public handleJobProgress(\n jobId: unknown,\n progress: number,\n message: string,\n details: Record<string, unknown> | null\n ): void {\n this.lastKnownProgress.set(jobId, { progress, message, details });\n this.events.emit(\"job_progress\", this.queueName, jobId, progress, message, details);\n\n const listeners = this.jobProgressListeners.get(jobId);\n if (listeners) {\n for (const listener of listeners) {\n listener(progress, message, details);\n }\n }\n }\n\n // ========================================================================\n // Private helpers\n // ========================================================================\n\n private createJobHandle(id: unknown): JobHandle<Output> {\n return {\n id,\n waitFor: () => this.waitFor(id),\n abort: () => this.abort(id),\n onProgress: (callback: JobProgressListener) => this.onJobProgress(id, callback),\n };\n }\n\n private cleanupJob(jobId: unknown): void {\n this.activeJobPromises.delete(jobId);\n this.lastKnownProgress.delete(jobId);\n this.jobProgressListeners.delete(jobId);\n }\n\n private handleStorageChange(change: QueueChangePayload<Input, Output>): void {\n if (!change.new && !change.old) return;\n\n const jobId = change.new?.id ?? change.old?.id;\n if (!jobId) return;\n\n // Only process changes for our queue\n const queueName = change.new?.queue ?? change.old?.queue;\n if (queueName !== this.queueName) return;\n\n if (change.type === \"UPDATE\" && change.new) {\n const newStatus = change.new.status;\n const oldStatus = change.old?.status;\n\n if (newStatus === JobStatus.PROCESSING && oldStatus === JobStatus.PENDING) {\n this.handleJobStart(jobId);\n } else if (newStatus === JobStatus.COMPLETED) {\n this.handleJobComplete(jobId, change.new.output as Output);\n } else if (newStatus === JobStatus.FAILED) {\n this.handleJobError(\n jobId,\n change.new.error ?? \"Job failed\",\n change.new.error_code ?? undefined\n );\n } else if (newStatus === JobStatus.DISABLED) {\n this.handleJobDisabled(jobId);\n } else if (newStatus === JobStatus.PENDING && oldStatus === JobStatus.PROCESSING) {\n // Retry\n const runAfter = change.new.run_after ? new Date(change.new.run_after) : new Date();\n this.handleJobRetry(jobId, runAfter);\n }\n\n // Progress update\n if (\n change.new.progress !== change.old?.progress ||\n change.new.progress_message !== change.old?.progress_message\n ) {\n this.handleJobProgress(\n jobId,\n change.new.progress ?? 0,\n change.new.progress_message ?? \"\",\n change.new.progress_details ?? null\n );\n }\n }\n }\n\n protected storageToClass(details: JobStorageFormat<Input, Output>): Job<Input, Output> {\n return storageToClass(details, Job, { includeWorkerId: true });\n }\n\n protected buildErrorFromJob(job: Job<Input, Output>): JobError {\n return this.buildErrorFromCode(job.error || \"Job failed\", job.errorCode ?? undefined);\n }\n\n protected buildErrorFromCode(message: string, errorCode?: string): JobError {\n if (errorCode === \"PermanentJobError\") {\n return new PermanentJobError(message);\n }\n if (errorCode === \"RetryableJobError\") {\n return new RetryableJobError(message);\n }\n if (errorCode === \"AbortSignalJobError\") {\n return new AbortSignalJobError(message);\n }\n if (errorCode === \"JobDisabledError\") {\n return new JobDisabledError(message);\n }\n return new JobError(message);\n }\n}\n",
8
8
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { JobStatus, JobStorageFormat } from \"@workglow/storage\";\nimport { Job, JobClass } from \"./Job\";\n\n/**\n * Convert a date string to a Date object, or null if invalid\n */\nfunction toDate(date: string | null | undefined): Date | null {\n if (!date) return null;\n const d = new Date(date);\n return isNaN(d.getTime()) ? null : d;\n}\n\n/**\n * Convert a Date object to an ISO string, or null if invalid\n */\nfunction dateToISOString(date: Date | null | undefined): string | null {\n if (!date) return null;\n return isNaN(date.getTime()) ? null : date.toISOString();\n}\n\n/**\n * Convert storage format to Job class\n */\nexport function storageToClass<Input, Output>(\n details: JobStorageFormat<Input, Output>,\n jobClass: JobClass<Input, Output>,\n options?: {\n readonly includeWorkerId?: boolean;\n }\n): Job<Input, Output> {\n const includeWorkerId = options?.includeWorkerId ?? true;\n return new jobClass({\n id: details.id,\n jobRunId: details.job_run_id,\n queueName: details.queue,\n fingerprint: details.fingerprint,\n input: details.input as Input,\n output: details.output as Output,\n runAfter: toDate(details.run_after),\n createdAt: toDate(details.created_at)!,\n deadlineAt: toDate(details.deadline_at),\n lastRanAt: toDate(details.last_ran_at),\n completedAt: toDate(details.completed_at),\n progress: details.progress || 0,\n progressMessage: details.progress_message || \"\",\n progressDetails: details.progress_details ?? null,\n status: details.status as JobStatus,\n error: details.error ?? null,\n errorCode: details.error_code ?? null,\n runAttempts: details.run_attempts ?? 0,\n maxRetries: details.max_retries ?? 10,\n ...(includeWorkerId ? { workerId: details.worker_id ?? null } : {}),\n });\n}\n\n/**\n * Convert Job class to storage format\n */\nexport function classToStorage<Input, Output>(\n job: Job<Input, Output>,\n queueName: string\n): JobStorageFormat<Input, Output> {\n const now = new Date().toISOString();\n return {\n id: job.id,\n job_run_id: job.jobRunId,\n queue: job.queueName || queueName,\n fingerprint: job.fingerprint,\n input: job.input,\n status: job.status,\n output: job.output ?? null,\n error: job.error === null ? null : String(job.error),\n error_code: job.errorCode || null,\n run_attempts: job.runAttempts ?? 0,\n max_retries: job.maxRetries ?? 10,\n run_after: dateToISOString(job.runAfter) ?? now,\n created_at: dateToISOString(job.createdAt) ?? now,\n deadline_at: dateToISOString(job.deadlineAt),\n last_ran_at: dateToISOString(job.lastRanAt),\n completed_at: dateToISOString(job.completedAt),\n progress: job.progress ?? 0,\n progress_message: job.progressMessage ?? \"\",\n progress_details: job.progressDetails ?? null,\n worker_id: job.workerId ?? null,\n };\n}\n",
9
9
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IQueueStorage, JobStatus, JobStorageFormat, QueueChangePayload } from \"@workglow/storage\";\nimport { EventEmitter } from \"@workglow/util\";\nimport { ILimiter } from \"../limiter/ILimiter\";\nimport { NullLimiter } from \"../limiter/NullLimiter\";\nimport { Job, JobClass } from \"./Job\";\nimport { JobQueueClient } from \"./JobQueueClient\";\nimport { JobQueueWorker } from \"./JobQueueWorker\";\nimport { classToStorage, storageToClass } from \"./JobStorageConverters\";\n\n/**\n * Statistics tracked for the job queue\n */\nexport interface JobQueueStats {\n readonly totalJobs: number;\n readonly completedJobs: number;\n readonly failedJobs: number;\n readonly abortedJobs: number;\n readonly retriedJobs: number;\n readonly disabledJobs: number;\n readonly averageProcessingTime?: number;\n readonly lastUpdateTime: Date;\n}\n\n/**\n * Events emitted by JobQueueServer\n */\nexport type JobQueueServerEventListeners<Input, Output> = {\n server_start: (queueName: string) => void;\n server_stop: (queueName: string) => void;\n job_start: (queueName: string, jobId: unknown) => void;\n job_complete: (queueName: string, jobId: unknown, output: Output) => void;\n job_error: (queueName: string, jobId: unknown, error: string) => void;\n job_disabled: (queueName: string, jobId: unknown) => void;\n job_retry: (queueName: string, jobId: unknown, runAfter: Date) => void;\n job_progress: (\n queueName: string,\n jobId: unknown,\n progress: number,\n message: string,\n details: Record<string, unknown> | null\n ) => void;\n};\n\nexport type JobQueueServerEvents = keyof JobQueueServerEventListeners<unknown, unknown>;\n\n/**\n * Options for creating a JobQueueServer\n */\nexport interface JobQueueServerOptions<Input, Output> {\n readonly storage: IQueueStorage<Input, Output>;\n readonly queueName: string;\n readonly limiter?: ILimiter;\n readonly workerCount?: number;\n readonly pollIntervalMs?: number;\n readonly deleteAfterCompletionMs?: number;\n readonly deleteAfterFailureMs?: number;\n readonly deleteAfterDisabledMs?: number;\n readonly cleanupIntervalMs?: number;\n}\n\n/**\n * Server that coordinates multiple workers and manages the job queue lifecycle.\n * Handles stuck job recovery, cleanup, and aggregates statistics.\n */\nexport class JobQueueServer<\n Input,\n Output,\n QueueJob extends Job<Input, Output> = Job<Input, Output>,\n> {\n public readonly queueName: string;\n protected readonly storage: IQueueStorage<Input, Output>;\n protected readonly jobClass: JobClass<Input, Output>;\n protected readonly limiter: ILimiter;\n protected readonly workerCount: number;\n protected readonly pollIntervalMs: number;\n protected readonly deleteAfterCompletionMs?: number;\n protected readonly deleteAfterFailureMs?: number;\n protected readonly deleteAfterDisabledMs?: number;\n protected readonly cleanupIntervalMs: number;\n\n protected readonly events = new EventEmitter<JobQueueServerEventListeners<Input, Output>>();\n protected readonly workers: JobQueueWorker<Input, Output, QueueJob>[] = [];\n protected readonly clients: Set<JobQueueClient<Input, Output>> = new Set();\n\n protected running = false;\n protected cleanupTimer: ReturnType<typeof setTimeout> | null = null;\n protected storageUnsubscribe: (() => void) | null = null;\n\n protected stats: JobQueueStats = {\n totalJobs: 0,\n completedJobs: 0,\n failedJobs: 0,\n abortedJobs: 0,\n retriedJobs: 0,\n disabledJobs: 0,\n lastUpdateTime: new Date(),\n };\n\n constructor(jobClass: JobClass<Input, Output>, options: JobQueueServerOptions<Input, Output>) {\n this.queueName = options.queueName;\n this.storage = options.storage;\n this.jobClass = jobClass;\n this.limiter = options.limiter ?? new NullLimiter();\n this.workerCount = options.workerCount ?? 1;\n this.pollIntervalMs = options.pollIntervalMs ?? 100;\n this.deleteAfterCompletionMs = options.deleteAfterCompletionMs;\n this.deleteAfterFailureMs = options.deleteAfterFailureMs;\n this.deleteAfterDisabledMs = options.deleteAfterDisabledMs;\n this.cleanupIntervalMs = options.cleanupIntervalMs ?? 10000;\n\n this.initializeWorkers();\n }\n\n /**\n * Start the server and all workers\n */\n public async start(): Promise<this> {\n if (this.running) {\n return this;\n }\n\n this.running = true;\n this.events.emit(\"server_start\", this.queueName);\n\n // Fix stuck jobs from previous runs\n await this.fixupJobs();\n\n // Subscribe to storage changes to wake idle workers when new work arrives.\n // Best-effort: some storages (e.g. SQLite) don't support subscriptions,\n // in which case workers fall back to poll-interval-based wakeups.\n try {\n this.storageUnsubscribe = this.storage.subscribeToChanges(\n (change: QueueChangePayload<Input, Output>) => {\n if (\n change.type === \"INSERT\" ||\n (change.type === \"UPDATE\" && change.new?.status === JobStatus.PENDING)\n ) {\n this.notifyWorkers();\n }\n }\n );\n } catch {\n // Storage doesn't support change subscriptions — workers will poll\n }\n\n // Start all workers\n await Promise.all(this.workers.map((worker) => worker.start()));\n\n // Start cleanup loop\n this.startCleanupLoop();\n\n return this;\n }\n\n /**\n * Stop the server and all workers\n */\n public async stop(): Promise<this> {\n if (!this.running) {\n return this;\n }\n\n this.running = false;\n\n // Unsubscribe from storage changes\n if (this.storageUnsubscribe) {\n this.storageUnsubscribe();\n this.storageUnsubscribe = null;\n }\n\n // Stop cleanup loop\n if (this.cleanupTimer) {\n clearTimeout(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n\n // Stop all workers\n await Promise.all(this.workers.map((worker) => worker.stop()));\n\n this.events.emit(\"server_stop\", this.queueName);\n return this;\n }\n\n /**\n * Get the current queue statistics\n */\n public getStats(): JobQueueStats {\n return { ...this.stats };\n }\n\n /**\n * Get the storage instance (for client connection)\n */\n public getStorage(): IQueueStorage<Input, Output> {\n return this.storage;\n }\n\n /**\n * Scale the number of workers\n */\n public async scaleWorkers(count: number): Promise<void> {\n if (count < 1) {\n throw new Error(\"Worker count must be at least 1\");\n }\n\n const currentCount = this.workers.length;\n\n if (count > currentCount) {\n // Add more workers\n for (let i = currentCount; i < count; i++) {\n const worker = this.createWorker();\n this.workers.push(worker);\n if (this.running) {\n await worker.start();\n }\n }\n } else if (count < currentCount) {\n // Remove workers\n const toRemove = this.workers.splice(count);\n await Promise.all(toRemove.map((worker) => worker.stop()));\n }\n }\n\n /**\n * Check if the server is running\n */\n public isRunning(): boolean {\n return this.running;\n }\n\n /**\n * Get the number of workers\n */\n public getWorkerCount(): number {\n return this.workers.length;\n }\n\n // ========================================================================\n // Client management\n // ========================================================================\n\n /**\n * Add a client for same-process event forwarding\n * @internal\n */\n public addClient(client: JobQueueClient<Input, Output>): void {\n this.clients.add(client);\n }\n\n /**\n * Remove a client\n * @internal\n */\n public removeClient(client: JobQueueClient<Input, Output>): void {\n this.clients.delete(client);\n }\n\n /**\n * Wake all idle workers so they check for new jobs immediately.\n */\n protected notifyWorkers(): void {\n for (const worker of this.workers) {\n worker.notify();\n }\n }\n\n // ========================================================================\n // Event handling\n // ========================================================================\n\n public on<Event extends JobQueueServerEvents>(\n event: Event,\n listener: JobQueueServerEventListeners<Input, Output>[Event]\n ): void {\n this.events.on(event, listener);\n }\n\n public off<Event extends JobQueueServerEvents>(\n event: Event,\n listener: JobQueueServerEventListeners<Input, Output>[Event]\n ): void {\n this.events.off(event, listener);\n }\n\n // ========================================================================\n // Protected methods\n // ========================================================================\n\n /**\n * Initialize workers\n */\n protected initializeWorkers(): void {\n for (let i = 0; i < this.workerCount; i++) {\n const worker = this.createWorker();\n this.workers.push(worker);\n }\n }\n\n /**\n * Create a new worker and wire up event forwarding\n */\n protected createWorker(): JobQueueWorker<Input, Output, QueueJob> {\n const worker = new JobQueueWorker<Input, Output, QueueJob>(this.jobClass, {\n storage: this.storage,\n queueName: this.queueName,\n limiter: this.limiter,\n pollIntervalMs: this.pollIntervalMs,\n });\n\n // Forward worker events to server and clients\n worker.on(\"job_start\", (jobId) => {\n this.stats = { ...this.stats, totalJobs: this.stats.totalJobs + 1 };\n this.events.emit(\"job_start\", this.queueName, jobId);\n this.forwardToClients(\"handleJobStart\", jobId);\n });\n\n worker.on(\"job_complete\", (jobId, output) => {\n this.stats = { ...this.stats, completedJobs: this.stats.completedJobs + 1 };\n this.updateAverageProcessingTime();\n this.events.emit(\"job_complete\", this.queueName, jobId, output);\n this.forwardToClients(\"handleJobComplete\", jobId, output);\n\n // Immediate deletion when configured\n if (this.deleteAfterCompletionMs === 0) {\n this.storage.delete(jobId).catch((err) => {\n console.error(\"Error deleting job after completion:\", err);\n });\n }\n\n // A concurrency slot freed up — wake idle workers\n this.notifyWorkers();\n });\n\n worker.on(\"job_error\", (jobId, error, errorCode) => {\n this.stats = { ...this.stats, failedJobs: this.stats.failedJobs + 1 };\n this.events.emit(\"job_error\", this.queueName, jobId, error);\n this.forwardToClients(\"handleJobError\", jobId, error, errorCode);\n\n // Immediate deletion when configured\n if (this.deleteAfterFailureMs === 0) {\n this.storage.delete(jobId).catch((err) => {\n console.error(\"Error deleting job after error:\", err);\n });\n }\n\n // A concurrency slot freed up — wake idle workers\n this.notifyWorkers();\n });\n\n worker.on(\"job_disabled\", (jobId) => {\n this.stats = { ...this.stats, disabledJobs: this.stats.disabledJobs + 1 };\n this.events.emit(\"job_disabled\", this.queueName, jobId);\n this.forwardToClients(\"handleJobDisabled\", jobId);\n\n // Immediate deletion when configured\n if (this.deleteAfterDisabledMs === 0) {\n this.storage.delete(jobId).catch((err) => {\n console.error(\"Error deleting job after disabling:\", err);\n });\n }\n\n // A concurrency slot freed up — wake idle workers\n this.notifyWorkers();\n });\n\n worker.on(\"job_retry\", (jobId, runAfter) => {\n this.stats = { ...this.stats, retriedJobs: this.stats.retriedJobs + 1 };\n this.events.emit(\"job_retry\", this.queueName, jobId, runAfter);\n this.forwardToClients(\"handleJobRetry\", jobId, runAfter);\n });\n\n worker.on(\"job_progress\", (jobId, progress, message, details) => {\n this.events.emit(\"job_progress\", this.queueName, jobId, progress, message, details);\n this.forwardToClients(\"handleJobProgress\", jobId, progress, message, details);\n });\n\n return worker;\n }\n\n /**\n * Forward events to all attached clients\n */\n protected forwardToClients(method: \"handleJobStart\", jobId: unknown): void;\n protected forwardToClients(method: \"handleJobComplete\", jobId: unknown, output: Output): void;\n protected forwardToClients(\n method: \"handleJobError\",\n jobId: unknown,\n error: string,\n errorCode?: string\n ): void;\n protected forwardToClients(method: \"handleJobDisabled\", jobId: unknown): void;\n protected forwardToClients(method: \"handleJobRetry\", jobId: unknown, runAfter: Date): void;\n protected forwardToClients(\n method: \"handleJobProgress\",\n jobId: unknown,\n progress: number,\n message: string,\n details: Record<string, unknown> | null\n ): void;\n protected forwardToClients(method: string, ...args: unknown[]): void {\n for (const client of this.clients) {\n const fn = (client as any)[method];\n if (typeof fn === \"function\") {\n fn.apply(client, args);\n }\n }\n }\n\n /**\n * Update average processing time from all workers\n */\n protected updateAverageProcessingTime(): void {\n const times: number[] = [];\n for (const worker of this.workers) {\n const avgTime = worker.getAverageProcessingTime();\n if (avgTime !== undefined) {\n times.push(avgTime);\n }\n }\n if (times.length > 0) {\n const avg = times.reduce((a, b) => a + b, 0) / times.length;\n this.stats = {\n ...this.stats,\n averageProcessingTime: avg,\n lastUpdateTime: new Date(),\n };\n }\n }\n\n /**\n * Start the cleanup loop\n */\n protected startCleanupLoop(): void {\n if (!this.running) return;\n\n this.cleanupJobs().finally(() => {\n if (this.running) {\n this.cleanupTimer = setTimeout(() => this.startCleanupLoop(), this.cleanupIntervalMs);\n }\n });\n }\n\n /**\n * Clean up completed/failed jobs based on TTL settings\n */\n protected async cleanupJobs(): Promise<void> {\n try {\n // The workers will handle the abort via their abort controllers\n // We just need to ensure the jobs get marked as failed\n\n // Delete completed jobs after TTL\n if (this.deleteAfterCompletionMs !== undefined && this.deleteAfterCompletionMs > 0) {\n await this.storage.deleteJobsByStatusAndAge(\n JobStatus.COMPLETED,\n this.deleteAfterCompletionMs\n );\n }\n\n // Delete failed jobs after TTL\n if (this.deleteAfterFailureMs !== undefined && this.deleteAfterFailureMs > 0) {\n await this.storage.deleteJobsByStatusAndAge(JobStatus.FAILED, this.deleteAfterFailureMs);\n }\n\n // Delete disabled jobs after TTL\n if (this.deleteAfterDisabledMs !== undefined && this.deleteAfterDisabledMs > 0) {\n await this.storage.deleteJobsByStatusAndAge(JobStatus.DISABLED, this.deleteAfterDisabledMs);\n }\n } catch (error) {\n console.error(\"Error in cleanup:\", error);\n }\n }\n\n /**\n * Fix stuck jobs from previous server runs.\n * Jobs in PROCESSING or ABORTING state that are not owned by any of the current\n * server's workers are considered orphaned and will be reset.\n */\n protected async fixupJobs(): Promise<void> {\n try {\n const stuckProcessingJobs = await this.storage.peek(JobStatus.PROCESSING);\n const stuckAbortingJobs = await this.storage.peek(JobStatus.ABORTING);\n const stuckJobs = [...stuckProcessingJobs, ...stuckAbortingJobs];\n\n // Get the worker IDs of all workers managed by this server\n const currentWorkerIds = new Set(this.getWorkerIds());\n\n for (const jobData of stuckJobs) {\n // Skip jobs that belong to workers in this server (they may still be processing)\n if (jobData.worker_id && currentWorkerIds.has(jobData.worker_id)) {\n continue;\n }\n\n const job = this.storageToClass(jobData);\n if (job.runAttempts >= job.maxRetries) {\n job.status = JobStatus.FAILED;\n job.error = \"Max retries reached\";\n job.errorCode = \"MAX_RETRIES_REACHED\";\n // Clear worker_id since job is now failed\n job.workerId = null;\n } else {\n job.status = JobStatus.PENDING;\n job.runAfter = job.lastRanAt || new Date();\n job.progress = 0;\n job.progressMessage = \"\";\n job.progressDetails = null;\n job.error = \"Server restarted\";\n // Clear worker_id so a new worker can claim this job\n job.workerId = null;\n }\n\n await this.storage.complete(this.classToStorage(job));\n }\n } catch (error) {\n console.error(\"Error in fixupJobs:\", error);\n }\n }\n\n /**\n * Convert storage format to Job class\n */\n protected storageToClass(details: JobStorageFormat<Input, Output>): Job<Input, Output> {\n return storageToClass(details, this.jobClass);\n }\n\n /**\n * Convert Job class to storage format\n */\n protected classToStorage(job: Job<Input, Output>): JobStorageFormat<Input, Output> {\n return classToStorage(job, this.queueName);\n }\n\n /**\n * Get the worker IDs of all workers managed by this server\n */\n public getWorkerIds(): string[] {\n return this.workers.map((worker) => worker.workerId);\n }\n}\n",
@@ -14,9 +14,9 @@
14
14
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ILimiter } from \"./ILimiter\";\n\nexport class DelayLimiter implements ILimiter {\n private nextAvailableTime: Date = new Date();\n constructor(private delayInMilliseconds: number = 50) {}\n\n async canProceed(): Promise<boolean> {\n return Date.now() >= this.nextAvailableTime.getTime();\n }\n\n async recordJobStart(): Promise<void> {\n this.nextAvailableTime = new Date(Date.now() + this.delayInMilliseconds);\n }\n\n async recordJobCompletion(): Promise<void> {\n // No action needed.\n }\n\n async getNextAvailableTime(): Promise<Date> {\n return this.nextAvailableTime;\n }\n\n async setNextAvailableTime(date: Date): Promise<void> {\n if (date > this.nextAvailableTime) {\n this.nextAvailableTime = date;\n }\n }\n async clear(): Promise<void> {\n this.nextAvailableTime = new Date();\n }\n}\n",
15
15
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"@workglow/util\";\nimport { ILimiter, RateLimiterOptions } from \"./ILimiter\";\n\nexport const EVENLY_SPACED_JOB_RATE_LIMITER = createServiceToken<ILimiter>(\n \"jobqueue.limiter.rate.evenlyspaced\"\n);\n\n/**\n * Rate limiter that spreads requests evenly across a time window.\n * Instead of allowing all requests up to the limit and then waiting,\n * this limiter spaces out the requests evenly across the window.\n */\nexport class EvenlySpacedRateLimiter implements ILimiter {\n private readonly maxExecutions: number;\n private readonly windowSizeMs: number;\n private readonly idealInterval: number;\n private nextAvailableTime: number = Date.now();\n private lastStartTime: number = 0;\n private durations: number[] = [];\n\n constructor({ maxExecutions, windowSizeInSeconds }: RateLimiterOptions) {\n if (maxExecutions <= 0) {\n throw new Error(\"maxExecutions must be > 0\");\n }\n if (windowSizeInSeconds <= 0) {\n throw new Error(\"windowSizeInSeconds must be > 0\");\n }\n this.maxExecutions = maxExecutions;\n this.windowSizeMs = windowSizeInSeconds * 1_000;\n // If you want exactly maxExecutions in windowSize, start one every this many ms:\n this.idealInterval = this.windowSizeMs / this.maxExecutions;\n }\n\n /** Can we start a new job right now? */\n async canProceed(): Promise<boolean> {\n const now = Date.now();\n return now >= this.nextAvailableTime;\n }\n\n /** Record that a job is starting now. */\n async recordJobStart(): Promise<void> {\n const now = Date.now();\n this.lastStartTime = now;\n\n // If no timing data yet, assume zero run-time (ideal interval)\n if (this.durations.length === 0) {\n this.nextAvailableTime = now + this.idealInterval;\n } else {\n // Compute average run duration\n const sum = this.durations.reduce((a, b) => a + b, 0);\n const avgDuration = sum / this.durations.length;\n // Schedule next start: ideal spacing minus average duration\n const waitMs = Math.max(0, this.idealInterval - avgDuration);\n this.nextAvailableTime = now + waitMs;\n }\n }\n\n /**\n * Call this when a job finishes.\n * We measure its duration, update our running-average,\n * and then compute how long to wait before the next job start.\n */\n async recordJobCompletion(): Promise<void> {\n const now = Date.now();\n const duration = now - this.lastStartTime;\n this.durations.push(duration);\n if (this.durations.length > this.maxExecutions) {\n this.durations.shift();\n }\n }\n\n async getNextAvailableTime(): Promise<Date> {\n return new Date(this.nextAvailableTime);\n }\n\n async setNextAvailableTime(date: Date): Promise<void> {\n const t = date.getTime();\n if (t > this.nextAvailableTime) {\n this.nextAvailableTime = t;\n }\n }\n\n async clear(): Promise<void> {\n this.durations = [];\n this.nextAvailableTime = Date.now();\n this.lastStartTime = 0;\n }\n}\n",
16
16
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"@workglow/util\";\n\nexport const JOB_LIMITER = createServiceToken<ILimiter>(\"jobqueue.limiter\");\n\n/**\n * Interface for a job limiter.\n */\nexport interface ILimiter {\n canProceed(): Promise<boolean>;\n recordJobStart(): Promise<void>;\n recordJobCompletion(): Promise<void>;\n getNextAvailableTime(): Promise<Date>;\n setNextAvailableTime(date: Date): Promise<void>;\n clear(): Promise<void>;\n}\n\nexport interface RateLimiterOptions {\n readonly maxExecutions: number;\n readonly windowSizeInSeconds: number;\n}\n\nexport interface RateLimiterWithBackoffOptions extends RateLimiterOptions {\n readonly initialBackoffDelay?: number;\n readonly backoffMultiplier?: number;\n readonly maxBackoffDelay?: number;\n}\n",
17
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IRateLimiterStorage } from \"@workglow/storage\";\nimport { ILimiter, RateLimiterWithBackoffOptions } from \"./ILimiter\";\n\n/**\n * Base rate limiter implementation that uses a storage backend.\n * Manages request counts and delays to control job execution.\n */\nexport class RateLimiter implements ILimiter {\n protected readonly windowSizeInMilliseconds: number;\n protected currentBackoffDelay: number;\n protected readonly maxExecutions: number;\n protected readonly initialBackoffDelay: number;\n protected readonly backoffMultiplier: number;\n protected readonly maxBackoffDelay: number;\n\n constructor(\n protected readonly storage: IRateLimiterStorage,\n protected readonly queueName: string,\n {\n maxExecutions,\n windowSizeInSeconds,\n initialBackoffDelay = 1_000,\n backoffMultiplier = 2,\n maxBackoffDelay = 600_000, // 10 minutes\n }: RateLimiterWithBackoffOptions\n ) {\n if (maxExecutions <= 0) {\n throw new Error(\"maxExecutions must be greater than 0\");\n }\n if (windowSizeInSeconds <= 0) {\n throw new Error(\"windowSizeInSeconds must be greater than 0\");\n }\n if (initialBackoffDelay <= 0) {\n throw new Error(\"initialBackoffDelay must be greater than 0\");\n }\n if (backoffMultiplier <= 1) {\n throw new Error(\"backoffMultiplier must be greater than 1\");\n }\n if (maxBackoffDelay <= initialBackoffDelay) {\n throw new Error(\"maxBackoffDelay must be greater than initialBackoffDelay\");\n }\n\n this.windowSizeInMilliseconds = windowSizeInSeconds * 1000;\n this.maxExecutions = maxExecutions;\n this.initialBackoffDelay = initialBackoffDelay;\n this.backoffMultiplier = backoffMultiplier;\n this.maxBackoffDelay = maxBackoffDelay;\n this.currentBackoffDelay = initialBackoffDelay;\n }\n\n protected addJitter(base: number): number {\n // full jitter in [base, 2*base)\n return base + Math.random() * base;\n }\n\n protected increaseBackoff(): void {\n this.currentBackoffDelay = Math.min(\n this.currentBackoffDelay * this.backoffMultiplier,\n this.maxBackoffDelay\n );\n }\n\n /**\n * Checks if a job can proceed based on rate limiting rules.\n * @returns True if the job can proceed, false otherwise\n */\n async canProceed(): Promise<boolean> {\n // First check if the window allows more executions\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n const canProceedNow = attemptCount < this.maxExecutions;\n\n // If the window allows more executions, clear any backoff and proceed\n if (canProceedNow) {\n // Clear any existing nextAvailableTime backoff since the window allows more executions\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff by setting it to the past\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n this.currentBackoffDelay = this.initialBackoffDelay;\n return true;\n }\n\n // Window is full, check if there's a backoff delay\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n this.increaseBackoff();\n return false;\n }\n\n // Window is full but no backoff delay, so we can't proceed\n this.increaseBackoff();\n return false;\n }\n\n /**\n * Records a new job attempt.\n */\n async recordJobStart(): Promise<void> {\n await this.storage.recordExecution(this.queueName);\n\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n\n if (attemptCount >= this.maxExecutions) {\n const backoffExpires = new Date(Date.now() + this.addJitter(this.currentBackoffDelay));\n await this.setNextAvailableTime(backoffExpires);\n } else {\n // Window allows more executions, clear any existing nextAvailableTime by setting it to the past\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff since the window now allows more executions\n // Set to a time in the past to effectively clear it\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n }\n }\n\n async recordJobCompletion(): Promise<void> {\n // Implementation can be no-op as completion doesn't affect rate limiting\n }\n\n /**\n * Retrieves the next available time for the specific queue.\n * @returns The next available time\n */\n async getNextAvailableTime(): Promise<Date> {\n // Get the time when the rate limit will allow the next job execution\n const oldestExecution = await this.storage.getOldestExecutionAtOffset(\n this.queueName,\n this.maxExecutions - 1\n );\n\n let rateLimitedTime = new Date();\n if (oldestExecution) {\n rateLimitedTime = new Date(oldestExecution);\n rateLimitedTime.setSeconds(\n rateLimitedTime.getSeconds() + this.windowSizeInMilliseconds / 1000\n );\n }\n\n // Get the next available time set externally, if any\n const nextAvailableStr = await this.storage.getNextAvailableTime(this.queueName);\n let nextAvailableTime = new Date();\n if (nextAvailableStr) {\n nextAvailableTime = new Date(nextAvailableStr);\n }\n\n // Return the later of the two times\n return nextAvailableTime > rateLimitedTime ? nextAvailableTime : rateLimitedTime;\n }\n\n /**\n * Sets the next available time for the specific queue.\n * @param date - The new next available time\n */\n async setNextAvailableTime(date: Date): Promise<void> {\n await this.storage.setNextAvailableTime(this.queueName, date.toISOString());\n }\n\n /**\n * Clears all rate limit entries for this queue.\n */\n async clear(): Promise<void> {\n await this.storage.clear(this.queueName);\n this.currentBackoffDelay = this.initialBackoffDelay;\n }\n}\n"
17
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IRateLimiterStorage } from \"@workglow/storage\";\nimport { ILimiter, RateLimiterWithBackoffOptions } from \"./ILimiter\";\n\n/**\n * Base rate limiter implementation that uses a storage backend.\n * Manages request counts and delays to control job execution.\n */\nexport class RateLimiter implements ILimiter {\n protected readonly windowSizeInMilliseconds: number;\n protected currentBackoffDelay: number;\n protected readonly maxExecutions: number;\n protected readonly initialBackoffDelay: number;\n protected readonly backoffMultiplier: number;\n protected readonly maxBackoffDelay: number;\n\n constructor(\n protected readonly storage: IRateLimiterStorage,\n protected readonly queueName: string,\n {\n maxExecutions,\n windowSizeInSeconds,\n initialBackoffDelay = 1_000,\n backoffMultiplier = 2,\n maxBackoffDelay = 600_000, // 10 minutes\n }: RateLimiterWithBackoffOptions\n ) {\n if (maxExecutions <= 0) {\n throw new Error(\"maxExecutions must be greater than 0\");\n }\n if (windowSizeInSeconds <= 0) {\n throw new Error(\"windowSizeInSeconds must be greater than 0\");\n }\n if (initialBackoffDelay <= 0) {\n throw new Error(\"initialBackoffDelay must be greater than 0\");\n }\n if (backoffMultiplier <= 1) {\n throw new Error(\"backoffMultiplier must be greater than 1\");\n }\n if (maxBackoffDelay <= initialBackoffDelay) {\n throw new Error(\"maxBackoffDelay must be greater than initialBackoffDelay\");\n }\n\n this.windowSizeInMilliseconds = windowSizeInSeconds * 1000;\n this.maxExecutions = maxExecutions;\n this.initialBackoffDelay = initialBackoffDelay;\n this.backoffMultiplier = backoffMultiplier;\n this.maxBackoffDelay = maxBackoffDelay;\n this.currentBackoffDelay = initialBackoffDelay;\n }\n\n protected addJitter(base: number): number {\n // full jitter in [base, 2*base)\n return base + Math.random() * base;\n }\n\n protected increaseBackoff(): void {\n this.currentBackoffDelay = Math.min(\n this.currentBackoffDelay * this.backoffMultiplier,\n this.maxBackoffDelay\n );\n }\n\n /**\n * Checks if a job can proceed based on rate limiting rules.\n * @returns True if the job can proceed, false otherwise\n */\n async canProceed(): Promise<boolean> {\n // First check if the window allows more executions\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n const canProceedNow = attemptCount < this.maxExecutions;\n\n // If the window allows more executions, clear any backoff and proceed\n if (canProceedNow) {\n // Clear any existing nextAvailableTime backoff since the window allows more executions\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff by setting it to the past\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n this.currentBackoffDelay = this.initialBackoffDelay;\n return true;\n }\n\n // Window is full, check if there's a backoff delay\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n this.increaseBackoff();\n return false;\n }\n\n // Window is full but no backoff delay, so we can't proceed\n this.increaseBackoff();\n return false;\n }\n\n /**\n * Records a new job attempt.\n */\n async recordJobStart(): Promise<void> {\n await this.storage.recordExecution(this.queueName);\n\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n\n if (attemptCount >= this.maxExecutions) {\n const backoffExpires = new Date(Date.now() + this.addJitter(this.currentBackoffDelay));\n await this.setNextAvailableTime(backoffExpires);\n } else {\n // Window allows more executions, clear any existing nextAvailableTime by setting it to the past\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff since the window now allows more executions\n // Set to a time in the past to effectively clear it\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n }\n }\n\n async recordJobCompletion(): Promise<void> {\n // Implementation can be no-op as completion doesn't affect rate limiting\n }\n\n /**\n * Retrieves the next available time for the specific queue.\n * @returns The next available time\n */\n async getNextAvailableTime(): Promise<Date> {\n // Get the time when the rate limit will allow the next job execution\n const oldestExecution = await this.storage.getOldestExecutionAtOffset(\n this.queueName,\n this.maxExecutions - 1\n );\n\n let rateLimitedTime = new Date();\n if (oldestExecution) {\n rateLimitedTime = new Date(oldestExecution);\n rateLimitedTime.setSeconds(\n rateLimitedTime.getSeconds() + this.windowSizeInMilliseconds / 1000\n );\n }\n\n // Get the next available time set externally, if any\n const nextAvailableStr = await this.storage.getNextAvailableTime(this.queueName);\n let nextAvailableTime = new Date();\n if (nextAvailableStr) {\n nextAvailableTime = new Date(nextAvailableStr);\n }\n\n return nextAvailableTime > rateLimitedTime ? nextAvailableTime : rateLimitedTime;\n }\n\n /**\n * Sets the next available time for the specific queue.\n * @param date - The new next available time\n */\n async setNextAvailableTime(date: Date): Promise<void> {\n await this.storage.setNextAvailableTime(this.queueName, date.toISOString());\n }\n\n /**\n * Clears all rate limit entries for this queue.\n */\n async clear(): Promise<void> {\n await this.storage.clear(this.queueName);\n this.currentBackoffDelay = this.initialBackoffDelay;\n }\n}\n"
18
18
  ],
19
- "mappings": "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",
19
+ "mappings": "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",
20
20
  "debugId": "948298FE555D7D8D64756E2164756E21",
21
21
  "names": []
22
22
  }
package/dist/bun.js.map CHANGED
@@ -3,7 +3,7 @@
3
3
  "sources": ["../src/job/Job.ts", "../src/job/JobError.ts", "../src/job/JobQueueClient.ts", "../src/job/JobStorageConverters.ts", "../src/job/JobQueueServer.ts", "../src/limiter/NullLimiter.ts", "../src/job/JobQueueWorker.ts", "../src/limiter/CompositeLimiter.ts", "../src/limiter/ConcurrencyLimiter.ts", "../src/limiter/DelayLimiter.ts", "../src/limiter/EvenlySpacedRateLimiter.ts", "../src/limiter/ILimiter.ts", "../src/limiter/RateLimiter.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { JobStatus } from \"@workglow/storage\";\nimport { JobError } from \"./JobError\";\nimport type { JobProgressListener } from \"./JobQueueEventListeners\";\n\nexport { JobStatus };\n\n/**\n * Context for job execution\n */\nexport interface IJobExecuteContext {\n signal: AbortSignal;\n updateProgress: (\n progress: number,\n message?: string,\n details?: Record<string, any> | null\n ) => Promise<void>;\n}\n\n/**\n * Details about a job that reflect the structure in the database.\n */\nexport type JobConstructorParam<Input, Output> = {\n id?: unknown;\n jobRunId?: string;\n queueName?: string;\n input: Input;\n output?: Output | null;\n error?: string | null;\n errorCode?: string | null;\n fingerprint?: string;\n maxRetries?: number;\n status?: JobStatus;\n createdAt?: Date;\n deadlineAt?: Date | null;\n lastRanAt?: Date | null;\n runAfter?: Date | null;\n completedAt?: Date | null;\n runAttempts?: number;\n progress?: number;\n progressMessage?: string;\n progressDetails?: Record<string, any> | null;\n /** The ID of the worker that claimed this job, null if unclaimed */\n workerId?: string | null;\n};\n\nexport type JobClass<Input, Output> = new (\n param: JobConstructorParam<Input, Output>\n) => Job<Input, Output>;\n\n/**\n * A job that can be executed by a JobQueue.\n *\n * @template Input - The type of the job's input\n * @template Output - The type of the job's output\n */\nexport class Job<Input, Output> {\n public id: unknown;\n public jobRunId: string | undefined;\n public queueName: string | undefined;\n public input: Input;\n public maxRetries: number;\n public createdAt: Date;\n public fingerprint: string | undefined;\n public status: JobStatus = JobStatus.PENDING;\n public runAfter: Date;\n public output: Output | null = null;\n public runAttempts: number = 0;\n public lastRanAt: Date | null = null;\n public completedAt: Date | null = null;\n public deadlineAt: Date | null = null;\n public error: string | null = null;\n public errorCode: string | null = null;\n public progress: number = 0;\n public progressMessage: string = \"\";\n public progressDetails: Record<string, any> | null = null;\n /** The ID of the worker that claimed this job */\n public workerId: string | null = null;\n\n constructor({\n queueName,\n input,\n jobRunId,\n id,\n error = null,\n errorCode = null,\n fingerprint = undefined,\n output = null,\n maxRetries = 10,\n createdAt = new Date(),\n completedAt = null,\n status = JobStatus.PENDING,\n deadlineAt = null,\n runAttempts = 0,\n lastRanAt = null,\n runAfter = new Date(),\n progress = 0,\n progressMessage = \"\",\n progressDetails = null,\n workerId = null,\n }: JobConstructorParam<Input, Output>) {\n this.runAfter = runAfter ?? new Date();\n this.createdAt = createdAt ?? new Date();\n this.lastRanAt = lastRanAt ?? null;\n this.deadlineAt = deadlineAt ?? null;\n this.completedAt = completedAt ?? null;\n\n this.queueName = queueName;\n this.id = id;\n this.jobRunId = jobRunId;\n this.status = status;\n this.fingerprint = fingerprint;\n this.input = input;\n this.maxRetries = maxRetries;\n this.runAttempts = runAttempts;\n this.output = output;\n this.error = error;\n this.errorCode = errorCode;\n this.progress = progress;\n this.progressMessage = progressMessage;\n this.progressDetails = progressDetails;\n this.workerId = workerId ?? null;\n }\n\n async execute(_input: Input, _context: IJobExecuteContext): Promise<Output> {\n throw new JobError(\"Method not implemented.\");\n }\n\n public progressListeners: Set<JobProgressListener> = new Set();\n\n /**\n * Update the job's progress (for direct execution without a worker)\n * @param progress - Progress value between 0 and 100\n * @param message - Optional progress message\n * @param details - Optional progress details\n */\n public async updateProgress(\n progress: number,\n message: string = \"\",\n details: Record<string, any> | null = null\n ): Promise<void> {\n this.progress = progress;\n this.progressMessage = message;\n this.progressDetails = details;\n\n // Notify direct listeners\n for (const listener of this.progressListeners) {\n listener(progress, message, details);\n }\n }\n\n /**\n * Adds a progress listener for this job\n *\n * Only used if run directly (not via a queue)\n *\n * @param listener - The callback function to be called when progress updates occur\n * @returns A cleanup function to remove the listener\n */\n public onJobProgress(listener: JobProgressListener): () => void {\n this.progressListeners.add(listener);\n\n return () => {\n this.progressListeners.delete(listener);\n };\n }\n}\n",
6
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseError } from \"@workglow/util\";\n\nexport class JobError extends BaseError {\n public static type: string = \"JobError\";\n public retryable = false;\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job not being found\n *\n * Examples: job.id is undefined, job.id is not found in the storage, etc.\n */\nexport class JobNotFoundError extends JobError {\n public static type: string = \"JobNotFoundError\";\n constructor(message: string = \"Job not found\") {\n super(message);\n }\n}\n\n/**\n * A job error that is retryable\n *\n * Examples: network timeouts, temporary unavailability of an external service, or rate-limiting\n */\nexport class RetryableJobError extends JobError {\n public static type: string = \"RetryableJobError\";\n constructor(\n message: string,\n public retryDate?: Date\n ) {\n super(message);\n this.retryable = true;\n }\n}\n\n/**\n * A job error that is not retryable\n *\n * Examples: invalid input, missing required parameters, or a permanent failure of\n * an external service, permission errors, running out of money for an API, etc.\n */\nexport class PermanentJobError extends JobError {\n public static type: string = \"PermanentJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by an abort signal,\n * meaning the client aborted the job on purpose,\n * not by the queue going down or similar.\n *\n * Example: job.abort()\n */\nexport class AbortSignalJobError extends PermanentJobError {\n public static type: string = \"AbortSignalJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job being disabled\n *\n * Examples: job.disable()\n */\nexport class JobDisabledError extends PermanentJobError {\n public static type: string = \"JobDisabledError\";\n}\n",
6
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseError } from \"@workglow/util\";\n\nexport class JobError extends BaseError {\n public static override type: string = \"JobError\";\n public retryable = false;\n constructor(override readonly message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job not being found\n *\n * Examples: job.id is undefined, job.id is not found in the storage, etc.\n */\nexport class JobNotFoundError extends JobError {\n public static override type: string = \"JobNotFoundError\";\n constructor(message: string = \"Job not found\") {\n super(message);\n }\n}\n\n/**\n * A job error that is retryable\n *\n * Examples: network timeouts, temporary unavailability of an external service, or rate-limiting\n */\nexport class RetryableJobError extends JobError {\n public static override type: string = \"RetryableJobError\";\n constructor(\n message: string,\n public retryDate?: Date\n ) {\n super(message);\n this.retryable = true;\n }\n}\n\n/**\n * A job error that is not retryable\n *\n * Examples: invalid input, missing required parameters, or a permanent failure of\n * an external service, permission errors, running out of money for an API, etc.\n */\nexport class PermanentJobError extends JobError {\n public static override type: string = \"PermanentJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by an abort signal,\n * meaning the client aborted the job on purpose,\n * not by the queue going down or similar.\n *\n * Example: job.abort()\n */\nexport class AbortSignalJobError extends PermanentJobError {\n public static override type: string = \"AbortSignalJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job being disabled\n *\n * Examples: job.disable()\n */\nexport class JobDisabledError extends PermanentJobError {\n public static override type: string = \"JobDisabledError\";\n}\n",
7
7
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IQueueStorage, JobStatus, JobStorageFormat, QueueChangePayload } from \"@workglow/storage\";\nimport { EventEmitter } from \"@workglow/util\";\nimport { Job } from \"./Job\";\nimport {\n AbortSignalJobError,\n JobDisabledError,\n JobError,\n JobNotFoundError,\n PermanentJobError,\n RetryableJobError,\n} from \"./JobError\";\nimport {\n JobProgressListener,\n JobQueueEventListener,\n JobQueueEventListeners,\n JobQueueEventParameters,\n JobQueueEvents,\n} from \"./JobQueueEventListeners\";\nimport type { JobQueueServer } from \"./JobQueueServer\";\nimport { storageToClass } from \"./JobStorageConverters\";\n\n/**\n * Handle returned when submitting a job, providing methods to interact with the job\n */\nexport interface JobHandle<Output> {\n readonly id: unknown;\n waitFor(): Promise<Output>;\n abort(): Promise<void>;\n onProgress(callback: JobProgressListener): () => void;\n}\n\n/**\n * Options for creating a JobQueueClient\n */\nexport interface JobQueueClientOptions<Input, Output> {\n readonly storage: IQueueStorage<Input, Output>;\n readonly queueName: string;\n}\n\n/**\n * Client for submitting jobs and monitoring their progress.\n * Connect to a JobQueueServer for same-process optimization,\n * or use storage subscriptions for cross-process communication.\n */\nexport class JobQueueClient<Input, Output> {\n public readonly queueName: string;\n protected readonly storage: IQueueStorage<Input, Output>;\n protected readonly events = new EventEmitter<JobQueueEventListeners<Input, Output>>();\n protected server: JobQueueServer<Input, Output> | null = null;\n protected storageUnsubscribe: (() => void) | null = null;\n\n /**\n * Map of job IDs to their pending promise resolvers\n */\n protected readonly activeJobPromises: Map<\n unknown,\n Array<{\n resolve: (value: Output) => void;\n reject: (err: JobError) => void;\n }>\n > = new Map();\n\n /**\n * Map of job IDs to their progress listeners\n */\n protected readonly jobProgressListeners: Map<unknown, Set<JobProgressListener>> = new Map();\n\n /**\n * Last known progress state for each job\n */\n protected readonly lastKnownProgress: Map<\n unknown,\n {\n readonly progress: number;\n readonly message: string;\n readonly details: Record<string, unknown> | null;\n }\n > = new Map();\n\n constructor(options: JobQueueClientOptions<Input, Output>) {\n this.queueName = options.queueName;\n this.storage = options.storage;\n }\n\n /**\n * Attach to a local JobQueueServer for same-process event optimization.\n * When attached, events flow directly from server without storage polling.\n */\n public attach(server: JobQueueServer<Input, Output>): void {\n if (this.server) {\n this.detach();\n }\n this.server = server;\n server.addClient(this);\n\n // Unsubscribe from storage if we were using it\n if (this.storageUnsubscribe) {\n this.storageUnsubscribe();\n this.storageUnsubscribe = null;\n }\n }\n\n /**\n * Detach from the current server\n */\n public detach(): void {\n if (this.server) {\n this.server.removeClient(this);\n this.server = null;\n }\n }\n\n /**\n * Connect to storage for cross-process communication (when no local server).\n * Uses storage subscriptions to receive job updates.\n */\n public connect(): void {\n if (this.server) {\n return; // Already connected via server\n }\n\n if (this.storageUnsubscribe) {\n return; // Already subscribed\n }\n\n this.storageUnsubscribe = this.storage.subscribeToChanges(\n (change: QueueChangePayload<Input, Output>) => {\n this.handleStorageChange(change);\n }\n );\n }\n\n /**\n * Disconnect from storage subscriptions\n */\n public disconnect(): void {\n if (this.storageUnsubscribe) {\n this.storageUnsubscribe();\n this.storageUnsubscribe = null;\n }\n this.detach();\n }\n\n /**\n * Submit a job to the queue\n */\n public async submit(\n input: Input,\n options?: {\n readonly jobRunId?: string;\n readonly fingerprint?: string;\n readonly maxRetries?: number;\n readonly runAfter?: Date;\n readonly deadlineAt?: Date;\n }\n ): Promise<JobHandle<Output>> {\n const job: JobStorageFormat<Input, Output> = {\n queue: this.queueName,\n input,\n job_run_id: options?.jobRunId,\n fingerprint: options?.fingerprint,\n max_retries: options?.maxRetries ?? 10,\n run_after: options?.runAfter?.toISOString() ?? new Date().toISOString(),\n deadline_at: options?.deadlineAt?.toISOString() ?? null,\n completed_at: null,\n status: JobStatus.PENDING,\n };\n\n const id = await this.storage.add(job);\n\n return this.createJobHandle(id);\n }\n\n /**\n * Submit multiple jobs to the queue\n */\n public async submitBatch(\n inputs: readonly Input[],\n options?: {\n readonly jobRunId?: string;\n readonly maxRetries?: number;\n }\n ): Promise<readonly JobHandle<Output>[]> {\n const handles: JobHandle<Output>[] = [];\n for (const input of inputs) {\n const handle = await this.submit(input, options);\n handles.push(handle);\n }\n return handles;\n }\n\n /**\n * Get a job by ID\n */\n public async getJob(id: unknown): Promise<Job<Input, Output> | undefined> {\n if (!id) throw new JobNotFoundError(\"Cannot get undefined job\");\n const job = await this.storage.get(id);\n if (!job) return undefined;\n return this.storageToClass(job);\n }\n\n /**\n * Get jobs by run ID\n */\n public async getJobsByRunId(runId: string): Promise<readonly Job<Input, Output>[]> {\n if (!runId) throw new JobNotFoundError(\"Cannot get jobs by undefined runId\");\n const jobs = await this.storage.getByRunId(runId);\n return jobs.map((job) => this.storageToClass(job));\n }\n\n /**\n * Peek at jobs in the queue\n */\n public async peek(status?: JobStatus, num?: number): Promise<readonly Job<Input, Output>[]> {\n const jobs = await this.storage.peek(status, num);\n return jobs.map((job) => this.storageToClass(job));\n }\n\n /**\n * Get the size of the queue\n */\n public async size(status?: JobStatus): Promise<number> {\n return this.storage.size(status);\n }\n\n /**\n * Get the output for an input (if job completed)\n */\n public async outputForInput(input: Input): Promise<Output | null> {\n if (!input) throw new JobNotFoundError(\"Cannot get output for undefined input\");\n return this.storage.outputForInput(input);\n }\n\n /**\n * Wait for a job to complete\n */\n public async waitFor(jobId: unknown): Promise<Output> {\n if (!jobId) throw new JobNotFoundError(\"Cannot wait for undefined job\");\n\n const job = await this.getJob(jobId);\n if (!job) throw new JobNotFoundError(`Job ${jobId} not found`);\n\n if (job.status === JobStatus.COMPLETED) {\n return job.output as Output;\n }\n if (job.status === JobStatus.DISABLED) {\n throw new JobDisabledError(`Job ${jobId} was disabled`);\n }\n if (job.status === JobStatus.FAILED) {\n throw this.buildErrorFromJob(job);\n }\n\n const { promise, resolve, reject } = Promise.withResolvers<Output>();\n promise.catch(() => {}); // Prevent unhandled rejection\n\n const promises = this.activeJobPromises.get(jobId) || [];\n promises.push({ resolve, reject });\n this.activeJobPromises.set(jobId, promises);\n\n return promise;\n }\n\n /**\n * Abort a job\n */\n public async abort(jobId: unknown): Promise<void> {\n if (!jobId) throw new JobNotFoundError(\"Cannot abort undefined job\");\n await this.storage.abort(jobId);\n this.events.emit(\"job_aborting\", this.queueName, jobId);\n }\n\n /**\n * Abort all jobs in a job run\n */\n public async abortJobRun(jobRunId: string): Promise<void> {\n if (!jobRunId) throw new JobNotFoundError(\"Cannot abort job run with undefined jobRunId\");\n const jobs = await this.getJobsByRunId(jobRunId);\n await Promise.allSettled(\n jobs.map((job) => {\n if (job.status === JobStatus.PROCESSING || job.status === JobStatus.PENDING) {\n return this.abort(job.id);\n }\n })\n );\n }\n\n /**\n * Subscribe to progress updates for a specific job\n */\n public onJobProgress(jobId: unknown, listener: JobProgressListener): () => void {\n if (!this.jobProgressListeners.has(jobId)) {\n this.jobProgressListeners.set(jobId, new Set());\n }\n const listeners = this.jobProgressListeners.get(jobId)!;\n listeners.add(listener);\n\n return () => {\n const listeners = this.jobProgressListeners.get(jobId);\n if (listeners) {\n listeners.delete(listener);\n if (listeners.size === 0) {\n this.jobProgressListeners.delete(jobId);\n }\n }\n };\n }\n\n // ========================================================================\n // Event handling\n // ========================================================================\n\n public on<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): void {\n this.events.on(event, listener);\n }\n\n public off<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): void {\n this.events.off(event, listener);\n }\n\n public once<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): void {\n this.events.once(event, listener);\n }\n\n public waitOn<Event extends JobQueueEvents>(\n event: Event\n ): Promise<JobQueueEventParameters<Event, Input, Output>> {\n return this.events.waitOn(event) as Promise<JobQueueEventParameters<Event, Input, Output>>;\n }\n\n /**\n * Subscribes to an event and returns a function to unsubscribe\n * @param event - The event name to subscribe to\n * @param listener - The listener function to add\n * @returns a function to unsubscribe from the event\n */\n public subscribe<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): () => void {\n return this.events.subscribe(event, listener);\n }\n\n // ========================================================================\n // Internal methods called by JobQueueServer for same-process optimization\n // ========================================================================\n\n /**\n * Called by server when a job starts processing\n * @internal\n */\n public handleJobStart(jobId: unknown): void {\n this.lastKnownProgress.set(jobId, {\n progress: 0,\n message: \"\",\n details: null,\n });\n this.events.emit(\"job_start\", this.queueName, jobId);\n }\n\n /**\n * Called by server when a job completes\n * @internal\n */\n public handleJobComplete(jobId: unknown, output: Output): void {\n this.events.emit(\"job_complete\", this.queueName, jobId, output);\n\n const promises = this.activeJobPromises.get(jobId);\n if (promises) {\n promises.forEach(({ resolve }) => resolve(output));\n }\n this.cleanupJob(jobId);\n }\n\n /**\n * Called by server when a job fails\n * @internal\n */\n public handleJobError(jobId: unknown, error: string, errorCode?: string): void {\n this.events.emit(\"job_error\", this.queueName, jobId, error);\n\n const promises = this.activeJobPromises.get(jobId);\n if (promises) {\n const jobError = this.buildErrorFromCode(error, errorCode);\n promises.forEach(({ reject }) => reject(jobError));\n }\n this.cleanupJob(jobId);\n }\n\n /**\n * Called by server when a job is disabled\n * @internal\n */\n public handleJobDisabled(jobId: unknown): void {\n this.events.emit(\"job_disabled\", this.queueName, jobId);\n\n const promises = this.activeJobPromises.get(jobId);\n if (promises) {\n promises.forEach(({ reject }) => reject(new JobDisabledError(\"Job was disabled\")));\n }\n this.cleanupJob(jobId);\n }\n\n /**\n * Called by server when a job is retried\n * @internal\n */\n public handleJobRetry(jobId: unknown, runAfter: Date): void {\n this.events.emit(\"job_retry\", this.queueName, jobId, runAfter);\n }\n\n /**\n * Called by server when job progress updates\n * @internal\n */\n public handleJobProgress(\n jobId: unknown,\n progress: number,\n message: string,\n details: Record<string, unknown> | null\n ): void {\n this.lastKnownProgress.set(jobId, { progress, message, details });\n this.events.emit(\"job_progress\", this.queueName, jobId, progress, message, details);\n\n const listeners = this.jobProgressListeners.get(jobId);\n if (listeners) {\n for (const listener of listeners) {\n listener(progress, message, details);\n }\n }\n }\n\n // ========================================================================\n // Private helpers\n // ========================================================================\n\n private createJobHandle(id: unknown): JobHandle<Output> {\n return {\n id,\n waitFor: () => this.waitFor(id),\n abort: () => this.abort(id),\n onProgress: (callback: JobProgressListener) => this.onJobProgress(id, callback),\n };\n }\n\n private cleanupJob(jobId: unknown): void {\n this.activeJobPromises.delete(jobId);\n this.lastKnownProgress.delete(jobId);\n this.jobProgressListeners.delete(jobId);\n }\n\n private handleStorageChange(change: QueueChangePayload<Input, Output>): void {\n if (!change.new && !change.old) return;\n\n const jobId = change.new?.id ?? change.old?.id;\n if (!jobId) return;\n\n // Only process changes for our queue\n const queueName = change.new?.queue ?? change.old?.queue;\n if (queueName !== this.queueName) return;\n\n if (change.type === \"UPDATE\" && change.new) {\n const newStatus = change.new.status;\n const oldStatus = change.old?.status;\n\n if (newStatus === JobStatus.PROCESSING && oldStatus === JobStatus.PENDING) {\n this.handleJobStart(jobId);\n } else if (newStatus === JobStatus.COMPLETED) {\n this.handleJobComplete(jobId, change.new.output as Output);\n } else if (newStatus === JobStatus.FAILED) {\n this.handleJobError(\n jobId,\n change.new.error ?? \"Job failed\",\n change.new.error_code ?? undefined\n );\n } else if (newStatus === JobStatus.DISABLED) {\n this.handleJobDisabled(jobId);\n } else if (newStatus === JobStatus.PENDING && oldStatus === JobStatus.PROCESSING) {\n // Retry\n const runAfter = change.new.run_after ? new Date(change.new.run_after) : new Date();\n this.handleJobRetry(jobId, runAfter);\n }\n\n // Progress update\n if (\n change.new.progress !== change.old?.progress ||\n change.new.progress_message !== change.old?.progress_message\n ) {\n this.handleJobProgress(\n jobId,\n change.new.progress ?? 0,\n change.new.progress_message ?? \"\",\n change.new.progress_details ?? null\n );\n }\n }\n }\n\n protected storageToClass(details: JobStorageFormat<Input, Output>): Job<Input, Output> {\n return storageToClass(details, Job, { includeWorkerId: true });\n }\n\n protected buildErrorFromJob(job: Job<Input, Output>): JobError {\n return this.buildErrorFromCode(job.error || \"Job failed\", job.errorCode ?? undefined);\n }\n\n protected buildErrorFromCode(message: string, errorCode?: string): JobError {\n if (errorCode === \"PermanentJobError\") {\n return new PermanentJobError(message);\n }\n if (errorCode === \"RetryableJobError\") {\n return new RetryableJobError(message);\n }\n if (errorCode === \"AbortSignalJobError\") {\n return new AbortSignalJobError(message);\n }\n if (errorCode === \"JobDisabledError\") {\n return new JobDisabledError(message);\n }\n return new JobError(message);\n }\n}\n",
8
8
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { JobStatus, JobStorageFormat } from \"@workglow/storage\";\nimport { Job, JobClass } from \"./Job\";\n\n/**\n * Convert a date string to a Date object, or null if invalid\n */\nfunction toDate(date: string | null | undefined): Date | null {\n if (!date) return null;\n const d = new Date(date);\n return isNaN(d.getTime()) ? null : d;\n}\n\n/**\n * Convert a Date object to an ISO string, or null if invalid\n */\nfunction dateToISOString(date: Date | null | undefined): string | null {\n if (!date) return null;\n return isNaN(date.getTime()) ? null : date.toISOString();\n}\n\n/**\n * Convert storage format to Job class\n */\nexport function storageToClass<Input, Output>(\n details: JobStorageFormat<Input, Output>,\n jobClass: JobClass<Input, Output>,\n options?: {\n readonly includeWorkerId?: boolean;\n }\n): Job<Input, Output> {\n const includeWorkerId = options?.includeWorkerId ?? true;\n return new jobClass({\n id: details.id,\n jobRunId: details.job_run_id,\n queueName: details.queue,\n fingerprint: details.fingerprint,\n input: details.input as Input,\n output: details.output as Output,\n runAfter: toDate(details.run_after),\n createdAt: toDate(details.created_at)!,\n deadlineAt: toDate(details.deadline_at),\n lastRanAt: toDate(details.last_ran_at),\n completedAt: toDate(details.completed_at),\n progress: details.progress || 0,\n progressMessage: details.progress_message || \"\",\n progressDetails: details.progress_details ?? null,\n status: details.status as JobStatus,\n error: details.error ?? null,\n errorCode: details.error_code ?? null,\n runAttempts: details.run_attempts ?? 0,\n maxRetries: details.max_retries ?? 10,\n ...(includeWorkerId ? { workerId: details.worker_id ?? null } : {}),\n });\n}\n\n/**\n * Convert Job class to storage format\n */\nexport function classToStorage<Input, Output>(\n job: Job<Input, Output>,\n queueName: string\n): JobStorageFormat<Input, Output> {\n const now = new Date().toISOString();\n return {\n id: job.id,\n job_run_id: job.jobRunId,\n queue: job.queueName || queueName,\n fingerprint: job.fingerprint,\n input: job.input,\n status: job.status,\n output: job.output ?? null,\n error: job.error === null ? null : String(job.error),\n error_code: job.errorCode || null,\n run_attempts: job.runAttempts ?? 0,\n max_retries: job.maxRetries ?? 10,\n run_after: dateToISOString(job.runAfter) ?? now,\n created_at: dateToISOString(job.createdAt) ?? now,\n deadline_at: dateToISOString(job.deadlineAt),\n last_ran_at: dateToISOString(job.lastRanAt),\n completed_at: dateToISOString(job.completedAt),\n progress: job.progress ?? 0,\n progress_message: job.progressMessage ?? \"\",\n progress_details: job.progressDetails ?? null,\n worker_id: job.workerId ?? null,\n };\n}\n",
9
9
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IQueueStorage, JobStatus, JobStorageFormat, QueueChangePayload } from \"@workglow/storage\";\nimport { EventEmitter } from \"@workglow/util\";\nimport { ILimiter } from \"../limiter/ILimiter\";\nimport { NullLimiter } from \"../limiter/NullLimiter\";\nimport { Job, JobClass } from \"./Job\";\nimport { JobQueueClient } from \"./JobQueueClient\";\nimport { JobQueueWorker } from \"./JobQueueWorker\";\nimport { classToStorage, storageToClass } from \"./JobStorageConverters\";\n\n/**\n * Statistics tracked for the job queue\n */\nexport interface JobQueueStats {\n readonly totalJobs: number;\n readonly completedJobs: number;\n readonly failedJobs: number;\n readonly abortedJobs: number;\n readonly retriedJobs: number;\n readonly disabledJobs: number;\n readonly averageProcessingTime?: number;\n readonly lastUpdateTime: Date;\n}\n\n/**\n * Events emitted by JobQueueServer\n */\nexport type JobQueueServerEventListeners<Input, Output> = {\n server_start: (queueName: string) => void;\n server_stop: (queueName: string) => void;\n job_start: (queueName: string, jobId: unknown) => void;\n job_complete: (queueName: string, jobId: unknown, output: Output) => void;\n job_error: (queueName: string, jobId: unknown, error: string) => void;\n job_disabled: (queueName: string, jobId: unknown) => void;\n job_retry: (queueName: string, jobId: unknown, runAfter: Date) => void;\n job_progress: (\n queueName: string,\n jobId: unknown,\n progress: number,\n message: string,\n details: Record<string, unknown> | null\n ) => void;\n};\n\nexport type JobQueueServerEvents = keyof JobQueueServerEventListeners<unknown, unknown>;\n\n/**\n * Options for creating a JobQueueServer\n */\nexport interface JobQueueServerOptions<Input, Output> {\n readonly storage: IQueueStorage<Input, Output>;\n readonly queueName: string;\n readonly limiter?: ILimiter;\n readonly workerCount?: number;\n readonly pollIntervalMs?: number;\n readonly deleteAfterCompletionMs?: number;\n readonly deleteAfterFailureMs?: number;\n readonly deleteAfterDisabledMs?: number;\n readonly cleanupIntervalMs?: number;\n}\n\n/**\n * Server that coordinates multiple workers and manages the job queue lifecycle.\n * Handles stuck job recovery, cleanup, and aggregates statistics.\n */\nexport class JobQueueServer<\n Input,\n Output,\n QueueJob extends Job<Input, Output> = Job<Input, Output>,\n> {\n public readonly queueName: string;\n protected readonly storage: IQueueStorage<Input, Output>;\n protected readonly jobClass: JobClass<Input, Output>;\n protected readonly limiter: ILimiter;\n protected readonly workerCount: number;\n protected readonly pollIntervalMs: number;\n protected readonly deleteAfterCompletionMs?: number;\n protected readonly deleteAfterFailureMs?: number;\n protected readonly deleteAfterDisabledMs?: number;\n protected readonly cleanupIntervalMs: number;\n\n protected readonly events = new EventEmitter<JobQueueServerEventListeners<Input, Output>>();\n protected readonly workers: JobQueueWorker<Input, Output, QueueJob>[] = [];\n protected readonly clients: Set<JobQueueClient<Input, Output>> = new Set();\n\n protected running = false;\n protected cleanupTimer: ReturnType<typeof setTimeout> | null = null;\n protected storageUnsubscribe: (() => void) | null = null;\n\n protected stats: JobQueueStats = {\n totalJobs: 0,\n completedJobs: 0,\n failedJobs: 0,\n abortedJobs: 0,\n retriedJobs: 0,\n disabledJobs: 0,\n lastUpdateTime: new Date(),\n };\n\n constructor(jobClass: JobClass<Input, Output>, options: JobQueueServerOptions<Input, Output>) {\n this.queueName = options.queueName;\n this.storage = options.storage;\n this.jobClass = jobClass;\n this.limiter = options.limiter ?? new NullLimiter();\n this.workerCount = options.workerCount ?? 1;\n this.pollIntervalMs = options.pollIntervalMs ?? 100;\n this.deleteAfterCompletionMs = options.deleteAfterCompletionMs;\n this.deleteAfterFailureMs = options.deleteAfterFailureMs;\n this.deleteAfterDisabledMs = options.deleteAfterDisabledMs;\n this.cleanupIntervalMs = options.cleanupIntervalMs ?? 10000;\n\n this.initializeWorkers();\n }\n\n /**\n * Start the server and all workers\n */\n public async start(): Promise<this> {\n if (this.running) {\n return this;\n }\n\n this.running = true;\n this.events.emit(\"server_start\", this.queueName);\n\n // Fix stuck jobs from previous runs\n await this.fixupJobs();\n\n // Subscribe to storage changes to wake idle workers when new work arrives.\n // Best-effort: some storages (e.g. SQLite) don't support subscriptions,\n // in which case workers fall back to poll-interval-based wakeups.\n try {\n this.storageUnsubscribe = this.storage.subscribeToChanges(\n (change: QueueChangePayload<Input, Output>) => {\n if (\n change.type === \"INSERT\" ||\n (change.type === \"UPDATE\" && change.new?.status === JobStatus.PENDING)\n ) {\n this.notifyWorkers();\n }\n }\n );\n } catch {\n // Storage doesn't support change subscriptions — workers will poll\n }\n\n // Start all workers\n await Promise.all(this.workers.map((worker) => worker.start()));\n\n // Start cleanup loop\n this.startCleanupLoop();\n\n return this;\n }\n\n /**\n * Stop the server and all workers\n */\n public async stop(): Promise<this> {\n if (!this.running) {\n return this;\n }\n\n this.running = false;\n\n // Unsubscribe from storage changes\n if (this.storageUnsubscribe) {\n this.storageUnsubscribe();\n this.storageUnsubscribe = null;\n }\n\n // Stop cleanup loop\n if (this.cleanupTimer) {\n clearTimeout(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n\n // Stop all workers\n await Promise.all(this.workers.map((worker) => worker.stop()));\n\n this.events.emit(\"server_stop\", this.queueName);\n return this;\n }\n\n /**\n * Get the current queue statistics\n */\n public getStats(): JobQueueStats {\n return { ...this.stats };\n }\n\n /**\n * Get the storage instance (for client connection)\n */\n public getStorage(): IQueueStorage<Input, Output> {\n return this.storage;\n }\n\n /**\n * Scale the number of workers\n */\n public async scaleWorkers(count: number): Promise<void> {\n if (count < 1) {\n throw new Error(\"Worker count must be at least 1\");\n }\n\n const currentCount = this.workers.length;\n\n if (count > currentCount) {\n // Add more workers\n for (let i = currentCount; i < count; i++) {\n const worker = this.createWorker();\n this.workers.push(worker);\n if (this.running) {\n await worker.start();\n }\n }\n } else if (count < currentCount) {\n // Remove workers\n const toRemove = this.workers.splice(count);\n await Promise.all(toRemove.map((worker) => worker.stop()));\n }\n }\n\n /**\n * Check if the server is running\n */\n public isRunning(): boolean {\n return this.running;\n }\n\n /**\n * Get the number of workers\n */\n public getWorkerCount(): number {\n return this.workers.length;\n }\n\n // ========================================================================\n // Client management\n // ========================================================================\n\n /**\n * Add a client for same-process event forwarding\n * @internal\n */\n public addClient(client: JobQueueClient<Input, Output>): void {\n this.clients.add(client);\n }\n\n /**\n * Remove a client\n * @internal\n */\n public removeClient(client: JobQueueClient<Input, Output>): void {\n this.clients.delete(client);\n }\n\n /**\n * Wake all idle workers so they check for new jobs immediately.\n */\n protected notifyWorkers(): void {\n for (const worker of this.workers) {\n worker.notify();\n }\n }\n\n // ========================================================================\n // Event handling\n // ========================================================================\n\n public on<Event extends JobQueueServerEvents>(\n event: Event,\n listener: JobQueueServerEventListeners<Input, Output>[Event]\n ): void {\n this.events.on(event, listener);\n }\n\n public off<Event extends JobQueueServerEvents>(\n event: Event,\n listener: JobQueueServerEventListeners<Input, Output>[Event]\n ): void {\n this.events.off(event, listener);\n }\n\n // ========================================================================\n // Protected methods\n // ========================================================================\n\n /**\n * Initialize workers\n */\n protected initializeWorkers(): void {\n for (let i = 0; i < this.workerCount; i++) {\n const worker = this.createWorker();\n this.workers.push(worker);\n }\n }\n\n /**\n * Create a new worker and wire up event forwarding\n */\n protected createWorker(): JobQueueWorker<Input, Output, QueueJob> {\n const worker = new JobQueueWorker<Input, Output, QueueJob>(this.jobClass, {\n storage: this.storage,\n queueName: this.queueName,\n limiter: this.limiter,\n pollIntervalMs: this.pollIntervalMs,\n });\n\n // Forward worker events to server and clients\n worker.on(\"job_start\", (jobId) => {\n this.stats = { ...this.stats, totalJobs: this.stats.totalJobs + 1 };\n this.events.emit(\"job_start\", this.queueName, jobId);\n this.forwardToClients(\"handleJobStart\", jobId);\n });\n\n worker.on(\"job_complete\", (jobId, output) => {\n this.stats = { ...this.stats, completedJobs: this.stats.completedJobs + 1 };\n this.updateAverageProcessingTime();\n this.events.emit(\"job_complete\", this.queueName, jobId, output);\n this.forwardToClients(\"handleJobComplete\", jobId, output);\n\n // Immediate deletion when configured\n if (this.deleteAfterCompletionMs === 0) {\n this.storage.delete(jobId).catch((err) => {\n console.error(\"Error deleting job after completion:\", err);\n });\n }\n\n // A concurrency slot freed up — wake idle workers\n this.notifyWorkers();\n });\n\n worker.on(\"job_error\", (jobId, error, errorCode) => {\n this.stats = { ...this.stats, failedJobs: this.stats.failedJobs + 1 };\n this.events.emit(\"job_error\", this.queueName, jobId, error);\n this.forwardToClients(\"handleJobError\", jobId, error, errorCode);\n\n // Immediate deletion when configured\n if (this.deleteAfterFailureMs === 0) {\n this.storage.delete(jobId).catch((err) => {\n console.error(\"Error deleting job after error:\", err);\n });\n }\n\n // A concurrency slot freed up — wake idle workers\n this.notifyWorkers();\n });\n\n worker.on(\"job_disabled\", (jobId) => {\n this.stats = { ...this.stats, disabledJobs: this.stats.disabledJobs + 1 };\n this.events.emit(\"job_disabled\", this.queueName, jobId);\n this.forwardToClients(\"handleJobDisabled\", jobId);\n\n // Immediate deletion when configured\n if (this.deleteAfterDisabledMs === 0) {\n this.storage.delete(jobId).catch((err) => {\n console.error(\"Error deleting job after disabling:\", err);\n });\n }\n\n // A concurrency slot freed up — wake idle workers\n this.notifyWorkers();\n });\n\n worker.on(\"job_retry\", (jobId, runAfter) => {\n this.stats = { ...this.stats, retriedJobs: this.stats.retriedJobs + 1 };\n this.events.emit(\"job_retry\", this.queueName, jobId, runAfter);\n this.forwardToClients(\"handleJobRetry\", jobId, runAfter);\n });\n\n worker.on(\"job_progress\", (jobId, progress, message, details) => {\n this.events.emit(\"job_progress\", this.queueName, jobId, progress, message, details);\n this.forwardToClients(\"handleJobProgress\", jobId, progress, message, details);\n });\n\n return worker;\n }\n\n /**\n * Forward events to all attached clients\n */\n protected forwardToClients(method: \"handleJobStart\", jobId: unknown): void;\n protected forwardToClients(method: \"handleJobComplete\", jobId: unknown, output: Output): void;\n protected forwardToClients(\n method: \"handleJobError\",\n jobId: unknown,\n error: string,\n errorCode?: string\n ): void;\n protected forwardToClients(method: \"handleJobDisabled\", jobId: unknown): void;\n protected forwardToClients(method: \"handleJobRetry\", jobId: unknown, runAfter: Date): void;\n protected forwardToClients(\n method: \"handleJobProgress\",\n jobId: unknown,\n progress: number,\n message: string,\n details: Record<string, unknown> | null\n ): void;\n protected forwardToClients(method: string, ...args: unknown[]): void {\n for (const client of this.clients) {\n const fn = (client as any)[method];\n if (typeof fn === \"function\") {\n fn.apply(client, args);\n }\n }\n }\n\n /**\n * Update average processing time from all workers\n */\n protected updateAverageProcessingTime(): void {\n const times: number[] = [];\n for (const worker of this.workers) {\n const avgTime = worker.getAverageProcessingTime();\n if (avgTime !== undefined) {\n times.push(avgTime);\n }\n }\n if (times.length > 0) {\n const avg = times.reduce((a, b) => a + b, 0) / times.length;\n this.stats = {\n ...this.stats,\n averageProcessingTime: avg,\n lastUpdateTime: new Date(),\n };\n }\n }\n\n /**\n * Start the cleanup loop\n */\n protected startCleanupLoop(): void {\n if (!this.running) return;\n\n this.cleanupJobs().finally(() => {\n if (this.running) {\n this.cleanupTimer = setTimeout(() => this.startCleanupLoop(), this.cleanupIntervalMs);\n }\n });\n }\n\n /**\n * Clean up completed/failed jobs based on TTL settings\n */\n protected async cleanupJobs(): Promise<void> {\n try {\n // The workers will handle the abort via their abort controllers\n // We just need to ensure the jobs get marked as failed\n\n // Delete completed jobs after TTL\n if (this.deleteAfterCompletionMs !== undefined && this.deleteAfterCompletionMs > 0) {\n await this.storage.deleteJobsByStatusAndAge(\n JobStatus.COMPLETED,\n this.deleteAfterCompletionMs\n );\n }\n\n // Delete failed jobs after TTL\n if (this.deleteAfterFailureMs !== undefined && this.deleteAfterFailureMs > 0) {\n await this.storage.deleteJobsByStatusAndAge(JobStatus.FAILED, this.deleteAfterFailureMs);\n }\n\n // Delete disabled jobs after TTL\n if (this.deleteAfterDisabledMs !== undefined && this.deleteAfterDisabledMs > 0) {\n await this.storage.deleteJobsByStatusAndAge(JobStatus.DISABLED, this.deleteAfterDisabledMs);\n }\n } catch (error) {\n console.error(\"Error in cleanup:\", error);\n }\n }\n\n /**\n * Fix stuck jobs from previous server runs.\n * Jobs in PROCESSING or ABORTING state that are not owned by any of the current\n * server's workers are considered orphaned and will be reset.\n */\n protected async fixupJobs(): Promise<void> {\n try {\n const stuckProcessingJobs = await this.storage.peek(JobStatus.PROCESSING);\n const stuckAbortingJobs = await this.storage.peek(JobStatus.ABORTING);\n const stuckJobs = [...stuckProcessingJobs, ...stuckAbortingJobs];\n\n // Get the worker IDs of all workers managed by this server\n const currentWorkerIds = new Set(this.getWorkerIds());\n\n for (const jobData of stuckJobs) {\n // Skip jobs that belong to workers in this server (they may still be processing)\n if (jobData.worker_id && currentWorkerIds.has(jobData.worker_id)) {\n continue;\n }\n\n const job = this.storageToClass(jobData);\n if (job.runAttempts >= job.maxRetries) {\n job.status = JobStatus.FAILED;\n job.error = \"Max retries reached\";\n job.errorCode = \"MAX_RETRIES_REACHED\";\n // Clear worker_id since job is now failed\n job.workerId = null;\n } else {\n job.status = JobStatus.PENDING;\n job.runAfter = job.lastRanAt || new Date();\n job.progress = 0;\n job.progressMessage = \"\";\n job.progressDetails = null;\n job.error = \"Server restarted\";\n // Clear worker_id so a new worker can claim this job\n job.workerId = null;\n }\n\n await this.storage.complete(this.classToStorage(job));\n }\n } catch (error) {\n console.error(\"Error in fixupJobs:\", error);\n }\n }\n\n /**\n * Convert storage format to Job class\n */\n protected storageToClass(details: JobStorageFormat<Input, Output>): Job<Input, Output> {\n return storageToClass(details, this.jobClass);\n }\n\n /**\n * Convert Job class to storage format\n */\n protected classToStorage(job: Job<Input, Output>): JobStorageFormat<Input, Output> {\n return classToStorage(job, this.queueName);\n }\n\n /**\n * Get the worker IDs of all workers managed by this server\n */\n public getWorkerIds(): string[] {\n return this.workers.map((worker) => worker.workerId);\n }\n}\n",
@@ -14,9 +14,9 @@
14
14
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ILimiter } from \"./ILimiter\";\n\nexport class DelayLimiter implements ILimiter {\n private nextAvailableTime: Date = new Date();\n constructor(private delayInMilliseconds: number = 50) {}\n\n async canProceed(): Promise<boolean> {\n return Date.now() >= this.nextAvailableTime.getTime();\n }\n\n async recordJobStart(): Promise<void> {\n this.nextAvailableTime = new Date(Date.now() + this.delayInMilliseconds);\n }\n\n async recordJobCompletion(): Promise<void> {\n // No action needed.\n }\n\n async getNextAvailableTime(): Promise<Date> {\n return this.nextAvailableTime;\n }\n\n async setNextAvailableTime(date: Date): Promise<void> {\n if (date > this.nextAvailableTime) {\n this.nextAvailableTime = date;\n }\n }\n async clear(): Promise<void> {\n this.nextAvailableTime = new Date();\n }\n}\n",
15
15
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"@workglow/util\";\nimport { ILimiter, RateLimiterOptions } from \"./ILimiter\";\n\nexport const EVENLY_SPACED_JOB_RATE_LIMITER = createServiceToken<ILimiter>(\n \"jobqueue.limiter.rate.evenlyspaced\"\n);\n\n/**\n * Rate limiter that spreads requests evenly across a time window.\n * Instead of allowing all requests up to the limit and then waiting,\n * this limiter spaces out the requests evenly across the window.\n */\nexport class EvenlySpacedRateLimiter implements ILimiter {\n private readonly maxExecutions: number;\n private readonly windowSizeMs: number;\n private readonly idealInterval: number;\n private nextAvailableTime: number = Date.now();\n private lastStartTime: number = 0;\n private durations: number[] = [];\n\n constructor({ maxExecutions, windowSizeInSeconds }: RateLimiterOptions) {\n if (maxExecutions <= 0) {\n throw new Error(\"maxExecutions must be > 0\");\n }\n if (windowSizeInSeconds <= 0) {\n throw new Error(\"windowSizeInSeconds must be > 0\");\n }\n this.maxExecutions = maxExecutions;\n this.windowSizeMs = windowSizeInSeconds * 1_000;\n // If you want exactly maxExecutions in windowSize, start one every this many ms:\n this.idealInterval = this.windowSizeMs / this.maxExecutions;\n }\n\n /** Can we start a new job right now? */\n async canProceed(): Promise<boolean> {\n const now = Date.now();\n return now >= this.nextAvailableTime;\n }\n\n /** Record that a job is starting now. */\n async recordJobStart(): Promise<void> {\n const now = Date.now();\n this.lastStartTime = now;\n\n // If no timing data yet, assume zero run-time (ideal interval)\n if (this.durations.length === 0) {\n this.nextAvailableTime = now + this.idealInterval;\n } else {\n // Compute average run duration\n const sum = this.durations.reduce((a, b) => a + b, 0);\n const avgDuration = sum / this.durations.length;\n // Schedule next start: ideal spacing minus average duration\n const waitMs = Math.max(0, this.idealInterval - avgDuration);\n this.nextAvailableTime = now + waitMs;\n }\n }\n\n /**\n * Call this when a job finishes.\n * We measure its duration, update our running-average,\n * and then compute how long to wait before the next job start.\n */\n async recordJobCompletion(): Promise<void> {\n const now = Date.now();\n const duration = now - this.lastStartTime;\n this.durations.push(duration);\n if (this.durations.length > this.maxExecutions) {\n this.durations.shift();\n }\n }\n\n async getNextAvailableTime(): Promise<Date> {\n return new Date(this.nextAvailableTime);\n }\n\n async setNextAvailableTime(date: Date): Promise<void> {\n const t = date.getTime();\n if (t > this.nextAvailableTime) {\n this.nextAvailableTime = t;\n }\n }\n\n async clear(): Promise<void> {\n this.durations = [];\n this.nextAvailableTime = Date.now();\n this.lastStartTime = 0;\n }\n}\n",
16
16
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"@workglow/util\";\n\nexport const JOB_LIMITER = createServiceToken<ILimiter>(\"jobqueue.limiter\");\n\n/**\n * Interface for a job limiter.\n */\nexport interface ILimiter {\n canProceed(): Promise<boolean>;\n recordJobStart(): Promise<void>;\n recordJobCompletion(): Promise<void>;\n getNextAvailableTime(): Promise<Date>;\n setNextAvailableTime(date: Date): Promise<void>;\n clear(): Promise<void>;\n}\n\nexport interface RateLimiterOptions {\n readonly maxExecutions: number;\n readonly windowSizeInSeconds: number;\n}\n\nexport interface RateLimiterWithBackoffOptions extends RateLimiterOptions {\n readonly initialBackoffDelay?: number;\n readonly backoffMultiplier?: number;\n readonly maxBackoffDelay?: number;\n}\n",
17
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IRateLimiterStorage } from \"@workglow/storage\";\nimport { ILimiter, RateLimiterWithBackoffOptions } from \"./ILimiter\";\n\n/**\n * Base rate limiter implementation that uses a storage backend.\n * Manages request counts and delays to control job execution.\n */\nexport class RateLimiter implements ILimiter {\n protected readonly windowSizeInMilliseconds: number;\n protected currentBackoffDelay: number;\n protected readonly maxExecutions: number;\n protected readonly initialBackoffDelay: number;\n protected readonly backoffMultiplier: number;\n protected readonly maxBackoffDelay: number;\n\n constructor(\n protected readonly storage: IRateLimiterStorage,\n protected readonly queueName: string,\n {\n maxExecutions,\n windowSizeInSeconds,\n initialBackoffDelay = 1_000,\n backoffMultiplier = 2,\n maxBackoffDelay = 600_000, // 10 minutes\n }: RateLimiterWithBackoffOptions\n ) {\n if (maxExecutions <= 0) {\n throw new Error(\"maxExecutions must be greater than 0\");\n }\n if (windowSizeInSeconds <= 0) {\n throw new Error(\"windowSizeInSeconds must be greater than 0\");\n }\n if (initialBackoffDelay <= 0) {\n throw new Error(\"initialBackoffDelay must be greater than 0\");\n }\n if (backoffMultiplier <= 1) {\n throw new Error(\"backoffMultiplier must be greater than 1\");\n }\n if (maxBackoffDelay <= initialBackoffDelay) {\n throw new Error(\"maxBackoffDelay must be greater than initialBackoffDelay\");\n }\n\n this.windowSizeInMilliseconds = windowSizeInSeconds * 1000;\n this.maxExecutions = maxExecutions;\n this.initialBackoffDelay = initialBackoffDelay;\n this.backoffMultiplier = backoffMultiplier;\n this.maxBackoffDelay = maxBackoffDelay;\n this.currentBackoffDelay = initialBackoffDelay;\n }\n\n protected addJitter(base: number): number {\n // full jitter in [base, 2*base)\n return base + Math.random() * base;\n }\n\n protected increaseBackoff(): void {\n this.currentBackoffDelay = Math.min(\n this.currentBackoffDelay * this.backoffMultiplier,\n this.maxBackoffDelay\n );\n }\n\n /**\n * Checks if a job can proceed based on rate limiting rules.\n * @returns True if the job can proceed, false otherwise\n */\n async canProceed(): Promise<boolean> {\n // First check if the window allows more executions\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n const canProceedNow = attemptCount < this.maxExecutions;\n\n // If the window allows more executions, clear any backoff and proceed\n if (canProceedNow) {\n // Clear any existing nextAvailableTime backoff since the window allows more executions\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff by setting it to the past\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n this.currentBackoffDelay = this.initialBackoffDelay;\n return true;\n }\n\n // Window is full, check if there's a backoff delay\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n this.increaseBackoff();\n return false;\n }\n\n // Window is full but no backoff delay, so we can't proceed\n this.increaseBackoff();\n return false;\n }\n\n /**\n * Records a new job attempt.\n */\n async recordJobStart(): Promise<void> {\n await this.storage.recordExecution(this.queueName);\n\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n\n if (attemptCount >= this.maxExecutions) {\n const backoffExpires = new Date(Date.now() + this.addJitter(this.currentBackoffDelay));\n await this.setNextAvailableTime(backoffExpires);\n } else {\n // Window allows more executions, clear any existing nextAvailableTime by setting it to the past\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff since the window now allows more executions\n // Set to a time in the past to effectively clear it\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n }\n }\n\n async recordJobCompletion(): Promise<void> {\n // Implementation can be no-op as completion doesn't affect rate limiting\n }\n\n /**\n * Retrieves the next available time for the specific queue.\n * @returns The next available time\n */\n async getNextAvailableTime(): Promise<Date> {\n // Get the time when the rate limit will allow the next job execution\n const oldestExecution = await this.storage.getOldestExecutionAtOffset(\n this.queueName,\n this.maxExecutions - 1\n );\n\n let rateLimitedTime = new Date();\n if (oldestExecution) {\n rateLimitedTime = new Date(oldestExecution);\n rateLimitedTime.setSeconds(\n rateLimitedTime.getSeconds() + this.windowSizeInMilliseconds / 1000\n );\n }\n\n // Get the next available time set externally, if any\n const nextAvailableStr = await this.storage.getNextAvailableTime(this.queueName);\n let nextAvailableTime = new Date();\n if (nextAvailableStr) {\n nextAvailableTime = new Date(nextAvailableStr);\n }\n\n // Return the later of the two times\n return nextAvailableTime > rateLimitedTime ? nextAvailableTime : rateLimitedTime;\n }\n\n /**\n * Sets the next available time for the specific queue.\n * @param date - The new next available time\n */\n async setNextAvailableTime(date: Date): Promise<void> {\n await this.storage.setNextAvailableTime(this.queueName, date.toISOString());\n }\n\n /**\n * Clears all rate limit entries for this queue.\n */\n async clear(): Promise<void> {\n await this.storage.clear(this.queueName);\n this.currentBackoffDelay = this.initialBackoffDelay;\n }\n}\n"
17
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IRateLimiterStorage } from \"@workglow/storage\";\nimport { ILimiter, RateLimiterWithBackoffOptions } from \"./ILimiter\";\n\n/**\n * Base rate limiter implementation that uses a storage backend.\n * Manages request counts and delays to control job execution.\n */\nexport class RateLimiter implements ILimiter {\n protected readonly windowSizeInMilliseconds: number;\n protected currentBackoffDelay: number;\n protected readonly maxExecutions: number;\n protected readonly initialBackoffDelay: number;\n protected readonly backoffMultiplier: number;\n protected readonly maxBackoffDelay: number;\n\n constructor(\n protected readonly storage: IRateLimiterStorage,\n protected readonly queueName: string,\n {\n maxExecutions,\n windowSizeInSeconds,\n initialBackoffDelay = 1_000,\n backoffMultiplier = 2,\n maxBackoffDelay = 600_000, // 10 minutes\n }: RateLimiterWithBackoffOptions\n ) {\n if (maxExecutions <= 0) {\n throw new Error(\"maxExecutions must be greater than 0\");\n }\n if (windowSizeInSeconds <= 0) {\n throw new Error(\"windowSizeInSeconds must be greater than 0\");\n }\n if (initialBackoffDelay <= 0) {\n throw new Error(\"initialBackoffDelay must be greater than 0\");\n }\n if (backoffMultiplier <= 1) {\n throw new Error(\"backoffMultiplier must be greater than 1\");\n }\n if (maxBackoffDelay <= initialBackoffDelay) {\n throw new Error(\"maxBackoffDelay must be greater than initialBackoffDelay\");\n }\n\n this.windowSizeInMilliseconds = windowSizeInSeconds * 1000;\n this.maxExecutions = maxExecutions;\n this.initialBackoffDelay = initialBackoffDelay;\n this.backoffMultiplier = backoffMultiplier;\n this.maxBackoffDelay = maxBackoffDelay;\n this.currentBackoffDelay = initialBackoffDelay;\n }\n\n protected addJitter(base: number): number {\n // full jitter in [base, 2*base)\n return base + Math.random() * base;\n }\n\n protected increaseBackoff(): void {\n this.currentBackoffDelay = Math.min(\n this.currentBackoffDelay * this.backoffMultiplier,\n this.maxBackoffDelay\n );\n }\n\n /**\n * Checks if a job can proceed based on rate limiting rules.\n * @returns True if the job can proceed, false otherwise\n */\n async canProceed(): Promise<boolean> {\n // First check if the window allows more executions\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n const canProceedNow = attemptCount < this.maxExecutions;\n\n // If the window allows more executions, clear any backoff and proceed\n if (canProceedNow) {\n // Clear any existing nextAvailableTime backoff since the window allows more executions\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff by setting it to the past\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n this.currentBackoffDelay = this.initialBackoffDelay;\n return true;\n }\n\n // Window is full, check if there's a backoff delay\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n this.increaseBackoff();\n return false;\n }\n\n // Window is full but no backoff delay, so we can't proceed\n this.increaseBackoff();\n return false;\n }\n\n /**\n * Records a new job attempt.\n */\n async recordJobStart(): Promise<void> {\n await this.storage.recordExecution(this.queueName);\n\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n\n if (attemptCount >= this.maxExecutions) {\n const backoffExpires = new Date(Date.now() + this.addJitter(this.currentBackoffDelay));\n await this.setNextAvailableTime(backoffExpires);\n } else {\n // Window allows more executions, clear any existing nextAvailableTime by setting it to the past\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff since the window now allows more executions\n // Set to a time in the past to effectively clear it\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n }\n }\n\n async recordJobCompletion(): Promise<void> {\n // Implementation can be no-op as completion doesn't affect rate limiting\n }\n\n /**\n * Retrieves the next available time for the specific queue.\n * @returns The next available time\n */\n async getNextAvailableTime(): Promise<Date> {\n // Get the time when the rate limit will allow the next job execution\n const oldestExecution = await this.storage.getOldestExecutionAtOffset(\n this.queueName,\n this.maxExecutions - 1\n );\n\n let rateLimitedTime = new Date();\n if (oldestExecution) {\n rateLimitedTime = new Date(oldestExecution);\n rateLimitedTime.setSeconds(\n rateLimitedTime.getSeconds() + this.windowSizeInMilliseconds / 1000\n );\n }\n\n // Get the next available time set externally, if any\n const nextAvailableStr = await this.storage.getNextAvailableTime(this.queueName);\n let nextAvailableTime = new Date();\n if (nextAvailableStr) {\n nextAvailableTime = new Date(nextAvailableStr);\n }\n\n return nextAvailableTime > rateLimitedTime ? nextAvailableTime : rateLimitedTime;\n }\n\n /**\n * Sets the next available time for the specific queue.\n * @param date - The new next available time\n */\n async setNextAvailableTime(date: Date): Promise<void> {\n await this.storage.setNextAvailableTime(this.queueName, date.toISOString());\n }\n\n /**\n * Clears all rate limit entries for this queue.\n */\n async clear(): Promise<void> {\n await this.storage.clear(this.queueName);\n this.currentBackoffDelay = this.initialBackoffDelay;\n }\n}\n"
18
18
  ],
19
- "mappings": "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",
19
+ "mappings": "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",
20
20
  "debugId": "9CBA07AF2D8BC8F364756E2164756E21",
21
21
  "names": []
22
22
  }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { BaseError } from "@workglow/util";
7
7
  export declare class JobError extends BaseError {
8
- message: string;
8
+ readonly message: string;
9
9
  static type: string;
10
10
  retryable: boolean;
11
11
  constructor(message: string);
@@ -1 +1 @@
1
- {"version":3,"file":"JobError.d.ts","sourceRoot":"","sources":["../../src/job/JobError.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,qBAAa,QAAS,SAAQ,SAAS;IAGlB,OAAO,EAAE,MAAM;IAFlC,OAAc,IAAI,EAAE,MAAM,CAAc;IACjC,SAAS,UAAS;IACzB,YAAmB,OAAO,EAAE,MAAM,EAEjC;CACF;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,OAAc,IAAI,EAAE,MAAM,CAAsB;IAChD,YAAY,OAAO,GAAE,MAAwB,EAE5C;CACF;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IAIpC,SAAS,CAAC;IAHnB,OAAc,IAAI,EAAE,MAAM,CAAuB;IACjD,YACE,OAAO,EAAE,MAAM,EACR,SAAS,CAAC,kBAAM,EAIxB;CACF;AAED;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C,OAAc,IAAI,EAAE,MAAM,CAAuB;IACjD,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAc,IAAI,EAAE,MAAM,CAAyB;IACnD,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,iBAAiB;IACrD,OAAc,IAAI,EAAE,MAAM,CAAsB;CACjD"}
1
+ {"version":3,"file":"JobError.d.ts","sourceRoot":"","sources":["../../src/job/JobError.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,qBAAa,QAAS,SAAQ,SAAS;aAGP,OAAO,EAAE,MAAM;IAF7C,OAAuB,IAAI,EAAE,MAAM,CAAc;IAC1C,SAAS,UAAS;IACzB,YAA8B,OAAO,EAAE,MAAM,EAE5C;CACF;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,OAAuB,IAAI,EAAE,MAAM,CAAsB;IACzD,YAAY,OAAO,GAAE,MAAwB,EAE5C;CACF;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IAIpC,SAAS,CAAC;IAHnB,OAAuB,IAAI,EAAE,MAAM,CAAuB;IAC1D,YACE,OAAO,EAAE,MAAM,EACR,SAAS,CAAC,kBAAM,EAIxB;CACF;AAED;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C,OAAuB,IAAI,EAAE,MAAM,CAAuB;IAC1D,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAuB,IAAI,EAAE,MAAM,CAAyB;IAC5D,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,iBAAiB;IACrD,OAAuB,IAAI,EAAE,MAAM,CAAsB;CAC1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../src/limiter/RateLimiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAErE;;;GAGG;AACH,qBAAa,WAAY,YAAW,QAAQ;IASxC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB;IAC/C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM;IATtC,SAAS,CAAC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IACpD,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAE3C,YACqB,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,MAAM,EACpC,EACE,aAAa,EACb,mBAAmB,EACnB,mBAA2B,EAC3B,iBAAqB,EACrB,eAAyB,EAC1B,EAAE,6BAA6B,EAwBjC;IAED,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxC;IAED,SAAS,CAAC,eAAe,IAAI,IAAI,CAKhC;IAED;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CA6BnC;IAED;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBpC;IAEK,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEzC;IAED;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwB1C;IAED;;;OAGG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpD;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;CACF"}
1
+ {"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../src/limiter/RateLimiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAErE;;;GAGG;AACH,qBAAa,WAAY,YAAW,QAAQ;IASxC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB;IAC/C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM;IATtC,SAAS,CAAC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IACpD,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAE3C,YACqB,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,MAAM,EACpC,EACE,aAAa,EACb,mBAAmB,EACnB,mBAA2B,EAC3B,iBAAqB,EACrB,eAAyB,EAC1B,EAAE,6BAA6B,EAwBjC;IAED,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxC;IAED,SAAS,CAAC,eAAe,IAAI,IAAI,CAKhC;IAED;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CA6BnC;IAED;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBpC;IAEK,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEzC;IAED;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuB1C;IAED;;;OAGG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpD;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;CACF"}
package/dist/node.js.map CHANGED
@@ -3,7 +3,7 @@
3
3
  "sources": ["../src/job/Job.ts", "../src/job/JobError.ts", "../src/job/JobQueueClient.ts", "../src/job/JobStorageConverters.ts", "../src/job/JobQueueServer.ts", "../src/limiter/NullLimiter.ts", "../src/job/JobQueueWorker.ts", "../src/limiter/CompositeLimiter.ts", "../src/limiter/ConcurrencyLimiter.ts", "../src/limiter/DelayLimiter.ts", "../src/limiter/EvenlySpacedRateLimiter.ts", "../src/limiter/ILimiter.ts", "../src/limiter/RateLimiter.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { JobStatus } from \"@workglow/storage\";\nimport { JobError } from \"./JobError\";\nimport type { JobProgressListener } from \"./JobQueueEventListeners\";\n\nexport { JobStatus };\n\n/**\n * Context for job execution\n */\nexport interface IJobExecuteContext {\n signal: AbortSignal;\n updateProgress: (\n progress: number,\n message?: string,\n details?: Record<string, any> | null\n ) => Promise<void>;\n}\n\n/**\n * Details about a job that reflect the structure in the database.\n */\nexport type JobConstructorParam<Input, Output> = {\n id?: unknown;\n jobRunId?: string;\n queueName?: string;\n input: Input;\n output?: Output | null;\n error?: string | null;\n errorCode?: string | null;\n fingerprint?: string;\n maxRetries?: number;\n status?: JobStatus;\n createdAt?: Date;\n deadlineAt?: Date | null;\n lastRanAt?: Date | null;\n runAfter?: Date | null;\n completedAt?: Date | null;\n runAttempts?: number;\n progress?: number;\n progressMessage?: string;\n progressDetails?: Record<string, any> | null;\n /** The ID of the worker that claimed this job, null if unclaimed */\n workerId?: string | null;\n};\n\nexport type JobClass<Input, Output> = new (\n param: JobConstructorParam<Input, Output>\n) => Job<Input, Output>;\n\n/**\n * A job that can be executed by a JobQueue.\n *\n * @template Input - The type of the job's input\n * @template Output - The type of the job's output\n */\nexport class Job<Input, Output> {\n public id: unknown;\n public jobRunId: string | undefined;\n public queueName: string | undefined;\n public input: Input;\n public maxRetries: number;\n public createdAt: Date;\n public fingerprint: string | undefined;\n public status: JobStatus = JobStatus.PENDING;\n public runAfter: Date;\n public output: Output | null = null;\n public runAttempts: number = 0;\n public lastRanAt: Date | null = null;\n public completedAt: Date | null = null;\n public deadlineAt: Date | null = null;\n public error: string | null = null;\n public errorCode: string | null = null;\n public progress: number = 0;\n public progressMessage: string = \"\";\n public progressDetails: Record<string, any> | null = null;\n /** The ID of the worker that claimed this job */\n public workerId: string | null = null;\n\n constructor({\n queueName,\n input,\n jobRunId,\n id,\n error = null,\n errorCode = null,\n fingerprint = undefined,\n output = null,\n maxRetries = 10,\n createdAt = new Date(),\n completedAt = null,\n status = JobStatus.PENDING,\n deadlineAt = null,\n runAttempts = 0,\n lastRanAt = null,\n runAfter = new Date(),\n progress = 0,\n progressMessage = \"\",\n progressDetails = null,\n workerId = null,\n }: JobConstructorParam<Input, Output>) {\n this.runAfter = runAfter ?? new Date();\n this.createdAt = createdAt ?? new Date();\n this.lastRanAt = lastRanAt ?? null;\n this.deadlineAt = deadlineAt ?? null;\n this.completedAt = completedAt ?? null;\n\n this.queueName = queueName;\n this.id = id;\n this.jobRunId = jobRunId;\n this.status = status;\n this.fingerprint = fingerprint;\n this.input = input;\n this.maxRetries = maxRetries;\n this.runAttempts = runAttempts;\n this.output = output;\n this.error = error;\n this.errorCode = errorCode;\n this.progress = progress;\n this.progressMessage = progressMessage;\n this.progressDetails = progressDetails;\n this.workerId = workerId ?? null;\n }\n\n async execute(_input: Input, _context: IJobExecuteContext): Promise<Output> {\n throw new JobError(\"Method not implemented.\");\n }\n\n public progressListeners: Set<JobProgressListener> = new Set();\n\n /**\n * Update the job's progress (for direct execution without a worker)\n * @param progress - Progress value between 0 and 100\n * @param message - Optional progress message\n * @param details - Optional progress details\n */\n public async updateProgress(\n progress: number,\n message: string = \"\",\n details: Record<string, any> | null = null\n ): Promise<void> {\n this.progress = progress;\n this.progressMessage = message;\n this.progressDetails = details;\n\n // Notify direct listeners\n for (const listener of this.progressListeners) {\n listener(progress, message, details);\n }\n }\n\n /**\n * Adds a progress listener for this job\n *\n * Only used if run directly (not via a queue)\n *\n * @param listener - The callback function to be called when progress updates occur\n * @returns A cleanup function to remove the listener\n */\n public onJobProgress(listener: JobProgressListener): () => void {\n this.progressListeners.add(listener);\n\n return () => {\n this.progressListeners.delete(listener);\n };\n }\n}\n",
6
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseError } from \"@workglow/util\";\n\nexport class JobError extends BaseError {\n public static type: string = \"JobError\";\n public retryable = false;\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job not being found\n *\n * Examples: job.id is undefined, job.id is not found in the storage, etc.\n */\nexport class JobNotFoundError extends JobError {\n public static type: string = \"JobNotFoundError\";\n constructor(message: string = \"Job not found\") {\n super(message);\n }\n}\n\n/**\n * A job error that is retryable\n *\n * Examples: network timeouts, temporary unavailability of an external service, or rate-limiting\n */\nexport class RetryableJobError extends JobError {\n public static type: string = \"RetryableJobError\";\n constructor(\n message: string,\n public retryDate?: Date\n ) {\n super(message);\n this.retryable = true;\n }\n}\n\n/**\n * A job error that is not retryable\n *\n * Examples: invalid input, missing required parameters, or a permanent failure of\n * an external service, permission errors, running out of money for an API, etc.\n */\nexport class PermanentJobError extends JobError {\n public static type: string = \"PermanentJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by an abort signal,\n * meaning the client aborted the job on purpose,\n * not by the queue going down or similar.\n *\n * Example: job.abort()\n */\nexport class AbortSignalJobError extends PermanentJobError {\n public static type: string = \"AbortSignalJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job being disabled\n *\n * Examples: job.disable()\n */\nexport class JobDisabledError extends PermanentJobError {\n public static type: string = \"JobDisabledError\";\n}\n",
6
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseError } from \"@workglow/util\";\n\nexport class JobError extends BaseError {\n public static override type: string = \"JobError\";\n public retryable = false;\n constructor(override readonly message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job not being found\n *\n * Examples: job.id is undefined, job.id is not found in the storage, etc.\n */\nexport class JobNotFoundError extends JobError {\n public static override type: string = \"JobNotFoundError\";\n constructor(message: string = \"Job not found\") {\n super(message);\n }\n}\n\n/**\n * A job error that is retryable\n *\n * Examples: network timeouts, temporary unavailability of an external service, or rate-limiting\n */\nexport class RetryableJobError extends JobError {\n public static override type: string = \"RetryableJobError\";\n constructor(\n message: string,\n public retryDate?: Date\n ) {\n super(message);\n this.retryable = true;\n }\n}\n\n/**\n * A job error that is not retryable\n *\n * Examples: invalid input, missing required parameters, or a permanent failure of\n * an external service, permission errors, running out of money for an API, etc.\n */\nexport class PermanentJobError extends JobError {\n public static override type: string = \"PermanentJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by an abort signal,\n * meaning the client aborted the job on purpose,\n * not by the queue going down or similar.\n *\n * Example: job.abort()\n */\nexport class AbortSignalJobError extends PermanentJobError {\n public static override type: string = \"AbortSignalJobError\";\n constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * A job error that is caused by a job being disabled\n *\n * Examples: job.disable()\n */\nexport class JobDisabledError extends PermanentJobError {\n public static override type: string = \"JobDisabledError\";\n}\n",
7
7
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IQueueStorage, JobStatus, JobStorageFormat, QueueChangePayload } from \"@workglow/storage\";\nimport { EventEmitter } from \"@workglow/util\";\nimport { Job } from \"./Job\";\nimport {\n AbortSignalJobError,\n JobDisabledError,\n JobError,\n JobNotFoundError,\n PermanentJobError,\n RetryableJobError,\n} from \"./JobError\";\nimport {\n JobProgressListener,\n JobQueueEventListener,\n JobQueueEventListeners,\n JobQueueEventParameters,\n JobQueueEvents,\n} from \"./JobQueueEventListeners\";\nimport type { JobQueueServer } from \"./JobQueueServer\";\nimport { storageToClass } from \"./JobStorageConverters\";\n\n/**\n * Handle returned when submitting a job, providing methods to interact with the job\n */\nexport interface JobHandle<Output> {\n readonly id: unknown;\n waitFor(): Promise<Output>;\n abort(): Promise<void>;\n onProgress(callback: JobProgressListener): () => void;\n}\n\n/**\n * Options for creating a JobQueueClient\n */\nexport interface JobQueueClientOptions<Input, Output> {\n readonly storage: IQueueStorage<Input, Output>;\n readonly queueName: string;\n}\n\n/**\n * Client for submitting jobs and monitoring their progress.\n * Connect to a JobQueueServer for same-process optimization,\n * or use storage subscriptions for cross-process communication.\n */\nexport class JobQueueClient<Input, Output> {\n public readonly queueName: string;\n protected readonly storage: IQueueStorage<Input, Output>;\n protected readonly events = new EventEmitter<JobQueueEventListeners<Input, Output>>();\n protected server: JobQueueServer<Input, Output> | null = null;\n protected storageUnsubscribe: (() => void) | null = null;\n\n /**\n * Map of job IDs to their pending promise resolvers\n */\n protected readonly activeJobPromises: Map<\n unknown,\n Array<{\n resolve: (value: Output) => void;\n reject: (err: JobError) => void;\n }>\n > = new Map();\n\n /**\n * Map of job IDs to their progress listeners\n */\n protected readonly jobProgressListeners: Map<unknown, Set<JobProgressListener>> = new Map();\n\n /**\n * Last known progress state for each job\n */\n protected readonly lastKnownProgress: Map<\n unknown,\n {\n readonly progress: number;\n readonly message: string;\n readonly details: Record<string, unknown> | null;\n }\n > = new Map();\n\n constructor(options: JobQueueClientOptions<Input, Output>) {\n this.queueName = options.queueName;\n this.storage = options.storage;\n }\n\n /**\n * Attach to a local JobQueueServer for same-process event optimization.\n * When attached, events flow directly from server without storage polling.\n */\n public attach(server: JobQueueServer<Input, Output>): void {\n if (this.server) {\n this.detach();\n }\n this.server = server;\n server.addClient(this);\n\n // Unsubscribe from storage if we were using it\n if (this.storageUnsubscribe) {\n this.storageUnsubscribe();\n this.storageUnsubscribe = null;\n }\n }\n\n /**\n * Detach from the current server\n */\n public detach(): void {\n if (this.server) {\n this.server.removeClient(this);\n this.server = null;\n }\n }\n\n /**\n * Connect to storage for cross-process communication (when no local server).\n * Uses storage subscriptions to receive job updates.\n */\n public connect(): void {\n if (this.server) {\n return; // Already connected via server\n }\n\n if (this.storageUnsubscribe) {\n return; // Already subscribed\n }\n\n this.storageUnsubscribe = this.storage.subscribeToChanges(\n (change: QueueChangePayload<Input, Output>) => {\n this.handleStorageChange(change);\n }\n );\n }\n\n /**\n * Disconnect from storage subscriptions\n */\n public disconnect(): void {\n if (this.storageUnsubscribe) {\n this.storageUnsubscribe();\n this.storageUnsubscribe = null;\n }\n this.detach();\n }\n\n /**\n * Submit a job to the queue\n */\n public async submit(\n input: Input,\n options?: {\n readonly jobRunId?: string;\n readonly fingerprint?: string;\n readonly maxRetries?: number;\n readonly runAfter?: Date;\n readonly deadlineAt?: Date;\n }\n ): Promise<JobHandle<Output>> {\n const job: JobStorageFormat<Input, Output> = {\n queue: this.queueName,\n input,\n job_run_id: options?.jobRunId,\n fingerprint: options?.fingerprint,\n max_retries: options?.maxRetries ?? 10,\n run_after: options?.runAfter?.toISOString() ?? new Date().toISOString(),\n deadline_at: options?.deadlineAt?.toISOString() ?? null,\n completed_at: null,\n status: JobStatus.PENDING,\n };\n\n const id = await this.storage.add(job);\n\n return this.createJobHandle(id);\n }\n\n /**\n * Submit multiple jobs to the queue\n */\n public async submitBatch(\n inputs: readonly Input[],\n options?: {\n readonly jobRunId?: string;\n readonly maxRetries?: number;\n }\n ): Promise<readonly JobHandle<Output>[]> {\n const handles: JobHandle<Output>[] = [];\n for (const input of inputs) {\n const handle = await this.submit(input, options);\n handles.push(handle);\n }\n return handles;\n }\n\n /**\n * Get a job by ID\n */\n public async getJob(id: unknown): Promise<Job<Input, Output> | undefined> {\n if (!id) throw new JobNotFoundError(\"Cannot get undefined job\");\n const job = await this.storage.get(id);\n if (!job) return undefined;\n return this.storageToClass(job);\n }\n\n /**\n * Get jobs by run ID\n */\n public async getJobsByRunId(runId: string): Promise<readonly Job<Input, Output>[]> {\n if (!runId) throw new JobNotFoundError(\"Cannot get jobs by undefined runId\");\n const jobs = await this.storage.getByRunId(runId);\n return jobs.map((job) => this.storageToClass(job));\n }\n\n /**\n * Peek at jobs in the queue\n */\n public async peek(status?: JobStatus, num?: number): Promise<readonly Job<Input, Output>[]> {\n const jobs = await this.storage.peek(status, num);\n return jobs.map((job) => this.storageToClass(job));\n }\n\n /**\n * Get the size of the queue\n */\n public async size(status?: JobStatus): Promise<number> {\n return this.storage.size(status);\n }\n\n /**\n * Get the output for an input (if job completed)\n */\n public async outputForInput(input: Input): Promise<Output | null> {\n if (!input) throw new JobNotFoundError(\"Cannot get output for undefined input\");\n return this.storage.outputForInput(input);\n }\n\n /**\n * Wait for a job to complete\n */\n public async waitFor(jobId: unknown): Promise<Output> {\n if (!jobId) throw new JobNotFoundError(\"Cannot wait for undefined job\");\n\n const job = await this.getJob(jobId);\n if (!job) throw new JobNotFoundError(`Job ${jobId} not found`);\n\n if (job.status === JobStatus.COMPLETED) {\n return job.output as Output;\n }\n if (job.status === JobStatus.DISABLED) {\n throw new JobDisabledError(`Job ${jobId} was disabled`);\n }\n if (job.status === JobStatus.FAILED) {\n throw this.buildErrorFromJob(job);\n }\n\n const { promise, resolve, reject } = Promise.withResolvers<Output>();\n promise.catch(() => {}); // Prevent unhandled rejection\n\n const promises = this.activeJobPromises.get(jobId) || [];\n promises.push({ resolve, reject });\n this.activeJobPromises.set(jobId, promises);\n\n return promise;\n }\n\n /**\n * Abort a job\n */\n public async abort(jobId: unknown): Promise<void> {\n if (!jobId) throw new JobNotFoundError(\"Cannot abort undefined job\");\n await this.storage.abort(jobId);\n this.events.emit(\"job_aborting\", this.queueName, jobId);\n }\n\n /**\n * Abort all jobs in a job run\n */\n public async abortJobRun(jobRunId: string): Promise<void> {\n if (!jobRunId) throw new JobNotFoundError(\"Cannot abort job run with undefined jobRunId\");\n const jobs = await this.getJobsByRunId(jobRunId);\n await Promise.allSettled(\n jobs.map((job) => {\n if (job.status === JobStatus.PROCESSING || job.status === JobStatus.PENDING) {\n return this.abort(job.id);\n }\n })\n );\n }\n\n /**\n * Subscribe to progress updates for a specific job\n */\n public onJobProgress(jobId: unknown, listener: JobProgressListener): () => void {\n if (!this.jobProgressListeners.has(jobId)) {\n this.jobProgressListeners.set(jobId, new Set());\n }\n const listeners = this.jobProgressListeners.get(jobId)!;\n listeners.add(listener);\n\n return () => {\n const listeners = this.jobProgressListeners.get(jobId);\n if (listeners) {\n listeners.delete(listener);\n if (listeners.size === 0) {\n this.jobProgressListeners.delete(jobId);\n }\n }\n };\n }\n\n // ========================================================================\n // Event handling\n // ========================================================================\n\n public on<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): void {\n this.events.on(event, listener);\n }\n\n public off<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): void {\n this.events.off(event, listener);\n }\n\n public once<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): void {\n this.events.once(event, listener);\n }\n\n public waitOn<Event extends JobQueueEvents>(\n event: Event\n ): Promise<JobQueueEventParameters<Event, Input, Output>> {\n return this.events.waitOn(event) as Promise<JobQueueEventParameters<Event, Input, Output>>;\n }\n\n /**\n * Subscribes to an event and returns a function to unsubscribe\n * @param event - The event name to subscribe to\n * @param listener - The listener function to add\n * @returns a function to unsubscribe from the event\n */\n public subscribe<Event extends JobQueueEvents>(\n event: Event,\n listener: JobQueueEventListener<Event>\n ): () => void {\n return this.events.subscribe(event, listener);\n }\n\n // ========================================================================\n // Internal methods called by JobQueueServer for same-process optimization\n // ========================================================================\n\n /**\n * Called by server when a job starts processing\n * @internal\n */\n public handleJobStart(jobId: unknown): void {\n this.lastKnownProgress.set(jobId, {\n progress: 0,\n message: \"\",\n details: null,\n });\n this.events.emit(\"job_start\", this.queueName, jobId);\n }\n\n /**\n * Called by server when a job completes\n * @internal\n */\n public handleJobComplete(jobId: unknown, output: Output): void {\n this.events.emit(\"job_complete\", this.queueName, jobId, output);\n\n const promises = this.activeJobPromises.get(jobId);\n if (promises) {\n promises.forEach(({ resolve }) => resolve(output));\n }\n this.cleanupJob(jobId);\n }\n\n /**\n * Called by server when a job fails\n * @internal\n */\n public handleJobError(jobId: unknown, error: string, errorCode?: string): void {\n this.events.emit(\"job_error\", this.queueName, jobId, error);\n\n const promises = this.activeJobPromises.get(jobId);\n if (promises) {\n const jobError = this.buildErrorFromCode(error, errorCode);\n promises.forEach(({ reject }) => reject(jobError));\n }\n this.cleanupJob(jobId);\n }\n\n /**\n * Called by server when a job is disabled\n * @internal\n */\n public handleJobDisabled(jobId: unknown): void {\n this.events.emit(\"job_disabled\", this.queueName, jobId);\n\n const promises = this.activeJobPromises.get(jobId);\n if (promises) {\n promises.forEach(({ reject }) => reject(new JobDisabledError(\"Job was disabled\")));\n }\n this.cleanupJob(jobId);\n }\n\n /**\n * Called by server when a job is retried\n * @internal\n */\n public handleJobRetry(jobId: unknown, runAfter: Date): void {\n this.events.emit(\"job_retry\", this.queueName, jobId, runAfter);\n }\n\n /**\n * Called by server when job progress updates\n * @internal\n */\n public handleJobProgress(\n jobId: unknown,\n progress: number,\n message: string,\n details: Record<string, unknown> | null\n ): void {\n this.lastKnownProgress.set(jobId, { progress, message, details });\n this.events.emit(\"job_progress\", this.queueName, jobId, progress, message, details);\n\n const listeners = this.jobProgressListeners.get(jobId);\n if (listeners) {\n for (const listener of listeners) {\n listener(progress, message, details);\n }\n }\n }\n\n // ========================================================================\n // Private helpers\n // ========================================================================\n\n private createJobHandle(id: unknown): JobHandle<Output> {\n return {\n id,\n waitFor: () => this.waitFor(id),\n abort: () => this.abort(id),\n onProgress: (callback: JobProgressListener) => this.onJobProgress(id, callback),\n };\n }\n\n private cleanupJob(jobId: unknown): void {\n this.activeJobPromises.delete(jobId);\n this.lastKnownProgress.delete(jobId);\n this.jobProgressListeners.delete(jobId);\n }\n\n private handleStorageChange(change: QueueChangePayload<Input, Output>): void {\n if (!change.new && !change.old) return;\n\n const jobId = change.new?.id ?? change.old?.id;\n if (!jobId) return;\n\n // Only process changes for our queue\n const queueName = change.new?.queue ?? change.old?.queue;\n if (queueName !== this.queueName) return;\n\n if (change.type === \"UPDATE\" && change.new) {\n const newStatus = change.new.status;\n const oldStatus = change.old?.status;\n\n if (newStatus === JobStatus.PROCESSING && oldStatus === JobStatus.PENDING) {\n this.handleJobStart(jobId);\n } else if (newStatus === JobStatus.COMPLETED) {\n this.handleJobComplete(jobId, change.new.output as Output);\n } else if (newStatus === JobStatus.FAILED) {\n this.handleJobError(\n jobId,\n change.new.error ?? \"Job failed\",\n change.new.error_code ?? undefined\n );\n } else if (newStatus === JobStatus.DISABLED) {\n this.handleJobDisabled(jobId);\n } else if (newStatus === JobStatus.PENDING && oldStatus === JobStatus.PROCESSING) {\n // Retry\n const runAfter = change.new.run_after ? new Date(change.new.run_after) : new Date();\n this.handleJobRetry(jobId, runAfter);\n }\n\n // Progress update\n if (\n change.new.progress !== change.old?.progress ||\n change.new.progress_message !== change.old?.progress_message\n ) {\n this.handleJobProgress(\n jobId,\n change.new.progress ?? 0,\n change.new.progress_message ?? \"\",\n change.new.progress_details ?? null\n );\n }\n }\n }\n\n protected storageToClass(details: JobStorageFormat<Input, Output>): Job<Input, Output> {\n return storageToClass(details, Job, { includeWorkerId: true });\n }\n\n protected buildErrorFromJob(job: Job<Input, Output>): JobError {\n return this.buildErrorFromCode(job.error || \"Job failed\", job.errorCode ?? undefined);\n }\n\n protected buildErrorFromCode(message: string, errorCode?: string): JobError {\n if (errorCode === \"PermanentJobError\") {\n return new PermanentJobError(message);\n }\n if (errorCode === \"RetryableJobError\") {\n return new RetryableJobError(message);\n }\n if (errorCode === \"AbortSignalJobError\") {\n return new AbortSignalJobError(message);\n }\n if (errorCode === \"JobDisabledError\") {\n return new JobDisabledError(message);\n }\n return new JobError(message);\n }\n}\n",
8
8
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { JobStatus, JobStorageFormat } from \"@workglow/storage\";\nimport { Job, JobClass } from \"./Job\";\n\n/**\n * Convert a date string to a Date object, or null if invalid\n */\nfunction toDate(date: string | null | undefined): Date | null {\n if (!date) return null;\n const d = new Date(date);\n return isNaN(d.getTime()) ? null : d;\n}\n\n/**\n * Convert a Date object to an ISO string, or null if invalid\n */\nfunction dateToISOString(date: Date | null | undefined): string | null {\n if (!date) return null;\n return isNaN(date.getTime()) ? null : date.toISOString();\n}\n\n/**\n * Convert storage format to Job class\n */\nexport function storageToClass<Input, Output>(\n details: JobStorageFormat<Input, Output>,\n jobClass: JobClass<Input, Output>,\n options?: {\n readonly includeWorkerId?: boolean;\n }\n): Job<Input, Output> {\n const includeWorkerId = options?.includeWorkerId ?? true;\n return new jobClass({\n id: details.id,\n jobRunId: details.job_run_id,\n queueName: details.queue,\n fingerprint: details.fingerprint,\n input: details.input as Input,\n output: details.output as Output,\n runAfter: toDate(details.run_after),\n createdAt: toDate(details.created_at)!,\n deadlineAt: toDate(details.deadline_at),\n lastRanAt: toDate(details.last_ran_at),\n completedAt: toDate(details.completed_at),\n progress: details.progress || 0,\n progressMessage: details.progress_message || \"\",\n progressDetails: details.progress_details ?? null,\n status: details.status as JobStatus,\n error: details.error ?? null,\n errorCode: details.error_code ?? null,\n runAttempts: details.run_attempts ?? 0,\n maxRetries: details.max_retries ?? 10,\n ...(includeWorkerId ? { workerId: details.worker_id ?? null } : {}),\n });\n}\n\n/**\n * Convert Job class to storage format\n */\nexport function classToStorage<Input, Output>(\n job: Job<Input, Output>,\n queueName: string\n): JobStorageFormat<Input, Output> {\n const now = new Date().toISOString();\n return {\n id: job.id,\n job_run_id: job.jobRunId,\n queue: job.queueName || queueName,\n fingerprint: job.fingerprint,\n input: job.input,\n status: job.status,\n output: job.output ?? null,\n error: job.error === null ? null : String(job.error),\n error_code: job.errorCode || null,\n run_attempts: job.runAttempts ?? 0,\n max_retries: job.maxRetries ?? 10,\n run_after: dateToISOString(job.runAfter) ?? now,\n created_at: dateToISOString(job.createdAt) ?? now,\n deadline_at: dateToISOString(job.deadlineAt),\n last_ran_at: dateToISOString(job.lastRanAt),\n completed_at: dateToISOString(job.completedAt),\n progress: job.progress ?? 0,\n progress_message: job.progressMessage ?? \"\",\n progress_details: job.progressDetails ?? null,\n worker_id: job.workerId ?? null,\n };\n}\n",
9
9
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IQueueStorage, JobStatus, JobStorageFormat, QueueChangePayload } from \"@workglow/storage\";\nimport { EventEmitter } from \"@workglow/util\";\nimport { ILimiter } from \"../limiter/ILimiter\";\nimport { NullLimiter } from \"../limiter/NullLimiter\";\nimport { Job, JobClass } from \"./Job\";\nimport { JobQueueClient } from \"./JobQueueClient\";\nimport { JobQueueWorker } from \"./JobQueueWorker\";\nimport { classToStorage, storageToClass } from \"./JobStorageConverters\";\n\n/**\n * Statistics tracked for the job queue\n */\nexport interface JobQueueStats {\n readonly totalJobs: number;\n readonly completedJobs: number;\n readonly failedJobs: number;\n readonly abortedJobs: number;\n readonly retriedJobs: number;\n readonly disabledJobs: number;\n readonly averageProcessingTime?: number;\n readonly lastUpdateTime: Date;\n}\n\n/**\n * Events emitted by JobQueueServer\n */\nexport type JobQueueServerEventListeners<Input, Output> = {\n server_start: (queueName: string) => void;\n server_stop: (queueName: string) => void;\n job_start: (queueName: string, jobId: unknown) => void;\n job_complete: (queueName: string, jobId: unknown, output: Output) => void;\n job_error: (queueName: string, jobId: unknown, error: string) => void;\n job_disabled: (queueName: string, jobId: unknown) => void;\n job_retry: (queueName: string, jobId: unknown, runAfter: Date) => void;\n job_progress: (\n queueName: string,\n jobId: unknown,\n progress: number,\n message: string,\n details: Record<string, unknown> | null\n ) => void;\n};\n\nexport type JobQueueServerEvents = keyof JobQueueServerEventListeners<unknown, unknown>;\n\n/**\n * Options for creating a JobQueueServer\n */\nexport interface JobQueueServerOptions<Input, Output> {\n readonly storage: IQueueStorage<Input, Output>;\n readonly queueName: string;\n readonly limiter?: ILimiter;\n readonly workerCount?: number;\n readonly pollIntervalMs?: number;\n readonly deleteAfterCompletionMs?: number;\n readonly deleteAfterFailureMs?: number;\n readonly deleteAfterDisabledMs?: number;\n readonly cleanupIntervalMs?: number;\n}\n\n/**\n * Server that coordinates multiple workers and manages the job queue lifecycle.\n * Handles stuck job recovery, cleanup, and aggregates statistics.\n */\nexport class JobQueueServer<\n Input,\n Output,\n QueueJob extends Job<Input, Output> = Job<Input, Output>,\n> {\n public readonly queueName: string;\n protected readonly storage: IQueueStorage<Input, Output>;\n protected readonly jobClass: JobClass<Input, Output>;\n protected readonly limiter: ILimiter;\n protected readonly workerCount: number;\n protected readonly pollIntervalMs: number;\n protected readonly deleteAfterCompletionMs?: number;\n protected readonly deleteAfterFailureMs?: number;\n protected readonly deleteAfterDisabledMs?: number;\n protected readonly cleanupIntervalMs: number;\n\n protected readonly events = new EventEmitter<JobQueueServerEventListeners<Input, Output>>();\n protected readonly workers: JobQueueWorker<Input, Output, QueueJob>[] = [];\n protected readonly clients: Set<JobQueueClient<Input, Output>> = new Set();\n\n protected running = false;\n protected cleanupTimer: ReturnType<typeof setTimeout> | null = null;\n protected storageUnsubscribe: (() => void) | null = null;\n\n protected stats: JobQueueStats = {\n totalJobs: 0,\n completedJobs: 0,\n failedJobs: 0,\n abortedJobs: 0,\n retriedJobs: 0,\n disabledJobs: 0,\n lastUpdateTime: new Date(),\n };\n\n constructor(jobClass: JobClass<Input, Output>, options: JobQueueServerOptions<Input, Output>) {\n this.queueName = options.queueName;\n this.storage = options.storage;\n this.jobClass = jobClass;\n this.limiter = options.limiter ?? new NullLimiter();\n this.workerCount = options.workerCount ?? 1;\n this.pollIntervalMs = options.pollIntervalMs ?? 100;\n this.deleteAfterCompletionMs = options.deleteAfterCompletionMs;\n this.deleteAfterFailureMs = options.deleteAfterFailureMs;\n this.deleteAfterDisabledMs = options.deleteAfterDisabledMs;\n this.cleanupIntervalMs = options.cleanupIntervalMs ?? 10000;\n\n this.initializeWorkers();\n }\n\n /**\n * Start the server and all workers\n */\n public async start(): Promise<this> {\n if (this.running) {\n return this;\n }\n\n this.running = true;\n this.events.emit(\"server_start\", this.queueName);\n\n // Fix stuck jobs from previous runs\n await this.fixupJobs();\n\n // Subscribe to storage changes to wake idle workers when new work arrives.\n // Best-effort: some storages (e.g. SQLite) don't support subscriptions,\n // in which case workers fall back to poll-interval-based wakeups.\n try {\n this.storageUnsubscribe = this.storage.subscribeToChanges(\n (change: QueueChangePayload<Input, Output>) => {\n if (\n change.type === \"INSERT\" ||\n (change.type === \"UPDATE\" && change.new?.status === JobStatus.PENDING)\n ) {\n this.notifyWorkers();\n }\n }\n );\n } catch {\n // Storage doesn't support change subscriptions — workers will poll\n }\n\n // Start all workers\n await Promise.all(this.workers.map((worker) => worker.start()));\n\n // Start cleanup loop\n this.startCleanupLoop();\n\n return this;\n }\n\n /**\n * Stop the server and all workers\n */\n public async stop(): Promise<this> {\n if (!this.running) {\n return this;\n }\n\n this.running = false;\n\n // Unsubscribe from storage changes\n if (this.storageUnsubscribe) {\n this.storageUnsubscribe();\n this.storageUnsubscribe = null;\n }\n\n // Stop cleanup loop\n if (this.cleanupTimer) {\n clearTimeout(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n\n // Stop all workers\n await Promise.all(this.workers.map((worker) => worker.stop()));\n\n this.events.emit(\"server_stop\", this.queueName);\n return this;\n }\n\n /**\n * Get the current queue statistics\n */\n public getStats(): JobQueueStats {\n return { ...this.stats };\n }\n\n /**\n * Get the storage instance (for client connection)\n */\n public getStorage(): IQueueStorage<Input, Output> {\n return this.storage;\n }\n\n /**\n * Scale the number of workers\n */\n public async scaleWorkers(count: number): Promise<void> {\n if (count < 1) {\n throw new Error(\"Worker count must be at least 1\");\n }\n\n const currentCount = this.workers.length;\n\n if (count > currentCount) {\n // Add more workers\n for (let i = currentCount; i < count; i++) {\n const worker = this.createWorker();\n this.workers.push(worker);\n if (this.running) {\n await worker.start();\n }\n }\n } else if (count < currentCount) {\n // Remove workers\n const toRemove = this.workers.splice(count);\n await Promise.all(toRemove.map((worker) => worker.stop()));\n }\n }\n\n /**\n * Check if the server is running\n */\n public isRunning(): boolean {\n return this.running;\n }\n\n /**\n * Get the number of workers\n */\n public getWorkerCount(): number {\n return this.workers.length;\n }\n\n // ========================================================================\n // Client management\n // ========================================================================\n\n /**\n * Add a client for same-process event forwarding\n * @internal\n */\n public addClient(client: JobQueueClient<Input, Output>): void {\n this.clients.add(client);\n }\n\n /**\n * Remove a client\n * @internal\n */\n public removeClient(client: JobQueueClient<Input, Output>): void {\n this.clients.delete(client);\n }\n\n /**\n * Wake all idle workers so they check for new jobs immediately.\n */\n protected notifyWorkers(): void {\n for (const worker of this.workers) {\n worker.notify();\n }\n }\n\n // ========================================================================\n // Event handling\n // ========================================================================\n\n public on<Event extends JobQueueServerEvents>(\n event: Event,\n listener: JobQueueServerEventListeners<Input, Output>[Event]\n ): void {\n this.events.on(event, listener);\n }\n\n public off<Event extends JobQueueServerEvents>(\n event: Event,\n listener: JobQueueServerEventListeners<Input, Output>[Event]\n ): void {\n this.events.off(event, listener);\n }\n\n // ========================================================================\n // Protected methods\n // ========================================================================\n\n /**\n * Initialize workers\n */\n protected initializeWorkers(): void {\n for (let i = 0; i < this.workerCount; i++) {\n const worker = this.createWorker();\n this.workers.push(worker);\n }\n }\n\n /**\n * Create a new worker and wire up event forwarding\n */\n protected createWorker(): JobQueueWorker<Input, Output, QueueJob> {\n const worker = new JobQueueWorker<Input, Output, QueueJob>(this.jobClass, {\n storage: this.storage,\n queueName: this.queueName,\n limiter: this.limiter,\n pollIntervalMs: this.pollIntervalMs,\n });\n\n // Forward worker events to server and clients\n worker.on(\"job_start\", (jobId) => {\n this.stats = { ...this.stats, totalJobs: this.stats.totalJobs + 1 };\n this.events.emit(\"job_start\", this.queueName, jobId);\n this.forwardToClients(\"handleJobStart\", jobId);\n });\n\n worker.on(\"job_complete\", (jobId, output) => {\n this.stats = { ...this.stats, completedJobs: this.stats.completedJobs + 1 };\n this.updateAverageProcessingTime();\n this.events.emit(\"job_complete\", this.queueName, jobId, output);\n this.forwardToClients(\"handleJobComplete\", jobId, output);\n\n // Immediate deletion when configured\n if (this.deleteAfterCompletionMs === 0) {\n this.storage.delete(jobId).catch((err) => {\n console.error(\"Error deleting job after completion:\", err);\n });\n }\n\n // A concurrency slot freed up — wake idle workers\n this.notifyWorkers();\n });\n\n worker.on(\"job_error\", (jobId, error, errorCode) => {\n this.stats = { ...this.stats, failedJobs: this.stats.failedJobs + 1 };\n this.events.emit(\"job_error\", this.queueName, jobId, error);\n this.forwardToClients(\"handleJobError\", jobId, error, errorCode);\n\n // Immediate deletion when configured\n if (this.deleteAfterFailureMs === 0) {\n this.storage.delete(jobId).catch((err) => {\n console.error(\"Error deleting job after error:\", err);\n });\n }\n\n // A concurrency slot freed up — wake idle workers\n this.notifyWorkers();\n });\n\n worker.on(\"job_disabled\", (jobId) => {\n this.stats = { ...this.stats, disabledJobs: this.stats.disabledJobs + 1 };\n this.events.emit(\"job_disabled\", this.queueName, jobId);\n this.forwardToClients(\"handleJobDisabled\", jobId);\n\n // Immediate deletion when configured\n if (this.deleteAfterDisabledMs === 0) {\n this.storage.delete(jobId).catch((err) => {\n console.error(\"Error deleting job after disabling:\", err);\n });\n }\n\n // A concurrency slot freed up — wake idle workers\n this.notifyWorkers();\n });\n\n worker.on(\"job_retry\", (jobId, runAfter) => {\n this.stats = { ...this.stats, retriedJobs: this.stats.retriedJobs + 1 };\n this.events.emit(\"job_retry\", this.queueName, jobId, runAfter);\n this.forwardToClients(\"handleJobRetry\", jobId, runAfter);\n });\n\n worker.on(\"job_progress\", (jobId, progress, message, details) => {\n this.events.emit(\"job_progress\", this.queueName, jobId, progress, message, details);\n this.forwardToClients(\"handleJobProgress\", jobId, progress, message, details);\n });\n\n return worker;\n }\n\n /**\n * Forward events to all attached clients\n */\n protected forwardToClients(method: \"handleJobStart\", jobId: unknown): void;\n protected forwardToClients(method: \"handleJobComplete\", jobId: unknown, output: Output): void;\n protected forwardToClients(\n method: \"handleJobError\",\n jobId: unknown,\n error: string,\n errorCode?: string\n ): void;\n protected forwardToClients(method: \"handleJobDisabled\", jobId: unknown): void;\n protected forwardToClients(method: \"handleJobRetry\", jobId: unknown, runAfter: Date): void;\n protected forwardToClients(\n method: \"handleJobProgress\",\n jobId: unknown,\n progress: number,\n message: string,\n details: Record<string, unknown> | null\n ): void;\n protected forwardToClients(method: string, ...args: unknown[]): void {\n for (const client of this.clients) {\n const fn = (client as any)[method];\n if (typeof fn === \"function\") {\n fn.apply(client, args);\n }\n }\n }\n\n /**\n * Update average processing time from all workers\n */\n protected updateAverageProcessingTime(): void {\n const times: number[] = [];\n for (const worker of this.workers) {\n const avgTime = worker.getAverageProcessingTime();\n if (avgTime !== undefined) {\n times.push(avgTime);\n }\n }\n if (times.length > 0) {\n const avg = times.reduce((a, b) => a + b, 0) / times.length;\n this.stats = {\n ...this.stats,\n averageProcessingTime: avg,\n lastUpdateTime: new Date(),\n };\n }\n }\n\n /**\n * Start the cleanup loop\n */\n protected startCleanupLoop(): void {\n if (!this.running) return;\n\n this.cleanupJobs().finally(() => {\n if (this.running) {\n this.cleanupTimer = setTimeout(() => this.startCleanupLoop(), this.cleanupIntervalMs);\n }\n });\n }\n\n /**\n * Clean up completed/failed jobs based on TTL settings\n */\n protected async cleanupJobs(): Promise<void> {\n try {\n // The workers will handle the abort via their abort controllers\n // We just need to ensure the jobs get marked as failed\n\n // Delete completed jobs after TTL\n if (this.deleteAfterCompletionMs !== undefined && this.deleteAfterCompletionMs > 0) {\n await this.storage.deleteJobsByStatusAndAge(\n JobStatus.COMPLETED,\n this.deleteAfterCompletionMs\n );\n }\n\n // Delete failed jobs after TTL\n if (this.deleteAfterFailureMs !== undefined && this.deleteAfterFailureMs > 0) {\n await this.storage.deleteJobsByStatusAndAge(JobStatus.FAILED, this.deleteAfterFailureMs);\n }\n\n // Delete disabled jobs after TTL\n if (this.deleteAfterDisabledMs !== undefined && this.deleteAfterDisabledMs > 0) {\n await this.storage.deleteJobsByStatusAndAge(JobStatus.DISABLED, this.deleteAfterDisabledMs);\n }\n } catch (error) {\n console.error(\"Error in cleanup:\", error);\n }\n }\n\n /**\n * Fix stuck jobs from previous server runs.\n * Jobs in PROCESSING or ABORTING state that are not owned by any of the current\n * server's workers are considered orphaned and will be reset.\n */\n protected async fixupJobs(): Promise<void> {\n try {\n const stuckProcessingJobs = await this.storage.peek(JobStatus.PROCESSING);\n const stuckAbortingJobs = await this.storage.peek(JobStatus.ABORTING);\n const stuckJobs = [...stuckProcessingJobs, ...stuckAbortingJobs];\n\n // Get the worker IDs of all workers managed by this server\n const currentWorkerIds = new Set(this.getWorkerIds());\n\n for (const jobData of stuckJobs) {\n // Skip jobs that belong to workers in this server (they may still be processing)\n if (jobData.worker_id && currentWorkerIds.has(jobData.worker_id)) {\n continue;\n }\n\n const job = this.storageToClass(jobData);\n if (job.runAttempts >= job.maxRetries) {\n job.status = JobStatus.FAILED;\n job.error = \"Max retries reached\";\n job.errorCode = \"MAX_RETRIES_REACHED\";\n // Clear worker_id since job is now failed\n job.workerId = null;\n } else {\n job.status = JobStatus.PENDING;\n job.runAfter = job.lastRanAt || new Date();\n job.progress = 0;\n job.progressMessage = \"\";\n job.progressDetails = null;\n job.error = \"Server restarted\";\n // Clear worker_id so a new worker can claim this job\n job.workerId = null;\n }\n\n await this.storage.complete(this.classToStorage(job));\n }\n } catch (error) {\n console.error(\"Error in fixupJobs:\", error);\n }\n }\n\n /**\n * Convert storage format to Job class\n */\n protected storageToClass(details: JobStorageFormat<Input, Output>): Job<Input, Output> {\n return storageToClass(details, this.jobClass);\n }\n\n /**\n * Convert Job class to storage format\n */\n protected classToStorage(job: Job<Input, Output>): JobStorageFormat<Input, Output> {\n return classToStorage(job, this.queueName);\n }\n\n /**\n * Get the worker IDs of all workers managed by this server\n */\n public getWorkerIds(): string[] {\n return this.workers.map((worker) => worker.workerId);\n }\n}\n",
@@ -14,9 +14,9 @@
14
14
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ILimiter } from \"./ILimiter\";\n\nexport class DelayLimiter implements ILimiter {\n private nextAvailableTime: Date = new Date();\n constructor(private delayInMilliseconds: number = 50) {}\n\n async canProceed(): Promise<boolean> {\n return Date.now() >= this.nextAvailableTime.getTime();\n }\n\n async recordJobStart(): Promise<void> {\n this.nextAvailableTime = new Date(Date.now() + this.delayInMilliseconds);\n }\n\n async recordJobCompletion(): Promise<void> {\n // No action needed.\n }\n\n async getNextAvailableTime(): Promise<Date> {\n return this.nextAvailableTime;\n }\n\n async setNextAvailableTime(date: Date): Promise<void> {\n if (date > this.nextAvailableTime) {\n this.nextAvailableTime = date;\n }\n }\n async clear(): Promise<void> {\n this.nextAvailableTime = new Date();\n }\n}\n",
15
15
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"@workglow/util\";\nimport { ILimiter, RateLimiterOptions } from \"./ILimiter\";\n\nexport const EVENLY_SPACED_JOB_RATE_LIMITER = createServiceToken<ILimiter>(\n \"jobqueue.limiter.rate.evenlyspaced\"\n);\n\n/**\n * Rate limiter that spreads requests evenly across a time window.\n * Instead of allowing all requests up to the limit and then waiting,\n * this limiter spaces out the requests evenly across the window.\n */\nexport class EvenlySpacedRateLimiter implements ILimiter {\n private readonly maxExecutions: number;\n private readonly windowSizeMs: number;\n private readonly idealInterval: number;\n private nextAvailableTime: number = Date.now();\n private lastStartTime: number = 0;\n private durations: number[] = [];\n\n constructor({ maxExecutions, windowSizeInSeconds }: RateLimiterOptions) {\n if (maxExecutions <= 0) {\n throw new Error(\"maxExecutions must be > 0\");\n }\n if (windowSizeInSeconds <= 0) {\n throw new Error(\"windowSizeInSeconds must be > 0\");\n }\n this.maxExecutions = maxExecutions;\n this.windowSizeMs = windowSizeInSeconds * 1_000;\n // If you want exactly maxExecutions in windowSize, start one every this many ms:\n this.idealInterval = this.windowSizeMs / this.maxExecutions;\n }\n\n /** Can we start a new job right now? */\n async canProceed(): Promise<boolean> {\n const now = Date.now();\n return now >= this.nextAvailableTime;\n }\n\n /** Record that a job is starting now. */\n async recordJobStart(): Promise<void> {\n const now = Date.now();\n this.lastStartTime = now;\n\n // If no timing data yet, assume zero run-time (ideal interval)\n if (this.durations.length === 0) {\n this.nextAvailableTime = now + this.idealInterval;\n } else {\n // Compute average run duration\n const sum = this.durations.reduce((a, b) => a + b, 0);\n const avgDuration = sum / this.durations.length;\n // Schedule next start: ideal spacing minus average duration\n const waitMs = Math.max(0, this.idealInterval - avgDuration);\n this.nextAvailableTime = now + waitMs;\n }\n }\n\n /**\n * Call this when a job finishes.\n * We measure its duration, update our running-average,\n * and then compute how long to wait before the next job start.\n */\n async recordJobCompletion(): Promise<void> {\n const now = Date.now();\n const duration = now - this.lastStartTime;\n this.durations.push(duration);\n if (this.durations.length > this.maxExecutions) {\n this.durations.shift();\n }\n }\n\n async getNextAvailableTime(): Promise<Date> {\n return new Date(this.nextAvailableTime);\n }\n\n async setNextAvailableTime(date: Date): Promise<void> {\n const t = date.getTime();\n if (t > this.nextAvailableTime) {\n this.nextAvailableTime = t;\n }\n }\n\n async clear(): Promise<void> {\n this.durations = [];\n this.nextAvailableTime = Date.now();\n this.lastStartTime = 0;\n }\n}\n",
16
16
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"@workglow/util\";\n\nexport const JOB_LIMITER = createServiceToken<ILimiter>(\"jobqueue.limiter\");\n\n/**\n * Interface for a job limiter.\n */\nexport interface ILimiter {\n canProceed(): Promise<boolean>;\n recordJobStart(): Promise<void>;\n recordJobCompletion(): Promise<void>;\n getNextAvailableTime(): Promise<Date>;\n setNextAvailableTime(date: Date): Promise<void>;\n clear(): Promise<void>;\n}\n\nexport interface RateLimiterOptions {\n readonly maxExecutions: number;\n readonly windowSizeInSeconds: number;\n}\n\nexport interface RateLimiterWithBackoffOptions extends RateLimiterOptions {\n readonly initialBackoffDelay?: number;\n readonly backoffMultiplier?: number;\n readonly maxBackoffDelay?: number;\n}\n",
17
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IRateLimiterStorage } from \"@workglow/storage\";\nimport { ILimiter, RateLimiterWithBackoffOptions } from \"./ILimiter\";\n\n/**\n * Base rate limiter implementation that uses a storage backend.\n * Manages request counts and delays to control job execution.\n */\nexport class RateLimiter implements ILimiter {\n protected readonly windowSizeInMilliseconds: number;\n protected currentBackoffDelay: number;\n protected readonly maxExecutions: number;\n protected readonly initialBackoffDelay: number;\n protected readonly backoffMultiplier: number;\n protected readonly maxBackoffDelay: number;\n\n constructor(\n protected readonly storage: IRateLimiterStorage,\n protected readonly queueName: string,\n {\n maxExecutions,\n windowSizeInSeconds,\n initialBackoffDelay = 1_000,\n backoffMultiplier = 2,\n maxBackoffDelay = 600_000, // 10 minutes\n }: RateLimiterWithBackoffOptions\n ) {\n if (maxExecutions <= 0) {\n throw new Error(\"maxExecutions must be greater than 0\");\n }\n if (windowSizeInSeconds <= 0) {\n throw new Error(\"windowSizeInSeconds must be greater than 0\");\n }\n if (initialBackoffDelay <= 0) {\n throw new Error(\"initialBackoffDelay must be greater than 0\");\n }\n if (backoffMultiplier <= 1) {\n throw new Error(\"backoffMultiplier must be greater than 1\");\n }\n if (maxBackoffDelay <= initialBackoffDelay) {\n throw new Error(\"maxBackoffDelay must be greater than initialBackoffDelay\");\n }\n\n this.windowSizeInMilliseconds = windowSizeInSeconds * 1000;\n this.maxExecutions = maxExecutions;\n this.initialBackoffDelay = initialBackoffDelay;\n this.backoffMultiplier = backoffMultiplier;\n this.maxBackoffDelay = maxBackoffDelay;\n this.currentBackoffDelay = initialBackoffDelay;\n }\n\n protected addJitter(base: number): number {\n // full jitter in [base, 2*base)\n return base + Math.random() * base;\n }\n\n protected increaseBackoff(): void {\n this.currentBackoffDelay = Math.min(\n this.currentBackoffDelay * this.backoffMultiplier,\n this.maxBackoffDelay\n );\n }\n\n /**\n * Checks if a job can proceed based on rate limiting rules.\n * @returns True if the job can proceed, false otherwise\n */\n async canProceed(): Promise<boolean> {\n // First check if the window allows more executions\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n const canProceedNow = attemptCount < this.maxExecutions;\n\n // If the window allows more executions, clear any backoff and proceed\n if (canProceedNow) {\n // Clear any existing nextAvailableTime backoff since the window allows more executions\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff by setting it to the past\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n this.currentBackoffDelay = this.initialBackoffDelay;\n return true;\n }\n\n // Window is full, check if there's a backoff delay\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n this.increaseBackoff();\n return false;\n }\n\n // Window is full but no backoff delay, so we can't proceed\n this.increaseBackoff();\n return false;\n }\n\n /**\n * Records a new job attempt.\n */\n async recordJobStart(): Promise<void> {\n await this.storage.recordExecution(this.queueName);\n\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n\n if (attemptCount >= this.maxExecutions) {\n const backoffExpires = new Date(Date.now() + this.addJitter(this.currentBackoffDelay));\n await this.setNextAvailableTime(backoffExpires);\n } else {\n // Window allows more executions, clear any existing nextAvailableTime by setting it to the past\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff since the window now allows more executions\n // Set to a time in the past to effectively clear it\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n }\n }\n\n async recordJobCompletion(): Promise<void> {\n // Implementation can be no-op as completion doesn't affect rate limiting\n }\n\n /**\n * Retrieves the next available time for the specific queue.\n * @returns The next available time\n */\n async getNextAvailableTime(): Promise<Date> {\n // Get the time when the rate limit will allow the next job execution\n const oldestExecution = await this.storage.getOldestExecutionAtOffset(\n this.queueName,\n this.maxExecutions - 1\n );\n\n let rateLimitedTime = new Date();\n if (oldestExecution) {\n rateLimitedTime = new Date(oldestExecution);\n rateLimitedTime.setSeconds(\n rateLimitedTime.getSeconds() + this.windowSizeInMilliseconds / 1000\n );\n }\n\n // Get the next available time set externally, if any\n const nextAvailableStr = await this.storage.getNextAvailableTime(this.queueName);\n let nextAvailableTime = new Date();\n if (nextAvailableStr) {\n nextAvailableTime = new Date(nextAvailableStr);\n }\n\n // Return the later of the two times\n return nextAvailableTime > rateLimitedTime ? nextAvailableTime : rateLimitedTime;\n }\n\n /**\n * Sets the next available time for the specific queue.\n * @param date - The new next available time\n */\n async setNextAvailableTime(date: Date): Promise<void> {\n await this.storage.setNextAvailableTime(this.queueName, date.toISOString());\n }\n\n /**\n * Clears all rate limit entries for this queue.\n */\n async clear(): Promise<void> {\n await this.storage.clear(this.queueName);\n this.currentBackoffDelay = this.initialBackoffDelay;\n }\n}\n"
17
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IRateLimiterStorage } from \"@workglow/storage\";\nimport { ILimiter, RateLimiterWithBackoffOptions } from \"./ILimiter\";\n\n/**\n * Base rate limiter implementation that uses a storage backend.\n * Manages request counts and delays to control job execution.\n */\nexport class RateLimiter implements ILimiter {\n protected readonly windowSizeInMilliseconds: number;\n protected currentBackoffDelay: number;\n protected readonly maxExecutions: number;\n protected readonly initialBackoffDelay: number;\n protected readonly backoffMultiplier: number;\n protected readonly maxBackoffDelay: number;\n\n constructor(\n protected readonly storage: IRateLimiterStorage,\n protected readonly queueName: string,\n {\n maxExecutions,\n windowSizeInSeconds,\n initialBackoffDelay = 1_000,\n backoffMultiplier = 2,\n maxBackoffDelay = 600_000, // 10 minutes\n }: RateLimiterWithBackoffOptions\n ) {\n if (maxExecutions <= 0) {\n throw new Error(\"maxExecutions must be greater than 0\");\n }\n if (windowSizeInSeconds <= 0) {\n throw new Error(\"windowSizeInSeconds must be greater than 0\");\n }\n if (initialBackoffDelay <= 0) {\n throw new Error(\"initialBackoffDelay must be greater than 0\");\n }\n if (backoffMultiplier <= 1) {\n throw new Error(\"backoffMultiplier must be greater than 1\");\n }\n if (maxBackoffDelay <= initialBackoffDelay) {\n throw new Error(\"maxBackoffDelay must be greater than initialBackoffDelay\");\n }\n\n this.windowSizeInMilliseconds = windowSizeInSeconds * 1000;\n this.maxExecutions = maxExecutions;\n this.initialBackoffDelay = initialBackoffDelay;\n this.backoffMultiplier = backoffMultiplier;\n this.maxBackoffDelay = maxBackoffDelay;\n this.currentBackoffDelay = initialBackoffDelay;\n }\n\n protected addJitter(base: number): number {\n // full jitter in [base, 2*base)\n return base + Math.random() * base;\n }\n\n protected increaseBackoff(): void {\n this.currentBackoffDelay = Math.min(\n this.currentBackoffDelay * this.backoffMultiplier,\n this.maxBackoffDelay\n );\n }\n\n /**\n * Checks if a job can proceed based on rate limiting rules.\n * @returns True if the job can proceed, false otherwise\n */\n async canProceed(): Promise<boolean> {\n // First check if the window allows more executions\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n const canProceedNow = attemptCount < this.maxExecutions;\n\n // If the window allows more executions, clear any backoff and proceed\n if (canProceedNow) {\n // Clear any existing nextAvailableTime backoff since the window allows more executions\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff by setting it to the past\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n this.currentBackoffDelay = this.initialBackoffDelay;\n return true;\n }\n\n // Window is full, check if there's a backoff delay\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n this.increaseBackoff();\n return false;\n }\n\n // Window is full but no backoff delay, so we can't proceed\n this.increaseBackoff();\n return false;\n }\n\n /**\n * Records a new job attempt.\n */\n async recordJobStart(): Promise<void> {\n await this.storage.recordExecution(this.queueName);\n\n const windowStartTime = new Date(Date.now() - this.windowSizeInMilliseconds).toISOString();\n const attemptCount = await this.storage.getExecutionCount(this.queueName, windowStartTime);\n\n if (attemptCount >= this.maxExecutions) {\n const backoffExpires = new Date(Date.now() + this.addJitter(this.currentBackoffDelay));\n await this.setNextAvailableTime(backoffExpires);\n } else {\n // Window allows more executions, clear any existing nextAvailableTime by setting it to the past\n const nextAvailableTime = await this.storage.getNextAvailableTime(this.queueName);\n if (nextAvailableTime && new Date(nextAvailableTime).getTime() > Date.now()) {\n // Clear the backoff since the window now allows more executions\n // Set to a time in the past to effectively clear it\n const pastTime = new Date(Date.now() - 1000);\n await this.storage.setNextAvailableTime(this.queueName, pastTime.toISOString());\n }\n }\n }\n\n async recordJobCompletion(): Promise<void> {\n // Implementation can be no-op as completion doesn't affect rate limiting\n }\n\n /**\n * Retrieves the next available time for the specific queue.\n * @returns The next available time\n */\n async getNextAvailableTime(): Promise<Date> {\n // Get the time when the rate limit will allow the next job execution\n const oldestExecution = await this.storage.getOldestExecutionAtOffset(\n this.queueName,\n this.maxExecutions - 1\n );\n\n let rateLimitedTime = new Date();\n if (oldestExecution) {\n rateLimitedTime = new Date(oldestExecution);\n rateLimitedTime.setSeconds(\n rateLimitedTime.getSeconds() + this.windowSizeInMilliseconds / 1000\n );\n }\n\n // Get the next available time set externally, if any\n const nextAvailableStr = await this.storage.getNextAvailableTime(this.queueName);\n let nextAvailableTime = new Date();\n if (nextAvailableStr) {\n nextAvailableTime = new Date(nextAvailableStr);\n }\n\n return nextAvailableTime > rateLimitedTime ? nextAvailableTime : rateLimitedTime;\n }\n\n /**\n * Sets the next available time for the specific queue.\n * @param date - The new next available time\n */\n async setNextAvailableTime(date: Date): Promise<void> {\n await this.storage.setNextAvailableTime(this.queueName, date.toISOString());\n }\n\n /**\n * Clears all rate limit entries for this queue.\n */\n async clear(): Promise<void> {\n await this.storage.clear(this.queueName);\n this.currentBackoffDelay = this.initialBackoffDelay;\n }\n}\n"
18
18
  ],
19
- "mappings": "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",
19
+ "mappings": "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",
20
20
  "debugId": "D4078B141B97CC5864756E2164756E21",
21
21
  "names": []
22
22
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@workglow/job-queue",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.0.126",
5
+ "version": "0.1.1",
6
6
  "description": "Job queue management for Workglow, handling task scheduling, execution, and distributed processing.",
7
7
  "scripts": {
8
8
  "watch": "concurrently -c 'auto' 'bun:watch-*'",
@@ -40,8 +40,8 @@
40
40
  }
41
41
  },
42
42
  "peerDependencies": {
43
- "@workglow/storage": "0.0.126",
44
- "@workglow/util": "0.0.126"
43
+ "@workglow/storage": "0.1.1",
44
+ "@workglow/util": "0.1.1"
45
45
  },
46
46
  "peerDependenciesMeta": {
47
47
  "@workglow/storage": {
@@ -52,8 +52,8 @@
52
52
  }
53
53
  },
54
54
  "devDependencies": {
55
- "@workglow/storage": "0.0.126",
56
- "@workglow/util": "0.0.126"
55
+ "@workglow/storage": "0.1.1",
56
+ "@workglow/util": "0.1.1"
57
57
  },
58
58
  "files": [
59
59
  "dist"