type RetryBackoff = "fixed" | "linear" | "exponential"; type RetryConfig = { attempts: number; delayMs?: number; backoff?: RetryBackoff; maxDelayMs?: number; jitter?: boolean | number; shouldRetry?: (error: unknown) => boolean; }; type JobStatus = "pending" | "scheduled" | "running" | "success" | "failed" | "cancelled" | "paused" | "timeout"; type SerializedError = { name: string; message: string; stack?: string; }; type JobProgress = { percent?: number; message?: string; data?: unknown; at: string; }; type JobTask = (context: { jobId: string; name: string; payload: TPayload; attempt: number; signal: AbortSignal; createdAt: Date; startedAt: Date; progress: (progress: Omit) => Promise; }) => Promise | TResult; type ScheduleJobOptions = { cron: string; payload?: TPayload; timezone?: string; enabled?: boolean; preventOverlap?: boolean; timeout?: number; retry?: RetryConfig; priority?: number; task: JobTask; }; type DelayJobOptions = { delayMs: number; payload?: TPayload; timeout?: number; retry?: RetryConfig; priority?: number; task: JobTask; }; type EveryJobOptions = { intervalMs: number; payload?: TPayload; enabled?: boolean; preventOverlap?: boolean; timeout?: number; retry?: RetryConfig; priority?: number; task: JobTask; }; type RunNowOptions = { payload?: TPayload; timeout?: number; retry?: RetryConfig; priority?: number; task: JobTask; }; type WorkerModuleReference = { path: string | URL; exportName?: string; }; type WorkerJobOptions = { payload?: TPayload; timeout?: number; retry?: RetryConfig; priority?: number; worker: WorkerModuleReference | JobTask; }; type JobResult = { jobId: string; name: string; status: JobStatus; result?: TResult; error?: SerializedError; progress?: JobProgress; attempt: number; durationMs: number; startedAt?: string; finishedAt?: string; }; type JobKind = "cron" | "delay" | "every" | "runNow" | "worker" | "queue"; type JobRecord = { id: string; name: string; kind: JobKind; status: JobStatus; payload?: TPayload; priority: number; attempts: number; maxAttempts: number; createdAt: string; updatedAt: string; startedAt?: string; finishedAt?: string; lastRunAt?: string; nextRunAt?: string; result?: TResult; error?: SerializedError; progress?: JobProgress; successCount: number; failureCount: number; queueName?: string; metadata?: Record; }; type JobFilter = { status?: JobStatus; name?: string; kind?: JobKind; queueName?: string; }; interface StorageAdapter { saveJob(job: JobRecord): Promise; updateJob(jobId: string, patch: Partial): Promise; getJob(jobId: string): Promise; listJobs(filter?: JobFilter): Promise; deleteJob(jobId: string): Promise; acquireLock(lockKey: string, ttlMs: number): Promise; releaseLock(lockKey: string): Promise; } type SilentCronXLogger = { info?: (...args: unknown[]) => void; warn?: (...args: unknown[]) => void; error?: (...args: unknown[]) => void; debug?: (...args: unknown[]) => void; }; type SilentCronXConfig = { timezone?: string; maxWorkers?: number; maxConcurrency?: number; defaultTimeout?: number; preventOverlapping?: boolean; lockTimeout?: number; maxPayloadBytes?: number; logger?: SilentCronXLogger; storage?: "memory" | StorageAdapter; debug?: boolean; eventHistoryLimit?: number; }; type QueueOptions = { concurrency?: number; retry?: RetryConfig; timeout?: number; maxSize?: number; paused?: boolean; rateLimit?: { limit: number; intervalMs: number; }; processor?: JobTask; }; type AddQueueJobOptions = { id?: string; name: string; payload?: TPayload; priority?: number; timeout?: number; retry?: RetryConfig; task?: JobTask; }; type QueueStats = { name: string; pending: number; running: number; concurrency: number; maxSize: number; paused: boolean; rateLimit?: { limit: number; intervalMs: number; used: number; resetsInMs: number; }; }; type SilentCronXEventRecord = { eventName: TName; event: SilentCronXEventMap[TName]; at: string; }; type SilentCronXEventMap = { "scheduler:started": { running: true; at: string; }; "scheduler:stopped": { running: false; at: string; }; "scheduler:shutdown": { at: string; }; "job:scheduled": { jobId: string; name: string; nextRunAt?: string; }; "job:started": { jobId: string; name: string; attempt: number; }; "job:progress": { jobId: string; name: string; progress: JobProgress; }; "job:success": JobResult; "job:failed": JobResult; "job:timeout": JobResult; "job:cancelled": { jobId: string; name: string; }; "job:paused": { jobId: string; name: string; }; "job:resumed": { jobId: string; name: string; }; "job:retry": { jobId: string; name: string; attempt: number; delayMs: number; }; "queue:created": { queueName: string; concurrency: number; }; "queue:paused": { queueName: string; }; "queue:resumed": { queueName: string; }; "queue:cleared": { queueName: string; removed: number; }; "queue:drain": { queueName: string; }; "queue:stats": QueueStats; "error": { error: unknown; jobId?: string; name?: string; }; }; type SilentCronXEventName = keyof SilentCronXEventMap; type SilentCronXEventHandler = (event: SilentCronXEventMap[TName]) => void; type StatusSnapshot = { jobId: string; name: string; status: JobStatus; attempt: number; nextRunAt?: string; lastRunAt?: string; }; type SilentCronXHealth = { running: boolean; scheduledJobs: number; runningJobs: number; queuedJobs: number; workers: { max: number; busy: number; idle: number; }; memory: { storage: string; }; }; declare class SilentCronX { private readonly config; private readonly storage; private readonly eventBus; private readonly runner; private readonly workerPool; private readonly lockManager; private readonly queueManager; private readonly logger; private readonly entries; private readonly controllers; private running; constructor(config?: SilentCronXConfig); schedule(name: string, options: ScheduleJobOptions): Promise; delay(name: string, options: DelayJobOptions): Promise; every(name: string, options: EveryJobOptions): Promise; runNow(name: string, options: RunNowOptions): Promise>; runWorker(name: string, options: WorkerJobOptions): Promise>; queue(name: string, options?: QueueOptions): void; addJob(queueName: string, job: AddQueueJobOptions): Promise; pauseQueue(queueName: string): void; resumeQueue(queueName: string): void; clearQueue(queueName: string): Promise; getQueueStats(queueName?: string): QueueStats[]; cancel(jobId: string): Promise; pause(jobId: string): Promise; resume(jobId: string): Promise; getStatus(jobId: string): Promise; getJobs(): Promise; start(): void; stop(): void; shutdown(): Promise; on(eventName: TName, handler: SilentCronXEventHandler): void; off(eventName: TName, handler: SilentCronXEventHandler): void; getEventHistory(eventName?: TName): SilentCronXEventRecord[]; clearEventHistory(): void; getHealth(): Promise; private executeJob; private armEntry; private armCron; private armDelay; private armEvery; private clearTimer; private createRecord; } declare function createSilentCronX(config?: SilentCronXConfig): SilentCronX; declare class MemoryStorageAdapter implements StorageAdapter { private readonly jobs; private readonly locks; saveJob(job: JobRecord): Promise; updateJob(jobId: string, patch: Partial): Promise; getJob(jobId: string): Promise; listJobs(filter?: JobFilter): Promise; deleteJob(jobId: string): Promise; acquireLock(lockKey: string, ttlMs: number): Promise; releaseLock(lockKey: string): Promise; private cleanupExpiredLocks; } declare class RedisStorageAdapter implements StorageAdapter { constructor(); saveJob(_job: JobRecord): Promise; updateJob(_jobId: string, _patch: Partial): Promise; getJob(_jobId: string): Promise; listJobs(_filter?: JobFilter): Promise; deleteJob(_jobId: string): Promise; acquireLock(_lockKey: string, _ttlMs: number): Promise; releaseLock(_lockKey: string): Promise; } declare class PostgresStorageAdapter implements StorageAdapter { constructor(); saveJob(_job: JobRecord): Promise; updateJob(_jobId: string, _patch: Partial): Promise; getJob(_jobId: string): Promise; listJobs(_filter?: JobFilter): Promise; deleteJob(_jobId: string): Promise; acquireLock(_lockKey: string, _ttlMs: number): Promise; releaseLock(_lockKey: string): Promise; } type SilentCronXClientConfig = { baseUrl: string; headers?: Record; fetcher?: typeof fetch; }; type TriggerJobRequest = { name?: string; payload?: TPayload; priority?: number; }; type TriggerJobResponse = { accepted: boolean; jobId: string; }; type SilentCronXClient = { triggerJob: (queueOrRoute: string, request?: TriggerJobRequest) => Promise; getJob: (jobId: string) => Promise | null>; getJobs: () => Promise; getHealth: () => Promise; getQueueStats: (queueName?: string) => Promise; getEvents: () => Promise; cancelJob: (jobId: string) => Promise<{ cancelled: boolean; jobId: string; }>; }; declare function createSilentCronXClient(config: SilentCronXClientConfig): SilentCronXClient; export { type AddQueueJobOptions, type DelayJobOptions, type EveryJobOptions, type JobFilter, type JobKind, type JobProgress, type JobRecord, type JobResult, type JobStatus, type JobTask, MemoryStorageAdapter, PostgresStorageAdapter, type QueueOptions, type QueueStats, RedisStorageAdapter, type RetryBackoff, type RetryConfig, type RunNowOptions, type ScheduleJobOptions, type SerializedError, SilentCronX, type SilentCronXClient, type SilentCronXClientConfig, type SilentCronXConfig, type SilentCronXEventHandler, type SilentCronXEventMap, type SilentCronXEventName, type SilentCronXEventRecord, type SilentCronXHealth, type SilentCronXLogger, type StatusSnapshot, type StorageAdapter, type TriggerJobRequest, type TriggerJobResponse, type WorkerJobOptions, type WorkerModuleReference, createSilentCronX, createSilentCronXClient };