@quave/agenda-mongodb 1.0.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 (52) hide show
  1. package/LICENSE.md +25 -0
  2. package/README.md +273 -0
  3. package/dist/MongoBackend.d.ts +58 -0
  4. package/dist/MongoBackend.js +82 -0
  5. package/dist/MongoBackend.js.map +1 -0
  6. package/dist/MongoChangeStreamNotificationChannel.d.ts +96 -0
  7. package/dist/MongoChangeStreamNotificationChannel.js +248 -0
  8. package/dist/MongoChangeStreamNotificationChannel.js.map +1 -0
  9. package/dist/MongoJobLogger.d.ts +46 -0
  10. package/dist/MongoJobLogger.js +142 -0
  11. package/dist/MongoJobLogger.js.map +1 -0
  12. package/dist/MongoJobRepository.d.ts +84 -0
  13. package/dist/MongoJobRepository.js +713 -0
  14. package/dist/MongoJobRepository.js.map +1 -0
  15. package/dist/cjs/MongoBackend.d.ts +58 -0
  16. package/dist/cjs/MongoBackend.js +86 -0
  17. package/dist/cjs/MongoBackend.js.map +1 -0
  18. package/dist/cjs/MongoChangeStreamNotificationChannel.d.ts +96 -0
  19. package/dist/cjs/MongoChangeStreamNotificationChannel.js +255 -0
  20. package/dist/cjs/MongoChangeStreamNotificationChannel.js.map +1 -0
  21. package/dist/cjs/MongoJobLogger.d.ts +46 -0
  22. package/dist/cjs/MongoJobLogger.js +149 -0
  23. package/dist/cjs/MongoJobLogger.js.map +1 -0
  24. package/dist/cjs/MongoJobRepository.d.ts +84 -0
  25. package/dist/cjs/MongoJobRepository.js +720 -0
  26. package/dist/cjs/MongoJobRepository.js.map +1 -0
  27. package/dist/cjs/hasMongoProtocol.d.ts +1 -0
  28. package/dist/cjs/hasMongoProtocol.js +6 -0
  29. package/dist/cjs/hasMongoProtocol.js.map +1 -0
  30. package/dist/cjs/index.d.ts +39 -0
  31. package/dist/cjs/index.js +46 -0
  32. package/dist/cjs/index.js.map +1 -0
  33. package/dist/cjs/package.json +1 -0
  34. package/dist/cjs/testing.d.ts +25 -0
  35. package/dist/cjs/testing.js +55 -0
  36. package/dist/cjs/testing.js.map +1 -0
  37. package/dist/cjs/types.d.ts +52 -0
  38. package/dist/cjs/types.js +3 -0
  39. package/dist/cjs/types.js.map +1 -0
  40. package/dist/hasMongoProtocol.d.ts +1 -0
  41. package/dist/hasMongoProtocol.js +2 -0
  42. package/dist/hasMongoProtocol.js.map +1 -0
  43. package/dist/index.d.ts +39 -0
  44. package/dist/index.js +37 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/testing.d.ts +25 -0
  47. package/dist/testing.js +49 -0
  48. package/dist/testing.js.map +1 -0
  49. package/dist/types.d.ts +52 -0
  50. package/dist/types.js +2 -0
  51. package/dist/types.js.map +1 -0
  52. package/package.json +84 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoJobRepository.js","sourceRoot":"","sources":["../src/MongoJobRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { AgendaBackend, JobRepository, NotificationChannel, JobLogger } from '@quave/agenda';
2
+ import type { MongoBackendConfig } from './types.js';
3
+ /**
4
+ * MongoDB backend for Agenda.
5
+ * Provides storage via MongoDB. Does not provide notifications (uses polling).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { Agenda } from '@quave/agenda';
10
+ * import { MongoBackend } from '@quave/agenda-mongodb';
11
+ *
12
+ * // Via connection string
13
+ * const backend = new MongoBackend({ address: 'mongodb://localhost/agenda' });
14
+ *
15
+ * // Via existing connection
16
+ * const backend = new MongoBackend({ mongo: existingDb });
17
+ *
18
+ * // With persistent job event logging
19
+ * const backend = new MongoBackend({ mongo: existingDb, logging: true });
20
+ *
21
+ * const agenda = new Agenda({ backend, logging: true });
22
+ * ```
23
+ */
24
+ export declare class MongoBackend implements AgendaBackend {
25
+ private config;
26
+ readonly name = "MongoDB";
27
+ private _repository;
28
+ private _ownsConnection;
29
+ private _logger;
30
+ /**
31
+ * MongoDB does not provide a notification channel.
32
+ * For real-time notifications with MongoDB, use a separate notification
33
+ * channel like Redis pub/sub.
34
+ */
35
+ readonly notificationChannel: NotificationChannel | undefined;
36
+ constructor(config: MongoBackendConfig);
37
+ get repository(): JobRepository;
38
+ /**
39
+ * The job logger for persistent event logging.
40
+ * Always available; Agenda decides whether to activate it via its `logging` config.
41
+ */
42
+ get logger(): JobLogger;
43
+ /**
44
+ * Whether this backend owns its database connection.
45
+ * True if created from address (connection string), false if mongo Db was passed in.
46
+ */
47
+ get ownsConnection(): boolean;
48
+ /**
49
+ * Connect to MongoDB and initialize the collection.
50
+ */
51
+ connect(): Promise<void>;
52
+ /**
53
+ * Disconnect from MongoDB.
54
+ * Only closes the connection if we created it (i.e., from connection string).
55
+ * If an existing Db instance was passed in, this is a no-op.
56
+ */
57
+ disconnect(): Promise<void>;
58
+ }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MongoBackend = void 0;
4
+ const MongoJobRepository_js_1 = require("./MongoJobRepository.js");
5
+ const MongoJobLogger_js_1 = require("./MongoJobLogger.js");
6
+ /**
7
+ * MongoDB backend for Agenda.
8
+ * Provides storage via MongoDB. Does not provide notifications (uses polling).
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { Agenda } from '@quave/agenda';
13
+ * import { MongoBackend } from '@quave/agenda-mongodb';
14
+ *
15
+ * // Via connection string
16
+ * const backend = new MongoBackend({ address: 'mongodb://localhost/agenda' });
17
+ *
18
+ * // Via existing connection
19
+ * const backend = new MongoBackend({ mongo: existingDb });
20
+ *
21
+ * // With persistent job event logging
22
+ * const backend = new MongoBackend({ mongo: existingDb, logging: true });
23
+ *
24
+ * const agenda = new Agenda({ backend, logging: true });
25
+ * ```
26
+ */
27
+ class MongoBackend {
28
+ constructor(config) {
29
+ this.config = config;
30
+ this.name = 'MongoDB';
31
+ /**
32
+ * MongoDB does not provide a notification channel.
33
+ * For real-time notifications with MongoDB, use a separate notification
34
+ * channel like Redis pub/sub.
35
+ */
36
+ this.notificationChannel = undefined;
37
+ // Determine if we own the connection (not passed in by user)
38
+ this._ownsConnection = !('mongo' in config);
39
+ this._repository = new MongoJobRepository_js_1.MongoJobRepository({
40
+ ...('mongo' in config
41
+ ? { mongo: config.mongo, db: { collection: config.collection } }
42
+ : {
43
+ db: { address: config.address, collection: config.collection, options: config.options }
44
+ }),
45
+ ensureIndex: config.ensureIndex,
46
+ sort: config.sort
47
+ });
48
+ // Always create the logger (lightweight; only initializes on first use when Agenda activates it)
49
+ this._logger = new MongoJobLogger_js_1.MongoJobLogger(config.logCollection);
50
+ }
51
+ get repository() {
52
+ return this._repository;
53
+ }
54
+ /**
55
+ * The job logger for persistent event logging.
56
+ * Always available; Agenda decides whether to activate it via its `logging` config.
57
+ */
58
+ get logger() {
59
+ return this._logger;
60
+ }
61
+ /**
62
+ * Whether this backend owns its database connection.
63
+ * True if created from address (connection string), false if mongo Db was passed in.
64
+ */
65
+ get ownsConnection() {
66
+ return this._ownsConnection;
67
+ }
68
+ /**
69
+ * Connect to MongoDB and initialize the collection.
70
+ */
71
+ async connect() {
72
+ await this._repository.connect();
73
+ // Initialize the job logger with the shared database connection
74
+ await this._logger.setDb(this._repository.getDb());
75
+ }
76
+ /**
77
+ * Disconnect from MongoDB.
78
+ * Only closes the connection if we created it (i.e., from connection string).
79
+ * If an existing Db instance was passed in, this is a no-op.
80
+ */
81
+ async disconnect() {
82
+ await this._repository.disconnect();
83
+ }
84
+ }
85
+ exports.MongoBackend = MongoBackend;
86
+ //# sourceMappingURL=MongoBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoBackend.js","sourceRoot":"","sources":["../../src/MongoBackend.ts"],"names":[],"mappings":";;;AACA,mEAA6D;AAC7D,2DAAqD;AAGrD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAa,YAAY;IAcxB,YAAoB,MAA0B;QAA1B,WAAM,GAAN,MAAM,CAAoB;QAbrC,SAAI,GAAG,SAAS,CAAC;QAM1B;;;;WAIG;QACM,wBAAmB,GAAoC,SAAS,CAAC;QAGzE,6DAA6D;QAC7D,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,0CAAkB,CAAC;YACzC,GAAG,CAAC,OAAO,IAAI,MAAM;gBACpB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE;gBAChE,CAAC,CAAC;oBACA,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;iBACvF,CAAC;YACJ,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;SACjB,CAAC,CAAC;QAEH,iGAAiG;QACjG,IAAI,CAAC,OAAO,GAAG,IAAI,kCAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,UAAU;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,IAAI,cAAc;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACZ,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAEjC,gEAAgE;QAChE,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU;QACf,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;CACD;AArED,oCAqEC"}
@@ -0,0 +1,96 @@
1
+ import type { Db, ResumeToken } from 'mongodb';
2
+ import type { JobNotification, NotificationChannelConfig } from '@quave/agenda';
3
+ import { BaseNotificationChannel } from '@quave/agenda';
4
+ /**
5
+ * Configuration for MongoChangeStreamNotificationChannel
6
+ */
7
+ export interface MongoChangeStreamNotificationChannelConfig extends NotificationChannelConfig {
8
+ /**
9
+ * MongoDB database instance.
10
+ * Required - must be connected to a replica set.
11
+ */
12
+ db?: Db;
13
+ /**
14
+ * Collection name to watch (default: 'agendaJobs')
15
+ */
16
+ collection?: string;
17
+ /**
18
+ * Resume token to resume watching from a specific point.
19
+ * Useful for recovering from disconnections.
20
+ */
21
+ resumeToken?: ResumeToken;
22
+ /**
23
+ * Whether to use fullDocument: 'updateLookup' for update events.
24
+ * This fetches the full document on updates but adds latency.
25
+ * Default: true (required for proper notification data)
26
+ */
27
+ fullDocument?: boolean;
28
+ }
29
+ /**
30
+ * MongoDB Change Stream notification channel.
31
+ *
32
+ * Uses MongoDB Change Streams to watch for job changes in real-time.
33
+ * This eliminates the need for polling and provides instant notifications
34
+ * when jobs are created or updated.
35
+ *
36
+ * **Requirements:**
37
+ * - MongoDB must be deployed as a replica set (even single-node replica sets work)
38
+ * - WiredTiger storage engine (default since MongoDB 3.2)
39
+ *
40
+ * **How it works:**
41
+ * - Watches the jobs collection for insert/update/replace operations
42
+ * - When a job with `nextRunAt` is modified, handlers are notified
43
+ * - The `publish()` method is a no-op since Change Streams automatically
44
+ * detect job changes from any source
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * import { Agenda } from '@quave/agenda';
49
+ * import { MongoBackend, MongoChangeStreamNotificationChannel } from '@quave/agenda-mongodb';
50
+ *
51
+ * const backend = new MongoBackend({ mongo: db });
52
+ * const channel = new MongoChangeStreamNotificationChannel({ db });
53
+ *
54
+ * const agenda = new Agenda({
55
+ * backend,
56
+ * notificationChannel: channel
57
+ * });
58
+ * ```
59
+ */
60
+ export declare class MongoChangeStreamNotificationChannel extends BaseNotificationChannel {
61
+ private db?;
62
+ private collectionName;
63
+ private collection?;
64
+ private changeStream?;
65
+ private resumeToken?;
66
+ private useFullDocument;
67
+ constructor(config?: MongoChangeStreamNotificationChannelConfig);
68
+ /**
69
+ * Set the MongoDB database instance.
70
+ * Used when the channel is created before the database connection.
71
+ */
72
+ setDb(db: Db): void;
73
+ /**
74
+ * Get the last resume token for reconnection purposes.
75
+ * Store this token to resume watching from the same point after restart.
76
+ */
77
+ getResumeToken(): ResumeToken | undefined;
78
+ connect(): Promise<void>;
79
+ private handleChange;
80
+ private extractFullDocument;
81
+ private buildNotification;
82
+ private handleConnectionLoss;
83
+ disconnect(): Promise<void>;
84
+ /**
85
+ * Publish a job notification.
86
+ *
87
+ * **Note:** This method is a no-op for Change Stream notifications.
88
+ * Change Streams automatically detect job changes in the database,
89
+ * so explicit publishing is not required. This method exists only
90
+ * to satisfy the NotificationChannel interface.
91
+ *
92
+ * All job saves to the watched collection will automatically trigger
93
+ * notifications to all subscribers.
94
+ */
95
+ publish(_notification: JobNotification): Promise<void>;
96
+ }
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MongoChangeStreamNotificationChannel = void 0;
7
+ const debug_1 = __importDefault(require("debug"));
8
+ const agenda_1 = require("@quave/agenda");
9
+ const log = (0, debug_1.default)('agenda:mongo:changestream');
10
+ /**
11
+ * MongoDB Change Stream notification channel.
12
+ *
13
+ * Uses MongoDB Change Streams to watch for job changes in real-time.
14
+ * This eliminates the need for polling and provides instant notifications
15
+ * when jobs are created or updated.
16
+ *
17
+ * **Requirements:**
18
+ * - MongoDB must be deployed as a replica set (even single-node replica sets work)
19
+ * - WiredTiger storage engine (default since MongoDB 3.2)
20
+ *
21
+ * **How it works:**
22
+ * - Watches the jobs collection for insert/update/replace operations
23
+ * - When a job with `nextRunAt` is modified, handlers are notified
24
+ * - The `publish()` method is a no-op since Change Streams automatically
25
+ * detect job changes from any source
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * import { Agenda } from '@quave/agenda';
30
+ * import { MongoBackend, MongoChangeStreamNotificationChannel } from '@quave/agenda-mongodb';
31
+ *
32
+ * const backend = new MongoBackend({ mongo: db });
33
+ * const channel = new MongoChangeStreamNotificationChannel({ db });
34
+ *
35
+ * const agenda = new Agenda({
36
+ * backend,
37
+ * notificationChannel: channel
38
+ * });
39
+ * ```
40
+ */
41
+ class MongoChangeStreamNotificationChannel extends agenda_1.BaseNotificationChannel {
42
+ constructor(config = {}) {
43
+ super(config);
44
+ this.db = config.db;
45
+ this.collectionName = config.collection ?? 'agendaJobs';
46
+ this.resumeToken = config.resumeToken;
47
+ this.useFullDocument = config.fullDocument ?? true;
48
+ }
49
+ /**
50
+ * Set the MongoDB database instance.
51
+ * Used when the channel is created before the database connection.
52
+ */
53
+ setDb(db) {
54
+ if (this._state === 'connected') {
55
+ throw new Error('Cannot set database while channel is connected');
56
+ }
57
+ this.db = db;
58
+ }
59
+ /**
60
+ * Get the last resume token for reconnection purposes.
61
+ * Store this token to resume watching from the same point after restart.
62
+ */
63
+ getResumeToken() {
64
+ return this.resumeToken;
65
+ }
66
+ async connect() {
67
+ log('connecting change stream notification channel (current state=%s)', this._state);
68
+ this.clearReconnect();
69
+ // Idempotent: a second connect() must not leak the active change stream.
70
+ if (this._state === 'connected' && this.changeStream) {
71
+ log('already connected, ignoring connect()');
72
+ return;
73
+ }
74
+ if (!this.db) {
75
+ throw new Error('MongoChangeStreamNotificationChannel requires a MongoDB database instance. ' +
76
+ 'Provide it via config.db or call setDb() before connecting.');
77
+ }
78
+ try {
79
+ this.setState('connecting');
80
+ log('getting collection: %s', this.collectionName);
81
+ this.collection = this.db.collection(this.collectionName);
82
+ // Build the aggregation pipeline to filter relevant changes
83
+ const pipeline = [
84
+ {
85
+ $match: {
86
+ // Watch for job inserts, updates, and replacements
87
+ operationType: { $in: ['insert', 'update', 'replace'] }
88
+ }
89
+ }
90
+ ];
91
+ // Change stream options
92
+ const options = {};
93
+ // Use fullDocument lookup to get the complete document on updates
94
+ // This is required to get job data on update events
95
+ if (this.useFullDocument) {
96
+ options.fullDocument = 'updateLookup';
97
+ }
98
+ // Resume from a specific token if provided
99
+ if (this.resumeToken) {
100
+ options.resumeAfter = this.resumeToken;
101
+ log('resuming from token: %O', this.resumeToken);
102
+ }
103
+ log('creating change stream with options: %O', options);
104
+ // Create the change stream
105
+ this.changeStream = this.collection.watch(pipeline, options);
106
+ // Handle change events
107
+ this.changeStream.on('change', (change) => {
108
+ this.handleChange(change);
109
+ });
110
+ // Handle errors
111
+ this.changeStream.on('error', (error) => {
112
+ log('change stream error: %O', error);
113
+ this.emit('error', error);
114
+ if (this._state === 'connected') {
115
+ this.handleConnectionLoss();
116
+ }
117
+ });
118
+ // Handle stream close - only treat as connection loss if we didn't initiate it
119
+ this.changeStream.on('close', () => {
120
+ log('change stream closed (state=%s)', this._state);
121
+ // Only handle as connection loss if we're still in connected state
122
+ // (not if we're disconnecting or already disconnected)
123
+ if (this._state === 'connected') {
124
+ this.handleConnectionLoss();
125
+ }
126
+ });
127
+ log('change stream connected, watching collection: %s', this.collectionName);
128
+ this.setState('connected');
129
+ }
130
+ catch (error) {
131
+ log('connection failed: %O', error);
132
+ this.emit('error', error);
133
+ this.scheduleReconnect();
134
+ throw error;
135
+ }
136
+ }
137
+ handleChange(change) {
138
+ try {
139
+ log('received change event: operationType=%s', change.operationType);
140
+ // Store resume token for recovery
141
+ if (change._id) {
142
+ this.resumeToken = change._id;
143
+ }
144
+ // Get the full document based on operation type
145
+ const fullDocument = this.extractFullDocument(change);
146
+ if (!fullDocument) {
147
+ log('change event without full document (operationType=%s), skipping', change.operationType);
148
+ return;
149
+ }
150
+ log('extracted fullDocument: name=%s, nextRunAt=%s, disabled=%s', fullDocument.name, fullDocument.nextRunAt, fullDocument.disabled);
151
+ // Only notify for jobs that have a nextRunAt (scheduled to run)
152
+ if (!fullDocument.nextRunAt) {
153
+ log('job has no nextRunAt, skipping notification');
154
+ return;
155
+ }
156
+ // Skip disabled jobs
157
+ if (fullDocument.disabled) {
158
+ log('job is disabled, skipping notification');
159
+ return;
160
+ }
161
+ // Build notification from the document
162
+ const notification = this.buildNotification(fullDocument);
163
+ log('received change notification: %O', notification);
164
+ this.notifyHandlers(notification).catch((err) => {
165
+ this.emit('error', err);
166
+ });
167
+ }
168
+ catch (error) {
169
+ log('error processing change event: %O', error);
170
+ this.emit('error', error);
171
+ }
172
+ }
173
+ extractFullDocument(change) {
174
+ // Handle insert events
175
+ if (change.operationType === 'insert') {
176
+ const insertChange = change;
177
+ return insertChange.fullDocument;
178
+ }
179
+ // Handle update events (requires fullDocument: 'updateLookup' option)
180
+ if (change.operationType === 'update') {
181
+ const updateChange = change;
182
+ if (updateChange.fullDocument) {
183
+ return updateChange.fullDocument;
184
+ }
185
+ log('update event missing fullDocument - ensure fullDocument option is set');
186
+ return null;
187
+ }
188
+ // Handle replace events
189
+ if (change.operationType === 'replace') {
190
+ const replaceChange = change;
191
+ return replaceChange.fullDocument;
192
+ }
193
+ return null;
194
+ }
195
+ buildNotification(doc) {
196
+ return {
197
+ jobId: (0, agenda_1.toJobId)(String(doc._id)),
198
+ jobName: doc.name,
199
+ nextRunAt: doc.nextRunAt ? new Date(doc.nextRunAt) : null,
200
+ priority: doc.priority || 0,
201
+ timestamp: new Date(),
202
+ source: 'changestream'
203
+ };
204
+ }
205
+ handleConnectionLoss() {
206
+ log('handling connection loss');
207
+ if (this.changeStream) {
208
+ try {
209
+ this.changeStream.close().catch(() => {
210
+ // Ignore close errors
211
+ });
212
+ }
213
+ catch {
214
+ // Ignore close errors
215
+ }
216
+ this.changeStream = undefined;
217
+ }
218
+ this.scheduleReconnect();
219
+ }
220
+ async disconnect() {
221
+ log('disconnecting change stream notification channel');
222
+ this.clearReconnect();
223
+ // Set state first to prevent close event from triggering reconnection
224
+ this.setState('disconnected');
225
+ if (this.changeStream) {
226
+ try {
227
+ await this.changeStream.close();
228
+ }
229
+ catch {
230
+ // Ignore close errors
231
+ }
232
+ this.changeStream = undefined;
233
+ }
234
+ this.handlers.clear();
235
+ }
236
+ /**
237
+ * Publish a job notification.
238
+ *
239
+ * **Note:** This method is a no-op for Change Stream notifications.
240
+ * Change Streams automatically detect job changes in the database,
241
+ * so explicit publishing is not required. This method exists only
242
+ * to satisfy the NotificationChannel interface.
243
+ *
244
+ * All job saves to the watched collection will automatically trigger
245
+ * notifications to all subscribers.
246
+ */
247
+ async publish(_notification) {
248
+ // No-op: Change Streams automatically detect database changes.
249
+ // When a job is saved to MongoDB, the change stream will pick it up
250
+ // and notify all handlers automatically.
251
+ log('publish called (no-op for change stream - changes detected automatically)');
252
+ }
253
+ }
254
+ exports.MongoChangeStreamNotificationChannel = MongoChangeStreamNotificationChannel;
255
+ //# sourceMappingURL=MongoChangeStreamNotificationChannel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoChangeStreamNotificationChannel.js","sourceRoot":"","sources":["../../src/MongoChangeStreamNotificationChannel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { Db } from 'mongodb';
2
+ import type { JobLogger, JobLogEntry, JobLogQuery, JobLogQueryResult } from '@quave/agenda';
3
+ /**
4
+ * MongoDB implementation of JobLogger.
5
+ * Stores job lifecycle events in a dedicated MongoDB collection.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Via backend (automatic connection sharing):
10
+ * import { MongoBackend } from '@quave/agenda-mongodb';
11
+ *
12
+ * const backend = new MongoBackend({
13
+ * mongo: db,
14
+ * logging: true // enables MongoJobLogger with 'agenda_logs' collection
15
+ * });
16
+ *
17
+ * // Standalone (e.g., log to Mongo while using Postgres for storage):
18
+ * import { MongoJobLogger } from '@quave/agenda-mongodb';
19
+ *
20
+ * const logger = new MongoJobLogger({ db: existingDb });
21
+ * const agenda = new Agenda({
22
+ * backend: new PostgresBackend({ connectionString: '...' }),
23
+ * logging: logger
24
+ * });
25
+ * ```
26
+ */
27
+ export declare class MongoJobLogger implements JobLogger {
28
+ private collection;
29
+ private readonly collectionName;
30
+ private initialized;
31
+ constructor(options?: {
32
+ db?: Db;
33
+ collectionName?: string;
34
+ } | string);
35
+ /**
36
+ * Set the database instance and initialize the collection.
37
+ * Called by MongoBackend after the repository connects,
38
+ * or automatically when a db is provided in the constructor.
39
+ */
40
+ setDb(db: Db): Promise<void>;
41
+ private ensureIndexes;
42
+ log(entry: Omit<JobLogEntry, '_id'>): Promise<void>;
43
+ getLogs(query?: JobLogQuery): Promise<JobLogQueryResult>;
44
+ clearLogs(query?: JobLogQuery): Promise<number>;
45
+ private buildFilter;
46
+ }