@diia-inhouse/diia-queue 7.3.0 → 13.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.
Files changed (111) hide show
  1. package/LICENCE.md +59 -59
  2. package/dist/constants.js +3 -0
  3. package/dist/constants.js.map +1 -1
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/interfaces/index.js +12 -9
  7. package/dist/interfaces/index.js.map +1 -1
  8. package/dist/interfaces/messageBrokerServiceConfig.js +26 -0
  9. package/dist/interfaces/messageBrokerServiceConfig.js.map +1 -0
  10. package/dist/interfaces/messageHandler.js +3 -0
  11. package/dist/interfaces/messageHandler.js.map +1 -0
  12. package/dist/interfaces/metrics/index.js +14 -0
  13. package/dist/interfaces/metrics/index.js.map +1 -1
  14. package/dist/interfaces/{providers/rabbitmq/amqpListener.js → options.js} +1 -1
  15. package/dist/interfaces/options.js.map +1 -0
  16. package/dist/interfaces/providers/rabbitmq/amqpConnection.js +4 -1
  17. package/dist/interfaces/providers/rabbitmq/amqpConnection.js.map +1 -1
  18. package/dist/interfaces/providers/rabbitmq/amqpPublisher.js +1 -9
  19. package/dist/interfaces/providers/rabbitmq/amqpPublisher.js.map +1 -1
  20. package/dist/interfaces/providers/rabbitmq/index.js +41 -17
  21. package/dist/interfaces/providers/rabbitmq/index.js.map +1 -1
  22. package/dist/interfaces/queueContext.js +3 -0
  23. package/dist/interfaces/queueContext.js.map +1 -0
  24. package/dist/interfaces/queueStatus.js +6 -0
  25. package/dist/interfaces/queueStatus.js.map +1 -1
  26. package/dist/interfaces/services/eventMessageHandler.js +3 -0
  27. package/dist/interfaces/services/eventMessageHandler.js.map +1 -0
  28. package/dist/metrics/index.js +1 -2
  29. package/dist/metrics/index.js.map +1 -1
  30. package/dist/providers/index.js +22 -0
  31. package/dist/providers/index.js.map +1 -0
  32. package/dist/providers/rabbitmq/amqpAsserter.js +417 -0
  33. package/dist/providers/rabbitmq/amqpAsserter.js.map +1 -0
  34. package/dist/providers/rabbitmq/amqpConnection.js +47 -25
  35. package/dist/providers/rabbitmq/amqpConnection.js.map +1 -1
  36. package/dist/providers/rabbitmq/amqpListener.js +167 -113
  37. package/dist/providers/rabbitmq/amqpListener.js.map +1 -1
  38. package/dist/providers/rabbitmq/amqpPublisher.js +147 -96
  39. package/dist/providers/rabbitmq/amqpPublisher.js.map +1 -1
  40. package/dist/providers/rabbitmq/index.js +106 -286
  41. package/dist/providers/rabbitmq/index.js.map +1 -1
  42. package/dist/services/communicator.js +187 -0
  43. package/dist/services/communicator.js.map +1 -0
  44. package/dist/services/eventBus.js +41 -46
  45. package/dist/services/eventBus.js.map +1 -1
  46. package/dist/services/eventCommunicator.js +125 -0
  47. package/dist/services/eventCommunicator.js.map +1 -0
  48. package/dist/services/eventMessageHandler.js +75 -91
  49. package/dist/services/eventMessageHandler.js.map +1 -1
  50. package/dist/services/eventMessageValidator.js.map +1 -1
  51. package/dist/services/externalCommunicator.js +11 -104
  52. package/dist/services/externalCommunicator.js.map +1 -1
  53. package/dist/services/externalEventBus.js +147 -55
  54. package/dist/services/externalEventBus.js.map +1 -1
  55. package/dist/services/index.js +1 -1
  56. package/dist/services/index.js.map +1 -1
  57. package/dist/services/metrics.js +49 -0
  58. package/dist/services/metrics.js.map +1 -0
  59. package/dist/services/optionsBuilder.js +59 -0
  60. package/dist/services/optionsBuilder.js.map +1 -0
  61. package/dist/services/queue.js +63 -26
  62. package/dist/services/queue.js.map +1 -1
  63. package/dist/services/scheduledTask.js +52 -48
  64. package/dist/services/scheduledTask.js.map +1 -1
  65. package/dist/services/task.js +149 -28
  66. package/dist/services/task.js.map +1 -1
  67. package/dist/types/constants.d.ts +3 -0
  68. package/dist/types/index.d.ts +2 -1
  69. package/dist/types/interfaces/deps.d.ts +11 -2
  70. package/dist/types/interfaces/externalCommunicator.d.ts +5 -12
  71. package/dist/types/interfaces/index.d.ts +70 -60
  72. package/dist/types/interfaces/messageBrokerServiceConfig.d.ts +79 -0
  73. package/dist/types/interfaces/messageHandler.d.ts +2 -0
  74. package/dist/types/interfaces/metrics/index.d.ts +13 -0
  75. package/dist/types/interfaces/options.d.ts +50 -0
  76. package/dist/types/interfaces/providers/rabbitmq/amqpConnection.d.ts +3 -0
  77. package/dist/types/interfaces/providers/rabbitmq/amqpPublisher.d.ts +9 -17
  78. package/dist/types/interfaces/providers/rabbitmq/index.d.ts +72 -8
  79. package/dist/types/interfaces/queueConfig/configs.d.ts +19 -11
  80. package/dist/types/interfaces/queueContext.d.ts +4 -0
  81. package/dist/types/interfaces/queueStatus.d.ts +7 -2
  82. package/dist/types/interfaces/services/eventMessageHandler.d.ts +5 -0
  83. package/dist/types/metrics/index.d.ts +1 -2
  84. package/dist/types/providers/index.d.ts +5 -0
  85. package/dist/types/providers/rabbitmq/amqpAsserter.d.ts +49 -0
  86. package/dist/types/providers/rabbitmq/amqpConnection.d.ts +3 -7
  87. package/dist/types/providers/rabbitmq/amqpListener.d.ts +27 -11
  88. package/dist/types/providers/rabbitmq/amqpPublisher.d.ts +26 -17
  89. package/dist/types/providers/rabbitmq/index.d.ts +35 -38
  90. package/dist/types/services/communicator.d.ts +57 -0
  91. package/dist/types/services/eventBus.d.ts +16 -12
  92. package/dist/types/services/eventCommunicator.d.ts +15 -0
  93. package/dist/types/services/eventMessageHandler.d.ts +9 -11
  94. package/dist/types/services/eventMessageValidator.d.ts +1 -1
  95. package/dist/types/services/externalCommunicator.d.ts +6 -19
  96. package/dist/types/services/externalEventBus.d.ts +28 -13
  97. package/dist/types/services/index.d.ts +1 -1
  98. package/dist/types/services/metrics.d.ts +11 -0
  99. package/dist/types/services/optionsBuilder.d.ts +10 -0
  100. package/dist/types/services/queue.d.ts +14 -9
  101. package/dist/types/services/scheduledTask.d.ts +22 -14
  102. package/dist/types/services/task.d.ts +21 -11
  103. package/dist/types/utils.d.ts +2 -2
  104. package/dist/utils.js +5 -2
  105. package/dist/utils.js.map +1 -1
  106. package/package.json +38 -47
  107. package/dist/interfaces/providers/rabbitmq/amqpListener.js.map +0 -1
  108. package/dist/services/externalCommunicatorChannel.js +0 -31
  109. package/dist/services/externalCommunicatorChannel.js.map +0 -1
  110. package/dist/types/interfaces/providers/rabbitmq/amqpListener.d.ts +0 -7
  111. package/dist/types/services/externalCommunicatorChannel.d.ts +0 -11
@@ -1,21 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EventMessageHandler = void 0;
4
+ const node_crypto_1 = require("node:crypto");
4
5
  const api_1 = require("@opentelemetry/api");
5
- const uuid_1 = require("uuid");
6
6
  const errors_1 = require("@diia-inhouse/errors");
7
7
  const utils_1 = require("@diia-inhouse/utils");
8
- const metrics_1 = require("../metrics");
8
+ const interfaces_1 = require("../interfaces");
9
9
  class EventMessageHandler {
10
10
  eventMessageValidator;
11
- externalChannel;
12
- pubsub;
13
11
  asyncLocalStorage;
14
12
  logger;
15
- constructor(eventMessageValidator, externalChannel, pubsub, asyncLocalStorage, logger) {
13
+ noRequeueNackOptions = new interfaces_1.NackOptions(false, false);
14
+ constructor(eventMessageValidator, asyncLocalStorage, logger) {
16
15
  this.eventMessageValidator = eventMessageValidator;
17
- this.externalChannel = externalChannel;
18
- this.pubsub = pubsub;
19
16
  this.asyncLocalStorage = asyncLocalStorage;
20
17
  this.logger = logger;
21
18
  }
@@ -27,110 +24,90 @@ class EventMessageHandler {
27
24
  await this.eventListenerMessageHandler(listener, message);
28
25
  }
29
26
  async eventListenerMessageHandler(listener, message) {
30
- const payloadValidationSchema = listener?.validationRules || {};
31
- const { done, data, properties } = message;
32
- const { event, payload, meta } = data;
33
- const activeSpanTraceId = api_1.trace.getActiveSpan()?.spanContext().traceId;
34
- const traceId = (0, api_1.isValidTraceId)(activeSpanTraceId) ? activeSpanTraceId : properties.headers?.traceId || (0, uuid_1.v4)();
35
- const context = {
36
- logData: {
37
- traceId,
38
- serviceCode: this.getServiceCode(listener, payload),
39
- },
40
- };
27
+ const { done, properties, data: { event, payload }, } = message;
28
+ const serviceCode = this.getServiceCode(listener, payload);
29
+ const context = this.prepareAsyncContext(properties, serviceCode);
41
30
  await this.asyncLocalStorage.run(context, async () => {
42
- this.logger.io(`Handling event [${event}] with payload`, { payload });
31
+ this.logger.info(`Handling event [${event}] with payload`, { payload });
43
32
  if (!listener) {
44
- this.logger.info(`No listener for the event [${event}]`);
33
+ this.logger.info(`Not found listener for the event [${event}]`);
45
34
  return done();
46
35
  }
47
- if ('isSync' in listener && listener.isSync) {
48
- return await this.syncMessageHandler(listener, message, payloadValidationSchema);
49
- }
50
- try {
51
- this.eventMessageValidator.validateEventMessage(data, payloadValidationSchema);
52
- const resp = await listener.handler?.(payload, meta);
53
- return this.performDone(message, resp, false);
54
- }
55
- catch (err) {
56
- if (err instanceof errors_1.ValidationError && 'validationErrorHandler' in listener && payload?.uuid) {
57
- await listener.validationErrorHandler?.(err, payload.uuid).catch((err_) => err_);
58
- }
59
- this.logger.error(`Failed to handle event ${event}`, { err });
60
- metrics_1.totalMessageHandlerErrorsMetrics.increment({ event });
61
- // TODO(BACK-0): message.reject();
62
- return this.performDone(message, err, true);
63
- }
36
+ return await this.handleMessage(listener, message);
64
37
  });
65
38
  }
66
- async syncMessageHandler(listener, message, payloadValidationSchema) {
67
- const { done, data } = message;
39
+ prepareAsyncContext(properties, serviceCode) {
40
+ const activeSpanTraceId = api_1.trace.getActiveSpan()?.spanContext().traceId ?? '';
41
+ const traceId = (0, api_1.isValidTraceId)(activeSpanTraceId) ? activeSpanTraceId : properties.headers?.traceId || (0, node_crypto_1.randomUUID)();
42
+ return {
43
+ logData: {
44
+ traceId,
45
+ serviceCode,
46
+ },
47
+ };
48
+ }
49
+ async handleMessage(listener, message) {
50
+ const { data, done, reject, properties: { replyTo, correlationId }, } = message;
68
51
  const { event, payload, meta } = data;
69
- if (!payload?.uuid) {
70
- this.logger.error('Missing uuid in the message payload');
71
- return done();
72
- }
73
- const channel = this.externalChannel.getChannel(event, payload.uuid);
74
- const isChannelActive = await this.externalChannel.isChannelActive(channel);
75
- if (!isChannelActive && listener.handler) {
76
- try {
77
- this.eventMessageValidator.validateSyncedEventMessage(data, payloadValidationSchema);
78
- }
79
- catch (err) {
80
- this.logger.error(`Message in a wrong format was received from a synced event: ${event}`, { err });
81
- return done();
82
- }
83
- if (payload.error) {
84
- this.logger.error(`Error received for a synced event: ${event}`, payload.error);
85
- return done();
86
- }
87
- try {
88
- await listener.handler(payload, meta);
89
- }
90
- catch (err) {
91
- this.logger.error(`Failed to handle the synced event [${event}] with payload`, { err });
52
+ const useDirectReply = replyTo && correlationId;
53
+ let hasErrorOccurred = false;
54
+ let result;
55
+ const { isValid, error } = await this.validateData(data, listener);
56
+ if (!isValid) {
57
+ if (useDirectReply && error) {
58
+ return this.directReplyDone(message, error, true);
92
59
  }
60
+ return reject(this.noRequeueNackOptions);
93
61
  }
94
- else {
95
- await this.pubsub.publish(channel, data);
62
+ try {
63
+ result = await listener.handler?.(payload, meta);
64
+ }
65
+ catch (err) {
66
+ result = err;
67
+ hasErrorOccurred = true;
68
+ this.logger.error(`Failed to handle event ${event}`, { err });
69
+ }
70
+ if (useDirectReply) {
71
+ return this.directReplyDone(message, result, hasErrorOccurred);
72
+ }
73
+ if (result instanceof interfaces_1.NackOptions) {
74
+ return reject(result);
75
+ }
76
+ else if (hasErrorOccurred && listener.nackOptions) {
77
+ return reject(listener.nackOptions);
96
78
  }
97
79
  return done();
98
80
  }
99
- performDone(receivedMessage, data, error) {
100
- const { done, data: { event, payload }, properties: { replyTo, correlationId }, } = receivedMessage;
101
- const useDirectReply = replyTo && correlationId;
102
- if (!useDirectReply) {
103
- done();
104
- return;
81
+ async validateData(data, listener) {
82
+ const { payload } = data;
83
+ const { validationRules } = listener;
84
+ try {
85
+ this.eventMessageValidator.validateEventMessage(data, validationRules);
86
+ return { isValid: true };
105
87
  }
106
- if (error) {
107
- return utils_1.utils.handleError(data, (err) => {
108
- done({
109
- event,
110
- meta: {
111
- date: new Date(),
112
- },
113
- payload: {
114
- uuid: payload.uuid,
115
- error: {
116
- message: err.message,
117
- http_code: err.getCode(),
118
- data: err.getData(),
119
- },
120
- },
121
- });
122
- });
88
+ catch (err) {
89
+ this.logger.error('Failed to validate event message', { err });
90
+ if (err instanceof errors_1.ValidationError && 'validationErrorHandler' in listener && payload?.uuid) {
91
+ const eventBusListener = listener;
92
+ await eventBusListener.validationErrorHandler?.(err, payload.uuid).catch((err_) => err_);
93
+ }
94
+ return err instanceof errors_1.ValidationError ? { isValid: false, error: err } : { isValid: false };
123
95
  }
124
- done({
96
+ }
97
+ directReplyDone(receivedMessage, response, error) {
98
+ const { done, data: { event, payload: { uuid }, }, } = receivedMessage;
99
+ const data = error ? utils_1.utils.handleError(response, (err) => err) : response;
100
+ const messageData = {
125
101
  event,
126
102
  meta: {
127
103
  date: new Date(),
128
104
  },
129
105
  payload: {
130
- uuid: payload.uuid,
131
- response: data,
106
+ uuid,
107
+ ...(data instanceof errors_1.ApiError ? { error: this.prepareQueueMessageError(data) } : { response: data }),
132
108
  },
133
- });
109
+ };
110
+ done(messageData);
134
111
  }
135
112
  getServiceCode(listener, payload) {
136
113
  try {
@@ -140,6 +117,13 @@ class EventMessageHandler {
140
117
  this.logger.error('Failed to get event listener service code', { err, listener });
141
118
  }
142
119
  }
120
+ prepareQueueMessageError(err) {
121
+ return {
122
+ data: err.getData(),
123
+ message: err.message,
124
+ http_code: err.getCode(),
125
+ };
126
+ }
143
127
  }
144
128
  exports.EventMessageHandler = EventMessageHandler;
145
129
  //# sourceMappingURL=eventMessageHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventMessageHandler.js","sourceRoot":"","sources":["../../src/services/eventMessageHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eventMessageHandler.js","sourceRoot":"","sources":["../../src/services/eventMessageHandler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"eventMessageValidator.js","sourceRoot":"","sources":["../../src/services/eventMessageValidator.ts"],"names":[],"mappings":";;;AAIA,MAAa,qBAAqB;IAMD;IALpB,oBAAoB,GAAqB;QAC9C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;QACrC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC9C,CAAA;IAED,YAA6B,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;IAAG,CAAC;IAExD,oBAAoB,CAAC,IAAsB,EAAE,0BAA4C,EAAE;QACvF,MAAM,gBAAgB,GAAqB;YACvC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,uBAAuB,EAAE;YAC3D,IAAI,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,IAAI,CAAC,oBAAoB;aACnC;SACJ,CAAA;QAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IACnD,CAAC;IAED,0BAA0B,CAAC,IAAsB,EAAE,wBAA2C;QAC1F,MAAM,UAAU,GAAqB;YACjC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACtB,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE;oBACH,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC3C,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC3C;aACJ;SACJ,CAAA;QACD,IAAI,wBAAwB,EAAE;YAC1B,UAAU,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAA;SAC5F;QAED,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC/C,CAAC;CACJ;AAxCD,sDAwCC"}
1
+ {"version":3,"file":"eventMessageValidator.js","sourceRoot":"","sources":["../../src/services/eventMessageValidator.ts"],"names":[],"mappings":";;;AAIA,MAAa,qBAAqB;IAMD;IALpB,oBAAoB,GAAqB;QAC9C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;QACrC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC9C,CAAA;IAED,YAA6B,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;IAAG,CAAC;IAExD,oBAAoB,CAAC,IAAsB,EAAE,0BAA4C,EAAE;QACvF,MAAM,gBAAgB,GAAqB;YACvC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,uBAAuB,EAAE;YAC3D,IAAI,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,IAAI,CAAC,oBAAoB;aACnC;SACJ,CAAA;QAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IACnD,CAAC;IAED,0BAA0B,CAAC,IAAsB,EAAE,wBAA2C;QAC1F,MAAM,UAAU,GAAqB;YACjC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACtB,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE;oBACH,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC3C,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC3C;aACJ;SACJ,CAAA;QACD,IAAI,wBAAwB,EAAE,CAAC;YAC3B,UAAU,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAA;QAC7F,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC/C,CAAC;CACJ;AAxCD,sDAwCC"}
@@ -1,134 +1,41 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  Object.defineProperty(exports, "__esModule", { value: true });
26
3
  exports.ExternalCommunicator = void 0;
27
- const uuid_1 = require("uuid");
4
+ const node_crypto_1 = require("node:crypto");
28
5
  const errors_1 = require("@diia-inhouse/errors");
29
- const Utils = __importStar(require("../utils"));
30
6
  class ExternalCommunicator {
31
- externalChannel;
32
7
  externalEventBus;
33
- externalEventListenerList;
34
8
  eventMessageValidator;
35
9
  logger;
36
- pubsub;
37
- timeout;
38
- eventListeners;
39
- constructor(externalChannel, externalEventBus, externalEventListenerList, eventMessageValidator, logger, pubsub, timeout = 10000) {
40
- this.externalChannel = externalChannel;
10
+ constructor(externalEventBus, eventMessageValidator, logger) {
41
11
  this.externalEventBus = externalEventBus;
42
- this.externalEventListenerList = externalEventListenerList;
43
12
  this.eventMessageValidator = eventMessageValidator;
44
13
  this.logger = logger;
45
- this.pubsub = pubsub;
46
- this.timeout = timeout;
47
- }
48
- onRegistrationsFinished() {
49
- this.eventListeners = Utils.collectEventBusListeners(this.externalEventListenerList);
50
14
  }
51
- async receiveDirect(event, request = {}, ops = {}) {
52
- const requestUuid = (0, uuid_1.v4)();
15
+ async receiveDirect(event, request = {}, ops) {
16
+ const { exchangeName, validationRules, ignoreCache, retry, timeout, registryApiVersion, requestUuid = (0, node_crypto_1.randomUUID)() } = ops;
53
17
  const payload = { uuid: requestUuid, request };
54
- const { topic, validationRules, ignoreCache, retry, timeout } = ops;
55
- const options = { ignoreCache, retry, timeout };
56
- const externalResponse = await this.externalEventBus.publishDirect(event, payload, topic, options);
18
+ const options = { ignoreCache, retry, timeout, exchangeName, registryApiVersion };
19
+ const externalResponse = await this.externalEventBus.publishDirect(event, payload, options);
20
+ this.logger.debug('External direct response', externalResponse);
57
21
  if (validationRules) {
58
22
  try {
59
23
  this.eventMessageValidator.validateSyncedEventMessage(externalResponse, validationRules);
60
24
  }
61
25
  catch (err) {
62
26
  const errorMsg = 'Message in a wrong format was received from a direct channel';
63
- this.logger.fatal(errorMsg, { err, externalResponse });
27
+ this.logger.error(errorMsg, { err, externalResponse });
64
28
  throw new Error(errorMsg);
65
29
  }
66
30
  }
67
31
  const { error, response } = externalResponse.payload;
68
32
  if (error) {
69
- this.logger.fatal(`Error received by an external event ${event}: ${error.http_code} ${error.message}`, request);
70
- throw new errors_1.ExternalCommunicatorError(error.message, error.http_code, { event, httpCode: error.http_code, ...error.data });
33
+ this.logger.error(`Error received by an external event ${event}: ${error.http_code} ${error.message}`, { requestUuid });
34
+ const errMsg = error.message || 'unknown error';
35
+ throw new errors_1.ExternalCommunicatorError(errMsg, error.http_code, { event, httpCode: error.http_code, ...error.data });
71
36
  }
72
37
  return response;
73
38
  }
74
- /**
75
- * @deprecated use receiveDirect in case provider supports direct communcation
76
- */
77
- async receive(event, request = {}, ops = {}) {
78
- const timeout = ops.timeout || this.timeout;
79
- const eventListener = this.eventListeners[event];
80
- if (!eventListener) {
81
- throw new Error(`Listener not found by the provided event: ${event}`);
82
- }
83
- if (!eventListener.isSync) {
84
- throw new Error(`Listener is not synchronous for the provided event: ${event}`);
85
- }
86
- const requestUuid = ops.requestUuid || (0, uuid_1.v4)();
87
- const payload = { uuid: requestUuid, request };
88
- const { ignoreCache, retry, async } = ops;
89
- const options = { ignoreCache, retry };
90
- if (async) {
91
- const success = await this.externalEventBus.publish(event, payload, options);
92
- if (!success) {
93
- throw new Error(`Failed to publish async external event ${event}`);
94
- }
95
- return;
96
- }
97
- const channel = this.externalChannel.getChannel(event, requestUuid);
98
- const promise = new Promise((resolve, reject) => {
99
- const timer = setTimeout(async () => {
100
- await this.pubsub.unsubscribe(channel);
101
- return reject(new Error(`External communication timeout error for the channel ${channel}`));
102
- }, timeout);
103
- this.pubsub
104
- .onceChannelMessage(channel, async (message) => {
105
- clearTimeout(timer);
106
- const data = JSON.parse(message);
107
- try {
108
- this.eventMessageValidator.validateSyncedEventMessage(data, eventListener.validationRules);
109
- }
110
- catch (err) {
111
- const errorMsg = 'Message in a wrong format was received from a redis channel';
112
- this.logger.fatal(errorMsg, { err, data });
113
- return reject(new Error(errorMsg));
114
- }
115
- const { error, response } = data.payload;
116
- if (error) {
117
- this.logger.fatal(`Error received by an external event ${event}: ${error.http_code} ${error.message}`, request);
118
- return reject(new errors_1.ExternalCommunicatorError(error.message, error.http_code, { event, ...error.data }));
119
- }
120
- return resolve(response);
121
- })
122
- .catch(reject);
123
- });
124
- await this.externalChannel.saveActiveChannel(channel, timeout);
125
- const success = await this.externalEventBus.publish(event, payload);
126
- if (!success) {
127
- await this.pubsub.unsubscribe(channel);
128
- throw new Error(`Failed to publish external event ${event}`);
129
- }
130
- return await promise;
131
- }
132
39
  }
133
40
  exports.ExternalCommunicator = ExternalCommunicator;
134
41
  //# sourceMappingURL=externalCommunicator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"externalCommunicator.js","sourceRoot":"","sources":["../../src/services/externalCommunicator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"externalCommunicator.js","sourceRoot":"","sources":["../../src/services/externalCommunicator.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AAGxC,iDAAgE;AAMhE,MAAa,oBAAoB;IAER;IACA;IACA;IAHrB,YACqB,gBAAuC,EACvC,qBAA4C,EAC5C,MAAc;QAFd,qBAAgB,GAAhB,gBAAgB,CAAuB;QACvC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,WAAM,GAAN,MAAM,CAAQ;IAChC,CAAC;IAEJ,KAAK,CAAC,aAAa,CAAI,KAAa,EAAE,UAAmB,EAAE,EAAE,GAAqB;QAC9E,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,GAAG,IAAA,wBAAU,GAAE,EAAE,GAAG,GAAG,CAAA;QAE1H,MAAM,OAAO,GAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAA;QAE9D,MAAM,OAAO,GAAyB,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAA;QACvG,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAC9D,KAAK,EACL,OAAO,EACP,OAAO,CACV,CAAA;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,CAAA;QAC/D,IAAI,eAAe,EAAE,CAAC;YAClB,IAAI,CAAC;gBACD,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAA;YAC5F,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,MAAM,QAAQ,GAAG,8DAA8D,CAAA;gBAE/E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAA;gBACtD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC7B,CAAC;QACL,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAA;QAEpD,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,KAAK,KAAK,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;YAEvH,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,IAAI,eAAe,CAAA;YAE/C,MAAM,IAAI,kCAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QACrH,CAAC;QAED,OAAO,QAAQ,CAAA;IACnB,CAAC;CACJ;AA3CD,oDA2CC"}
@@ -1,70 +1,162 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
4
  };
25
5
  Object.defineProperty(exports, "__esModule", { value: true });
26
6
  exports.ExternalEventBus = void 0;
27
- const Utils = __importStar(require("../utils"));
28
- class ExternalEventBus {
29
- queueProvider;
30
- externalEventListenerList;
31
- eventMessageHandler;
7
+ const errors_1 = require("@diia-inhouse/errors");
8
+ const types_1 = require("@diia-inhouse/types");
9
+ const constants_1 = __importDefault(require("../constants"));
10
+ const interfaces_1 = require("../interfaces");
11
+ const communicator_1 = __importDefault(require("./communicator"));
12
+ const eventCommunicator_1 = require("./eventCommunicator");
13
+ class ExternalEventBus extends communicator_1.default {
32
14
  envService;
33
- logger;
34
- constructor(queueProvider, externalEventListenerList, eventMessageHandler, envService, logger) {
35
- this.queueProvider = queueProvider;
36
- this.externalEventListenerList = externalEventListenerList;
37
- this.eventMessageHandler = eventMessageHandler;
15
+ eventCommunicator;
16
+ publishEventsSet;
17
+ subscribeEventsSet;
18
+ exchangePrefixName = 'TopicExternal';
19
+ eventQueueMap = new Map();
20
+ constructor(logger, systemServiceName, envService, queueProvider, externalEventListenerList, eventMessageHandler, hostName) {
21
+ super(logger, queueProvider, hostName, systemServiceName);
38
22
  this.envService = envService;
39
- this.logger = logger;
23
+ const { rabbit: { custom }, service: { publish = [], subscribe = [] }, } = this.queueProvider.getConfig();
24
+ if (custom?.responseRoutingKeyPrefix && !this.envService.isLocal() && !this.envService.isTest()) {
25
+ throw new Error('Response routing key could be used only on local env');
26
+ }
27
+ this.publishEventsSet = new Set(publish);
28
+ this.subscribeEventsSet = new Set(subscribe);
29
+ this.eventQueueMap = this.buildEventQueueMap();
30
+ this.eventCommunicator = new eventCommunicator_1.EventCommunicator(logger, queueProvider, eventMessageHandler, externalEventListenerList);
40
31
  }
41
- async onInit() {
42
- const externalConfig = this.queueProvider.getConfig();
43
- try {
44
- if (externalConfig.custom?.responseRoutingKeyPrefix && !this.envService.isLocal() && !this.envService.isTest()) {
45
- throw new Error('Response routing key could be used only on local env');
46
- }
47
- const eventListeners = Utils.collectEventBusListeners(this.externalEventListenerList);
48
- await this.subscribe(this.eventMessageHandler.eventListenersMessageHandler.bind(this.eventMessageHandler, eventListeners), {
49
- listener: externalConfig.listenerOptions,
50
- });
51
- for (const listener of this.externalEventListenerList) {
52
- this.logger.info(`External event listener [${listener.event}] initialized successfully`);
53
- }
32
+ static BuildRequestRoutingKey(eventName) {
33
+ return `queue.${constants_1.default.PROJECT_NAME}.${eventName}.req`;
34
+ }
35
+ static BuildResponseRoutingKey(eventName, portalEvents = []) {
36
+ const queuePrefix = ExternalEventBus.prepareQueuePrefix(eventName, portalEvents);
37
+ return `${queuePrefix}.${eventName}.res`;
38
+ }
39
+ static prepareQueuePrefix(event, portalEvents = []) {
40
+ if (portalEvents.includes(event)) {
41
+ return `queue.${constants_1.default.PORTAL_NAME}`;
54
42
  }
55
- catch (err) {
56
- this.logger.error('Failed to initialize external event bus', { err });
57
- throw err;
43
+ return `queue.${constants_1.default.PROJECT_NAME}`;
44
+ }
45
+ async publish(eventName, payload, options) {
46
+ const message = this.getPublishMessage(eventName, payload, options);
47
+ const routingKey = this.getPublishRoutingKey(eventName);
48
+ return await this.publishEventToExchange(eventName, message, { ...options, routingKey });
49
+ }
50
+ async publishDirect(eventName, payload, options = {}) {
51
+ const { exchangeName: customExchangeName } = options;
52
+ const exchangeName = customExchangeName ?? this.eventNameToExchangeNameMap.get(eventName);
53
+ if (!exchangeName) {
54
+ throw new errors_1.ExternalCommunicatorError(`Exchange name for event ${eventName} is not defined`, types_1.HttpStatusCode.INTERNAL_SERVER_ERROR, { event: eventName, customExchangeName }, errors_1.ErrorType.Unoperated);
58
55
  }
56
+ const routingKey = ExternalEventBus.BuildRequestRoutingKey(eventName);
57
+ const { data } = this.getPublishMessage(eventName, payload, options);
58
+ return await this.queueProvider.publishExternalDirect(data, exchangeName, routingKey, options);
59
+ }
60
+ getUnicastListeners() {
61
+ return this.eventCommunicator.getUnicastListeners();
62
+ }
63
+ getExchangeNameWithSuffix(topic) {
64
+ return `${this.exchangePrefixName}${topic}`;
59
65
  }
60
- async subscribe(messageHandler, options) {
61
- return await this.queueProvider.subscribeExternal(messageHandler, options);
66
+ getProducerExchangesOptions() {
67
+ const [exchangesOptions] = this.defineQueuesAndExchangesOptionsBasedOnGlobalConfig();
68
+ return exchangesOptions;
62
69
  }
63
- async publish(eventName, message, options) {
64
- return await this.queueProvider.publishExternal(eventName, message, options);
70
+ getMulticastListeners() {
71
+ const [exchangesOptions, queuesOptions] = this.defineQueuesAndExchangesOptionsBasedOnGlobalConfig();
72
+ return this.eventCommunicator.getMulticastListeners(queuesOptions, exchangesOptions, this.eventQueueMap);
65
73
  }
66
- async publishDirect(eventName, message, topic, options) {
67
- return await this.queueProvider.publishExternalDirect(eventName, message, topic, options);
74
+ getPublishMessage(eventName, message, options) {
75
+ const { rabbit: { custom: { responseRoutingKeyPrefix } = {} }, } = this.queueProvider.getConfig();
76
+ const responseRoutingKey = this.buildResponseQueueName(eventName, responseRoutingKeyPrefix);
77
+ const partialMeta = {
78
+ ignoreCache: options?.ignoreCache,
79
+ registryApiVersion: options?.registryApiVersion,
80
+ ...(this.publishEventsSet.has(eventName) ? { responseRoutingKey } : {}),
81
+ };
82
+ const data = this.getPublishQueueMessageData(eventName, message, partialMeta);
83
+ return new interfaces_1.Message(data);
84
+ }
85
+ getPublishRoutingKey(eventName) {
86
+ if (this.publishEventsSet.has(eventName)) {
87
+ return ExternalEventBus.BuildRequestRoutingKey(eventName);
88
+ }
89
+ else if (this.subscribeEventsSet.has(eventName)) {
90
+ const { portalEvents } = this.queueProvider.getConfig();
91
+ return ExternalEventBus.BuildResponseRoutingKey(eventName, portalEvents);
92
+ }
93
+ return '';
94
+ }
95
+ defineQueuesAndExchangesOptionsBasedOnGlobalConfig() {
96
+ const { rabbit: { listenerOptions, declareOptions: { assertQueues, assertExchanges, queuesOptions: overriddenQueuesOptions = {} } = {}, }, } = this.queueProvider.getConfig();
97
+ const queuesOptions = [];
98
+ const exchangesMap = new Map();
99
+ for (const [eventName, queueName] of this.eventQueueMap.entries()) {
100
+ const exchangeName = this.eventNameToExchangeNameMap.get(eventName);
101
+ if (!exchangeName) {
102
+ this.logger.error(`Can't find external topic name for event [${eventName}]`);
103
+ return [[], []];
104
+ }
105
+ const queueOptions = {
106
+ name: queueName,
107
+ declare: assertQueues,
108
+ type: interfaces_1.QueueTypes.Quorum,
109
+ options: listenerOptions?.queueOptions,
110
+ bindTo: [
111
+ {
112
+ bind: assertQueues,
113
+ routingKey: queueName,
114
+ exchangeName: exchangeName,
115
+ },
116
+ ],
117
+ consumerOptions: this.optionsBuilder.defineConsumerOptionsBasedOnGlobalConfig(),
118
+ ...overriddenQueuesOptions,
119
+ };
120
+ queuesOptions.push(queueOptions);
121
+ const exchangeOptions = {
122
+ name: exchangeName,
123
+ type: interfaces_1.ExchangeType.Topic,
124
+ declare: assertExchanges,
125
+ };
126
+ exchangesMap.set(exchangeName, exchangeOptions);
127
+ }
128
+ const exchangesOptions = [...exchangesMap.values()];
129
+ return [exchangesOptions, queuesOptions];
130
+ }
131
+ buildEventQueueMap() {
132
+ const eventQueueMap = new Map();
133
+ const { service: { publish = [], subscribe = [] }, rabbit: { custom: { responseRoutingKeyPrefix } = {} }, } = this.queueProvider.getConfig();
134
+ if (publish.length === 0 && subscribe.length === 0) {
135
+ this.logger.info('No one external events to listen');
136
+ return eventQueueMap;
137
+ }
138
+ for (const responseEvent of publish) {
139
+ eventQueueMap.set(responseEvent, this.buildResponseQueueName(responseEvent, responseRoutingKeyPrefix));
140
+ }
141
+ for (const requestEvent of subscribe) {
142
+ eventQueueMap.set(requestEvent, this.buildRequestQueueName(requestEvent, responseRoutingKeyPrefix));
143
+ }
144
+ return eventQueueMap;
145
+ }
146
+ buildResponseQueueName(eventName, prefix) {
147
+ const result = `queue.${constants_1.default.PROJECT_NAME}.${eventName}.res`;
148
+ if (prefix) {
149
+ return `${prefix}.${result}`;
150
+ }
151
+ return result;
152
+ }
153
+ buildRequestQueueName(eventName, prefix) {
154
+ const { portalEvents } = this.queueProvider.getConfig();
155
+ const result = `${ExternalEventBus.prepareQueuePrefix(eventName, portalEvents)}.${eventName}.req`;
156
+ if (prefix) {
157
+ return `${prefix}.${result}`;
158
+ }
159
+ return result;
68
160
  }
69
161
  }
70
162
  exports.ExternalEventBus = ExternalEventBus;