TypeScript Types
bunqueue is written in TypeScript and provides comprehensive type definitions.
Job Types
Job
The main job interface returned by Queue methods.
interface Job<T = unknown> { /** Unique job identifier */ id: string;
/** Job name/type */ name: string;
/** Job payload data */ data: T;
/** Queue name */ queueName: string;
/** Number of attempts made */ attemptsMade: number;
/** Creation timestamp */ timestamp: number;
/** Current progress (0-100) */ progress: number;
/** Return value after completion */ returnvalue?: unknown;
/** Error message if failed */ failedReason?: string;
/** Update job progress */ updateProgress(progress: number, message?: string): Promise<void>;
/** Add log entry */ log(message: string): Promise<void>;}JobOptions
interface JobOptions { /** Job priority (higher = processed first) */ priority?: number;
/** Delay before processing (ms) */ delay?: number;
/** Maximum retry attempts */ attempts?: number;
/** Backoff delay between retries (ms) */ backoff?: number;
/** Job timeout (ms) */ timeout?: number;
/** Custom job ID (must be unique) */ jobId?: string;
/** Remove job after completion */ removeOnComplete?: boolean;
/** Remove job after failure */ removeOnFail?: boolean;
/** Stall timeout in ms */ stallTimeout?: number;
/** Repeat configuration */ repeat?: { /** Repeat every N milliseconds */ every?: number; /** Maximum repetitions */ limit?: number; /** Cron pattern (alternative to every) */ pattern?: string; };}Queue Types
QueueOptions
interface QueueOptions { /** Default job options for all jobs in this queue */ defaultJobOptions?: JobOptions;}JobCounts
interface JobCounts { waiting: number; active: number; completed: number; failed: number;}Worker Types
WorkerOptions
interface WorkerOptions { /** Number of concurrent jobs (default: 1) */ concurrency?: number;
/** Auto-run on creation (default: true) */ autorun?: boolean;
/** Heartbeat interval in ms (default: 10000) */ heartbeatInterval?: number;}Processor
type Processor<T = unknown, R = unknown> = (job: Job<T>) => Promise<R> | R;Worker Events
// Worker emits these eventsworker.on('ready', () => void);worker.on('active', (job: Job) => void);worker.on('completed', (job: Job, result: any) => void);worker.on('failed', (job: Job, error: Error) => void);worker.on('progress', (job: Job, progress: number) => void);worker.on('error', (error: Error) => void);worker.on('closed', () => void);SandboxedWorker Types
SandboxedWorkerOptions
interface SandboxedWorkerOptions { /** Path to processor file */ processor: string;
/** Number of worker processes (default: 1) */ concurrency?: number;
/** Job timeout in ms (default: 30000) */ timeout?: number;
/** Max memory per worker in MB (default: 256, uses smol mode if <= 64) */ maxMemory?: number;
/** Max restarts before giving up (default: 10) */ maxRestarts?: number;
/** Auto-restart crashed workers (default: true) */ autoRestart?: boolean;
/** Poll interval in ms (default: 10) */ pollInterval?: number;}SandboxedWorker Stats
interface SandboxedWorkerStats { total: number; // Total worker processes busy: number; // Currently processing idle: number; // Available for work restarts: number; // Total restarts across all workers}Stall Detection Types
StallConfig
interface StallConfig { /** Enable stall detection (default: true) */ enabled?: boolean;
/** Stall timeout in ms (default: 30000) */ stallInterval?: number;
/** Max stalls before moving to DLQ (default: 3) */ maxStalls?: number;
/** Grace period after job start in ms (default: 5000) */ gracePeriod?: number;}DLQ Types
DlqConfig
interface DlqConfig { /** Enable auto-retry from DLQ */ autoRetry?: boolean;
/** Auto-retry interval in ms (default: 3600000 = 1 hour) */ autoRetryInterval?: number;
/** Max auto-retries (default: 3) */ maxAutoRetries?: number;
/** Max age before auto-purge in ms (default: 7 days) */ maxAge?: number | null;
/** Max entries per queue (default: 10000) */ maxEntries?: number;}FailureReason
type FailureReason = | 'explicit_fail' // Job explicitly failed | 'max_attempts_exceeded' // Exceeded retry attempts | 'timeout' // Job timed out | 'stalled' // Job stalled (no heartbeat) | 'ttl_expired' // Time-to-live expired | 'worker_lost' // Worker disconnected | 'unknown'; // Unknown reasonDlqEntry
interface DlqEntry<T = unknown> { /** The failed job */ job: Job<T>;
/** When job entered DLQ */ enteredAt: number;
/** Failure reason */ reason: FailureReason;
/** Error message */ error: string | null;
/** Attempt history */ attempts: Array<{ attempt: number; startedAt: number; failedAt: number; reason: FailureReason; error: string | null; duration: number; }>;
/** Number of retry attempts from DLQ */ retryCount: number;
/** Last retry timestamp */ lastRetryAt: number | null;
/** Next scheduled retry */ nextRetryAt: number | null;
/** When entry expires */ expiresAt: number | null;}DlqFilter
interface DlqFilter { reason?: FailureReason; olderThan?: number; newerThan?: number; retriable?: boolean; expired?: boolean; limit?: number; offset?: number;}DlqStats
interface DlqStats { total: number; byReason: Record<FailureReason, number>; pendingRetry: number; expired: number; oldestEntry: number | null; newestEntry: number | null;}QueueEvents Types
QueueEvents
class QueueEvents extends EventEmitter { constructor(queueName: string); close(): void;}
// Events emittedevents.on('waiting', ({ jobId }) => void);events.on('active', ({ jobId }) => void);events.on('completed', ({ jobId, returnvalue }) => void);events.on('failed', ({ jobId, failedReason }) => void);events.on('progress', ({ jobId, data }) => void);events.on('stalled', ({ jobId }) => void);Generic Type Helpers
// Type-safe job datainterface EmailJobData { to: string; subject: string; body: string;}
const queue = new Queue<EmailJobData>('emails');
// TypeScript knows job.data has to, subject, bodyconst worker = new Worker<EmailJobData>('emails', async (job) => { const { to, subject, body } = job.data; return { sent: true };});
// Type error: missing required fieldawait queue.add('send', { to: 'test@example.com' }); // Error!