UNPKG

torotask

Version:

Task queue processing in NodeJS based on BullMQ and Redis

79 lines 5.14 kB
import { Job } from 'bullmq'; import type { Logger } from 'pino'; import type { TaskGroup } from './task-group.js'; import type { BulkJob, SingleOrArray, TaskOptions, TaskJobOptions, TaskTrigger, TaskTriggerEvent, TaskWorkerOptions, TaskJobData, TaskWorkerQueueListener } from './types/index.js'; import { TaskWorkerQueue } from './worker-queue.js'; import EventEmitter from 'node:events'; import { ToroTask } from './client.js'; import { TaskJob } from './job.js'; type InternalTaskTrigger<PayloadType> = TaskTrigger<PayloadType> & { internalId: number; }; type InternalTaskTriggerEvent<PayloadType> = TaskTriggerEvent<PayloadType> & { internalId: number; }; /** * Represents a defined task associated with a TaskGroup. * Extends EventEmitter to allow for event handling. * Implements the `process` method by calling the specific task `handler` or a registered subtask handler. * Can define and manage SubTasks. * * @template T The expected type of the data payload for this task's main handler. * @template R The expected return type of the job associated with this task's main handler. */ export declare abstract class BaseTask<PayloadType = any, ResultType = any, DataType extends TaskJobData<PayloadType> = TaskJobData<PayloadType>, TOptions extends TaskOptions = TaskOptions> extends EventEmitter { readonly group: TaskGroup; readonly id: string; options: TOptions; taskClient: ToroTask; jobsOptions: TaskJobOptions; workerOptions: Partial<TaskWorkerOptions> | undefined; queue: TaskWorkerQueue<PayloadType, ResultType>; logger: Logger; triggers: InternalTaskTrigger<PayloadType>[]; protected currentEventTriggers: Map<number, InternalTaskTriggerEvent<PayloadType>>; constructor(group: TaskGroup, id: string, options: TOptions, triggers: SingleOrArray<TaskTrigger<PayloadType>> | undefined, parentLogger?: Logger); get queueName(): string; getWorkerOptions(): Partial<TaskWorkerOptions>; run(payload: PayloadType, overrideOptions?: TaskJobOptions): Promise<TaskJob<PayloadType, ResultType, string, TaskJobData<PayloadType>, import("./types/job.js").TaskJobState>>; runMany(jobs: Omit<BulkJob, 'data'>[], overrideOptions?: TaskJobOptions): Promise<TaskJob<PayloadType, ResultType, string, TaskJobData<PayloadType>, import("./types/job.js").TaskJobState>[]>; runAndWait(payload: PayloadType, overrideOptions?: TaskJobOptions, state?: TaskJobOptions['state']): Promise<ResultType>; protected getJobName(job: Job): string; protected getJobLogger(job: Job): Logger; process(job: TaskJob<PayloadType, ResultType, string>, token?: string): Promise<ResultType>; validate(job: TaskJob<PayloadType, ResultType, string>): Promise<PayloadType>; processJob(_job: TaskJob<PayloadType, ResultType, string>, _token?: string, _jobLogger?: Logger): Promise<ResultType>; validateJob(_job: TaskJob<PayloadType, ResultType, string>, _jobLogger?: Logger): Promise<PayloadType>; /** * Requests synchronization of all trigger types via the EventManager queue. */ requestTriggerSync(): Promise<void>; /** * Synchronizes BullMQ Job Schedulers based on the task's triggers with cron/every. * This remains local to the Task instance. */ protected _synchronizeCronEverySchedulers(): Promise<void>; /** * Collects desired event subscriptions and requests synchronization via the EventManager. */ protected _requestEventTriggerSync(): Promise<void>; /** * Updates the task's default job options and triggers, then requests synchronization. */ update(options?: TOptions, triggers?: SingleOrArray<TaskTrigger<PayloadType>>): Promise<void>; /** * Removes all BullMQ job schedulers (cron/every) and requests event trigger unregistration. */ removeAllTriggers(): Promise<void>; /** Helper method to normalize trigger input and update internal state */ protected _initializeTriggers(triggersInput?: SingleOrArray<TaskTrigger<PayloadType>>): void; emit<U extends keyof TaskWorkerQueueListener<PayloadType, ResultType, string, DataType>>(event: U, ...args: Parameters<TaskWorkerQueueListener<PayloadType, ResultType, string, DataType>[U]>): boolean; on<U extends keyof TaskWorkerQueueListener<PayloadType, ResultType, string, DataType>>(event: U, listener: TaskWorkerQueueListener<PayloadType, ResultType, string, DataType>[U]): this; off<U extends keyof TaskWorkerQueueListener<PayloadType, ResultType, string, DataType>>(event: U, listener: TaskWorkerQueueListener<PayloadType, ResultType, string, DataType>[U]): this; once<U extends keyof TaskWorkerQueueListener<PayloadType, ResultType, string, DataType>>(event: U, listener: TaskWorkerQueueListener<PayloadType, ResultType, string, DataType>[U]): this; startWorker(options?: TaskWorkerOptions): Promise<import("./worker.js").TaskWorker<PayloadType, ResultType, string, TaskJob<PayloadType, ResultType, string, TaskJobData<PayloadType>, import("./types/job.js").TaskJobState>>>; stopWorker(): Promise<void>; close(): Promise<void>; } export {}; //# sourceMappingURL=base-task.d.ts.map