UNPKG

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
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 };