@platformatic/job-queue 0.1.0 → 0.3.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.
Files changed (48) hide show
  1. package/README.md +57 -4
  2. package/dist/consumer.d.ts +5 -2
  3. package/dist/consumer.d.ts.map +1 -1
  4. package/dist/consumer.js +127 -31
  5. package/dist/consumer.js.map +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/producer.d.ts +8 -2
  10. package/dist/producer.d.ts.map +1 -1
  11. package/dist/producer.js +64 -3
  12. package/dist/producer.js.map +1 -1
  13. package/dist/queue.d.ts +5 -1
  14. package/dist/queue.d.ts.map +1 -1
  15. package/dist/queue.js +59 -12
  16. package/dist/queue.js.map +1 -1
  17. package/dist/reaper.d.ts +3 -1
  18. package/dist/reaper.d.ts.map +1 -1
  19. package/dist/reaper.js +21 -10
  20. package/dist/reaper.js.map +1 -1
  21. package/dist/storage/file.d.ts +5 -2
  22. package/dist/storage/file.d.ts.map +1 -1
  23. package/dist/storage/file.js +172 -49
  24. package/dist/storage/file.js.map +1 -1
  25. package/dist/storage/memory.d.ts +2 -2
  26. package/dist/storage/memory.d.ts.map +1 -1
  27. package/dist/storage/memory.js +5 -5
  28. package/dist/storage/memory.js.map +1 -1
  29. package/dist/storage/redis.d.ts +4 -2
  30. package/dist/storage/redis.d.ts.map +1 -1
  31. package/dist/storage/redis.js +67 -21
  32. package/dist/storage/redis.js.map +1 -1
  33. package/dist/storage/types.d.ts +2 -2
  34. package/dist/storage/types.d.ts.map +1 -1
  35. package/dist/storage/utils.d.ts +2 -0
  36. package/dist/storage/utils.d.ts.map +1 -0
  37. package/dist/storage/utils.js +31 -0
  38. package/dist/storage/utils.js.map +1 -0
  39. package/dist/types.d.ts +41 -0
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/utils/id.d.ts.map +1 -1
  42. package/dist/utils/id.js +1 -4
  43. package/dist/utils/id.js.map +1 -1
  44. package/dist/utils/logging.d.ts +5 -0
  45. package/dist/utils/logging.d.ts.map +1 -0
  46. package/dist/utils/logging.js +24 -0
  47. package/dist/utils/logging.js.map +1 -0
  48. package/package.json +7 -2
package/README.md CHANGED
@@ -44,9 +44,15 @@ await queue.start()
44
44
  // Enqueue jobs
45
45
  await queue.enqueue('email-1', { email: 'user@example.com' })
46
46
 
47
+ // Optional per-job TTL override for cached result/error
48
+ await queue.enqueue('email-ttl', { email: 'ttl@example.com' }, {
49
+ resultTTL: 5 * 60 * 1000 // 5 minutes
50
+ })
51
+
47
52
  // Or wait for the result
48
53
  const result = await queue.enqueueAndWait('email-2', { email: 'another@example.com' }, {
49
- timeout: 30000
54
+ timeout: 30000,
55
+ resultTTL: 24 * 60 * 60 * 1000 // keep this result for 24h
50
56
  })
51
57
  console.log('Result:', result) // { sent: true }
52
58
 
@@ -77,6 +83,8 @@ const queue = new Queue<TPayload, TResult>(config)
77
83
  | `blockTimeout` | `number` | `5` | Seconds to wait when polling for jobs |
78
84
  | `visibilityTimeout` | `number` | `30000` | Milliseconds before a processing job is considered stalled |
79
85
  | `resultTTL` | `number` | `3600000` | Milliseconds to cache job results (1 hour) |
86
+ | `logger` | `pino.Logger` | `abstractLogger` | Logger used by queue/producer/consumer |
87
+ | `afterExecution` | `AfterExecutionHook<TPayload, TResult>` | `undefined` | Hook called after execution and before persisting terminal state |
80
88
  | `payloadSerde` | `Serde<TPayload>` | `JsonSerde` | Custom serializer for job payloads |
81
89
  | `resultSerde` | `Serde<TResult>` | `JsonSerde` | Custom serializer for job results |
82
90
 
@@ -109,7 +117,10 @@ queue.execute(async (job) => {
109
117
  Enqueue a job (fire-and-forget).
110
118
 
111
119
  ```typescript
112
- const result = await queue.enqueue('job-123', { data: 'value' })
120
+ const result = await queue.enqueue('job-123', { data: 'value' }, {
121
+ maxAttempts: 5,
122
+ resultTTL: 60_000 // optional per-job TTL override (ms)
123
+ })
113
124
 
114
125
  // result.status can be:
115
126
  // - 'queued': Job was added to the queue
@@ -124,12 +135,37 @@ Enqueue a job and wait for the result.
124
135
  ```typescript
125
136
  const result = await queue.enqueueAndWait('job-123', payload, {
126
137
  timeout: 30000, // Timeout in milliseconds
127
- maxAttempts: 5 // Override default max retries
138
+ maxAttempts: 5, // Override default max retries
139
+ resultTTL: 300000 // Optional per-job TTL override (ms)
128
140
  })
129
141
  ```
130
142
 
131
143
  Throws `TimeoutError` if the job doesn't complete within the timeout.
132
144
 
145
+ `resultTTL` behavior:
146
+ - If provided in `enqueue()` / `enqueueAndWait()`, it overrides the queue default for that job.
147
+ - If omitted, the producer uses the queue default `resultTTL` at enqueue time.
148
+ - For duplicate IDs, the first accepted enqueue defines the TTL for that job.
149
+
150
+ `afterExecution` hook behavior:
151
+ - Runs after a successful execution or after the final failed attempt, before terminal state is persisted.
152
+ - Receives a mutable context object (passed by reference), including `result`/`error` and `ttl`.
153
+ - You can update `context.ttl` to change the stored result/error TTL dynamically.
154
+ - You can replace `context.result` / `context.error` to affect what is persisted.
155
+ - `id` and `status` are informational; changing them has no effect on persistence.
156
+
157
+ ```typescript
158
+ const queue = new Queue<{ url: string }, { body: string; maxAgeMs?: number }>({
159
+ storage,
160
+ resultTTL: 60_000,
161
+ afterExecution: async (context) => {
162
+ if (context.status === 'completed' && context.result?.maxAgeMs) {
163
+ context.ttl = context.result.maxAgeMs
164
+ }
165
+ }
166
+ })
167
+ ```
168
+
133
169
  ##### `queue.cancel(id): Promise<CancelResult>`
134
170
 
135
171
  Cancel a queued job.
@@ -148,6 +184,22 @@ const result = await queue.cancel('job-123')
148
184
 
149
185
  Get the cached result of a completed job.
150
186
 
187
+ ##### `queue.updateResultTTL(id, ttlMs): Promise<UpdateResultTTLResult>`
188
+
189
+ Update TTL for a terminal job payload:
190
+ - completed jobs: updates cached result TTL
191
+ - failed jobs: updates cached error TTL
192
+
193
+ ```typescript
194
+ const update = await queue.updateResultTTL('job-123', 5 * 60_000)
195
+
196
+ // update.status can be:
197
+ // - 'updated'
198
+ // - 'not_found'
199
+ // - 'not_terminal'
200
+ // - 'missing_payload'
201
+ ```
202
+
151
203
  ##### `queue.getStatus(id): Promise<MessageStatus | null>`
152
204
 
153
205
  Get the current status of a job.
@@ -228,7 +280,8 @@ import { RedisStorage } from '@platformatic/job-queue'
228
280
 
229
281
  const storage = new RedisStorage({
230
282
  url: 'redis://localhost:6379',
231
- keyPrefix: 'myapp:' // Optional prefix for all keys
283
+ keyPrefix: 'myapp:', // Optional prefix for all keys
284
+ logger // Optional pino-compatible logger
232
285
  })
233
286
  ```
234
287
 
@@ -1,7 +1,8 @@
1
1
  import { EventEmitter } from 'node:events';
2
- import type { Storage } from './storage/types.ts';
2
+ import type { Logger } from 'pino';
3
3
  import type { Serde } from './serde/index.ts';
4
- import type { JobHandler } from './types.ts';
4
+ import type { Storage } from './storage/types.ts';
5
+ import type { AfterExecutionHook, JobHandler } from './types.ts';
5
6
  interface ConsumerConfig<TPayload, TResult> {
6
7
  storage: Storage;
7
8
  workerId: string;
@@ -12,6 +13,8 @@ interface ConsumerConfig<TPayload, TResult> {
12
13
  maxRetries?: number;
13
14
  resultTTL?: number;
14
15
  visibilityTimeout?: number;
16
+ afterExecution?: AfterExecutionHook<TPayload, TResult>;
17
+ logger?: Logger;
15
18
  }
16
19
  interface ConsumerEvents<TResult> {
17
20
  error: [error: Error];
@@ -1 +1 @@
1
- {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAqB,UAAU,EAAE,MAAM,YAAY,CAAA;AAI/D,UAAU,cAAc,CAAC,QAAQ,EAAE,OAAO;IACxC,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC9B,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,UAAU,cAAc,CAAC,OAAO;IAC9B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACrB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAClC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IACpD,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;CACvB;AAED;;GAEG;AACH,qBAAa,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAE,SAAQ,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;;gBAiBvE,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;IAatD;;OAEG;IACH,OAAO,CAAE,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI;IAItD;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAwB7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CA6K7B"}
1
+ {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAElC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAyB,kBAAkB,EAAO,UAAU,EAAgB,MAAM,YAAY,CAAA;AAG1G,UAAU,cAAc,CAAC,QAAQ,EAAE,OAAO;IACxC,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC9B,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACtD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,cAAc,CAAC,OAAO;IAC9B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACrB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAClC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IACpD,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;CACvB;AAQD;;GAEG;AACH,qBAAa,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAE,SAAQ,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;;gBAqBvE,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;IAetD;;OAEG;IACH,OAAO,CAAE,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI;IAKtD;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAyC7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAiR7B"}
package/dist/consumer.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import { EventEmitter } from 'node:events';
2
2
  import { MaxRetriesError } from "./errors.js";
3
3
  import { createJsonSerde } from "./serde/index.js";
4
+ import { abstractLogger, ensureLoggableError } from "./utils/logging.js";
5
+ const noopAfterExecution = async (_context) => { };
4
6
  /**
5
7
  * Consumer handles processing jobs from the queue
6
8
  */
@@ -14,10 +16,14 @@ export class Consumer extends EventEmitter {
14
16
  #maxRetries;
15
17
  #resultTTL;
16
18
  #visibilityTimeout;
19
+ #afterExecution;
20
+ #logger;
17
21
  #handler = null;
18
22
  #running = false;
19
23
  #activeJobs = 0;
20
24
  #abortController = null;
25
+ #workerLoops = [];
26
+ #loopsDone = null;
21
27
  #jobAbortControllers = new Map();
22
28
  constructor(config) {
23
29
  super();
@@ -30,76 +36,102 @@ export class Consumer extends EventEmitter {
30
36
  this.#maxRetries = config.maxRetries ?? 3;
31
37
  this.#resultTTL = config.resultTTL ?? 3600000;
32
38
  this.#visibilityTimeout = config.visibilityTimeout ?? 30000;
39
+ this.#afterExecution = config.afterExecution ?? noopAfterExecution;
40
+ this.#logger = (config.logger ?? abstractLogger).child({ component: 'consumer', workerId: this.#workerId });
33
41
  }
34
42
  /**
35
43
  * Register a job handler
36
44
  */
37
45
  execute(handler) {
38
46
  this.#handler = handler;
47
+ this.#logger.debug('Registered consumer handler.');
39
48
  }
40
49
  /**
41
50
  * Start consuming jobs
42
51
  */
43
52
  async start() {
44
- if (this.#running)
53
+ if (this.#running) {
54
+ this.#logger.trace('Consumer already running.');
45
55
  return;
56
+ }
46
57
  if (!this.#handler) {
47
58
  throw new Error('No handler registered. Call execute() first.');
48
59
  }
60
+ // Ensure any previous worker loops have exited before starting a new run.
61
+ if (this.#loopsDone) {
62
+ await this.#loopsDone;
63
+ this.#workerLoops = [];
64
+ this.#loopsDone = null;
65
+ }
49
66
  this.#running = true;
50
67
  this.#abortController = new AbortController();
68
+ this.#logger.debug({ concurrency: this.#concurrency }, 'Starting consumer.');
51
69
  // Register worker
52
70
  await this.#storage.registerWorker(this.#workerId, this.#visibilityTimeout * 2);
53
71
  // Start worker loops based on concurrency
54
- const loops = [];
72
+ const abortSignal = this.#abortController.signal;
73
+ this.#workerLoops = [];
55
74
  for (let i = 0; i < this.#concurrency; i++) {
56
- loops.push(this.#workerLoop());
75
+ const loopPromise = this.#workerLoop(abortSignal).catch(err => {
76
+ const error = err instanceof Error ? err : new Error(String(err));
77
+ this.#logger.error({ err: ensureLoggableError(error) }, 'Worker loop terminated with error.');
78
+ this.emit('error', error);
79
+ });
80
+ this.#workerLoops.push(loopPromise);
57
81
  }
58
- // Don't await - let them run in background
59
- Promise.all(loops).catch((err) => {
60
- this.emit('error', err);
61
- });
82
+ this.#loopsDone = Promise.allSettled(this.#workerLoops).then(() => { });
83
+ this.#logger.debug('Consumer started.');
62
84
  }
63
85
  /**
64
86
  * Stop consuming jobs gracefully
65
87
  */
66
88
  async stop() {
67
- if (!this.#running)
89
+ if (!this.#running) {
90
+ this.#logger.trace('Consumer already stopped.');
68
91
  return;
92
+ }
93
+ this.#logger.debug('Stopping consumer.');
69
94
  this.#running = false;
70
95
  // Signal abort to worker loops
71
- if (this.#abortController) {
72
- this.#abortController.abort();
73
- }
96
+ const abortController = this.#abortController;
97
+ this.#abortController = null;
98
+ abortController?.abort();
74
99
  // Wait for active jobs to complete (with timeout)
75
100
  const maxWait = this.#visibilityTimeout;
76
101
  const startTime = Date.now();
77
- while (this.#activeJobs > 0 && (Date.now() - startTime) < maxWait) {
102
+ while (this.#activeJobs > 0 && Date.now() - startTime < maxWait) {
78
103
  await new Promise(resolve => setTimeout(resolve, 100));
79
104
  }
105
+ if (this.#activeJobs > 0) {
106
+ this.#logger.warn({ activeJobs: this.#activeJobs }, 'Forcing abort of active jobs during stop.');
107
+ }
80
108
  // Abort any remaining jobs
81
109
  for (const [, controller] of this.#jobAbortControllers) {
82
110
  controller.abort();
83
111
  }
84
112
  this.#jobAbortControllers.clear();
113
+ // Worker loops are awaited on the next start() call.
85
114
  // Unregister worker
86
115
  await this.#storage.unregisterWorker(this.#workerId);
116
+ this.#logger.debug('Consumer stopped.');
87
117
  }
88
118
  /**
89
119
  * Worker loop that continuously dequeues and processes jobs
90
120
  */
91
- async #workerLoop() {
92
- while (this.#running) {
121
+ async #workerLoop(abortSignal) {
122
+ while (this.#running && !abortSignal.aborted) {
93
123
  try {
94
124
  const message = await this.#storage.dequeue(this.#workerId, this.#blockTimeout);
95
125
  if (!message) {
96
126
  // Timeout, check if still running
97
127
  continue;
98
128
  }
129
+ this.#logger.trace('Dequeued job message.');
99
130
  // Check if aborted
100
- if (this.#abortController?.signal.aborted) {
131
+ if (abortSignal.aborted) {
101
132
  // Put message back
102
133
  const queueMessage = this.#deserializeMessage(message);
134
+ this.#logger.warn({ id: queueMessage.id }, 'Consumer aborted while holding job, requeueing.');
103
135
  await this.#storage.requeue(queueMessage.id, message, this.#workerId);
104
136
  this.emit('requeued', queueMessage.id);
105
137
  break;
@@ -110,7 +142,9 @@ export class Consumer extends EventEmitter {
110
142
  catch (err) {
111
143
  if (!this.#running)
112
144
  break;
113
- this.emit('error', err);
145
+ const error = err instanceof Error ? err : new Error(String(err));
146
+ this.#logger.error({ err: ensureLoggableError(error) }, 'Worker loop error.');
147
+ this.emit('error', error);
114
148
  // Brief pause before retrying loop
115
149
  await new Promise(resolve => setTimeout(resolve, 1000));
116
150
  }
@@ -121,11 +155,14 @@ export class Consumer extends EventEmitter {
121
155
  */
122
156
  async #processJob(message) {
123
157
  const queueMessage = this.#deserializeMessage(message);
124
- const { id, payload, attempts, maxAttempts } = queueMessage;
158
+ const { id, payload, attempts, maxAttempts, createdAt } = queueMessage;
159
+ const resolvedTTL = queueMessage.resultTTL ?? this.#resultTTL;
160
+ this.#logger.trace({ id, attempts, maxAttempts, resolvedTTL }, 'Processing job.');
125
161
  // Check if job was cancelled (deleted from jobs hash)
126
162
  const state = await this.#storage.getJobState(id);
127
163
  if (!state) {
128
164
  // Job was cancelled, just ack it
165
+ this.#logger.debug({ id }, 'Acknowledging cancelled job.');
129
166
  await this.#storage.ack(id, message, this.#workerId);
130
167
  return;
131
168
  }
@@ -137,30 +174,49 @@ export class Consumer extends EventEmitter {
137
174
  const visibilityTimer = setTimeout(() => {
138
175
  jobAbortController.abort();
139
176
  }, this.#visibilityTimeout);
177
+ const currentAttempts = attempts + 1;
140
178
  // Update state to processing
141
- const timestamp = Date.now();
142
- await this.#storage.setJobState(id, `processing:${timestamp}:${this.#workerId}`);
179
+ const startedAt = Date.now();
180
+ await this.#storage.setJobState(id, `processing:${startedAt}:${this.#workerId}`);
143
181
  await this.#storage.publishEvent(id, 'processing');
182
+ this.#logger.trace({ id, attempt: currentAttempts }, 'Job marked as processing.');
144
183
  try {
145
184
  const job = {
146
185
  id,
147
186
  payload,
148
- attempts: attempts + 1,
187
+ attempts: currentAttempts,
149
188
  signal: jobAbortController.signal
150
189
  };
151
190
  const result = await this.#executeHandler(job);
152
191
  // Clear visibility timer
153
192
  clearTimeout(visibilityTimer);
193
+ const finishedAt = Date.now();
194
+ const context = await this.#runAfterExecution({
195
+ id,
196
+ payload,
197
+ attempts: currentAttempts,
198
+ maxAttempts,
199
+ createdAt,
200
+ status: 'completed',
201
+ result,
202
+ ttl: resolvedTTL,
203
+ workerId: this.#workerId,
204
+ startedAt,
205
+ finishedAt,
206
+ durationMs: finishedAt - startedAt
207
+ });
208
+ const finalResult = context.result;
154
209
  // Complete the job
155
- const serializedResult = this.#resultSerde.serialize(result);
156
- await this.#storage.completeJob(id, message, this.#workerId, serializedResult, this.#resultTTL);
157
- this.emit('completed', id, result);
210
+ const serializedResult = this.#resultSerde.serialize(finalResult);
211
+ await this.#storage.completeJob(id, message, this.#workerId, serializedResult, context.ttl);
212
+ this.#logger.debug({ id, ttl: context.ttl }, 'Job completed and persisted.');
213
+ this.emit('completed', id, finalResult);
158
214
  }
159
215
  catch (err) {
160
216
  // Clear visibility timer
161
217
  clearTimeout(visibilityTimer);
162
218
  const error = err;
163
- const currentAttempts = attempts + 1;
219
+ this.#logger.warn({ id, attempt: currentAttempts, err: ensureLoggableError(error) }, 'Job handler failed.');
164
220
  if (currentAttempts < maxAttempts) {
165
221
  // Retry - update message with incremented attempts
166
222
  const updatedMessage = {
@@ -169,24 +225,63 @@ export class Consumer extends EventEmitter {
169
225
  };
170
226
  const serializedMessage = this.#payloadSerde.serialize(updatedMessage);
171
227
  await this.#storage.retryJob(id, serializedMessage, this.#workerId, currentAttempts);
228
+ this.#logger.warn({ id, attempt: currentAttempts }, 'Job scheduled for retry.');
172
229
  this.emit('failing', id, error, currentAttempts);
173
230
  }
174
231
  else {
175
232
  // Max retries exceeded - fail the job
176
- const maxRetriesError = new MaxRetriesError(id, currentAttempts, error);
177
- const serializedError = Buffer.from(JSON.stringify({
178
- message: error.message,
179
- code: error.code,
180
- stack: error.stack
181
- }));
182
- await this.#storage.failJob(id, message, this.#workerId, serializedError, this.#resultTTL);
233
+ const finishedAt = Date.now();
234
+ const context = await this.#runAfterExecution({
235
+ id,
236
+ payload,
237
+ attempts: currentAttempts,
238
+ maxAttempts,
239
+ createdAt,
240
+ status: 'failed',
241
+ error,
242
+ ttl: resolvedTTL,
243
+ workerId: this.#workerId,
244
+ startedAt,
245
+ finishedAt,
246
+ durationMs: finishedAt - startedAt
247
+ });
248
+ const finalError = context.error ?? error;
249
+ const maxRetriesError = new MaxRetriesError(id, currentAttempts, finalError);
250
+ const serializedError = Buffer.from(JSON.stringify(typeof finalError.toJSON === 'function'
251
+ ? finalError.toJSON()
252
+ : {
253
+ message: finalError.message,
254
+ code: finalError.code,
255
+ stack: finalError.stack
256
+ }));
257
+ await this.#storage.failJob(id, message, this.#workerId, serializedError, context.ttl);
258
+ this.#logger.error({ id, attempts: currentAttempts, ttl: context.ttl, err: ensureLoggableError(maxRetriesError) }, 'Job failed permanently.');
183
259
  this.emit('failed', id, maxRetriesError);
184
260
  }
185
261
  }
186
262
  finally {
187
263
  this.#jobAbortControllers.delete(id);
188
264
  this.#activeJobs--;
265
+ this.#logger.trace({ id, activeJobs: this.#activeJobs }, 'Finished job processing cycle.');
266
+ }
267
+ }
268
+ async #runAfterExecution(context) {
269
+ const originalTTL = context.ttl;
270
+ try {
271
+ await this.#afterExecution(context);
272
+ }
273
+ catch (err) {
274
+ const error = err instanceof Error ? err : new Error(String(err));
275
+ this.#logger.error({ id: context.id, err: ensureLoggableError(error) }, 'AfterExecution hook failed, restoring original TTL.');
276
+ this.emit('error', error);
277
+ context.ttl = originalTTL;
278
+ }
279
+ if (!Number.isFinite(context.ttl) || !Number.isInteger(context.ttl) || context.ttl <= 0) {
280
+ this.#logger.warn({ id: context.id, ttl: context.ttl }, 'Invalid TTL from afterExecution, restoring original TTL.');
281
+ this.emit('error', new TypeError('resultTTL must be a positive integer in milliseconds'));
282
+ context.ttl = originalTTL;
189
283
  }
284
+ return context;
190
285
  }
191
286
  /**
192
287
  * Execute the job handler (supports both async and callback styles)
@@ -196,6 +291,7 @@ export class Consumer extends EventEmitter {
196
291
  // Check if callback style (handler.length > 1)
197
292
  if (handler.length > 1) {
198
293
  return new Promise((resolve, reject) => {
294
+ ;
199
295
  handler(job, (err, result) => {
200
296
  if (err)
201
297
  reject(err);
@@ -1 +1 @@
1
- {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type { QueueMessage, MessageState, MessageStatus, EnqueueOptions, EnqueueAndWaitOptions, EnqueueResult, CancelResult, Job, JobHandler, QueueConfig, QueueEvents } from './types.ts';
1
+ export type { QueueMessage, MessageState, MessageStatus, UpdateResultTTLResult, EnqueueOptions, EnqueueAndWaitOptions, EnqueueResult, CancelResult, Job, AfterExecutionContext, AfterExecutionHook, JobHandler, QueueConfig, QueueEvents } from './types.ts';
2
2
  export { JobQueueError, TimeoutError, MaxRetriesError, JobNotFoundError, StorageError, JobCancelledError, JobFailedError } from './errors.ts';
3
3
  export type { Serde } from './serde/index.ts';
4
4
  export { JsonSerde, createJsonSerde } from './serde/index.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,GAAG,EACH,UAAU,EACV,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACf,MAAM,aAAa,CAAA;AAGpB,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAG7D,YAAY,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGlC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,GAAG,EACH,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACf,MAAM,aAAa,CAAA;AAGpB,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAG7D,YAAY,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGlC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,SAAS;AACT,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACf,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAI7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,QAAQ;AACR,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,SAAS;AACT,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACf,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAI7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,QAAQ;AACR,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA"}
@@ -1,12 +1,14 @@
1
- import type { Storage } from './storage/types.ts';
1
+ import type { Logger } from 'pino';
2
2
  import type { Serde } from './serde/index.ts';
3
- import type { EnqueueOptions, EnqueueAndWaitOptions, EnqueueResult, CancelResult, MessageStatus } from './types.ts';
3
+ import type { Storage } from './storage/types.ts';
4
+ import type { CancelResult, EnqueueAndWaitOptions, EnqueueOptions, EnqueueResult, MessageStatus, UpdateResultTTLResult } from './types.ts';
4
5
  interface ProducerConfig<TPayload, TResult> {
5
6
  storage: Storage;
6
7
  payloadSerde?: Serde<TPayload>;
7
8
  resultSerde?: Serde<TResult>;
8
9
  maxRetries?: number;
9
10
  resultTTL?: number;
11
+ logger?: Logger;
10
12
  }
11
13
  /**
12
14
  * Producer handles enqueueing jobs and retrieving results
@@ -30,6 +32,10 @@ export declare class Producer<TPayload, TResult> {
30
32
  * Get the result of a completed job
31
33
  */
32
34
  getResult(id: string): Promise<TResult | null>;
35
+ /**
36
+ * Update TTL for a terminal job payload (result for completed jobs, error for failed jobs).
37
+ */
38
+ updateResultTTL(id: string, ttlMs: number): Promise<UpdateResultTTLResult>;
33
39
  /**
34
40
  * Get the status of a job
35
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"producer.d.ts","sourceRoot":"","sources":["../src/producer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAEV,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,aAAa,EAEd,MAAM,YAAY,CAAA;AAKnB,UAAU,cAAc,CAAC,QAAQ,EAAE,OAAO;IACxC,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC9B,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,qBAAa,QAAQ,CAAC,QAAQ,EAAE,OAAO;;gBAOxB,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;IAQtD;;OAEG;IACG,OAAO,CACX,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,QAAQ,EACjB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IA+BlC;;OAEG;IACG,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,QAAQ,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,OAAO,CAAC;IAoDnB;;OAEG;IACG,MAAM,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0BhD;;OAEG;IACG,SAAS,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAQrD;;OAEG;IACG,SAAS,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAkCrE"}
1
+ {"version":3,"file":"producer.d.ts","sourceRoot":"","sources":["../src/producer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAElC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EACV,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,aAAa,EAGb,qBAAqB,EACtB,MAAM,YAAY,CAAA;AAInB,UAAU,cAAc,CAAC,QAAQ,EAAE,OAAO;IACxC,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC9B,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,qBAAa,QAAQ,CAAC,QAAQ,EAAE,OAAO;;gBAQxB,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;IAStD;;OAEG;IACG,OAAO,CAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAuCxG;;OAEG;IACG,cAAc,CAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IA2DvG;;OAEG;IACG,MAAM,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA6BhD;;OAEG;IACG,SAAS,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IASrD;;OAEG;IACG,eAAe,CAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAqCjF;;OAEG;IACG,SAAS,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAyCrE"}