wakaq
Version:
Background task queue for Node backed by Redis, a super minimal Celery
112 lines (111 loc) • 3.87 kB
TypeScript
/// <reference types="node" />
import { Callback, Redis, Result } from 'ioredis';
import { type ConnectionOptions } from 'tls';
import { Duration } from 'ts-duration';
import { type Logger } from 'winston';
import { CronTask } from './cronTask.js';
import { Level } from './logger.js';
import { WakaQueue } from './queue.js';
import { Task } from './task.js';
declare module 'ioredis' {
interface RedisCommander<Context> {
getetatasks(key: string, argv: string, callback?: Callback<string[]>): Result<string[], Context>;
}
}
export interface RegisterTaskParams {
name?: string;
queue?: WakaQueue | string;
maxRetries?: number;
softTimeout?: Duration;
hardTimeout?: Duration;
}
export interface WakaQParams {
queues?: WakaQueue[];
schedules?: CronTask[];
host?: string;
port?: number;
db?: number;
tls?: ConnectionOptions;
concurrency?: string | number;
excludeQueues?: string[];
maxRetries?: number;
softTimeout?: Duration | number;
hardTimeout?: Duration | number;
maxMemPercent?: number;
maxTasksPerWorker?: number;
connectTimeout?: number;
commandTimeout?: number;
keepAlive?: number;
noDelay?: boolean;
waitTimeout?: Duration | number;
username?: string;
password?: string;
workerLogFile?: string;
schedulerLogFile?: string;
singleProcess?: boolean;
workerLogLevel?: Level;
schedulerLogLevel?: Level;
afterWorkerStartedCallback?: () => Promise<void>;
beforeTaskStartedCallback?: (task: Task) => Promise<void>;
afterTaskFinishedCallback?: (task: Task) => Promise<void>;
}
export declare class WakaQ {
tasks: Map<string, Task>;
broker: Redis;
queues: WakaQueue[];
queuesByName: Map<string, WakaQueue>;
queuesByKey: Map<string, WakaQueue>;
softTimeout: Duration;
hardTimeout: Duration;
concurrency: number;
schedules: CronTask[];
excludeQueues: string[];
maxRetries: number;
connectTimeout: number;
commandTimeout: number;
keepAlive: number;
noDelay: boolean;
waitTimeout: Duration;
maxMemPercent: number;
maxTasksPerWorker: number;
workerLogFile?: string;
schedulerLogFile?: string;
singleProcess: boolean;
workerLogLevel: Level;
schedulerLogLevel: Level;
logger?: Logger;
private _pubsub?;
currentTask?: any;
brokerKeys: string[];
afterWorkerStartedCallback?: () => Promise<void>;
beforeTaskStartedCallback?: (task: Task) => Promise<void>;
afterTaskFinishedCallback?: (task: Task) => Promise<void>;
broadcastKey: string;
constructor(params?: WakaQParams);
connect(): Promise<this>;
disconnect(): void;
task(fn: (...arg0: unknown[]) => Promise<void>, params?: RegisterTaskParams): Task;
afterWorkerStarted(callback: () => Promise<void>): () => Promise<void>;
beforeTaskStarted(callback: (task: Task) => Promise<void>): (task: Task) => Promise<void>;
afterTaskFinished(callback: (task: Task) => Promise<void>): (task: Task) => Promise<void>;
private _validateQueueNames;
private _asDuration;
enqueueAtFront(taskName: string, args: any[], queue?: WakaQueue | string): Promise<void>;
enqueueWithEta(taskName: string, args: any[], eta: Date | Duration, queue?: WakaQueue | string): Promise<void>;
enqueueAtEnd(taskName: string, args: any[], queue?: WakaQueue | string, retry?: number): Promise<void>;
broadcast(taskName: string, args: any[]): Promise<number>;
sleep(duration: Duration): Promise<unknown>;
pubsub(): Promise<Redis>;
get defaultQueue(): WakaQueue;
blockingDequeue(): Promise<{
queueBrokerKey?: string;
payload?: {
name: string;
args: any[];
retry?: number;
};
}>;
private _queueOrDefault;
private _formatConcurrency;
private _parseConcurrency;
}