import type { Job } from 'bullmq';
import type { Logger } from 'pino';
import type { ToroTask } from './client.js';
import type { TaskJobData, TaskProcessor, TaskValidator, TaskWorkerOptions } from './types/index.js';
import { Worker } from 'bullmq';
import { TaskJob } from './job.js';
export declare class TaskWorker<PayloadType = any, ResultType = unknown, NameType extends string = string, const JobType extends TaskJob<PayloadType, ResultType, NameType> = TaskJob<PayloadType, ResultType, NameType>> extends Worker<TaskJobData<PayloadType>, ResultType, NameType> {
    readonly taskClient: ToroTask;
    protected validator?: (null | TaskValidator<PayloadType, ResultType, NameType>) | undefined;
    readonly logger: Logger;
    private readonly isBatchingEnabled;
    readonly options: Partial<TaskWorkerOptions>;
    private jobBatch;
    private jobBatchCreationTime;
    private jobBatchProcessPromise;
    private resolveJobBatchProcessPromise;
    private rejectJobBatchProcessPromise;
    private batchProcessingRunning;
    private batchTimeoutTimer;
    private batchLock;
    private batchProcessingScheduled;
    constructor(taskClient: ToroTask, name: string, processor?: string | URL | null | TaskProcessor<PayloadType, ResultType, NameType>, validator?: (null | TaskValidator<PayloadType, ResultType, NameType>) | undefined, options?: Partial<TaskWorkerOptions>);
    static validateBatchOptions(name: string, options: Partial<TaskWorkerOptions>, logger?: Logger): Partial<TaskWorkerOptions>;
    protected callValidateJob(job: TaskJob<PayloadType, ResultType, NameType>): Promise<PayloadType | undefined>;
    /**
     * If batching is enabled, this method is called to process a job.
     * Adds the job to the current batch, manages the timeout timer, triggers
     * processing if size limit is reached, and awaits batch completion.
     *
     * @override
     * @param job - The standard BullMQ job object.
     * @returns A promise that resolves/rejects when the batch containing this job completes/fails.
     */
    protected callProcessJob(job: TaskJob<any, ResultType, NameType>, token: string): Promise<ResultType>;
    /**
     * The processor function used by BullMQ Worker when batching is enabled.
     * Collects jobs into a batch and triggers processing.
     */
    private batchJobCollector;
    private initializeJobBatch;
    private clearBatchTimeoutTimer;
    private startBatchTimeoutTimerIfNeeded;
    private processBatchWrapper;
    /**
     * Gracefully shuts down the worker.
     * Handles final batch processing if enabled.
     *
     * @override
     */
    close(force?: boolean): Promise<void>;
    /**
     * Override the Job class to use TaskJob
     * @returns The extended Job class.
     */
    protected get Job(): typeof Job;
    protected get TaskJob(): typeof TaskJob<PayloadType, ResultType, NameType>;
}
//# sourceMappingURL=worker.d.ts.map