agenda 6.0.0 → 6.2.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.
package/dist/index.d.ts CHANGED
@@ -3,11 +3,13 @@ import { ForkOptions } from 'child_process';
3
3
  import type { JobDefinition } from './types/JobDefinition.js';
4
4
  import type { AgendaConfig } from './types/AgendaConfig.js';
5
5
  import type { AgendaBackend } from './types/AgendaBackend.js';
6
- import type { NotificationChannel } from './types/NotificationChannel.js';
6
+ import type { NotificationChannel, JobStateNotification, JobStateType } from './types/NotificationChannel.js';
7
7
  import type { JobRepository } from './types/JobRepository.js';
8
8
  import type { AgendaStatus } from './types/AgendaStatus.js';
9
9
  import type { JobsQueryOptions, JobsResult, JobsOverview } from './types/JobQuery.js';
10
10
  import type { RemoveJobsOptions } from './types/JobRepository.js';
11
+ import type { DrainOptions, DrainResult } from './types/DrainOptions.js';
12
+ import type { JobLogger, JobLogEntry, JobLogQuery, JobLogQueryResult } from './types/JobLogger.js';
11
13
  import { Job, JobWithId } from './Job.js';
12
14
  import { JobPriority } from './utils/priority.js';
13
15
  /**
@@ -30,6 +32,8 @@ export interface AgendaOptions {
30
32
  lockLimit?: number;
31
33
  /** Default lock lifetime in milliseconds */
32
34
  defaultLockLifetime?: number;
35
+ /** Automatically remove one-time jobs from database after successful completion */
36
+ removeOnComplete?: boolean;
33
37
  /** Fork helper configuration for sandboxed workers */
34
38
  forkHelper?: {
35
39
  path: string;
@@ -43,6 +47,52 @@ export interface AgendaOptions {
43
47
  * e.g., MongoDB storage + Redis notifications
44
48
  */
45
49
  notificationChannel?: NotificationChannel;
50
+ /**
51
+ * Enable persistent job event logging (stored in the backend's database).
52
+ *
53
+ * Disabled by default. When enabled, all job lifecycle events (start, success,
54
+ * fail, complete, retry, etc.) are persisted and can be queried via
55
+ * `agenda.getLogs()` or viewed in agendash.
56
+ *
57
+ * Options:
58
+ * - `true` — use the backend's built-in logger, all jobs are logged
59
+ * - `false` / omitted — no logging (default)
60
+ * - `JobLogger` — use a custom logger instance, all jobs are logged
61
+ * - `{ logger?: JobLogger, default?: boolean }` — fine-grained control:
62
+ * - `logger`: custom `JobLogger` (omit to use backend's built-in logger)
63
+ * - `default`: whether job definitions are logged by default (`true` = all logged,
64
+ * `false` = only jobs with `logging: true` in their definition are logged).
65
+ * Defaults to `true`.
66
+ *
67
+ * Per-job definitions can override the default via `define('job', fn, { logging: false })`.
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * // Enable — log all jobs using backend's logger
72
+ * const agenda = new Agenda({ backend, logging: true });
73
+ *
74
+ * // Enable — opt-in per job (logger configured, but off by default)
75
+ * const agenda = new Agenda({ backend, logging: { default: false } });
76
+ * agenda.define('important', handler, { logging: true }); // logged
77
+ * agenda.define('noisy', handler); // NOT logged
78
+ *
79
+ * // Enable — custom logger (e.g., log to Postgres while using Mongo for storage)
80
+ * const agenda = new Agenda({ backend, logging: myPostgresJobLogger });
81
+ *
82
+ * // Enable — custom logger + opt-in per job
83
+ * const agenda = new Agenda({
84
+ * backend,
85
+ * logging: { logger: myPostgresJobLogger, default: false }
86
+ * });
87
+ *
88
+ * // Query logs
89
+ * const { entries } = await agenda.getLogs({ jobName: 'myJob', limit: 100 });
90
+ * ```
91
+ */
92
+ logging?: boolean | JobLogger | {
93
+ logger?: JobLogger;
94
+ default?: boolean;
95
+ };
46
96
  }
47
97
  /**
48
98
  * Details provided when a job is scheduled for retry
@@ -74,19 +124,46 @@ export declare class Agenda extends EventEmitter {
74
124
  private backend;
75
125
  db: JobRepository;
76
126
  private notificationChannel?;
127
+ private stateSubscriptionUnsubscribe?;
128
+ /**
129
+ * The persistent job logger for storing job lifecycle events in the database.
130
+ * Disabled by default. Enable via `logging: true` (uses backend's built-in logger)
131
+ * or by passing a custom `JobLogger` implementation.
132
+ */
133
+ jobLogger?: JobLogger;
134
+ /**
135
+ * Default logging behavior for job definitions that don't explicitly set `logging`.
136
+ * When `true` (default when logging is enabled), all jobs are logged.
137
+ * When `false`, only jobs with `logging: true` in their definition are logged.
138
+ */
139
+ loggingDefault: boolean;
77
140
  on(event: 'ready', listener: () => void): this;
78
141
  on(event: 'error', listener: (error: Error) => void): this;
79
- on(event: 'fail', listener: (error: Error, job: JobWithId) => void): this;
80
- on(event: 'success', listener: (job: JobWithId) => void): this;
81
- on(event: 'start', listener: (job: JobWithId) => void): this;
82
- on(event: 'complete', listener: (job: JobWithId) => void): this;
83
- on(event: 'retry', listener: (job: JobWithId, details: RetryDetails) => void): this;
142
+ on(event: 'fail', listener: (error: Error, job: JobWithId, remote?: false) => void): this;
143
+ on(event: 'fail', listener: (error: string, job: JobStateNotification, remote: true) => void): this;
144
+ on(event: 'success', listener: (job: JobWithId, remote?: false) => void): this;
145
+ on(event: 'success', listener: (job: JobStateNotification, remote: true) => void): this;
146
+ on(event: 'start', listener: (job: JobWithId, remote?: false) => void): this;
147
+ on(event: 'start', listener: (job: JobStateNotification, remote: true) => void): this;
148
+ on(event: 'complete', listener: (job: JobWithId, remote?: false) => void): this;
149
+ on(event: 'complete', listener: (job: JobStateNotification, remote: true) => void): this;
150
+ on(event: 'progress', listener: (job: JobWithId, remote?: false) => void): this;
151
+ on(event: 'progress', listener: (job: JobStateNotification, remote: true) => void): this;
152
+ on(event: 'retry', listener: (job: JobWithId, details: RetryDetails, remote?: false) => void): this;
153
+ on(event: 'retry', listener: (job: JobStateNotification, details: RetryDetails, remote: true) => void): this;
84
154
  on(event: 'retry exhausted', listener: (error: Error, job: JobWithId) => void): this;
85
- on(event: `fail:${string}`, listener: (error: Error, job: JobWithId) => void): this;
86
- on(event: `success:${string}`, listener: (job: JobWithId) => void): this;
87
- on(event: `start:${string}`, listener: (job: JobWithId) => void): this;
88
- on(event: `complete:${string}`, listener: (job: JobWithId) => void): this;
89
- on(event: `retry:${string}`, listener: (job: JobWithId, details: RetryDetails) => void): this;
155
+ on(event: `fail:${string}`, listener: (error: Error, job: JobWithId, remote?: false) => void): this;
156
+ on(event: `fail:${string}`, listener: (error: string, job: JobStateNotification, remote: true) => void): this;
157
+ on(event: `success:${string}`, listener: (job: JobWithId, remote?: false) => void): this;
158
+ on(event: `success:${string}`, listener: (job: JobStateNotification, remote: true) => void): this;
159
+ on(event: `start:${string}`, listener: (job: JobWithId, remote?: false) => void): this;
160
+ on(event: `start:${string}`, listener: (job: JobStateNotification, remote: true) => void): this;
161
+ on(event: `complete:${string}`, listener: (job: JobWithId, remote?: false) => void): this;
162
+ on(event: `complete:${string}`, listener: (job: JobStateNotification, remote: true) => void): this;
163
+ on(event: `progress:${string}`, listener: (job: JobWithId, remote?: false) => void): this;
164
+ on(event: `progress:${string}`, listener: (job: JobStateNotification, remote: true) => void): this;
165
+ on(event: `retry:${string}`, listener: (job: JobWithId, details: RetryDetails, remote?: false) => void): this;
166
+ on(event: `retry:${string}`, listener: (job: JobStateNotification, details: RetryDetails, remote: true) => void): this;
90
167
  on(event: `retry exhausted:${string}`, listener: (error: Error, job: JobWithId) => void): this;
91
168
  readonly definitions: {
92
169
  [name: string]: JobDefinition;
@@ -163,11 +240,45 @@ export declare class Agenda extends EventEmitter {
163
240
  * Check if a notification channel is configured
164
241
  */
165
242
  hasNotificationChannel(): boolean;
243
+ /**
244
+ * Check if persistent job logging is enabled
245
+ */
246
+ hasJobLogger(): boolean;
247
+ /**
248
+ * Log a job lifecycle event to the persistent job logger (fire-and-forget).
249
+ * Does nothing if no job logger is configured or if logging is disabled
250
+ * for the job definition (respects per-definition `logging` and the global `loggingDefault`).
251
+ * @internal
252
+ */
253
+ logJobEvent(entry: Omit<JobLogEntry, '_id' | 'timestamp' | 'agendaName'>): void;
254
+ /**
255
+ * Query persistent job logs.
256
+ * Returns empty result if no job logger is configured.
257
+ */
258
+ getLogs(query?: JobLogQuery): Promise<JobLogQueryResult>;
259
+ /**
260
+ * Clear persistent job logs matching the query.
261
+ * Returns 0 if no job logger is configured.
262
+ */
263
+ clearLogs(query?: JobLogQuery): Promise<number>;
166
264
  /**
167
265
  * Publish a job notification to the notification channel
168
266
  * @internal
169
267
  */
170
268
  publishJobNotification(job: Job): Promise<void>;
269
+ /**
270
+ * Publish a job state notification to the notification channel.
271
+ * This enables bi-directional communication so that all subscribers
272
+ * can receive job lifecycle events (start, success, fail, complete, etc.)
273
+ * @internal
274
+ */
275
+ publishJobStateNotification(job: Job, type: JobStateType, extra?: Partial<Omit<JobStateNotification, 'type' | 'jobId' | 'jobName' | 'timestamp' | 'source'>>): void;
276
+ /**
277
+ * Subscribe to state notifications and re-emit them as regular events.
278
+ * This allows `agenda.on('success:jobName', ...)` to work across processes.
279
+ * @internal
280
+ */
281
+ private subscribeToStateNotifications;
171
282
  /**
172
283
  * Query jobs with database-agnostic options.
173
284
  * Returns jobs with computed states and supports filtering by state.
@@ -196,10 +307,10 @@ export declare class Agenda extends EventEmitter {
196
307
  * @param processor
197
308
  * @param options
198
309
  */
199
- define<DATA = any>(name: string, processor: (agendaJob: Job<DATA>, done: (error?: Error) => void) => void, options?: Partial<Pick<JobDefinition, 'lockLimit' | 'lockLifetime' | 'concurrency' | 'backoff'>> & {
310
+ define<DATA = any>(name: string, processor: (agendaJob: Job<DATA>, done: (error?: Error) => void) => void, options?: Partial<Pick<JobDefinition, 'lockLimit' | 'lockLifetime' | 'concurrency' | 'backoff' | 'removeOnComplete' | 'logging'>> & {
200
311
  priority?: JobPriority;
201
312
  }): void;
202
- define<DATA = any>(name: string, processor: (agendaJob: Job<DATA>) => Promise<void>, options?: Partial<Pick<JobDefinition, 'lockLimit' | 'lockLifetime' | 'concurrency' | 'backoff'>> & {
313
+ define<DATA = any>(name: string, processor: (agendaJob: Job<DATA>) => Promise<void>, options?: Partial<Pick<JobDefinition, 'lockLimit' | 'lockLifetime' | 'concurrency' | 'backoff' | 'removeOnComplete' | 'logging'>> & {
203
314
  priority?: JobPriority;
204
315
  }): void;
205
316
  /**
@@ -337,11 +448,31 @@ export declare class Agenda extends EventEmitter {
337
448
  * Waits for all currently running jobs to finish before stopping.
338
449
  * This allows for a graceful shutdown where jobs complete their work.
339
450
  * Unlike stop(), this method waits for running jobs to complete instead of unlocking them.
340
- * @param closeConnection - Whether to close the database connection.
341
- * Defaults to backend.ownsConnection (true if backend created the connection,
342
- * false if connection was passed in by user).
451
+ *
452
+ * @param options - Drain options or timeout in milliseconds
453
+ * - `timeout`: Maximum time to wait for jobs to complete
454
+ * - `signal`: AbortSignal to cancel the drain operation
455
+ * - `closeConnection`: Whether to close the database connection (default: backend.ownsConnection)
456
+ * @returns DrainResult with completion statistics
457
+ *
458
+ * @example
459
+ * // Wait indefinitely for all jobs to complete
460
+ * await agenda.drain();
461
+ *
462
+ * @example
463
+ * // Wait up to 30 seconds
464
+ * const result = await agenda.drain(30000);
465
+ * if (result.timedOut) console.log(`${result.running} jobs still running`);
466
+ *
467
+ * @example
468
+ * // Use AbortSignal for external control
469
+ * const controller = new AbortController();
470
+ * setTimeout(() => controller.abort(), 30000);
471
+ * await agenda.drain({ signal: controller.signal });
343
472
  */
344
- drain(closeConnection?: boolean): Promise<void>;
473
+ drain(options?: number | (DrainOptions & {
474
+ closeConnection?: boolean;
475
+ })): Promise<DrainResult>;
345
476
  }
346
477
  export * from './types/AgendaConfig.js';
347
478
  export * from './types/JobDefinition.js';
@@ -353,7 +484,9 @@ export * from './types/JobRepository.js';
353
484
  export * from './types/NotificationChannel.js';
354
485
  export * from './types/AgendaBackend.js';
355
486
  export * from './types/AgendaStatus.js';
487
+ export * from './types/DrainOptions.js';
356
488
  export * from './notifications/index.js';
489
+ export * from './types/JobLogger.js';
357
490
  export { applyAllDateConstraints, applyDateRangeConstraints, applySkipDays, shouldSkipDay, isWithinDateRange } from './utils/dateConstraints.js';
358
491
  export * from './decorators/index.js';
359
492
  export { backoffStrategies, constant, linear, exponential, combine, when, type BackoffStrategy, type BackoffContext, type BackoffOptions, type ExponentialBackoffOptions, type LinearBackoffOptions } from './utils/backoff.js';
package/dist/index.js CHANGED
@@ -13,7 +13,8 @@ const DefaultOptions = {
13
13
  defaultLockLimit: 0,
14
14
  lockLimit: 0,
15
15
  defaultLockLifetime: 10 * 60 * 1000,
16
- forkHelper: { path: 'dist/childWorker.js' }
16
+ forkHelper: { path: 'dist/childWorker.js' },
17
+ removeOnComplete: false
17
18
  };
18
19
  /**
19
20
  * @class
@@ -25,6 +26,19 @@ export class Agenda extends EventEmitter {
25
26
  backend;
26
27
  db;
27
28
  notificationChannel;
29
+ stateSubscriptionUnsubscribe;
30
+ /**
31
+ * The persistent job logger for storing job lifecycle events in the database.
32
+ * Disabled by default. Enable via `logging: true` (uses backend's built-in logger)
33
+ * or by passing a custom `JobLogger` implementation.
34
+ */
35
+ jobLogger;
36
+ /**
37
+ * Default logging behavior for job definitions that don't explicitly set `logging`.
38
+ * When `true` (default when logging is enabled), all jobs are logged.
39
+ * When `false`, only jobs with `logging: true` in their definition are logged.
40
+ */
41
+ loggingDefault;
28
42
  // Implementation (eslint-disable needed because overloads provide the public type safety)
29
43
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
44
  on(event, listener) {
@@ -74,10 +88,32 @@ export class Agenda extends EventEmitter {
74
88
  maxConcurrency: config.maxConcurrency || DefaultOptions.maxConcurrency,
75
89
  defaultLockLimit: config.defaultLockLimit || DefaultOptions.defaultLockLimit,
76
90
  lockLimit: config.lockLimit || DefaultOptions.lockLimit,
77
- defaultLockLifetime: config.defaultLockLifetime || DefaultOptions.defaultLockLifetime
91
+ defaultLockLifetime: config.defaultLockLifetime || DefaultOptions.defaultLockLifetime,
92
+ removeOnComplete: config.removeOnComplete ?? DefaultOptions.removeOnComplete
78
93
  };
79
94
  this.forkedWorker = config.forkedWorker;
80
95
  this.forkHelper = config.forkHelper;
96
+ // Initialize persistent job logger: disabled by default
97
+ if (config.logging === true) {
98
+ // Use backend's built-in logger, all jobs logged
99
+ this.jobLogger = config.backend.logger;
100
+ this.loggingDefault = true;
101
+ }
102
+ else if (config.logging && typeof config.logging === 'object' && 'log' in config.logging) {
103
+ // Passed a JobLogger instance directly — all jobs logged
104
+ this.jobLogger = config.logging;
105
+ this.loggingDefault = true;
106
+ }
107
+ else if (config.logging && typeof config.logging === 'object') {
108
+ // Options object: { logger?, default? }
109
+ const opts = config.logging;
110
+ this.jobLogger = opts.logger ?? config.backend.logger;
111
+ this.loggingDefault = opts.default ?? true;
112
+ }
113
+ else {
114
+ // Logging disabled (false / omitted)
115
+ this.loggingDefault = true;
116
+ }
81
117
  // Store backend and get repository
82
118
  this.backend = config.backend;
83
119
  this.db = config.backend.repository;
@@ -231,6 +267,57 @@ export class Agenda extends EventEmitter {
231
267
  hasNotificationChannel() {
232
268
  return !!this.notificationChannel;
233
269
  }
270
+ /**
271
+ * Check if persistent job logging is enabled
272
+ */
273
+ hasJobLogger() {
274
+ return !!this.jobLogger;
275
+ }
276
+ /**
277
+ * Log a job lifecycle event to the persistent job logger (fire-and-forget).
278
+ * Does nothing if no job logger is configured or if logging is disabled
279
+ * for the job definition (respects per-definition `logging` and the global `loggingDefault`).
280
+ * @internal
281
+ */
282
+ logJobEvent(entry) {
283
+ if (!this.jobLogger)
284
+ return;
285
+ // Per-definition logging overrides the global default.
286
+ // If definition.logging is undefined, fall back to loggingDefault.
287
+ const definition = this.definitions[entry.jobName];
288
+ const enabled = definition?.logging ?? this.loggingDefault;
289
+ if (!enabled)
290
+ return;
291
+ this.jobLogger
292
+ .log({
293
+ ...entry,
294
+ timestamp: new Date(),
295
+ agendaName: this.attrs.name || undefined
296
+ })
297
+ .catch(err => {
298
+ log('failed to write job log entry: %O', err);
299
+ });
300
+ }
301
+ /**
302
+ * Query persistent job logs.
303
+ * Returns empty result if no job logger is configured.
304
+ */
305
+ async getLogs(query) {
306
+ if (!this.jobLogger) {
307
+ return { entries: [], total: 0 };
308
+ }
309
+ return this.jobLogger.getLogs(query);
310
+ }
311
+ /**
312
+ * Clear persistent job logs matching the query.
313
+ * Returns 0 if no job logger is configured.
314
+ */
315
+ async clearLogs(query) {
316
+ if (!this.jobLogger) {
317
+ return 0;
318
+ }
319
+ return this.jobLogger.clearLogs(query);
320
+ }
234
321
  /**
235
322
  * Publish a job notification to the notification channel
236
323
  * @internal
@@ -257,6 +344,84 @@ export class Agenda extends EventEmitter {
257
344
  this.emit('error', error);
258
345
  }
259
346
  }
347
+ /**
348
+ * Publish a job state notification to the notification channel.
349
+ * This enables bi-directional communication so that all subscribers
350
+ * can receive job lifecycle events (start, success, fail, complete, etc.)
351
+ * @internal
352
+ */
353
+ publishJobStateNotification(job, type, extra) {
354
+ if (!this.notificationChannel ||
355
+ this.notificationChannel.state !== 'connected' ||
356
+ !this.notificationChannel.publishState) {
357
+ // Channel not configured, not connected, or doesn't support state notifications
358
+ return;
359
+ }
360
+ const notification = {
361
+ type,
362
+ jobId: job.attrs._id,
363
+ jobName: job.attrs.name,
364
+ timestamp: new Date(),
365
+ source: this.attrs.name || undefined,
366
+ ...extra
367
+ };
368
+ // fire+forget
369
+ this.notificationChannel
370
+ .publishState(notification)
371
+ .then(() => {
372
+ log('published job state notification [%s] for [%s:%s]', type, job.attrs.name, job.attrs._id);
373
+ })
374
+ .catch(error => {
375
+ log('failed to publish job state notification [%s] for [%s:%s]', type, job.attrs.name, job.attrs._id, error);
376
+ this.emit('error', error);
377
+ });
378
+ }
379
+ /**
380
+ * Subscribe to state notifications and re-emit them as regular events.
381
+ * This allows `agenda.on('success:jobName', ...)` to work across processes.
382
+ * @internal
383
+ */
384
+ subscribeToStateNotifications() {
385
+ if (!this.notificationChannel?.subscribeState) {
386
+ return () => { };
387
+ }
388
+ return this.notificationChannel.subscribeState(notification => {
389
+ // Skip events from our own instance to avoid double-firing
390
+ // (we already emit locally in Job.run())
391
+ // Handle both empty strings and undefined as "same source" when both are falsy
392
+ const notificationSource = notification.source || '';
393
+ const ourSource = this.attrs.name || '';
394
+ if (notificationSource === ourSource) {
395
+ return;
396
+ }
397
+ log('received remote state notification [%s] for [%s:%s]', notification.type, notification.jobName, notification.jobId);
398
+ // Use nextTick to ensure local events are processed first
399
+ // This prevents race conditions where remote events arrive before local processing completes
400
+ process.nextTick(() => {
401
+ // Re-emit as regular events with remote=true flag
402
+ // For 'fail' events, the first argument is the error
403
+ if (notification.type === 'fail') {
404
+ this.emit('fail', notification.error, notification, true);
405
+ this.emit(`fail:${notification.jobName}`, notification.error, notification, true);
406
+ }
407
+ else if (notification.type === 'retry') {
408
+ // For 'retry' events, pass retry details as second argument
409
+ const retryDetails = {
410
+ attempt: notification.retryAttempt || 1,
411
+ delay: 0, // Not available in notification
412
+ nextRunAt: notification.retryAt || new Date(),
413
+ error: new Error(notification.error || 'Unknown error')
414
+ };
415
+ this.emit('retry', notification, retryDetails, true);
416
+ this.emit(`retry:${notification.jobName}`, notification, retryDetails, true);
417
+ }
418
+ else {
419
+ this.emit(notification.type, notification, true);
420
+ this.emit(`${notification.type}:${notification.jobName}`, notification, true);
421
+ }
422
+ });
423
+ });
424
+ }
260
425
  /**
261
426
  * Query jobs with database-agnostic options.
262
427
  * Returns jobs with computed states and supports filtering by state.
@@ -299,7 +464,9 @@ export class Agenda extends EventEmitter {
299
464
  lockLimit: options?.lockLimit || this.attrs.defaultLockLimit,
300
465
  priority: parsePriority(options?.priority),
301
466
  lockLifetime: options?.lockLifetime || this.attrs.defaultLockLifetime,
302
- backoff: options?.backoff
467
+ backoff: options?.backoff,
468
+ removeOnComplete: options?.removeOnComplete ?? this.attrs.removeOnComplete,
469
+ logging: options?.logging
303
470
  };
304
471
  log('job [%s] defined with following options: \n%O', name, this.definitions[name]);
305
472
  }
@@ -425,9 +592,7 @@ export class Agenda extends EventEmitter {
425
592
  log('Agenda.nowDebounced(%s, [Object], %O, %d)', name, uniqueKey, debounceMs);
426
593
  try {
427
594
  const job = this.create(name, data);
428
- job.schedule(new Date())
429
- .unique(uniqueKey)
430
- .debounce(debounceMs, options);
595
+ job.schedule(new Date()).unique(uniqueKey).debounce(debounceMs, options);
431
596
  await job.save();
432
597
  return job;
433
598
  }
@@ -451,6 +616,8 @@ export class Agenda extends EventEmitter {
451
616
  if (this.notificationChannel) {
452
617
  log('Agenda.start connecting notification channel');
453
618
  await this.notificationChannel.connect();
619
+ // Subscribe to state notifications for cross-process event propagation
620
+ this.stateSubscriptionUnsubscribe = this.subscribeToStateNotifications();
454
621
  }
455
622
  this.jobProcessor = new JobProcessor(this, this.attrs.maxConcurrency, this.attrs.lockLimit, this.attrs.processEvery, this.notificationChannel);
456
623
  }
@@ -473,6 +640,11 @@ export class Agenda extends EventEmitter {
473
640
  log('about to unlock jobs with ids: %O', jobIds);
474
641
  await this.db.unlockJobs(jobIds);
475
642
  }
643
+ // Unsubscribe from state notifications
644
+ if (this.stateSubscriptionUnsubscribe) {
645
+ this.stateSubscriptionUnsubscribe();
646
+ this.stateSubscriptionUnsubscribe = undefined;
647
+ }
476
648
  // Disconnect notification channel if configured (we always disconnect since we connected it in start)
477
649
  if (this.notificationChannel) {
478
650
  log('Agenda.stop disconnecting notification channel');
@@ -491,30 +663,56 @@ export class Agenda extends EventEmitter {
491
663
  * Waits for all currently running jobs to finish before stopping.
492
664
  * This allows for a graceful shutdown where jobs complete their work.
493
665
  * Unlike stop(), this method waits for running jobs to complete instead of unlocking them.
494
- * @param closeConnection - Whether to close the database connection.
495
- * Defaults to backend.ownsConnection (true if backend created the connection,
496
- * false if connection was passed in by user).
666
+ *
667
+ * @param options - Drain options or timeout in milliseconds
668
+ * - `timeout`: Maximum time to wait for jobs to complete
669
+ * - `signal`: AbortSignal to cancel the drain operation
670
+ * - `closeConnection`: Whether to close the database connection (default: backend.ownsConnection)
671
+ * @returns DrainResult with completion statistics
672
+ *
673
+ * @example
674
+ * // Wait indefinitely for all jobs to complete
675
+ * await agenda.drain();
676
+ *
677
+ * @example
678
+ * // Wait up to 30 seconds
679
+ * const result = await agenda.drain(30000);
680
+ * if (result.timedOut) console.log(`${result.running} jobs still running`);
681
+ *
682
+ * @example
683
+ * // Use AbortSignal for external control
684
+ * const controller = new AbortController();
685
+ * setTimeout(() => controller.abort(), 30000);
686
+ * await agenda.drain({ signal: controller.signal });
497
687
  */
498
- async drain(closeConnection) {
688
+ async drain(options) {
499
689
  if (!this.jobProcessor) {
500
690
  log('Agenda.drain called, but agenda has never started!');
501
- return;
691
+ return { completed: 0, running: 0, timedOut: false, aborted: false };
502
692
  }
693
+ // Normalize options
694
+ const opts = typeof options === 'number' ? { timeout: options } : options ?? {};
503
695
  log('Agenda.drain called, waiting for jobs to finish');
504
- await this.jobProcessor.drain();
696
+ const result = await this.jobProcessor.drain(opts);
697
+ // Unsubscribe from state notifications
698
+ if (this.stateSubscriptionUnsubscribe) {
699
+ this.stateSubscriptionUnsubscribe();
700
+ this.stateSubscriptionUnsubscribe = undefined;
701
+ }
505
702
  // Disconnect notification channel if configured (we always disconnect since we connected it in start)
506
703
  if (this.notificationChannel) {
507
704
  log('Agenda.drain disconnecting notification channel');
508
705
  await this.notificationChannel.disconnect();
509
706
  }
510
707
  // Determine whether to close backend connection
511
- const shouldClose = closeConnection ?? this.backend.ownsConnection ?? true;
708
+ const shouldClose = opts.closeConnection ?? this.backend.ownsConnection ?? true;
512
709
  // Disconnect the backend
513
710
  if (shouldClose) {
514
711
  log('Agenda.drain disconnecting backend');
515
712
  await this.backend.disconnect();
516
713
  }
517
714
  this.jobProcessor = undefined;
715
+ return result;
518
716
  }
519
717
  }
520
718
  export * from './types/AgendaConfig.js';
@@ -527,7 +725,9 @@ export * from './types/JobRepository.js';
527
725
  export * from './types/NotificationChannel.js';
528
726
  export * from './types/AgendaBackend.js';
529
727
  export * from './types/AgendaStatus.js';
728
+ export * from './types/DrainOptions.js';
530
729
  export * from './notifications/index.js';
730
+ export * from './types/JobLogger.js';
531
731
  export { applyAllDateConstraints, applyDateRangeConstraints, applySkipDays, shouldSkipDay, isWithinDateRange } from './utils/dateConstraints.js';
532
732
  export * from './decorators/index.js';
533
733
  export { backoffStrategies, constant, linear, exponential, combine, when } from './utils/backoff.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}