UNPKG

@voilajsx/appkit

Version:

Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development

124 lines 4.8 kB
/** * Ultra-simple job queuing that just works with automatic transport detection * @module @voilajsx/appkit/queue * @file src/queue/index.ts * * @llm-rule WHEN: Building apps that need background job processing * @llm-rule AVOID: Complex queue setups with multiple libraries - this handles everything automatically * @llm-rule NOTE: Uses queueClass.get() pattern like other modules - get() → queue.add() → queue.process() → done * @llm-rule NOTE: Auto-detects transports: Memory (dev) → Redis (REDIS_URL) → Database (DATABASE_URL) * @llm-rule NOTE: Common pattern - queueClass.get() → queue.add() → queue.process() → automatic retry + dead letter queue */ import { type QueueConfig } from './defaults.js'; export interface JobData { [key: string]: any; } export interface JobOptions { priority?: number; delay?: number; attempts?: number; backoff?: 'fixed' | 'exponential'; removeOnComplete?: number; removeOnFail?: number; } export interface JobHandler<T = JobData> { (data: T): Promise<any> | any; } export interface Queue { add<T = JobData>(jobType: string, data: T, options?: JobOptions): Promise<string>; process<T = JobData>(jobType: string, handler: JobHandler<T>): void; schedule<T = JobData>(jobType: string, data: T, delay: number): Promise<string>; pause(jobType?: string): Promise<void>; resume(jobType?: string): Promise<void>; getStats(jobType?: string): Promise<QueueStats>; getJobs(status: JobStatus, jobType?: string): Promise<JobInfo[]>; retry(jobId: string): Promise<void>; remove(jobId: string): Promise<void>; clean(status: JobStatus, grace?: number): Promise<void>; close(): Promise<void>; } export interface QueueStats { waiting: number; active: number; completed: number; failed: number; delayed: number; paused: number; } export interface JobInfo { id: string; type: string; data: JobData; status: JobStatus; progress?: number; attempts: number; maxAttempts: number; error?: any; createdAt: Date; processedAt?: Date; completedAt?: Date; failedAt?: Date; } export type JobStatus = 'waiting' | 'active' | 'completed' | 'failed' | 'delayed' | 'paused'; /** * Get queuing instance - the only function you need to learn * Transport auto-detection: Memory → Redis → Database based on environment * @llm-rule WHEN: Starting any background job operation - this is your main entry point * @llm-rule AVOID: Creating QueueClass directly - always use this function * @llm-rule NOTE: Typical flow - get() → queue.add() → queue.process() → automatic handling */ declare function get(overrides?: Partial<QueueConfig>): Queue; /** * Reset global instance (useful for testing or config changes) * @llm-rule WHEN: Testing queuing logic with different configurations * @llm-rule AVOID: Using in production - only for tests and development */ declare function reset(newConfig?: Partial<QueueConfig>): Queue; /** * Get active transport type for debugging * @llm-rule WHEN: Need to see which transport is running (memory, redis, database) * @llm-rule AVOID: Using for business logic - this is for debugging only */ declare function getActiveTransport(): string; /** * Check if specific transport is active * @llm-rule WHEN: Conditionally handling jobs based on transport capability * @llm-rule AVOID: Complex transport detection - just add jobs normally, transports auto-handle */ declare function hasTransport(name: string): boolean; /** * Get current configuration for debugging * @llm-rule WHEN: Debugging queuing setup or checking environment detection * @llm-rule AVOID: Using for runtime decisions - configuration is set at startup */ declare function getConfig(): QueueConfig | null; /** * Clear all queues and close transports - essential for testing * @llm-rule WHEN: Testing queuing logic or app shutdown * @llm-rule AVOID: Using in production without graceful shutdown */ declare function clear(): Promise<void>; /** * Get health status of queuing system * @llm-rule WHEN: Health checks or monitoring dashboard * @llm-rule AVOID: Frequent polling - expensive operation for some transports */ declare function getHealth(): { status: 'healthy' | 'degraded' | 'unhealthy'; transport: string; message?: string; }; /** * Single queuing export with minimal functionality (like auth module) */ export declare const queueClass: { readonly get: typeof get; readonly reset: typeof reset; readonly clear: typeof clear; readonly getActiveTransport: typeof getActiveTransport; readonly hasTransport: typeof hasTransport; readonly getConfig: typeof getConfig; readonly getHealth: typeof getHealth; }; export {}; //# sourceMappingURL=index.d.ts.map