podverse-mq 5.1.6-alpha.3 → 5.1.6-alpha.5

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.
@@ -1,3 +1,4 @@
1
1
  import { MQQueueName, ActiveMQArtemisService } from "@queue/services/activeMQArtemis";
2
2
  export declare const mqRSSRunParser: (activeMQArtemisService: ActiveMQArtemisService, queueName: MQQueueName) => Promise<void>;
3
+ export declare const getIsProcessing: () => boolean;
3
4
  //# sourceMappingURL=runParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runParser.d.ts","sourceRoot":"","sources":["../../../../src/functions/mq/rss/runParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEtF,eAAO,MAAM,cAAc,GACzB,wBAAwB,sBAAsB,EAC9C,WAAW,WAAW,kBAwBvB,CAAC"}
1
+ {"version":3,"file":"runParser.d.ts","sourceRoot":"","sources":["../../../../src/functions/mq/rss/runParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAItF,eAAO,MAAM,cAAc,GACzB,wBAAwB,sBAAsB,EAC9C,WAAW,WAAW,kBAkCvB,CAAC;AAEF,eAAO,MAAM,eAAe,eAAqB,CAAC"}
@@ -9,19 +9,27 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.mqRSSRunParser = void 0;
12
+ exports.getIsProcessing = exports.mqRSSRunParser = void 0;
13
13
  const podverse_parser_1 = require("podverse-parser");
14
+ let isProcessing = false;
14
15
  const mqRSSRunParser = (activeMQArtemisService, queueName) => __awaiter(void 0, void 0, void 0, function* () {
15
16
  yield activeMQArtemisService.initialize();
16
17
  yield activeMQArtemisService.consumeMessages(queueName, (context) => __awaiter(void 0, void 0, void 0, function* () {
17
- var _a, _b, _c, _d;
18
+ var _a, _b, _c, _d, _e;
19
+ // Don't accept new messages if we're shutting down
20
+ if (activeMQArtemisService.getIsShuttingDown()) {
21
+ console.log('Shutting down - rejecting new message to requeue it');
22
+ (_a = context.delivery) === null || _a === void 0 ? void 0 : _a.release();
23
+ return;
24
+ }
25
+ isProcessing = true;
18
26
  try {
19
- const bodyStr = (_b = (_a = context.message) === null || _a === void 0 ? void 0 : _a.body) !== null && _b !== void 0 ? _b : '';
27
+ const bodyStr = (_c = (_b = context.message) === null || _b === void 0 ? void 0 : _b.body) !== null && _c !== void 0 ? _c : '';
20
28
  const receivedMessage = JSON.parse(bodyStr);
21
29
  const { url, podcast_index_id, options } = receivedMessage;
22
30
  if (url || podcast_index_id) {
23
31
  yield (0, podverse_parser_1.parseRSSFeedAndSaveToDatabase)(url, podcast_index_id, options);
24
- (_c = context.delivery) === null || _c === void 0 ? void 0 : _c.accept();
32
+ (_d = context.delivery) === null || _d === void 0 ? void 0 : _d.accept();
25
33
  }
26
34
  else {
27
35
  throw new Error(`mqRSSRunParser: url or podcast_index_id not found in message ${bodyStr}`);
@@ -29,11 +37,16 @@ const mqRSSRunParser = (activeMQArtemisService, queueName) => __awaiter(void 0,
29
37
  }
30
38
  catch (error) {
31
39
  console.error('Error processing message', error);
32
- (_d = context.delivery) === null || _d === void 0 ? void 0 : _d.reject({
40
+ (_e = context.delivery) === null || _e === void 0 ? void 0 : _e.reject({
33
41
  condition: 'podverse:processing-error',
34
42
  description: error.message,
35
43
  });
36
44
  }
45
+ finally {
46
+ isProcessing = false;
47
+ }
37
48
  }));
38
49
  });
39
50
  exports.mqRSSRunParser = mqRSSRunParser;
51
+ const getIsProcessing = () => isProcessing;
52
+ exports.getIsProcessing = getIsProcessing;
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export { mqRSSAdd } from './functions/mq/rss/add';
3
3
  export { mqRSSAddAll } from './functions/mq/rss/addAll';
4
4
  export { mqRSSAddRecentlyUpdatedFeedsFromPodcastIndex } from './functions/mq/rss/addRecentlyUpdatedFeedsFromPodcastIndex';
5
5
  export { mqRSSSetupDlqConsumers } from './functions/mq/rss/dlqHandling';
6
- export { mqRSSRunParser } from './functions/mq/rss/runParser';
6
+ export { mqRSSRunParser, getIsProcessing } from './functions/mq/rss/runParser';
7
7
  export { mqRSSRunLiveItemListener } from './functions/mq/rss/runLiveItemListener';
8
8
  export { ActiveMQArtemisService, ActiveMQArtemisServiceParams } from './services/activeMQArtemis';
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,4CAA4C,EAAE,MAAM,4DAA4D,CAAC;AAC1H,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAElF,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,4CAA4C,EAAE,MAAM,4DAA4D,CAAC;AAC1H,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAElF,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ActiveMQArtemisService = exports.mqRSSRunLiveItemListener = exports.mqRSSRunParser = exports.mqRSSSetupDlqConsumers = exports.mqRSSAddRecentlyUpdatedFeedsFromPodcastIndex = exports.mqRSSAddAll = exports.mqRSSAdd = void 0;
3
+ exports.ActiveMQArtemisService = exports.mqRSSRunLiveItemListener = exports.getIsProcessing = exports.mqRSSRunParser = exports.mqRSSSetupDlqConsumers = exports.mqRSSAddRecentlyUpdatedFeedsFromPodcastIndex = exports.mqRSSAddAll = exports.mqRSSAdd = void 0;
4
4
  require("./module-alias-config");
5
5
  var add_1 = require("./functions/mq/rss/add");
6
6
  Object.defineProperty(exports, "mqRSSAdd", { enumerable: true, get: function () { return add_1.mqRSSAdd; } });
@@ -12,6 +12,7 @@ var dlqHandling_1 = require("./functions/mq/rss/dlqHandling");
12
12
  Object.defineProperty(exports, "mqRSSSetupDlqConsumers", { enumerable: true, get: function () { return dlqHandling_1.mqRSSSetupDlqConsumers; } });
13
13
  var runParser_1 = require("./functions/mq/rss/runParser");
14
14
  Object.defineProperty(exports, "mqRSSRunParser", { enumerable: true, get: function () { return runParser_1.mqRSSRunParser; } });
15
+ Object.defineProperty(exports, "getIsProcessing", { enumerable: true, get: function () { return runParser_1.getIsProcessing; } });
15
16
  var runLiveItemListener_1 = require("./functions/mq/rss/runLiveItemListener");
16
17
  Object.defineProperty(exports, "mqRSSRunLiveItemListener", { enumerable: true, get: function () { return runLiveItemListener_1.mqRSSRunLiveItemListener; } });
17
18
  var activeMQArtemis_1 = require("./services/activeMQArtemis");
@@ -1,6 +1,6 @@
1
1
  import { EventContext } from 'rhea';
2
2
  import { LoggerService } from 'podverse-helpers/dist/lib/backend/logger';
3
- export type MQQueueName = 'rss-normal' | 'rss-on-demand' | 'rss-live' | 'DLQ' | `DLQ.${'rss-normal' | 'rss-on-demand' | 'rss-live'}`;
3
+ export type MQQueueName = 'rss-normal' | 'rss-on-demand' | 'rss-live' | `DLQ.${'rss-normal' | 'rss-on-demand' | 'rss-live'}`;
4
4
  type MQRSSMessage = {
5
5
  url: string;
6
6
  podcast_index_id: number | null;
@@ -26,6 +26,7 @@ export declare class ActiveMQArtemisService {
26
26
  private params;
27
27
  private logger;
28
28
  private connecting;
29
+ private isShuttingDown;
29
30
  constructor(params: ActiveMQArtemisServiceParams, logger: LoggerService);
30
31
  initialize(): Promise<void>;
31
32
  private connect;
@@ -40,6 +41,8 @@ export declare class ActiveMQArtemisService {
40
41
  */
41
42
  sendSampleToDLQ(queueName: MQQueueName, sample: Record<string, unknown>, failureDescription?: string): Promise<void>;
42
43
  consumeMessages(queueName: MQQueueName, processMessage: (context: EventContext) => Promise<void> | void): Promise<void>;
44
+ getIsShuttingDown(): boolean;
45
+ close(): Promise<void>;
43
46
  }
44
47
  export {};
45
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/activeMQArtemis/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAgC,YAAY,EAAE,MAAM,MAAM,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAIzE,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,eAAe,GACf,UAAU,GACV,KAAK,GACL,OAAO,YAAY,GAAG,eAAe,GAAG,UAAU,EAAE,CAAC;AAEzD,KAAK,YAAY,GAAG;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,KAAK,OAAO,GAAG,YAAY,CAAC;AAE5B,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,WAAW,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC,CAAA;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,aAAa;IAKjE,UAAU;YASF,OAAO;YAwDP,YAAY;YAaZ,cAAc;IAa5B,OAAO,CAAC,kBAAkB;IAQpB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC3D;;;;OAIG;IACG,eAAe,CACnB,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,kBAAkB,SAAqC,GACtD,OAAO,CAAC,IAAI,CAAC;IAoDV,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CA0B9G"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/activeMQArtemis/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAgC,YAAY,EAAE,MAAM,MAAM,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAGzE,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,eAAe,GACf,UAAU,GACV,OAAO,YAAY,GAAG,eAAe,GAAG,UAAU,EAAE,CAAC;AAEzD,KAAK,YAAY,GAAG;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,KAAK,OAAO,GAAG,YAAY,CAAC;AAE5B,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,WAAW,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC,CAAA;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,aAAa;IAKjE,UAAU;YASF,OAAO;YAwDP,YAAY;YAaZ,cAAc;IAa5B,OAAO,CAAC,kBAAkB;IAQpB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC3D;;;;OAIG;IACG,eAAe,CACnB,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,kBAAkB,SAAqC,GACtD,OAAO,CAAC,IAAI,CAAC;IAoDV,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IA0B7G,iBAAiB,IAAI,OAAO;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAsC7B"}
@@ -21,6 +21,7 @@ class ActiveMQArtemisService {
21
21
  this.senders = new Map();
22
22
  this.receivers = new Map();
23
23
  this.connecting = false;
24
+ this.isShuttingDown = false;
24
25
  this.params = params;
25
26
  this.logger = logger;
26
27
  }
@@ -170,7 +171,7 @@ class ActiveMQArtemisService {
170
171
  if (!this.connection)
171
172
  yield this.connect();
172
173
  // Choose target based on what exists in your broker
173
- const dlqTargets = ['DLQ', `DLQ.${queueName}`];
174
+ const dlqTargets = [`DLQ.${queueName}`];
174
175
  for (const dlqQueue of dlqTargets) {
175
176
  const sender = this.connection.open_sender({ target: { address: dlqQueue } });
176
177
  yield new Promise((resolve) => sender.once('sender_open', () => resolve()));
@@ -244,5 +245,47 @@ class ActiveMQArtemisService {
244
245
  }
245
246
  });
246
247
  }
248
+ getIsShuttingDown() {
249
+ return this.isShuttingDown;
250
+ }
251
+ close() {
252
+ return __awaiter(this, void 0, void 0, function* () {
253
+ this.isShuttingDown = true;
254
+ this.logger.info('Closing ActiveMQ Artemis connection...');
255
+ // Close all receivers first to stop accepting new messages
256
+ for (const [queueName, receiver] of this.receivers.entries()) {
257
+ try {
258
+ receiver.close();
259
+ this.logger.info(`Closed receiver for queue ${queueName}`);
260
+ }
261
+ catch (error) {
262
+ this.logger.logError(`Error closing receiver for ${queueName}`, error);
263
+ }
264
+ }
265
+ this.receivers.clear();
266
+ // Close all senders
267
+ for (const [queueName, sender] of this.senders.entries()) {
268
+ try {
269
+ sender.close();
270
+ this.logger.info(`Closed sender for queue ${queueName}`);
271
+ }
272
+ catch (error) {
273
+ this.logger.logError(`Error closing sender for ${queueName}`, error);
274
+ }
275
+ }
276
+ this.senders.clear();
277
+ // Close the connection
278
+ if (this.connection) {
279
+ try {
280
+ this.connection.close();
281
+ this.logger.info('Closed ActiveMQ Artemis connection');
282
+ }
283
+ catch (error) {
284
+ this.logger.logError('Error closing connection', error);
285
+ }
286
+ this.connection = null;
287
+ }
288
+ });
289
+ }
247
290
  }
248
291
  exports.ActiveMQArtemisService = ActiveMQArtemisService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "podverse-mq",
3
- "version": "5.1.6-alpha.3",
3
+ "version": "5.1.6-alpha.5",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",