UNPKG

nodejs-cloud-taskmq

Version:

Node.js TypeScript library for integrating Google Cloud Tasks with MongoDB/Redis/Memory/Custom for a BullMQ-like queue system. Compatible with NestJS but framework-agnostic.

122 lines (121 loc) 3.81 kB
import { CloudTaskMQConfig } from './interfaces/config.interface'; import { IStateStorageAdapter } from './interfaces/storage-adapter.interface'; import { ProducerService } from './services/producer.service'; import { ConsumerService } from './services/consumer.service'; import { RateLimiterService } from './services/rate-limiter.service'; import { EventEmitter } from 'events'; /** * Main CloudTaskMQ class */ export declare class CloudTaskMQ extends EventEmitter { private readonly config; private storageAdapter; private producerService; private consumerService; private rateLimiterService; private initialized; constructor(config: CloudTaskMQConfig); /** * Initialize CloudTaskMQ */ initialize(): Promise<void>; /** * Get producer service */ getProducer(): ProducerService; /** * Get consumer service */ getConsumer(): ConsumerService; /** * Get rate limiter service */ getRateLimiter(): RateLimiterService; /** * Get storage adapter */ getStorageAdapter(): IStateStorageAdapter; /** * Register a processor */ registerProcessor(processor: any): void; /** * Process a task (called by HTTP endpoints) */ processTask(payload: { taskId: string; queueName: string; data: any; attempts: number; maxAttempts: number; chain?: { id: string; index: number; total: number; }; uniquenessKey?: string; }): Promise<any>; /** * Add a task to a queue */ addTask<T = any>(queueName: string, data: T, options?: import('./interfaces/task.interface').AddTaskOptions): Promise<import('./interfaces/task.interface').AddTaskResult>; /** * Add a chain of tasks */ addChain<T = any>(queueName: string, tasks: Array<{ data: T; options?: import('./interfaces/task.interface').AddTaskOptions; }>, chainOptions?: { id?: string; waitForPrevious?: boolean; }): Promise<import('./interfaces/task.interface').AddTaskResult[]>; /** * Get task by ID */ getTask(taskId: string): Promise<import('./interfaces/storage-adapter.interface').ITask | null>; /** * Get tasks with filtering options */ getTasks(options?: import('./interfaces/storage-adapter.interface').TaskQueryOptions): Promise<import('./interfaces/storage-adapter.interface').ITask[]>; /** * Get task count */ getTaskCount(options?: import('./interfaces/storage-adapter.interface').TaskQueryOptions): Promise<number>; /** * Update task progress */ updateTaskProgress(taskId: string, progress: import('./interfaces/task.interface').TaskProgress): Promise<void>; /** * Clean up old tasks */ cleanup(options?: { olderThan?: Date; statuses?: import('./interfaces/storage-adapter.interface').TaskStatus[]; removeCompleted?: boolean; removeFailed?: boolean; }): Promise<number>; /** * Check rate limit */ checkRateLimit(key: string, options: import('./interfaces/config.interface').RateLimiterOptions): Promise<import('./services/rate-limiter.service').RateLimitResult>; /** * Get configuration */ getConfig(): CloudTaskMQConfig; /** * Check if initialized */ isInitialized(): boolean; /** * Close CloudTaskMQ and clean up resources */ close(): Promise<void>; /** * Create storage adapter based on configuration */ private createStorageAdapter; /** * Create CloudTaskMQ instance with async configuration */ static create(configFactory: () => Promise<CloudTaskMQConfig> | CloudTaskMQConfig): Promise<CloudTaskMQ>; }