power-queues
Version:
High-performance Redis Streams queue for Node.js with Lua-powered bulk XADD, idempotent workers, heartbeat locks, stuck-task recovery, retries, DLQ, and distributed processing.
106 lines (102 loc) • 3.49 kB
text/typescript
import { JsonPrimitiveOrUndefined, PowerRedis, IORedisLike } from 'power-redis';
type SavedScript = {
codeReady?: string;
codeBody: string;
};
type AddTasksOptions = {
nomkstream?: boolean;
maxlen?: number;
minidWindowMs?: number;
minidExact?: boolean;
approx?: boolean;
exact?: boolean;
trimLimit?: number;
id?: string;
status?: boolean;
statusTimeoutMs?: number;
idem?: boolean;
};
type Task = {
job: string;
id?: string;
createdAt?: number;
payload: any;
idemKey?: string;
} | {
job: string;
id?: string;
createdAt?: number;
flat: JsonPrimitiveOrUndefined[];
idemKey?: string;
};
declare class PowerQueues extends PowerRedis {
abort: AbortController;
redis: IORedisLike;
readonly scripts: Record<string, SavedScript>;
readonly addingBatchTasksCount: number;
readonly addingBatchKeysLimit: number;
readonly workerExecuteLockTimeoutMs: number;
readonly workerCacheTaskTimeoutMs: number;
readonly approveBatchTasksCount: number;
readonly removeOnExecuted: boolean;
readonly executeBatchAtOnce: boolean;
readonly executeJobStatus: boolean;
readonly executeJobStatusTtlMs: number;
readonly consumerHost: string;
readonly stream: string;
readonly group: string;
readonly workerBatchTasksCount: number;
readonly recoveryStuckTasksTimeoutMs: number;
readonly workerLoopIntervalMs: number;
readonly workerSelectionTimeoutMs: number;
readonly workerMaxRetries: number;
readonly workerClearAttemptsTimeoutMs: number;
onSelected(data: Array<[string, any[], number, string, string]>): Promise<[string, any[], number, string, string][]>;
onExecute(id: string, payload: any, createdAt: number, job: string, key: string, attempt: number): Promise<void>;
onReady(data: Array<[string, any[], number, string, string]>): Promise<void>;
onSuccess(id: string, payload: any, createdAt: number, job: string, key: string): Promise<void>;
onBatchError(err: any, tasks?: Array<[string, any[], number, string, string]>): Promise<void>;
onError(err: any, id: string, payload: any, createdAt: number, job: string, key: string): Promise<void>;
onRetry(err: any, id: string, payload: any, createdAt: number, job: string, key: string, attempts: number): Promise<void>;
runQueue(): Promise<void>;
consumerLoop(): Promise<void>;
addTasks(queueName: string, data: any[], opts?: AddTasksOptions): Promise<string[]>;
loadScripts(full?: boolean): Promise<void>;
private loadScript;
private saveScript;
private runScript;
private xaddBatch;
private payloadBatch;
private buildBatches;
private keysLength;
private attemptsKey;
private incrAttempts;
private getAttempts;
private clearAttempts;
private success;
private batchError;
private error;
private attempt;
private execute;
private executeProcess;
private approve;
private idempotency;
private idempotencyKeys;
private idempotencyAllow;
private idempotencyStart;
private idempotencyDone;
private idempotencyFree;
private createGroup;
private select;
private selectStuck;
private selectFresh;
private waitAbortable;
private sendHeartbeat;
private heartbeat;
private normalizeEntries;
private values;
private payload;
private signal;
private consumer;
}
export { type AddTasksOptions, PowerQueues, type Task };