import { BaseJobOptions, BulkJobOptions, IoredisListener, JobSchedulerJson, QueueOptions, RepeatableJob, RepeatOptions } from '../interfaces'; import { FinishedStatus, JobsOptions, JobSchedulerTemplateOptions, JobProgress } from '../types'; import { Job } from './job'; import { QueueGetters } from './queue-getters'; import { Repeat } from './repeat'; import { RedisConnection } from './redis-connection'; import { JobScheduler } from './job-scheduler'; export interface ObliterateOpts { /** * Use force = true to force obliteration even with active jobs in the queue * @defaultValue false */ force?: boolean; /** * Use count with the maximum number of deleted keys per iteration * @defaultValue 1000 */ count?: number; } export interface QueueListener extends IoredisListener { /** * Listen to 'cleaned' event. * * This event is triggered when the queue calls clean method. */ cleaned: (jobs: string[], type: string) => void; /** * Listen to 'error' event. * * This event is triggered when an error is thrown. */ error: (err: Error) => void; /** * Listen to 'paused' event. * * This event is triggered when the queue is paused. */ paused: () => void; /** * Listen to 'progress' event. * * This event is triggered when the job updates its progress. */ progress: (jobId: string, progress: JobProgress) => void; /** * Listen to 'removed' event. * * This event is triggered when a job is removed. */ removed: (jobId: string) => void; /** * Listen to 'resumed' event. * * This event is triggered when the queue is resumed. */ resumed: () => void; /** * Listen to 'waiting' event. * * This event is triggered when the queue creates a new job. */ waiting: (job: JobBase) => void; } /** * IsAny A type helper to determine if a given type `T` is `any`. * This works by using `any` type with the intersection * operator (`&`). If `T` is `any`, then `1 & T` resolves to `any`, and since `0` * is assignable to `any`, the conditional type returns `true`. */ type IsAny = 0 extends 1 & T ? true : false; type JobBase = IsAny extends true ? Job : T extends Job ? T : Job; type ExtractDataType = DataTypeOrJob extends Job ? D : Default; type ExtractResultType = DataTypeOrJob extends Job ? R : Default; type ExtractNameType = DataTypeOrJob extends Job ? N : Default; /** * Queue * * This class provides methods to add jobs to a queue and some other high-level * administration such as pausing or deleting queues. * * @typeParam DataType - The type of the data that the job will process. * @typeParam ResultType - The type of the result of the job. * @typeParam NameType - The type of the name of the job. * * @example * * ```typescript * import { Queue } from 'bullmq'; * * interface MyDataType { * foo: string; * } * * interface MyResultType { * bar: string; * } * * const queue = new Queue('myQueue'); * ``` */ export declare class Queue, ResultType = ExtractResultType, NameType extends string = ExtractNameType> extends QueueGetters> { token: string; jobsOpts: BaseJobOptions; opts: QueueOptions; protected libName: string; protected _repeat?: Repeat; protected _jobScheduler?: JobScheduler; constructor(name: string, opts?: QueueOptions, Connection?: typeof RedisConnection); emit>>(event: U, ...args: Parameters>[U]>): boolean; off>>(eventName: U, listener: QueueListener>[U]): this; on>>(event: U, listener: QueueListener>[U]): this; once>>(event: U, listener: QueueListener>[U]): this; /** * Returns this instance current default job options. */ get defaultJobOptions(): JobsOptions; get metaValues(): Record; /** * Get library version. * * @returns the content of the meta.library field. */ getVersion(): Promise; get repeat(): Promise; get jobScheduler(): Promise; /** * Enable and set global concurrency value. * @param concurrency - Maximum number of simultaneous jobs that the workers can handle. * For instance, setting this value to 1 ensures that no more than one job * is processed at any given time. If this limit is not defined, there will be no * restriction on the number of concurrent jobs. */ setGlobalConcurrency(concurrency: number): Promise; /** * Enable and set rate limit. * @param max - Max number of jobs to process in the time period specified in `duration` * @param duration - Time in milliseconds. During this time, a maximum of `max` jobs will be processed. */ setGlobalRateLimit(max: number, duration: number): Promise; /** * Remove global concurrency value. */ removeGlobalConcurrency(): Promise; /** * Remove global rate limit values. */ removeGlobalRateLimit(): Promise; /** * Adds a new job to the queue. * * @param name - Name of the job to be added to the queue. * @param data - Arbitrary data to append to the job. * @param opts - Job options that affects how the job is going to be processed. */ add(name: NameType, data: DataType, opts?: JobsOptions): Promise>; /** * addJob is a telemetry free version of the add method, useful in order to wrap it * with custom telemetry on subclasses. * * @param name - Name of the job to be added to the queue. * @param data - Arbitrary data to append to the job. * @param opts - Job options that affects how the job is going to be processed. * * @returns Job */ protected addJob(name: NameType, data: DataType, opts?: JobsOptions): Promise>; /** * Adds an array of jobs to the queue. This method may be faster than adding * one job at a time in a sequence. * * @param jobs - The array of jobs to add to the queue. Each job is defined by 3 * properties, 'name', 'data' and 'opts'. They follow the same signature as 'Queue.add'. */ addBulk(jobs: { name: NameType; data: DataType; opts?: BulkJobOptions; }[]): Promise[]>; /** * Upserts a scheduler. * * A scheduler is a job factory that creates jobs at a given interval. * Upserting a scheduler will create a new job scheduler or update an existing one. * It will also create the first job based on the repeat options and delayed accordingly. * * @param key - Unique key for the repeatable job meta. * @param repeatOpts - Repeat options * @param jobTemplate - Job template. If provided it will be used for all the jobs * created by the scheduler. * * @returns The next job to be scheduled (would normally be in delayed state). */ upsertJobScheduler(jobSchedulerId: NameType, repeatOpts: Omit, jobTemplate?: { name?: NameType; data?: DataType; opts?: JobSchedulerTemplateOptions; }): Promise>; /** * Pauses the processing of this queue globally. * * We use an atomic RENAME operation on the wait queue. Since * we have blocking calls with BRPOPLPUSH on the wait queue, as long as the queue * is renamed to 'paused', no new jobs will be processed (the current ones * will run until finalized). * * Adding jobs requires a LUA script to check first if the paused list exist * and in that case it will add it there instead of the wait list. */ pause(): Promise; /** * Close the queue instance. * */ close(): Promise; /** * Overrides the rate limit to be active for the next jobs. * * @param expireTimeMs - expire time in ms of this rate limit. */ rateLimit(expireTimeMs: number): Promise; /** * Resumes the processing of this queue globally. * * The method reverses the pause operation by resuming the processing of the * queue. */ resume(): Promise; /** * Returns true if the queue is currently paused. */ isPaused(): Promise; /** * Returns true if the queue is currently maxed. */ isMaxed(): Promise; /** * Get all repeatable meta jobs. * * @deprecated This method is deprecated and will be removed in v6. Use getJobSchedulers instead. * * @param start - Offset of first job to return. * @param end - Offset of last job to return. * @param asc - Determine the order in which jobs are returned based on their * next execution time. */ getRepeatableJobs(start?: number, end?: number, asc?: boolean): Promise; /** * Get Job Scheduler by id * * @param id - identifier of scheduler. */ getJobScheduler(id: string): Promise | undefined>; /** * Get all Job Schedulers * * @param start - Offset of first scheduler to return. * @param end - Offset of last scheduler to return. * @param asc - Determine the order in which schedulers are returned based on their * next execution time. */ getJobSchedulers(start?: number, end?: number, asc?: boolean): Promise[]>; /** * * Get the number of job schedulers. * * @returns The number of job schedulers. */ getJobSchedulersCount(): Promise; /** * Removes a repeatable job. * * Note: you need to use the exact same repeatOpts when deleting a repeatable job * than when adding it. * * @deprecated This method is deprecated and will be removed in v6. Use removeJobScheduler instead. * * @see removeRepeatableByKey * * @param name - Job name * @param repeatOpts - Repeat options * @param jobId - Job id to remove. If not provided, all jobs with the same repeatOpts * @returns */ removeRepeatable(name: NameType, repeatOpts: RepeatOptions, jobId?: string): Promise; /** * * Removes a job scheduler. * * @param jobSchedulerId - identifier of the job scheduler. * * @returns */ removeJobScheduler(jobSchedulerId: string): Promise; /** * Removes a debounce key. * @deprecated use removeDeduplicationKey * * @param id - debounce identifier */ removeDebounceKey(id: string): Promise; /** * Removes a deduplication key. * * @param id - identifier */ removeDeduplicationKey(id: string): Promise; /** * Removes rate limit key. */ removeRateLimitKey(): Promise; /** * Removes a repeatable job by its key. Note that the key is the one used * to store the repeatable job metadata and not one of the job iterations * themselves. You can use "getRepeatableJobs" in order to get the keys. * * @see getRepeatableJobs * * @deprecated This method is deprecated and will be removed in v6. Use removeJobScheduler instead. * * @param repeatJobKey - To the repeatable job. * @returns */ removeRepeatableByKey(key: string): Promise; /** * Removes the given job from the queue as well as all its * dependencies. * * @param jobId - The id of the job to remove * @param opts - Options to remove a job * @returns 1 if it managed to remove the job or 0 if the job or * any of its dependencies were locked. */ remove(jobId: string, { removeChildren }?: { removeChildren?: boolean; }): Promise; /** * Updates the given job's progress. * * @param jobId - The id of the job to update * @param progress - Number or object to be saved as progress. */ updateJobProgress(jobId: string, progress: JobProgress): Promise; /** * Logs one row of job's log data. * * @param jobId - The job id to log against. * @param logRow - String with log data to be logged. * @param keepLogs - Max number of log entries to keep (0 for unlimited). * * @returns The total number of log entries for this job so far. */ addJobLog(jobId: string, logRow: string, keepLogs?: number): Promise; /** * Drains the queue, i.e., removes all jobs that are waiting * or delayed, but not active, completed or failed. * * @param delayed - Pass true if it should also clean the * delayed jobs. */ drain(delayed?: boolean): Promise; /** * Cleans jobs from a queue. Similar to drain but keeps jobs within a certain * grace period. * * @param grace - The grace period in milliseconds * @param limit - Max number of jobs to clean * @param type - The type of job to clean * Possible values are completed, wait, active, paused, delayed, failed. Defaults to completed. * @returns Id jobs from the deleted records */ clean(grace: number, limit: number, type?: 'completed' | 'wait' | 'waiting' | 'active' | 'paused' | 'prioritized' | 'delayed' | 'failed'): Promise; /** * Completely destroys the queue and all of its contents irreversibly. * This method will *pause* the queue and requires that there are no * active jobs. It is possible to bypass this requirement, i.e. not * having active jobs using the "force" option. * * Note: This operation requires to iterate on all the jobs stored in the queue * and can be slow for very large queues. * * @param opts - Obliterate options. */ obliterate(opts?: ObliterateOpts): Promise; /** * Retry all the failed or completed jobs. * * @param opts - An object with the following properties: * - count number to limit how many jobs will be moved to wait status per iteration, * - state failed by default or completed. * - timestamp from which timestamp to start moving jobs to wait status, default Date.now(). * * @returns */ retryJobs(opts?: { count?: number; state?: FinishedStatus; timestamp?: number; }): Promise; /** * Promote all the delayed jobs. * * @param opts - An object with the following properties: * - count number to limit how many jobs will be moved to wait status per iteration * * @returns */ promoteJobs(opts?: { count?: number; }): Promise; /** * Trim the event stream to an approximately maxLength. * * @param maxLength - */ trimEvents(maxLength: number): Promise; /** * Delete old priority helper key. */ removeDeprecatedPriorityKey(): Promise; } export {};