@igniter-js/jobs 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/errors/igniter-jobs.error.ts","../../src/adapters/bullmq.adapter.ts","../../src/adapters/memory.adapter.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @fileoverview Error class and error codes for @igniter-js/jobs\n * @module @igniter-js/jobs/errors\n */\n\nimport { IgniterError, type IgniterLogger } from '@igniter-js/core'\n\n/**\n * All possible error codes for IgniterJobs.\n * Use these codes for programmatic error handling.\n *\n * @example\n * ```typescript\n * try {\n * await jobs.email.sendWelcome.dispatch(input)\n * } catch (error) {\n * if (error instanceof IgniterJobsError) {\n * switch (error.code) {\n * case 'JOBS_ADAPTER_REQUIRED':\n * // Handle missing adapter\n * break\n * case 'JOBS_DISPATCH_FAILED':\n * // Handle dispatch failure\n * break\n * }\n * }\n * }\n * ```\n */\nexport const IGNITER_JOBS_ERROR_CODES = {\n // Configuration errors\n JOBS_ADAPTER_REQUIRED: 'JOBS_ADAPTER_REQUIRED',\n JOBS_CONTEXT_REQUIRED: 'JOBS_CONTEXT_REQUIRED',\n JOBS_QUEUE_REQUIRED: 'JOBS_QUEUE_REQUIRED',\n JOBS_CONFIGURATION_INVALID: 'JOBS_CONFIGURATION_INVALID',\n\n // Queue errors\n JOBS_QUEUE_NOT_FOUND: 'JOBS_QUEUE_NOT_FOUND',\n JOBS_QUEUE_ALREADY_EXISTS: 'JOBS_QUEUE_ALREADY_EXISTS',\n JOBS_QUEUE_NAME_INVALID: 'JOBS_QUEUE_NAME_INVALID',\n JOBS_QUEUE_PAUSE_FAILED: 'JOBS_QUEUE_PAUSE_FAILED',\n JOBS_QUEUE_RESUME_FAILED: 'JOBS_QUEUE_RESUME_FAILED',\n JOBS_QUEUE_DRAIN_FAILED: 'JOBS_QUEUE_DRAIN_FAILED',\n JOBS_QUEUE_CLEAN_FAILED: 'JOBS_QUEUE_CLEAN_FAILED',\n JOBS_QUEUE_OBLITERATE_FAILED: 'JOBS_QUEUE_OBLITERATE_FAILED',\n\n // Job definition errors\n JOBS_JOB_NOT_FOUND: 'JOBS_JOB_NOT_FOUND',\n JOBS_JOB_ALREADY_EXISTS: 'JOBS_JOB_ALREADY_EXISTS',\n JOBS_JOB_NAME_INVALID: 'JOBS_JOB_NAME_INVALID',\n JOBS_JOB_HANDLER_REQUIRED: 'JOBS_JOB_HANDLER_REQUIRED',\n\n // Cron errors\n JOBS_CRON_NOT_FOUND: 'JOBS_CRON_NOT_FOUND',\n JOBS_CRON_ALREADY_EXISTS: 'JOBS_CRON_ALREADY_EXISTS',\n JOBS_CRON_EXPRESSION_INVALID: 'JOBS_CRON_EXPRESSION_INVALID',\n JOBS_CRON_HANDLER_REQUIRED: 'JOBS_CRON_HANDLER_REQUIRED',\n\n // Dispatch errors\n JOBS_DISPATCH_FAILED: 'JOBS_DISPATCH_FAILED',\n JOBS_SCHEDULE_FAILED: 'JOBS_SCHEDULE_FAILED',\n JOBS_INPUT_REQUIRED: 'JOBS_INPUT_REQUIRED',\n JOBS_INPUT_VALIDATION_FAILED: 'JOBS_INPUT_VALIDATION_FAILED',\n\n // Scope errors\n JOBS_SCOPE_REQUIRED: 'JOBS_SCOPE_REQUIRED',\n JOBS_SCOPE_ALREADY_DEFINED: 'JOBS_SCOPE_ALREADY_DEFINED',\n JOBS_SCOPE_INVALID: 'JOBS_SCOPE_INVALID',\n\n // Actor errors\n JOBS_ACTOR_ALREADY_DEFINED: 'JOBS_ACTOR_ALREADY_DEFINED',\n JOBS_ACTOR_INVALID: 'JOBS_ACTOR_INVALID',\n\n // Job management errors\n JOBS_GET_FAILED: 'JOBS_GET_FAILED',\n JOBS_RETRY_FAILED: 'JOBS_RETRY_FAILED',\n JOBS_REMOVE_FAILED: 'JOBS_REMOVE_FAILED',\n JOBS_PROMOTE_FAILED: 'JOBS_PROMOTE_FAILED',\n JOBS_MOVE_FAILED: 'JOBS_MOVE_FAILED',\n JOBS_STATE_FAILED: 'JOBS_STATE_FAILED',\n JOBS_PROGRESS_FAILED: 'JOBS_PROGRESS_FAILED',\n JOBS_LOGS_FAILED: 'JOBS_LOGS_FAILED',\n\n // Worker errors\n JOBS_WORKER_CREATE_FAILED: 'JOBS_WORKER_CREATE_FAILED',\n JOBS_WORKER_START_FAILED: 'JOBS_WORKER_START_FAILED',\n JOBS_WORKER_STOP_FAILED: 'JOBS_WORKER_STOP_FAILED',\n JOBS_WORKER_NOT_FOUND: 'JOBS_WORKER_NOT_FOUND',\n JOBS_WORKER_ALREADY_RUNNING: 'JOBS_WORKER_ALREADY_RUNNING',\n\n // Event/Subscribe errors\n JOBS_SUBSCRIBE_FAILED: 'JOBS_SUBSCRIBE_FAILED',\n JOBS_UNSUBSCRIBE_FAILED: 'JOBS_UNSUBSCRIBE_FAILED',\n JOBS_EVENT_EMIT_FAILED: 'JOBS_EVENT_EMIT_FAILED',\n\n // Search errors\n JOBS_SEARCH_FAILED: 'JOBS_SEARCH_FAILED',\n JOBS_SEARCH_INVALID_TARGET: 'JOBS_SEARCH_INVALID_TARGET',\n\n // Shutdown errors\n JOBS_SHUTDOWN_FAILED: 'JOBS_SHUTDOWN_FAILED',\n\n // Handler errors\n JOBS_HANDLER_FAILED: 'JOBS_HANDLER_FAILED',\n JOBS_HANDLER_TIMEOUT: 'JOBS_HANDLER_TIMEOUT',\n} as const\n\n/**\n * Type for all possible error codes.\n */\nexport type IgniterJobsErrorCode = keyof typeof IGNITER_JOBS_ERROR_CODES\n\n/**\n * Options for creating an IgniterJobsError.\n */\nexport interface IgniterJobsErrorOptions {\n /**\n * Error code from IGNITER_JOBS_ERROR_CODES.\n */\n code: IgniterJobsErrorCode\n\n /**\n * Human-readable error message.\n */\n message: string\n\n /**\n * HTTP status code (for REST API responses).\n * @default 500\n */\n statusCode?: number\n\n /**\n * Original error that caused this error.\n */\n cause?: Error\n\n /**\n * Additional details for debugging.\n */\n details?: Record<string, unknown>\n\n /**\n * Logger instance for logging the error.\n */\n logger?: IgniterLogger\n}\n\n/**\n * Custom error class for @igniter-js/jobs.\n * Extends IgniterError for consistent error handling across the Igniter ecosystem.\n *\n * @example\n * ```typescript\n * throw new IgniterJobsError({\n * code: 'JOBS_DISPATCH_FAILED',\n * message: 'Failed to dispatch job to queue',\n * statusCode: 500,\n * details: { queue: 'email', job: 'sendWelcome' },\n * })\n * ```\n */\nexport class IgniterJobsError extends IgniterError {\n /**\n * Error code for programmatic handling.\n */\n public readonly code: IgniterJobsErrorCode\n\n /**\n * Additional error details.\n */\n public readonly details?: Record<string, unknown>\n\n constructor(options: IgniterJobsErrorOptions) {\n super({\n code: options.code,\n message: options.message,\n statusCode: options.statusCode ?? 500,\n causer: '@igniter-js/jobs',\n cause: options.cause,\n details: options.details,\n logger: options.logger,\n })\n\n this.code = options.code\n this.details = options.details\n this.name = 'IgniterJobsError'\n\n // Maintain proper stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, IgniterJobsError)\n }\n }\n\n /**\n * Convert error to a plain object for serialization.\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n statusCode: this.statusCode,\n details: this.details,\n stack: this.stack,\n }\n }\n}\n","/**\n * @fileoverview BullMQ adapter for @igniter-js/jobs\n * @module @igniter-js/jobs/adapters/bullmq\n *\n * @description\n * Provides BullMQ-based implementation of the IgniterJobsAdapter interface.\n * Requires Redis connection via ioredis.\n *\n * @example\n * ```typescript\n * import { BullMQAdapter } from '@igniter-js/jobs/adapters'\n * import Redis from 'ioredis'\n *\n * const redis = new Redis()\n * const adapter = BullMQAdapter.create({ redis })\n *\n * const jobs = IgniterJobs.create<AppContext>()\n * .withAdapter(adapter)\n * .build()\n * ```\n */\n\nimport type { Redis } from 'ioredis'\nimport type {\n Queue,\n Worker,\n Job,\n QueueEvents,\n JobsOptions,\n WorkerOptions,\n} from 'bullmq'\nimport type {\n IgniterJobsAdapter,\n AdapterDispatchParams,\n AdapterScheduleParams,\n AdapterWorkerConfig,\n AdapterWorkerHandle,\n AdapterJobHandler,\n IgniterJobInfo,\n IgniterJobStatus,\n IgniterJobCounts,\n IgniterJobLog,\n IgniterQueueInfo,\n IgniterQueueCleanOptions,\n IgniterJobSearchResult,\n IgniterJobEventHandler,\n IgniterJobUnsubscribeFn,\n} from '../types'\nimport { IgniterJobsError } from '../errors'\n\n/**\n * BullMQ adapter options.\n */\nexport interface BullMQAdapterOptions {\n /**\n * Redis connection (ioredis instance).\n */\n redis: Redis\n}\n\n/**\n * BullMQ implementation of IgniterJobsAdapter.\n */\nexport class BullMQAdapter implements IgniterJobsAdapter {\n private readonly redis: Redis\n private readonly queues: Map<string, Queue> = new Map()\n private readonly workers: Map<string, Worker> = new Map()\n private readonly queueEvents: Map<string, QueueEvents> = new Map()\n private BullMQ: typeof import('bullmq') | null = null\n\n private constructor(options: BullMQAdapterOptions) {\n this.redis = options.redis\n }\n\n /**\n * Create a new BullMQ adapter.\n *\n * @param options - Adapter options with Redis connection\n * @returns A new BullMQAdapter instance\n */\n static create(options: BullMQAdapterOptions): BullMQAdapter {\n return new BullMQAdapter(options)\n }\n\n /**\n * Get the underlying Redis client.\n */\n get client(): Redis {\n return this.redis\n }\n\n /**\n * Lazily load BullMQ module.\n */\n private async getBullMQ(): Promise<typeof import('bullmq')> {\n if (!this.BullMQ) {\n this.BullMQ = await import('bullmq')\n }\n return this.BullMQ\n }\n\n /**\n * Get or create a queue instance.\n */\n private async getOrCreateQueue(name: string): Promise<Queue> {\n if (!this.queues.has(name)) {\n const { Queue } = await this.getBullMQ()\n const queue = new Queue(name, {\n connection: this.redis,\n })\n this.queues.set(name, queue)\n }\n return this.queues.get(name)!\n }\n\n /**\n * Get or create queue events instance.\n */\n private async getQueueEvents(name: string): Promise<QueueEvents> {\n if (!this.queueEvents.has(name)) {\n const { QueueEvents } = await this.getBullMQ()\n const events = new QueueEvents(name, {\n connection: this.redis,\n })\n this.queueEvents.set(name, events)\n }\n return this.queueEvents.get(name)!\n }\n\n /**\n * Convert BullMQ job state to IgniterJobStatus.\n */\n private mapJobState(state: string): IgniterJobStatus {\n const stateMap: Record<string, IgniterJobStatus> = {\n waiting: 'waiting',\n active: 'active',\n completed: 'completed',\n failed: 'failed',\n delayed: 'delayed',\n paused: 'paused',\n 'waiting-children': 'waiting',\n }\n return stateMap[state] || 'waiting'\n }\n\n /**\n * Convert BullMQ job to IgniterJobInfo.\n */\n private async mapJobToInfo(job: Job): Promise<IgniterJobInfo> {\n const data = job.data as Record<string, unknown>\n const state = await job.getState()\n\n return {\n id: job.id!,\n name: job.name,\n queue: job.queueName,\n state: this.mapJobState(state || 'waiting'),\n data: data.input ?? data,\n result: job.returnvalue,\n error: job.failedReason,\n progress: typeof job.progress === 'number' ? job.progress : 0,\n attempts: job.attemptsMade,\n timestamp: job.timestamp,\n processedOn: job.processedOn,\n finishedOn: job.finishedOn,\n delay: job.delay,\n priority: job.opts?.priority,\n scope: data.scope as any,\n actor: data.actor as any,\n metadata: data.metadata as any,\n }\n }\n\n // ==========================================\n // JOB OPERATIONS\n // ==========================================\n\n async dispatch(params: AdapterDispatchParams): Promise<string> {\n const queue = await this.getOrCreateQueue(params.queue)\n\n const jobOptions: JobsOptions = {\n jobId: params.jobId,\n delay: params.delay,\n priority: params.priority,\n attempts: params.attempts ?? 3,\n backoff: params.backoff ? {\n type: params.backoff.type === 'custom' ? 'fixed' : params.backoff.type,\n delay: params.backoff.type === 'custom'\n ? params.backoff.delays[0]\n : params.backoff.delay,\n } : undefined,\n removeOnComplete: params.removeOnComplete,\n removeOnFail: params.removeOnFail,\n }\n\n const jobData = {\n input: params.data,\n scope: params.scope,\n actor: params.actor,\n }\n\n const job = await queue.add(params.name, jobData, jobOptions)\n return job.id!\n }\n\n async schedule(params: AdapterScheduleParams): Promise<string> {\n const queue = await this.getOrCreateQueue(params.queue)\n\n const jobOptions: JobsOptions = {\n jobId: params.jobId,\n delay: params.at ? params.at.getTime() - Date.now() : params.delay,\n priority: params.priority,\n attempts: params.attempts ?? 3,\n backoff: params.backoff ? {\n type: params.backoff.type === 'custom' ? 'fixed' : params.backoff.type,\n delay: params.backoff.type === 'custom'\n ? params.backoff.delays[0]\n : params.backoff.delay,\n } : undefined,\n removeOnComplete: params.removeOnComplete,\n removeOnFail: params.removeOnFail,\n repeat: params.cron ? {\n pattern: params.cron,\n tz: params.timezone,\n } : params.every ? {\n every: params.every,\n } : undefined,\n }\n\n const jobData = {\n input: params.data,\n scope: params.scope,\n actor: params.actor,\n }\n\n const job = await queue.add(params.name, jobData, jobOptions)\n return job.id!\n }\n\n async getJob(queue: string, jobId: string): Promise<IgniterJobInfo | null> {\n const q = await this.getOrCreateQueue(queue)\n const job = await q.getJob(jobId)\n\n if (!job) return null\n return await this.mapJobToInfo(job)\n }\n\n async getJobState(queue: string, jobId: string): Promise<IgniterJobStatus | null> {\n const q = await this.getOrCreateQueue(queue)\n const job = await q.getJob(jobId)\n\n if (!job) return null\n const state = await job.getState()\n return this.mapJobState(state)\n }\n\n async getJobProgress(queue: string, jobId: string): Promise<number> {\n const q = await this.getOrCreateQueue(queue)\n const job = await q.getJob(jobId)\n\n if (!job) return 0\n return typeof job.progress === 'number' ? job.progress : 0\n }\n\n async getJobLogs(queue: string, jobId: string): Promise<IgniterJobLog[]> {\n const q = await this.getOrCreateQueue(queue)\n const job = await q.getJob(jobId)\n\n if (!job) return []\n\n const { logs } = await q.getJobLogs(jobId)\n return logs.map((log, index) => ({\n timestamp: new Date(),\n message: log,\n level: 'info' as const,\n }))\n }\n\n async retryJob(queue: string, jobId: string): Promise<void> {\n const q = await this.getOrCreateQueue(queue)\n const job = await q.getJob(jobId)\n\n if (!job) {\n throw new IgniterJobsError({\n code: 'JOBS_JOB_NOT_FOUND',\n message: `Job \"${jobId}\" not found in queue \"${queue}\"`,\n statusCode: 404,\n })\n }\n\n await job.retry()\n }\n\n async removeJob(queue: string, jobId: string): Promise<void> {\n const q = await this.getOrCreateQueue(queue)\n const job = await q.getJob(jobId)\n\n if (!job) return\n await job.remove()\n }\n\n async promoteJob(queue: string, jobId: string): Promise<void> {\n const q = await this.getOrCreateQueue(queue)\n const job = await q.getJob(jobId)\n\n if (!job) {\n throw new IgniterJobsError({\n code: 'JOBS_JOB_NOT_FOUND',\n message: `Job \"${jobId}\" not found in queue \"${queue}\"`,\n statusCode: 404,\n })\n }\n\n await job.promote()\n }\n\n async moveJob(\n queue: string,\n jobId: string,\n state: 'failed' | 'completed',\n reason?: string\n ): Promise<void> {\n const q = await this.getOrCreateQueue(queue)\n const job = await q.getJob(jobId)\n\n if (!job) {\n throw new IgniterJobsError({\n code: 'JOBS_JOB_NOT_FOUND',\n message: `Job \"${jobId}\" not found in queue \"${queue}\"`,\n statusCode: 404,\n })\n }\n\n if (state === 'failed') {\n await job.moveToFailed(new Error(reason || 'Manually moved to failed'), 'manual')\n } else {\n await job.moveToCompleted(reason || 'Manually completed', 'manual')\n }\n }\n\n async retryJobs(queue: string, jobIds: string[]): Promise<void> {\n const q = await this.getOrCreateQueue(queue)\n\n await Promise.all(\n jobIds.map(async (jobId) => {\n const job = await q.getJob(jobId)\n if (job) await job.retry()\n })\n )\n }\n\n async removeJobs(queue: string, jobIds: string[]): Promise<void> {\n const q = await this.getOrCreateQueue(queue)\n\n await Promise.all(\n jobIds.map(async (jobId) => {\n const job = await q.getJob(jobId)\n if (job) await job.remove()\n })\n )\n }\n\n // ==========================================\n // QUEUE OPERATIONS\n // ==========================================\n\n async getQueue(queue: string): Promise<IgniterQueueInfo> {\n const q = await this.getOrCreateQueue(queue)\n const isPaused = await q.isPaused()\n const counts = await q.getJobCounts()\n\n return {\n name: queue,\n isPaused,\n jobCounts: {\n waiting: counts.waiting || 0,\n active: counts.active || 0,\n completed: counts.completed || 0,\n failed: counts.failed || 0,\n delayed: counts.delayed || 0,\n paused: counts.paused || 0,\n },\n }\n }\n\n async pauseQueue(queue: string): Promise<void> {\n const q = await this.getOrCreateQueue(queue)\n await q.pause()\n }\n\n async resumeQueue(queue: string): Promise<void> {\n const q = await this.getOrCreateQueue(queue)\n await q.resume()\n }\n\n async drainQueue(queue: string): Promise<number> {\n const q = await this.getOrCreateQueue(queue)\n await q.drain()\n return 0 // BullMQ drain doesn't return count\n }\n\n async cleanQueue(queue: string, options: IgniterQueueCleanOptions): Promise<number> {\n const q = await this.getOrCreateQueue(queue)\n const statuses = Array.isArray(options.status) ? options.status : [options.status]\n\n let total = 0\n for (const status of statuses) {\n const cleaned = await q.clean(\n options.olderThan ?? 0,\n options.limit ?? 1000,\n status as any\n )\n total += cleaned.length\n }\n\n return total\n }\n\n async obliterateQueue(queue: string, options?: { force?: boolean }): Promise<void> {\n const q = await this.getOrCreateQueue(queue)\n await q.obliterate({ force: options?.force })\n }\n\n async retryAllFailed(queue: string): Promise<number> {\n const q = await this.getOrCreateQueue(queue)\n const failed = await q.getFailed()\n\n await Promise.all(failed.map((job) => job.retry()))\n return failed.length\n }\n\n async getJobCounts(queue: string): Promise<IgniterJobCounts> {\n const q = await this.getOrCreateQueue(queue)\n const counts = await q.getJobCounts()\n\n return {\n waiting: counts.waiting || 0,\n active: counts.active || 0,\n completed: counts.completed || 0,\n failed: counts.failed || 0,\n delayed: counts.delayed || 0,\n paused: counts.paused || 0,\n }\n }\n\n async listJobs(\n queue: string,\n options?: { status?: IgniterJobStatus[]; start?: number; end?: number }\n ): Promise<IgniterJobSearchResult[]> {\n const q = await this.getOrCreateQueue(queue)\n const statuses = options?.status || ['waiting', 'active', 'completed', 'failed', 'delayed']\n\n const jobs: Job[] = []\n\n for (const status of statuses) {\n const statusJobs = await q.getJobs([status], options?.start, options?.end)\n jobs.push(...statusJobs)\n }\n\n return Promise.all(jobs.map(async (job) => {\n const data = job.data as Record<string, unknown>\n const state = await job.getState()\n return {\n id: job.id!,\n name: job.name,\n queue: job.queueName,\n state: this.mapJobState(state || 'waiting'),\n data: data.input ?? data,\n result: job.returnvalue,\n error: job.failedReason,\n progress: typeof job.progress === 'number' ? job.progress : 0,\n attempts: job.attemptsMade,\n timestamp: job.timestamp,\n processedOn: job.processedOn,\n finishedOn: job.finishedOn,\n scope: data.scope as any,\n actor: data.actor as any,\n }\n }))\n }\n\n // ==========================================\n // PAUSE/RESUME JOB TYPES\n // ==========================================\n\n async pauseJobType(queue: string, jobName: string): Promise<void> {\n // BullMQ doesn't support pausing specific job types\n // This would require custom implementation using a \"paused jobs\" set\n this.config?.logger?.warn?.(`pauseJobType is not fully supported in BullMQ adapter`)\n }\n\n async resumeJobType(queue: string, jobName: string): Promise<void> {\n // BullMQ doesn't support resuming specific job types\n this.config?.logger?.warn?.(`resumeJobType is not fully supported in BullMQ adapter`)\n }\n\n private config?: { logger?: { warn?: (msg: string) => void } }\n\n // ==========================================\n // EVENTS\n // ==========================================\n\n async subscribe(\n pattern: string,\n handler: IgniterJobEventHandler\n ): Promise<IgniterJobUnsubscribeFn> {\n // For simplicity, subscribe to all queue events\n // In production, you'd want more sophisticated pattern matching\n const subscriptions: Array<() => Promise<void>> = []\n\n for (const [queueName] of this.queues) {\n const events = await this.getQueueEvents(queueName)\n\n const completedHandler = async (args: any) => {\n if (this.matchesPattern(pattern, `${queueName}:${args.jobId}:completed`)) {\n await handler({\n type: 'completed',\n data: args,\n timestamp: new Date().toISOString(),\n })\n }\n }\n\n const failedHandler = async (args: any) => {\n if (this.matchesPattern(pattern, `${queueName}:${args.jobId}:failed`)) {\n await handler({\n type: 'failed',\n data: args,\n timestamp: new Date().toISOString(),\n })\n }\n }\n\n events.on('completed', completedHandler)\n events.on('failed', failedHandler)\n\n subscriptions.push(async () => {\n events.off('completed', completedHandler)\n events.off('failed', failedHandler)\n })\n }\n\n return async () => {\n await Promise.all(subscriptions.map((unsub) => unsub()))\n }\n }\n\n private matchesPattern(pattern: string, eventType: string): boolean {\n if (pattern === '*') return true\n\n const regex = new RegExp(\n '^' + pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.') + '$'\n )\n return regex.test(eventType)\n }\n\n // ==========================================\n // WORKERS\n // ==========================================\n\n async createWorker(\n config: AdapterWorkerConfig,\n handler: AdapterJobHandler\n ): Promise<AdapterWorkerHandle> {\n const { Worker } = await this.getBullMQ()\n\n const workerId = `worker-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n const workers: Worker[] = []\n\n for (const queueName of config.queues) {\n const workerOptions: WorkerOptions = {\n connection: this.redis,\n concurrency: config.concurrency,\n lockDuration: config.lockDuration,\n limiter: config.limiter,\n }\n\n const worker = new Worker(\n queueName,\n async (job) => {\n const data = job.data as Record<string, unknown>\n\n return handler({\n id: job.id!,\n name: job.name,\n queue: job.queueName,\n data: data.input ?? data,\n attempt: job.attemptsMade + 1,\n timestamp: job.timestamp,\n scope: data.scope as any,\n actor: data.actor as any,\n log: async (level, message) => {\n await job.log(`[${level.toUpperCase()}] ${message}`)\n },\n updateProgress: async (progress) => {\n await job.updateProgress(progress)\n },\n })\n },\n workerOptions\n )\n\n if (config.onIdle) {\n worker.on('drained', config.onIdle)\n }\n\n workers.push(worker)\n this.workers.set(`${workerId}-${queueName}`, worker)\n }\n\n let isPaused = false\n const startTime = Date.now()\n let processed = 0\n let failed = 0\n let completed = 0\n\n // Track metrics\n for (const worker of workers) {\n worker.on('completed', () => {\n processed++\n completed++\n })\n worker.on('failed', () => {\n processed++\n failed++\n })\n }\n\n return {\n id: workerId,\n\n pause: async () => {\n await Promise.all(workers.map((w) => w.pause()))\n isPaused = true\n },\n\n resume: async () => {\n await Promise.all(workers.map((w) => w.resume()))\n isPaused = false\n },\n\n close: async () => {\n await Promise.all(workers.map((w) => w.close()))\n for (const worker of workers) {\n const key = Array.from(this.workers.entries()).find(\n ([_, w]) => w === worker\n )?.[0]\n if (key) this.workers.delete(key)\n }\n },\n\n isRunning: () => !isPaused && workers.every((w) => w.isRunning()),\n\n isPaused: () => isPaused,\n\n getMetrics: async () => ({\n processed,\n failed,\n completed,\n active: workers.reduce((sum, w) => sum + (w.isRunning() ? 1 : 0), 0),\n uptime: Date.now() - startTime,\n }),\n }\n }\n\n // ==========================================\n // SEARCH\n // ==========================================\n\n async searchJobs(filter: {\n status?: IgniterJobStatus[]\n queue?: string\n jobName?: string\n scopeId?: string\n actorId?: string\n dateRange?: { from?: Date; to?: Date }\n orderBy?: string\n limit?: number\n offset?: number\n }): Promise<IgniterJobSearchResult[]> {\n const results: IgniterJobSearchResult[] = []\n const queuesToSearch = filter.queue\n ? [filter.queue]\n : Array.from(this.queues.keys())\n\n for (const queueName of queuesToSearch) {\n const jobs = await this.listJobs(queueName, {\n status: filter.status,\n start: filter.offset,\n end: filter.limit ? (filter.offset || 0) + filter.limit : undefined,\n })\n\n for (const job of jobs) {\n // Apply filters\n if (filter.jobName && job.name !== filter.jobName) continue\n if (filter.scopeId && job.scope?.id !== filter.scopeId) continue\n if (filter.actorId && job.actor?.id !== filter.actorId) continue\n if (filter.dateRange?.from && job.timestamp < filter.dateRange.from.getTime()) continue\n if (filter.dateRange?.to && job.timestamp > filter.dateRange.to.getTime()) continue\n\n results.push(job)\n }\n }\n\n // Apply sorting\n if (filter.orderBy) {\n const [field, direction] = filter.orderBy.split(':')\n results.sort((a, b) => {\n const aVal = field === 'createdAt' ? a.timestamp : (a as any)[field]\n const bVal = field === 'createdAt' ? b.timestamp : (b as any)[field]\n return direction === 'asc' ? aVal - bVal : bVal - aVal\n })\n }\n\n return results.slice(0, filter.limit || 100)\n }\n\n async searchQueues(filter: {\n name?: string\n isPaused?: boolean\n }): Promise<IgniterQueueInfo[]> {\n const results: IgniterQueueInfo[] = []\n\n for (const [queueName, queue] of this.queues) {\n if (filter.name && !queueName.includes(filter.name)) continue\n\n const isPaused = await queue.isPaused()\n if (filter.isPaused !== undefined && isPaused !== filter.isPaused) continue\n\n const counts = await queue.getJobCounts()\n results.push({\n name: queueName,\n isPaused,\n jobCounts: {\n waiting: counts.waiting || 0,\n active: counts.active || 0,\n completed: counts.completed || 0,\n failed: counts.failed || 0,\n delayed: counts.delayed || 0,\n paused: counts.paused || 0,\n },\n })\n }\n\n return results\n }\n\n // ==========================================\n // LIFECYCLE\n // ==========================================\n\n async shutdown(): Promise<void> {\n // Close all workers\n for (const [_, worker] of this.workers) {\n await worker.close()\n }\n this.workers.clear()\n\n // Close all queue events\n for (const [_, events] of this.queueEvents) {\n await events.close()\n }\n this.queueEvents.clear()\n\n // Close all queues\n for (const [_, queue] of this.queues) {\n await queue.close()\n }\n this.queues.clear()\n }\n}\n","/**\n * @fileoverview In-memory adapter for @igniter-js/jobs (testing purposes)\n * @module @igniter-js/jobs/adapters/memory\n *\n * @description\n * Provides an in-memory implementation of the IgniterJobsAdapter interface.\n * Useful for testing and development without Redis.\n *\n * @example\n * ```typescript\n * import { MemoryAdapter } from '@igniter-js/jobs/adapters'\n *\n * const adapter = MemoryAdapter.create()\n *\n * const jobs = IgniterJobs.create<AppContext>()\n * .withAdapter(adapter)\n * .build()\n * ```\n */\n\nimport type {\n IgniterJobsAdapter,\n AdapterDispatchParams,\n AdapterScheduleParams,\n AdapterWorkerConfig,\n AdapterWorkerHandle,\n AdapterJobHandler,\n IgniterJobInfo,\n IgniterJobStatus,\n IgniterJobCounts,\n IgniterJobLog,\n IgniterQueueInfo,\n IgniterQueueCleanOptions,\n IgniterJobSearchResult,\n IgniterJobEventHandler,\n IgniterJobUnsubscribeFn,\n IgniterJobScopeEntry,\n IgniterJobActorEntry,\n} from '../types'\nimport { IgniterJobsError } from '../errors'\n\n/**\n * Internal job representation.\n */\ninterface InternalJob {\n id: string\n name: string\n queue: string\n data: unknown\n state: IgniterJobStatus\n result?: unknown\n error?: string\n progress: number\n attempts: number\n maxAttempts: number\n timestamp: number\n processedOn?: number\n finishedOn?: number\n delay?: number\n priority: number\n scope?: IgniterJobScopeEntry\n actor?: IgniterJobActorEntry\n logs: IgniterJobLog[]\n scheduledAt?: number\n cron?: string\n every?: number\n}\n\n/**\n * Internal queue representation.\n */\ninterface InternalQueue {\n name: string\n isPaused: boolean\n jobs: Map<string, InternalJob>\n pausedJobTypes: Set<string>\n}\n\n/**\n * Memory-based implementation of IgniterJobsAdapter.\n * Suitable for testing and development.\n */\nexport class MemoryAdapter implements IgniterJobsAdapter {\n private readonly queues: Map<string, InternalQueue> = new Map()\n private readonly eventHandlers: Map<string, Set<IgniterJobEventHandler>> = new Map()\n private readonly workers: Map<string, { handler: AdapterJobHandler; config: AdapterWorkerConfig; running: boolean; paused: boolean }> = new Map()\n private processingInterval: ReturnType<typeof setInterval> | null = null\n\n private constructor() {}\n\n /**\n * Create a new memory adapter.\n */\n static create(): MemoryAdapter {\n return new MemoryAdapter()\n }\n\n /**\n * Get the underlying client (null for memory adapter).\n */\n get client(): null {\n return null\n }\n\n /**\n * Get or create a queue.\n */\n private getOrCreateQueue(name: string): InternalQueue {\n if (!this.queues.has(name)) {\n this.queues.set(name, {\n name,\n isPaused: false,\n jobs: new Map(),\n pausedJobTypes: new Set(),\n })\n }\n return this.queues.get(name)!\n }\n\n /**\n * Generate a unique job ID.\n */\n private generateJobId(): string {\n return `job-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n }\n\n /**\n * Emit an event to subscribers.\n */\n private async emitEvent(type: string, data: unknown): Promise<void> {\n for (const [pattern, handlers] of this.eventHandlers) {\n if (this.matchesPattern(pattern, type)) {\n for (const handler of handlers) {\n try {\n await handler({\n type,\n data,\n timestamp: new Date().toISOString(),\n })\n } catch {\n // Ignore handler errors\n }\n }\n }\n }\n }\n\n /**\n * Check if a pattern matches an event type.\n */\n private matchesPattern(pattern: string, eventType: string): boolean {\n if (pattern === '*') return true\n const regex = new RegExp(\n '^' + pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.') + '$'\n )\n return regex.test(eventType)\n }\n\n // ==========================================\n // JOB OPERATIONS\n // ==========================================\n\n async dispatch(params: AdapterDispatchParams): Promise<string> {\n const queue = this.getOrCreateQueue(params.queue)\n const jobId = params.jobId || this.generateJobId()\n\n const job: InternalJob = {\n id: jobId,\n name: params.name,\n queue: params.queue,\n data: params.data,\n state: params.delay ? 'delayed' : 'waiting',\n progress: 0,\n attempts: 0,\n maxAttempts: params.attempts ?? 3,\n timestamp: Date.now(),\n delay: params.delay,\n priority: params.priority ?? 0,\n scope: params.scope,\n actor: params.actor,\n logs: [],\n scheduledAt: params.delay ? Date.now() + params.delay : undefined,\n }\n\n queue.jobs.set(jobId, job)\n\n await this.emitEvent(`${params.queue}:${params.name}:enqueued`, {\n jobId,\n name: params.name,\n queue: params.queue,\n })\n\n this.startProcessing()\n\n return jobId\n }\n\n async schedule(params: AdapterScheduleParams): Promise<string> {\n const delay = params.at\n ? params.at.getTime() - Date.now()\n : params.delay ?? 0\n\n return this.dispatch({\n ...params,\n delay,\n })\n }\n\n async getJob(queue: string, jobId: string): Promise<IgniterJobInfo | null> {\n const q = this.getOrCreateQueue(queue)\n const job = q.jobs.get(jobId)\n\n if (!job) return null\n\n return {\n id: job.id,\n name: job.name,\n queue: job.queue,\n state: job.state,\n data: job.data,\n result: job.result,\n error: job.error,\n progress: job.progress,\n attempts: job.attempts,\n timestamp: job.timestamp,\n processedOn: job.processedOn,\n finishedOn: job.finishedOn,\n delay: job.delay,\n priority: job.priority,\n scope: job.scope,\n actor: job.actor,\n }\n }\n\n async getJobState(queue: string, jobId: string): Promise<IgniterJobStatus | null> {\n const q = this.getOrCreateQueue(queue)\n const job = q.jobs.get(jobId)\n return job?.state ?? null\n }\n\n async getJobProgress(queue: string, jobId: string): Promise<number> {\n const q = this.getOrCreateQueue(queue)\n const job = q.jobs.get(jobId)\n return job?.progress ?? 0\n }\n\n async getJobLogs(queue: string, jobId: string): Promise<IgniterJobLog[]> {\n const q = this.getOrCreateQueue(queue)\n const job = q.jobs.get(jobId)\n return job?.logs ?? []\n }\n\n async retryJob(queue: string, jobId: string): Promise<void> {\n const q = this.getOrCreateQueue(queue)\n const job = q.jobs.get(jobId)\n\n if (!job) {\n throw new IgniterJobsError({\n code: 'JOBS_JOB_NOT_FOUND',\n message: `Job \"${jobId}\" not found`,\n statusCode: 404,\n })\n }\n\n job.state = 'waiting'\n job.error = undefined\n job.attempts = 0\n }\n\n async removeJob(queue: string, jobId: string): Promise<void> {\n const q = this.getOrCreateQueue(queue)\n q.jobs.delete(jobId)\n }\n\n async promoteJob(queue: string, jobId: string): Promise<void> {\n const q = this.getOrCreateQueue(queue)\n const job = q.jobs.get(jobId)\n\n if (!job) {\n throw new IgniterJobsError({\n code: 'JOBS_JOB_NOT_FOUND',\n message: `Job \"${jobId}\" not found`,\n statusCode: 404,\n })\n }\n\n if (job.state === 'delayed') {\n job.state = 'waiting'\n job.scheduledAt = undefined\n job.delay = undefined\n }\n }\n\n async moveJob(\n queue: string,\n jobId: string,\n state: 'failed' | 'completed',\n reason?: string\n ): Promise<void> {\n const q = this.getOrCreateQueue(queue)\n const job = q.jobs.get(jobId)\n\n if (!job) {\n throw new IgniterJobsError({\n code: 'JOBS_JOB_NOT_FOUND',\n message: `Job \"${jobId}\" not found`,\n statusCode: 404,\n })\n }\n\n job.state = state\n job.finishedOn = Date.now()\n\n if (state === 'failed') {\n job.error = reason\n } else {\n job.result = reason\n }\n }\n\n async retryJobs(queue: string, jobIds: string[]): Promise<void> {\n await Promise.all(jobIds.map((id) => this.retryJob(queue, id)))\n }\n\n async removeJobs(queue: string, jobIds: string[]): Promise<void> {\n await Promise.all(jobIds.map((id) => this.removeJob(queue, id)))\n }\n\n // ==========================================\n // QUEUE OPERATIONS\n // ==========================================\n\n async getQueue(queue: string): Promise<IgniterQueueInfo> {\n const q = this.getOrCreateQueue(queue)\n const counts = await this.getJobCounts(queue)\n\n return {\n name: queue,\n isPaused: q.isPaused,\n jobCounts: counts,\n }\n }\n\n async pauseQueue(queue: string): Promise<void> {\n const q = this.getOrCreateQueue(queue)\n q.isPaused = true\n }\n\n async resumeQueue(queue: string): Promise<void> {\n const q = this.getOrCreateQueue(queue)\n q.isPaused = false\n }\n\n async drainQueue(queue: string): Promise<number> {\n const q = this.getOrCreateQueue(queue)\n let count = 0\n\n for (const [id, job] of q.jobs) {\n if (job.state === 'waiting' || job.state === 'delayed') {\n q.jobs.delete(id)\n count++\n }\n }\n\n return count\n }\n\n async cleanQueue(queue: string, options: IgniterQueueCleanOptions): Promise<number> {\n const q = this.getOrCreateQueue(queue)\n const statuses = Array.isArray(options.status) ? options.status : [options.status]\n const now = Date.now()\n let count = 0\n let removed = 0\n\n for (const [id, job] of q.jobs) {\n if (options.limit && removed >= options.limit) break\n\n if (statuses.includes(job.state as any)) {\n const age = now - job.timestamp\n if (!options.olderThan || age >= options.olderThan) {\n q.jobs.delete(id)\n removed++\n count++\n }\n }\n }\n\n return count\n }\n\n async obliterateQueue(queue: string, options?: { force?: boolean }): Promise<void> {\n this.queues.delete(queue)\n }\n\n async retryAllFailed(queue: string): Promise<number> {\n const q = this.getOrCreateQueue(queue)\n let count = 0\n\n for (const job of q.jobs.values()) {\n if (job.state === 'failed') {\n job.state = 'waiting'\n job.error = undefined\n job.attempts = 0\n count++\n }\n }\n\n return count\n }\n\n async getJobCounts(queue: string): Promise<IgniterJobCounts> {\n const q = this.getOrCreateQueue(queue)\n const counts: IgniterJobCounts = {\n waiting: 0,\n active: 0,\n completed: 0,\n failed: 0,\n delayed: 0,\n paused: 0,\n }\n\n for (const job of q.jobs.values()) {\n counts[job.state]++\n }\n\n return counts\n }\n\n async listJobs(\n queue: string,\n options?: { status?: IgniterJobStatus[]; start?: number; end?: number }\n ): Promise<IgniterJobSearchResult[]> {\n const q = this.getOrCreateQueue(queue)\n const results: IgniterJobSearchResult[] = []\n const statuses = options?.status || ['waiting', 'active', 'completed', 'failed', 'delayed', 'paused']\n\n for (const job of q.jobs.values()) {\n if (statuses.includes(job.state)) {\n results.push({\n id: job.id,\n name: job.name,\n queue: job.queue,\n state: job.state,\n data: job.data,\n result: job.result,\n error: job.error,\n progress: job.progress,\n attempts: job.attempts,\n timestamp: job.timestamp,\n processedOn: job.processedOn,\n finishedOn: job.finishedOn,\n scope: job.scope,\n actor: job.actor,\n })\n }\n }\n\n const start = options?.start ?? 0\n const end = options?.end ?? results.length\n\n return results.slice(start, end)\n }\n\n // ==========================================\n // PAUSE/RESUME JOB TYPES\n // ==========================================\n\n async pauseJobType(queue: string, jobName: string): Promise<void> {\n const q = this.getOrCreateQueue(queue)\n q.pausedJobTypes.add(jobName)\n }\n\n async resumeJobType(queue: string, jobName: string): Promise<void> {\n const q = this.getOrCreateQueue(queue)\n q.pausedJobTypes.delete(jobName)\n }\n\n // ==========================================\n // EVENTS\n // ==========================================\n\n async subscribe(\n pattern: string,\n handler: IgniterJobEventHandler\n ): Promise<IgniterJobUnsubscribeFn> {\n if (!this.eventHandlers.has(pattern)) {\n this.eventHandlers.set(pattern, new Set())\n }\n\n this.eventHandlers.get(pattern)!.add(handler)\n\n return async () => {\n this.eventHandlers.get(pattern)?.delete(handler)\n }\n }\n\n // ==========================================\n // WORKERS\n // ==========================================\n\n async createWorker(\n config: AdapterWorkerConfig,\n handler: AdapterJobHandler\n ): Promise<AdapterWorkerHandle> {\n const workerId = `worker-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n\n this.workers.set(workerId, {\n handler,\n config,\n running: true,\n paused: false,\n })\n\n const startTime = Date.now()\n let processed = 0\n let failed = 0\n let completed = 0\n\n return {\n id: workerId,\n\n pause: async () => {\n const worker = this.workers.get(workerId)\n if (worker) worker.paused = true\n },\n\n resume: async () => {\n const worker = this.workers.get(workerId)\n if (worker) worker.paused = false\n },\n\n close: async () => {\n this.workers.delete(workerId)\n },\n\n isRunning: () => {\n const worker = this.workers.get(workerId)\n return worker?.running && !worker?.paused || false\n },\n\n isPaused: () => {\n return this.workers.get(workerId)?.paused || false\n },\n\n getMetrics: async () => ({\n processed,\n failed,\n completed,\n active: 0,\n uptime: Date.now() - startTime,\n }),\n }\n }\n\n /**\n * Start the internal job processing loop.\n */\n private startProcessing(): void {\n if (this.processingInterval) return\n\n this.processingInterval = setInterval(async () => {\n await this.processJobs()\n }, 100)\n }\n\n /**\n * Process pending jobs.\n */\n private async processJobs(): Promise<void> {\n for (const [_, worker] of this.workers) {\n if (!worker.running || worker.paused) continue\n\n for (const queueName of worker.config.queues) {\n const queue = this.queues.get(queueName)\n if (!queue || queue.isPaused) continue\n\n // Find waiting jobs\n for (const job of queue.jobs.values()) {\n if (job.state !== 'waiting') continue\n if (queue.pausedJobTypes.has(job.name)) continue\n\n // Check if delayed job is ready\n if (job.scheduledAt && job.scheduledAt > Date.now()) continue\n\n // Process job\n job.state = 'active'\n job.processedOn = Date.now()\n job.attempts++\n\n try {\n const result = await worker.handler({\n id: job.id,\n name: job.name,\n queue: job.queue,\n data: job.data,\n attempt: job.attempts,\n timestamp: job.timestamp,\n scope: job.scope,\n actor: job.actor,\n log: async (level, message) => {\n job.logs.push({\n timestamp: new Date(),\n message,\n level,\n })\n },\n updateProgress: async (progress) => {\n job.progress = progress\n },\n })\n\n job.state = 'completed'\n job.result = result\n job.finishedOn = Date.now()\n\n await this.emitEvent(`${job.queue}:${job.name}:completed`, {\n jobId: job.id,\n result,\n })\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n\n if (job.attempts < job.maxAttempts) {\n job.state = 'waiting'\n await this.emitEvent(`${job.queue}:${job.name}:retrying`, {\n jobId: job.id,\n error: errorMessage,\n attempt: job.attempts,\n })\n } else {\n job.state = 'failed'\n job.error = errorMessage\n job.finishedOn = Date.now()\n\n await this.emitEvent(`${job.queue}:${job.name}:failed`, {\n jobId: job.id,\n error: errorMessage,\n })\n }\n }\n }\n }\n }\n }\n\n // ==========================================\n // SEARCH\n // ==========================================\n\n async searchJobs(filter: {\n status?: IgniterJobStatus[]\n queue?: string\n jobName?: string\n scopeId?: string\n actorId?: string\n dateRange?: { from?: Date; to?: Date }\n orderBy?: string\n limit?: number\n offset?: number\n }): Promise<IgniterJobSearchResult[]> {\n const results: IgniterJobSearchResult[] = []\n const queuesToSearch = filter.queue\n ? [filter.queue]\n : Array.from(this.queues.keys())\n\n for (const queueName of queuesToSearch) {\n const queue = this.queues.get(queueName)\n if (!queue) continue\n\n for (const job of queue.jobs.values()) {\n // Apply filters\n if (filter.status && !filter.status.includes(job.state)) continue\n if (filter.jobName && job.name !== filter.jobName) continue\n if (filter.scopeId && job.scope?.id !== filter.scopeId) continue\n if (filter.actorId && job.actor?.id !== filter.actorId) continue\n if (filter.dateRange?.from && job.timestamp < filter.dateRange.from.getTime()) continue\n if (filter.dateRange?.to && job.timestamp > filter.dateRange.to.getTime()) continue\n\n results.push({\n id: job.id,\n name: job.name,\n queue: job.queue,\n state: job.state,\n data: job.data,\n result: job.result,\n error: job.error,\n progress: job.progress,\n attempts: job.attempts,\n timestamp: job.timestamp,\n processedOn: job.processedOn,\n finishedOn: job.finishedOn,\n scope: job.scope,\n actor: job.actor,\n })\n }\n }\n\n // Apply sorting\n if (filter.orderBy) {\n const [field, direction] = filter.orderBy.split(':')\n results.sort((a, b) => {\n const aVal = field === 'createdAt' ? a.timestamp : (a as any)[field]\n const bVal = field === 'createdAt' ? b.timestamp : (b as any)[field]\n return direction === 'asc' ? aVal - bVal : bVal - aVal\n })\n }\n\n const offset = filter.offset ?? 0\n const limit = filter.limit ?? 100\n\n return results.slice(offset, offset + limit)\n }\n\n async searchQueues(filter: {\n name?: string\n isPaused?: boolean\n }): Promise<IgniterQueueInfo[]> {\n const results: IgniterQueueInfo[] = []\n\n for (const [queueName, queue] of this.queues) {\n if (filter.name && !queueName.includes(filter.name)) continue\n if (filter.isPaused !== undefined && queue.isPaused !== filter.isPaused) continue\n\n const counts = await this.getJobCounts(queueName)\n results.push({\n name: queueName,\n isPaused: queue.isPaused,\n jobCounts: counts,\n })\n }\n\n return results\n }\n\n // ==========================================\n // LIFECYCLE\n // ==========================================\n\n async shutdown(): Promise<void> {\n if (this.processingInterval) {\n clearInterval(this.processingInterval)\n this.processingInterval = null\n }\n\n this.workers.clear()\n this.queues.clear()\n this.eventHandlers.clear()\n }\n}\n"]}
@@ -0,0 +1,118 @@
1
+ import { I as IgniterJobsAdapter, A as AdapterDispatchParams, a as AdapterScheduleParams, b as IgniterJobInfo, c as IgniterJobStatus, d as IgniterJobLog, e as IgniterQueueInfo, f as IgniterQueueCleanOptions, g as IgniterJobCounts, h as IgniterJobSearchResult, i as IgniterJobEventHandler, j as IgniterJobUnsubscribeFn, k as AdapterWorkerConfig, l as AdapterJobHandler, m as AdapterWorkerHandle } from '../adapter-CcQCatSa.mjs';
2
+ import '@igniter-js/core';
3
+
4
+ /**
5
+ * @fileoverview In-memory adapter for @igniter-js/jobs (testing purposes)
6
+ * @module @igniter-js/jobs/adapters/memory
7
+ *
8
+ * @description
9
+ * Provides an in-memory implementation of the IgniterJobsAdapter interface.
10
+ * Useful for testing and development without Redis.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { MemoryAdapter } from '@igniter-js/jobs/adapters'
15
+ *
16
+ * const adapter = MemoryAdapter.create()
17
+ *
18
+ * const jobs = IgniterJobs.create<AppContext>()
19
+ * .withAdapter(adapter)
20
+ * .build()
21
+ * ```
22
+ */
23
+
24
+ /**
25
+ * Memory-based implementation of IgniterJobsAdapter.
26
+ * Suitable for testing and development.
27
+ */
28
+ declare class MemoryAdapter implements IgniterJobsAdapter {
29
+ private readonly queues;
30
+ private readonly eventHandlers;
31
+ private readonly workers;
32
+ private processingInterval;
33
+ private constructor();
34
+ /**
35
+ * Create a new memory adapter.
36
+ */
37
+ static create(): MemoryAdapter;
38
+ /**
39
+ * Get the underlying client (null for memory adapter).
40
+ */
41
+ get client(): null;
42
+ /**
43
+ * Get or create a queue.
44
+ */
45
+ private getOrCreateQueue;
46
+ /**
47
+ * Generate a unique job ID.
48
+ */
49
+ private generateJobId;
50
+ /**
51
+ * Emit an event to subscribers.
52
+ */
53
+ private emitEvent;
54
+ /**
55
+ * Check if a pattern matches an event type.
56
+ */
57
+ private matchesPattern;
58
+ dispatch(params: AdapterDispatchParams): Promise<string>;
59
+ schedule(params: AdapterScheduleParams): Promise<string>;
60
+ getJob(queue: string, jobId: string): Promise<IgniterJobInfo | null>;
61
+ getJobState(queue: string, jobId: string): Promise<IgniterJobStatus | null>;
62
+ getJobProgress(queue: string, jobId: string): Promise<number>;
63
+ getJobLogs(queue: string, jobId: string): Promise<IgniterJobLog[]>;
64
+ retryJob(queue: string, jobId: string): Promise<void>;
65
+ removeJob(queue: string, jobId: string): Promise<void>;
66
+ promoteJob(queue: string, jobId: string): Promise<void>;
67
+ moveJob(queue: string, jobId: string, state: 'failed' | 'completed', reason?: string): Promise<void>;
68
+ retryJobs(queue: string, jobIds: string[]): Promise<void>;
69
+ removeJobs(queue: string, jobIds: string[]): Promise<void>;
70
+ getQueue(queue: string): Promise<IgniterQueueInfo>;
71
+ pauseQueue(queue: string): Promise<void>;
72
+ resumeQueue(queue: string): Promise<void>;
73
+ drainQueue(queue: string): Promise<number>;
74
+ cleanQueue(queue: string, options: IgniterQueueCleanOptions): Promise<number>;
75
+ obliterateQueue(queue: string, options?: {
76
+ force?: boolean;
77
+ }): Promise<void>;
78
+ retryAllFailed(queue: string): Promise<number>;
79
+ getJobCounts(queue: string): Promise<IgniterJobCounts>;
80
+ listJobs(queue: string, options?: {
81
+ status?: IgniterJobStatus[];
82
+ start?: number;
83
+ end?: number;
84
+ }): Promise<IgniterJobSearchResult[]>;
85
+ pauseJobType(queue: string, jobName: string): Promise<void>;
86
+ resumeJobType(queue: string, jobName: string): Promise<void>;
87
+ subscribe(pattern: string, handler: IgniterJobEventHandler): Promise<IgniterJobUnsubscribeFn>;
88
+ createWorker(config: AdapterWorkerConfig, handler: AdapterJobHandler): Promise<AdapterWorkerHandle>;
89
+ /**
90
+ * Start the internal job processing loop.
91
+ */
92
+ private startProcessing;
93
+ /**
94
+ * Process pending jobs.
95
+ */
96
+ private processJobs;
97
+ searchJobs(filter: {
98
+ status?: IgniterJobStatus[];
99
+ queue?: string;
100
+ jobName?: string;
101
+ scopeId?: string;
102
+ actorId?: string;
103
+ dateRange?: {
104
+ from?: Date;
105
+ to?: Date;
106
+ };
107
+ orderBy?: string;
108
+ limit?: number;
109
+ offset?: number;
110
+ }): Promise<IgniterJobSearchResult[]>;
111
+ searchQueues(filter: {
112
+ name?: string;
113
+ isPaused?: boolean;
114
+ }): Promise<IgniterQueueInfo[]>;
115
+ shutdown(): Promise<void>;
116
+ }
117
+
118
+ export { MemoryAdapter };
@@ -0,0 +1,118 @@
1
+ import { I as IgniterJobsAdapter, A as AdapterDispatchParams, a as AdapterScheduleParams, b as IgniterJobInfo, c as IgniterJobStatus, d as IgniterJobLog, e as IgniterQueueInfo, f as IgniterQueueCleanOptions, g as IgniterJobCounts, h as IgniterJobSearchResult, i as IgniterJobEventHandler, j as IgniterJobUnsubscribeFn, k as AdapterWorkerConfig, l as AdapterJobHandler, m as AdapterWorkerHandle } from '../adapter-CcQCatSa.js';
2
+ import '@igniter-js/core';
3
+
4
+ /**
5
+ * @fileoverview In-memory adapter for @igniter-js/jobs (testing purposes)
6
+ * @module @igniter-js/jobs/adapters/memory
7
+ *
8
+ * @description
9
+ * Provides an in-memory implementation of the IgniterJobsAdapter interface.
10
+ * Useful for testing and development without Redis.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { MemoryAdapter } from '@igniter-js/jobs/adapters'
15
+ *
16
+ * const adapter = MemoryAdapter.create()
17
+ *
18
+ * const jobs = IgniterJobs.create<AppContext>()
19
+ * .withAdapter(adapter)
20
+ * .build()
21
+ * ```
22
+ */
23
+
24
+ /**
25
+ * Memory-based implementation of IgniterJobsAdapter.
26
+ * Suitable for testing and development.
27
+ */
28
+ declare class MemoryAdapter implements IgniterJobsAdapter {
29
+ private readonly queues;
30
+ private readonly eventHandlers;
31
+ private readonly workers;
32
+ private processingInterval;
33
+ private constructor();
34
+ /**
35
+ * Create a new memory adapter.
36
+ */
37
+ static create(): MemoryAdapter;
38
+ /**
39
+ * Get the underlying client (null for memory adapter).
40
+ */
41
+ get client(): null;
42
+ /**
43
+ * Get or create a queue.
44
+ */
45
+ private getOrCreateQueue;
46
+ /**
47
+ * Generate a unique job ID.
48
+ */
49
+ private generateJobId;
50
+ /**
51
+ * Emit an event to subscribers.
52
+ */
53
+ private emitEvent;
54
+ /**
55
+ * Check if a pattern matches an event type.
56
+ */
57
+ private matchesPattern;
58
+ dispatch(params: AdapterDispatchParams): Promise<string>;
59
+ schedule(params: AdapterScheduleParams): Promise<string>;
60
+ getJob(queue: string, jobId: string): Promise<IgniterJobInfo | null>;
61
+ getJobState(queue: string, jobId: string): Promise<IgniterJobStatus | null>;
62
+ getJobProgress(queue: string, jobId: string): Promise<number>;
63
+ getJobLogs(queue: string, jobId: string): Promise<IgniterJobLog[]>;
64
+ retryJob(queue: string, jobId: string): Promise<void>;
65
+ removeJob(queue: string, jobId: string): Promise<void>;
66
+ promoteJob(queue: string, jobId: string): Promise<void>;
67
+ moveJob(queue: string, jobId: string, state: 'failed' | 'completed', reason?: string): Promise<void>;
68
+ retryJobs(queue: string, jobIds: string[]): Promise<void>;
69
+ removeJobs(queue: string, jobIds: string[]): Promise<void>;
70
+ getQueue(queue: string): Promise<IgniterQueueInfo>;
71
+ pauseQueue(queue: string): Promise<void>;
72
+ resumeQueue(queue: string): Promise<void>;
73
+ drainQueue(queue: string): Promise<number>;
74
+ cleanQueue(queue: string, options: IgniterQueueCleanOptions): Promise<number>;
75
+ obliterateQueue(queue: string, options?: {
76
+ force?: boolean;
77
+ }): Promise<void>;
78
+ retryAllFailed(queue: string): Promise<number>;
79
+ getJobCounts(queue: string): Promise<IgniterJobCounts>;
80
+ listJobs(queue: string, options?: {
81
+ status?: IgniterJobStatus[];
82
+ start?: number;
83
+ end?: number;
84
+ }): Promise<IgniterJobSearchResult[]>;
85
+ pauseJobType(queue: string, jobName: string): Promise<void>;
86
+ resumeJobType(queue: string, jobName: string): Promise<void>;
87
+ subscribe(pattern: string, handler: IgniterJobEventHandler): Promise<IgniterJobUnsubscribeFn>;
88
+ createWorker(config: AdapterWorkerConfig, handler: AdapterJobHandler): Promise<AdapterWorkerHandle>;
89
+ /**
90
+ * Start the internal job processing loop.
91
+ */
92
+ private startProcessing;
93
+ /**
94
+ * Process pending jobs.
95
+ */
96
+ private processJobs;
97
+ searchJobs(filter: {
98
+ status?: IgniterJobStatus[];
99
+ queue?: string;
100
+ jobName?: string;
101
+ scopeId?: string;
102
+ actorId?: string;
103
+ dateRange?: {
104
+ from?: Date;
105
+ to?: Date;
106
+ };
107
+ orderBy?: string;
108
+ limit?: number;
109
+ offset?: number;
110
+ }): Promise<IgniterJobSearchResult[]>;
111
+ searchQueues(filter: {
112
+ name?: string;
113
+ isPaused?: boolean;
114
+ }): Promise<IgniterQueueInfo[]>;
115
+ shutdown(): Promise<void>;
116
+ }
117
+
118
+ export { MemoryAdapter };