API - Job

Job entities are returned from queue.add(...), queue.getJob(id), and from worker events. They mirror BullMQ’s Job shape and expose helpers that delegate to the Queue.

import Redis from 'ioredis'
import { Queue } from 'groupmq'

const redis = new Redis()
const queue = new Queue<{ n: number }>({ redis, namespace: 'docs' })
const job = await queue.add({ groupId: 'g1', data: { n: 1 } })

Replace the job payload in Redis.

await job.update({ n: 2 })
// or
await job.updateData({ n: 2 })

Promote this job if delayed so it runs immediately.

await job.promote()

Remove this job regardless of state (waiting, delayed, processing).

await job.remove()

Retry this job using queue defaults and backoff.

await job.retry()

Get the current status inferred from Redis.

const state = await job.getState()
type ReservedJob<T = any> = {
  id: string;
  groupId: string;
  data: T;
  attempts: number;
  maxAttempts: number;
  seq: number;
  timestamp: number;
  orderMs: number;
  score: number;
  deadlineAt: number;
};
// Runtime `Job` entity (subset shown)
class Job<T> {
  id: string
  data: T
  groupId: string
  attemptsMade: number
  opts: { attempts: number; delay?: number }
  processedOn?: number
  finishedOn?: number
  failedReason?: string
  stacktrace?: string
  returnvalue?: any
  timestamp: number
  orderMs?: number
  status: 'active' | 'waiting' | 'completed' | 'failed' | 'delayed' | 'paused' | 'unknown'

  updateData(data: T): Promise<void>
  update(data: T): Promise<void>
  promote(): Promise<void>
  remove(): Promise<void>
  retry(): Promise<void>
  getState(): Promise<'active' | 'waiting' | 'completed' | 'failed' | 'delayed' | 'paused' | 'unknown'>
}