torotask
Version:
Task queue processing in NodeJS based on BullMQ and Redis
79 lines • 5.14 kB
TypeScript
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