@voilajsx/appkit
Version:
Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development
143 lines • 4.97 kB
TypeScript
/**
* In-memory queue transport for development and testing
* @module @voilajsx/appkit/queue
* @file src/queue/transports/memory.ts
*
* @llm-rule WHEN: Development mode or when no Redis/Database available
* @llm-rule AVOID: Production use - jobs lost on restart, no persistence
* @llm-rule NOTE: Perfect for development and testing - fast, simple, no external dependencies
*/
import type { Transport } from '../queue.js';
import type { QueueConfig } from '../defaults.js';
import type { JobData, JobOptions, JobHandler, QueueStats, JobInfo, JobStatus } from '../index.js';
/**
* In-memory transport for development and testing
*/
export declare class MemoryTransport implements Transport {
private config;
private jobs;
private handlers;
private paused;
private processing;
private schedulerTimer;
private cleanupTimer;
private processingLoop;
/**
* Creates memory transport with direct config access (like logging pattern)
* @llm-rule WHEN: Auto-detected as fallback or explicitly configured for development
* @llm-rule AVOID: Manual memory transport creation - use queuing.get() instead
*/
constructor(config: QueueConfig);
/**
* Add job to memory queue
* @llm-rule WHEN: Adding jobs for background processing
* @llm-rule AVOID: Adding too many jobs - memory transport has limits
*/
add(id: string, jobType: string, data: JobData, options: JobOptions): Promise<void>;
/**
* Register job processor
* @llm-rule WHEN: Setting up job handlers for specific job types
* @llm-rule AVOID: Multiple handlers for same type - overwrites previous handler
*/
process<T = JobData>(jobType: string, handler: JobHandler<T>): void;
/**
* Schedule job for future execution
* @llm-rule WHEN: Need delayed job execution (reminders, scheduled tasks)
* @llm-rule AVOID: Very long delays - memory transport resets on restart
*/
schedule(id: string, jobType: string, data: JobData, delay: number): Promise<void>;
/**
* Pause queue processing
* @llm-rule WHEN: Maintenance mode or controlled processing stop
* @llm-rule AVOID: Pausing without resume - jobs accumulate in memory
*/
pause(jobType?: string): Promise<void>;
/**
* Resume queue processing
* @llm-rule WHEN: Resuming after maintenance pause
* @llm-rule AVOID: Resuming without checking system capacity
*/
resume(jobType?: string): Promise<void>;
/**
* Get queue statistics
* @llm-rule WHEN: Monitoring queue health and performance
* @llm-rule AVOID: Frequent polling - can be expensive with many jobs
*/
getStats(jobType?: string): Promise<QueueStats>;
/**
* Get jobs by status
* @llm-rule WHEN: Debugging failed jobs or monitoring specific job states
* @llm-rule AVOID: Getting all jobs frequently - can impact memory performance
*/
getJobs(status: JobStatus, jobType?: string): Promise<JobInfo[]>;
/**
* Retry failed job
* @llm-rule WHEN: Manual retry of failed jobs
* @llm-rule AVOID: Retrying jobs that will fail again without fixing root cause
*/
retry(jobId: string): Promise<void>;
/**
* Remove job from queue
* @llm-rule WHEN: Canceling scheduled jobs or cleanup
* @llm-rule AVOID: Removing active jobs - can cause inconsistent state
*/
remove(jobId: string): Promise<void>;
/**
* Clean old jobs by status
* @llm-rule WHEN: Periodic cleanup to prevent memory growth
* @llm-rule AVOID: Aggressive cleanup - keep some jobs for debugging
*/
clean(status: JobStatus, grace?: number): Promise<void>;
/**
* Get transport health status
* @llm-rule WHEN: Health checks and monitoring
* @llm-rule AVOID: Complex health logic - memory transport is simple
*/
getHealth(): {
status: 'healthy' | 'degraded' | 'unhealthy';
message?: string;
};
/**
* Close transport and cleanup resources
* @llm-rule WHEN: App shutdown or testing cleanup
* @llm-rule AVOID: Abrupt close - finish processing current jobs first
*/
close(): Promise<void>;
/**
* Start background processing loop
*/
private startProcessing;
/**
* Main job processing loop
*/
private processJobs;
/**
* Promote delayed jobs that are ready to run
*/
private promoteDelayedJobs;
/**
* Process waiting jobs up to concurrency limit
*/
private processWaitingJobs;
/**
* Process individual job
*/
private processJob;
/**
* Calculate retry delay with backoff
*/
private calculateRetryDelay;
/**
* Setup periodic cleanup
*/
private setupCleanup;
/**
* Perform automatic cleanup
*/
private performCleanup;
/**
* Convert MemoryJob to JobInfo
*/
private jobToInfo;
}
//# sourceMappingURL=memory.d.ts.map