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