@diia-inhouse/diia-queue 13.3.4 → 14.0.11

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 (148) hide show
  1. package/dist/constants.js +9 -9
  2. package/dist/index.d.ts +27 -0
  3. package/dist/index.js +23 -21
  4. package/dist/interfaces/deps.d.ts +30 -0
  5. package/dist/interfaces/externalCommunicator.d.ts +58 -0
  6. package/dist/interfaces/index.d.ts +95 -0
  7. package/dist/interfaces/index.js +7 -30
  8. package/dist/interfaces/messageBrokerServiceConfig.d.ts +80 -0
  9. package/dist/interfaces/messageBrokerServiceConfig.js +27 -24
  10. package/dist/interfaces/messageHandler.d.ts +6 -0
  11. package/dist/interfaces/metrics/index.d.ts +23 -0
  12. package/dist/interfaces/metrics/index.js +12 -16
  13. package/dist/interfaces/options.d.ts +52 -0
  14. package/dist/interfaces/providers/rabbitmq/amqpConnection.d.ts +33 -0
  15. package/dist/interfaces/providers/rabbitmq/amqpConnection.js +14 -17
  16. package/dist/interfaces/providers/rabbitmq/amqpPublisher.d.ts +20 -0
  17. package/dist/interfaces/providers/rabbitmq/index.d.ts +107 -0
  18. package/dist/interfaces/providers/rabbitmq/index.js +35 -47
  19. package/dist/interfaces/queueConfig/configs.d.ts +47 -0
  20. package/dist/interfaces/queueConfig/configs.js +8 -9
  21. package/dist/interfaces/queueConfig/index.d.ts +1 -0
  22. package/dist/interfaces/queueContext.d.ts +8 -0
  23. package/dist/interfaces/queueStatus.d.ts +15 -0
  24. package/dist/interfaces/queueStatus.js +8 -9
  25. package/dist/metrics/index.js +5 -8
  26. package/dist/providers/index.d.ts +5 -0
  27. package/dist/providers/index.js +6 -22
  28. package/dist/providers/rabbitmq/amqpAsserter.d.ts +53 -0
  29. package/dist/providers/rabbitmq/amqpAsserter.js +369 -416
  30. package/dist/providers/rabbitmq/amqpConnection.d.ts +24 -0
  31. package/dist/providers/rabbitmq/amqpConnection.js +97 -150
  32. package/dist/providers/rabbitmq/amqpListener.d.ts +47 -0
  33. package/dist/providers/rabbitmq/amqpListener.js +218 -225
  34. package/dist/providers/rabbitmq/amqpPublisher.d.ts +38 -0
  35. package/dist/providers/rabbitmq/amqpPublisher.js +184 -191
  36. package/dist/providers/rabbitmq/index.d.ts +56 -0
  37. package/dist/providers/rabbitmq/index.js +161 -186
  38. package/dist/services/communicator.d.ts +66 -0
  39. package/dist/services/communicator.js +164 -186
  40. package/dist/services/eventBus.d.ts +25 -0
  41. package/dist/services/eventBus.js +45 -57
  42. package/dist/services/eventCommunicator.js +75 -124
  43. package/dist/services/eventMessageHandler.d.ts +27 -0
  44. package/dist/services/eventMessageHandler.js +124 -129
  45. package/dist/services/eventMessageValidator.d.ts +13 -0
  46. package/dist/services/eventMessageValidator.js +59 -44
  47. package/dist/services/externalCommunicator.d.ts +114 -0
  48. package/dist/services/externalCommunicator.js +149 -140
  49. package/dist/services/externalEventBus.d.ts +39 -0
  50. package/dist/services/externalEventBus.js +144 -162
  51. package/dist/services/index.d.ts +8 -0
  52. package/dist/services/index.js +10 -26
  53. package/dist/services/metrics.d.ts +15 -0
  54. package/dist/services/metrics.js +46 -49
  55. package/dist/services/optionsBuilder.d.ts +14 -0
  56. package/dist/services/optionsBuilder.js +43 -58
  57. package/dist/services/queue.d.ts +29 -0
  58. package/dist/services/queue.js +78 -93
  59. package/dist/services/scheduledTask.d.ts +30 -0
  60. package/dist/services/scheduledTask.js +60 -68
  61. package/dist/services/task.d.ts +33 -0
  62. package/dist/services/task.js +160 -176
  63. package/dist/utils.js +7 -11
  64. package/package.json +44 -50
  65. package/dist/constants.js.map +0 -1
  66. package/dist/index.js.map +0 -1
  67. package/dist/interfaces/deps.js +0 -3
  68. package/dist/interfaces/deps.js.map +0 -1
  69. package/dist/interfaces/externalCommunicator.js +0 -3
  70. package/dist/interfaces/externalCommunicator.js.map +0 -1
  71. package/dist/interfaces/index.js.map +0 -1
  72. package/dist/interfaces/messageBrokerServiceConfig.js.map +0 -1
  73. package/dist/interfaces/messageHandler.js +0 -3
  74. package/dist/interfaces/messageHandler.js.map +0 -1
  75. package/dist/interfaces/metrics/index.js.map +0 -1
  76. package/dist/interfaces/options.js +0 -3
  77. package/dist/interfaces/options.js.map +0 -1
  78. package/dist/interfaces/providers/rabbitmq/amqpConnection.js.map +0 -1
  79. package/dist/interfaces/providers/rabbitmq/amqpPublisher.js +0 -4
  80. package/dist/interfaces/providers/rabbitmq/amqpPublisher.js.map +0 -1
  81. package/dist/interfaces/providers/rabbitmq/index.js.map +0 -1
  82. package/dist/interfaces/queueConfig/configs.js.map +0 -1
  83. package/dist/interfaces/queueConfig/index.js +0 -18
  84. package/dist/interfaces/queueConfig/index.js.map +0 -1
  85. package/dist/interfaces/queueContext.js +0 -3
  86. package/dist/interfaces/queueContext.js.map +0 -1
  87. package/dist/interfaces/queueStatus.js.map +0 -1
  88. package/dist/interfaces/services/eventMessageHandler.js +0 -3
  89. package/dist/interfaces/services/eventMessageHandler.js.map +0 -1
  90. package/dist/metrics/index.js.map +0 -1
  91. package/dist/providers/index.js.map +0 -1
  92. package/dist/providers/rabbitmq/amqpAsserter.js.map +0 -1
  93. package/dist/providers/rabbitmq/amqpConnection.js.map +0 -1
  94. package/dist/providers/rabbitmq/amqpListener.js.map +0 -1
  95. package/dist/providers/rabbitmq/amqpPublisher.js.map +0 -1
  96. package/dist/providers/rabbitmq/index.js.map +0 -1
  97. package/dist/services/communicator.js.map +0 -1
  98. package/dist/services/eventBus.js.map +0 -1
  99. package/dist/services/eventCommunicator.js.map +0 -1
  100. package/dist/services/eventMessageHandler.js.map +0 -1
  101. package/dist/services/eventMessageValidator.js.map +0 -1
  102. package/dist/services/externalCommunicator.js.map +0 -1
  103. package/dist/services/externalEventBus.js.map +0 -1
  104. package/dist/services/index.js.map +0 -1
  105. package/dist/services/metrics.js.map +0 -1
  106. package/dist/services/optionsBuilder.js.map +0 -1
  107. package/dist/services/queue.js.map +0 -1
  108. package/dist/services/scheduledTask.js.map +0 -1
  109. package/dist/services/task.js.map +0 -1
  110. package/dist/types/constants.d.ts +0 -8
  111. package/dist/types/index.d.ts +0 -4
  112. package/dist/types/interfaces/deps.d.ts +0 -26
  113. package/dist/types/interfaces/externalCommunicator.d.ts +0 -54
  114. package/dist/types/interfaces/index.d.ts +0 -99
  115. package/dist/types/interfaces/messageBrokerServiceConfig.d.ts +0 -79
  116. package/dist/types/interfaces/messageHandler.d.ts +0 -2
  117. package/dist/types/interfaces/metrics/index.d.ts +0 -20
  118. package/dist/types/interfaces/options.d.ts +0 -49
  119. package/dist/types/interfaces/providers/rabbitmq/amqpConnection.d.ts +0 -29
  120. package/dist/types/interfaces/providers/rabbitmq/amqpPublisher.d.ts +0 -16
  121. package/dist/types/interfaces/providers/rabbitmq/index.d.ts +0 -114
  122. package/dist/types/interfaces/queueConfig/configs.d.ts +0 -47
  123. package/dist/types/interfaces/queueConfig/index.d.ts +0 -1
  124. package/dist/types/interfaces/queueContext.d.ts +0 -4
  125. package/dist/types/interfaces/queueStatus.d.ts +0 -11
  126. package/dist/types/interfaces/services/eventMessageHandler.d.ts +0 -5
  127. package/dist/types/metrics/index.d.ts +0 -3
  128. package/dist/types/providers/index.d.ts +0 -5
  129. package/dist/types/providers/rabbitmq/amqpAsserter.d.ts +0 -49
  130. package/dist/types/providers/rabbitmq/amqpConnection.d.ts +0 -20
  131. package/dist/types/providers/rabbitmq/amqpListener.d.ts +0 -42
  132. package/dist/types/providers/rabbitmq/amqpPublisher.d.ts +0 -34
  133. package/dist/types/providers/rabbitmq/index.d.ts +0 -52
  134. package/dist/types/services/communicator.d.ts +0 -57
  135. package/dist/types/services/eventBus.d.ts +0 -20
  136. package/dist/types/services/eventCommunicator.d.ts +0 -15
  137. package/dist/types/services/eventMessageHandler.d.ts +0 -19
  138. package/dist/types/services/eventMessageValidator.d.ts +0 -9
  139. package/dist/types/services/externalCommunicator.d.ts +0 -110
  140. package/dist/types/services/externalEventBus.d.ts +0 -33
  141. package/dist/types/services/index.d.ts +0 -9
  142. package/dist/types/services/metrics.d.ts +0 -11
  143. package/dist/types/services/optionsBuilder.d.ts +0 -10
  144. package/dist/types/services/queue.d.ts +0 -23
  145. package/dist/types/services/scheduledTask.d.ts +0 -25
  146. package/dist/types/services/task.d.ts +0 -28
  147. package/dist/types/utils.d.ts +0 -3
  148. package/dist/utils.js.map +0 -1
@@ -1,187 +1,162 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
1
+ import "../../interfaces/providers/rabbitmq/index.js";
2
+ import "../../interfaces/providers/rabbitmq/amqpConnection.js";
3
+ import { emptyMessageBrokerServiceConfig } from "../../interfaces/messageBrokerServiceConfig.js";
4
+ import "../../interfaces/index.js";
5
+ import constants_default from "../../constants.js";
6
+ import RabbitMQMetricsService from "../../services/metrics.js";
7
+ import { AmqpAsserter } from "./amqpAsserter.js";
8
+ import { AmqpConnection } from "./amqpConnection.js";
9
+ import { AmqpListener } from "./amqpListener.js";
10
+ import { AmqpPublisher } from "./amqpPublisher.js";
11
+ import { InternalServerError } from "@diia-inhouse/errors";
12
+ import lodash from "lodash";
13
+ import { randomUUID } from "node:crypto";
14
+ import { EventEmitter } from "node:events";
15
+ import pTimeout from "p-timeout";
16
+ //#region src/providers/rabbitmq/index.ts
17
+ var RabbitMQProvider = class extends EventEmitter {
18
+ systemServiceName;
19
+ rabbitmqConfig;
20
+ serviceConfig;
21
+ topicsConfig;
22
+ portalEvents;
23
+ logger;
24
+ metrics;
25
+ asyncLocalStorage;
26
+ queuesConfig;
27
+ messageBrokerServiceConfig;
28
+ initializingLock;
29
+ listener;
30
+ publisher;
31
+ asserter;
32
+ connectionList = {
33
+ ["listener"]: {},
34
+ ["asserter"]: {},
35
+ ["publisher"]: {}
36
+ };
37
+ publisherIsNotInitializedErrorMsg = "Publisher is not initialized";
38
+ rabbitMQMetricsService;
39
+ constructor(systemServiceName, rabbitmqConfig, serviceConfig, topicsConfig, portalEvents, logger, metrics, asyncLocalStorage = void 0, queuesConfig = void 0, messageBrokerServiceConfig = void 0) {
40
+ super();
41
+ this.systemServiceName = systemServiceName;
42
+ this.rabbitmqConfig = rabbitmqConfig;
43
+ this.serviceConfig = serviceConfig;
44
+ this.topicsConfig = topicsConfig;
45
+ this.portalEvents = portalEvents;
46
+ this.logger = logger;
47
+ this.metrics = metrics;
48
+ this.asyncLocalStorage = asyncLocalStorage;
49
+ this.queuesConfig = queuesConfig;
50
+ this.messageBrokerServiceConfig = messageBrokerServiceConfig;
51
+ this.rabbitMQMetricsService = new RabbitMQMetricsService(this.metrics);
52
+ }
53
+ getConfig() {
54
+ return {
55
+ topics: this.topicsConfig,
56
+ rabbit: this.rabbitmqConfig,
57
+ service: this.serviceConfig,
58
+ portalEvents: this.portalEvents,
59
+ queues: this.queuesConfig ?? {}
60
+ };
61
+ }
62
+ getMessageBrokerServiceConfig() {
63
+ if (!this.messageBrokerServiceConfig) return {
64
+ queuesOptions: [],
65
+ exchangesOptions: []
66
+ };
67
+ return this.messageBrokerServiceConfig;
68
+ }
69
+ async init(config = emptyMessageBrokerServiceConfig) {
70
+ const { queuesOptions, exchangesOptions } = config;
71
+ if (this.initializingLock) return await this.initializingLock;
72
+ const tasks = [this.setPublisher(), this.setAsserter(queuesOptions, exchangesOptions)];
73
+ if (this.rabbitmqConfig.consumerEnabled !== false && queuesOptions.length > 0) tasks.push(this.setListener(queuesOptions));
74
+ this.initializingLock = Promise.all(tasks).then(() => this.logger.info(`RabbitMQ provider has been initialized by options`, {
75
+ queuesOptions,
76
+ exchangesOptions
77
+ }));
78
+ await this.initializingLock;
79
+ this.emit("initialized");
80
+ }
81
+ async subscribe(queueName, messageHandler) {
82
+ await this.listener?.listenQueue(queueName, messageHandler);
83
+ return true;
84
+ }
85
+ async unsubscribe(queueName) {
86
+ await this.listener?.cancelQueue(queueName);
87
+ }
88
+ async publish(message, exchangeName, routingKey = constants_default.DEFAULT_ROUTING_KEY, options) {
89
+ const { publishTimeout = Infinity, throwOnPublishTimeout = true, delay } = options || {};
90
+ const publishTask = async () => {
91
+ const headers = this.preparePublisherHeaders(delay);
92
+ if (!this.publisher) throw new Error(this.publisherIsNotInitializedErrorMsg);
93
+ return await this.publisher?.publishToExchange(exchangeName, message, headers, routingKey);
94
+ };
95
+ const timeoutMsg = `Publishing message to ${exchangeName} exchange with ${routingKey} routing key timeout exceed`;
96
+ if (throwOnPublishTimeout) return await pTimeout(publishTask(), publishTimeout, timeoutMsg);
97
+ return await pTimeout(publishTask(), publishTimeout, () => {
98
+ this.logger.error(timeoutMsg, { publishTimeout });
99
+ throw new InternalServerError(timeoutMsg);
100
+ });
101
+ }
102
+ async publishExternalDirect(message, exchangeName, routingKey = constants_default.DEFAULT_ROUTING_KEY, options) {
103
+ const headers = this.preparePublisherHeaders();
104
+ if (!this.publisher) throw new Error(this.publisherIsNotInitializedErrorMsg);
105
+ return await this.publisher?.publishToExchangeDirect(exchangeName, message, headers, routingKey, options?.timeout);
106
+ }
107
+ getStatus() {
108
+ return {
109
+ ...this.listener ? { listener: this.listener.getStatus() } : {},
110
+ publisher: this.publisher?.getStatus() ?? "down"
111
+ };
112
+ }
113
+ async makeAMQPConnection(client) {
114
+ return new AmqpConnection(this.rabbitmqConfig.connection, this.logger, this.rabbitmqConfig.reconnectOptions, lodash.merge({ clientProperties: { connectionClientType: client } }, this.rabbitmqConfig.socketOptions));
115
+ }
116
+ async makeAMQPListener(queuesOptions) {
117
+ return new AmqpListener(await this.getConnection("listener"), this.logger, this.rabbitMQMetricsService, queuesOptions, this.systemServiceName);
118
+ }
119
+ async makeAMQPAsserter() {
120
+ return new AmqpAsserter(await this.getConnection("asserter"), this.logger, this.rabbitmqConfig.declareOptions);
121
+ }
122
+ async makeAMQPPublisher() {
123
+ return new AmqpPublisher(await this.getConnection("publisher"), this.logger, this.rabbitMQMetricsService, this.systemServiceName);
124
+ }
125
+ async setListener(queuesOptions) {
126
+ if (!this.listener) {
127
+ this.listener = await this.makeAMQPListener(queuesOptions);
128
+ await this.listener?.init();
129
+ }
130
+ return this.listener;
131
+ }
132
+ async setAsserter(queuesOptions, exchangesOptions) {
133
+ if (!this.asserter) {
134
+ this.asserter = await this.makeAMQPAsserter();
135
+ await this.asserter.init(exchangesOptions, queuesOptions);
136
+ }
137
+ return this.asserter;
138
+ }
139
+ async setPublisher() {
140
+ if (!this.publisher) {
141
+ this.publisher = await this.makeAMQPPublisher();
142
+ await this.publisher?.init();
143
+ }
144
+ return this.publisher;
145
+ }
146
+ async getConnection(client) {
147
+ if (this.connectionList[client].lock) return await this.connectionList[client].lock;
148
+ const connection = await this.makeAMQPConnection(client);
149
+ this.connectionList[client].lock = new Promise((resolve) => connection.connect().then(() => resolve(connection)));
150
+ return await this.connectionList[client].lock;
151
+ }
152
+ preparePublisherHeaders(delay) {
153
+ const logData = (this.asyncLocalStorage?.getStore())?.logData ?? {};
154
+ return {
155
+ traceId: logData?.traceId ?? randomUUID(),
156
+ serviceCode: logData?.serviceCode,
157
+ ...delay ? { "x-delay": delay } : {}
158
+ };
159
+ }
4
160
  };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.RabbitMQProvider = void 0;
7
- const node_crypto_1 = require("node:crypto");
8
- const node_events_1 = require("node:events");
9
- const lodash_1 = require("lodash");
10
- const p_timeout_1 = __importDefault(require("p-timeout"));
11
- const errors_1 = require("@diia-inhouse/errors");
12
- const constants_1 = __importDefault(require("../../constants"));
13
- const interfaces_1 = require("../../interfaces");
14
- const rabbitmq_1 = require("../../interfaces/providers/rabbitmq");
15
- const metrics_1 = __importDefault(require("../../services/metrics"));
16
- const amqpAsserter_1 = require("./amqpAsserter");
17
- const amqpConnection_1 = require("./amqpConnection");
18
- const amqpListener_1 = require("./amqpListener");
19
- const amqpPublisher_1 = require("./amqpPublisher");
20
- // eslint-disable-next-line unicorn/prefer-event-target
21
- class RabbitMQProvider extends node_events_1.EventEmitter {
22
- systemServiceName;
23
- rabbitmqConfig;
24
- serviceConfig;
25
- topicsConfig;
26
- portalEvents;
27
- logger;
28
- metrics;
29
- asyncLocalStorage;
30
- queuesConfig;
31
- messageBrokerServiceConfig;
32
- initializingLock;
33
- listener;
34
- publisher;
35
- asserter;
36
- connectionList = {
37
- [rabbitmq_1.ConnectionClientType.Listener]: {},
38
- [rabbitmq_1.ConnectionClientType.Asserter]: {},
39
- [rabbitmq_1.ConnectionClientType.Publisher]: {},
40
- };
41
- publisherIsNotInitializedErrorMsg = 'Publisher is not initialized';
42
- rabbitMQMetricsService;
43
- constructor(systemServiceName, rabbitmqConfig, serviceConfig, topicsConfig, portalEvents, logger, metrics, asyncLocalStorage, queuesConfig, messageBrokerServiceConfig) {
44
- super();
45
- this.systemServiceName = systemServiceName;
46
- this.rabbitmqConfig = rabbitmqConfig;
47
- this.serviceConfig = serviceConfig;
48
- this.topicsConfig = topicsConfig;
49
- this.portalEvents = portalEvents;
50
- this.logger = logger;
51
- this.metrics = metrics;
52
- this.asyncLocalStorage = asyncLocalStorage;
53
- this.queuesConfig = queuesConfig;
54
- this.messageBrokerServiceConfig = messageBrokerServiceConfig;
55
- this.rabbitMQMetricsService = new metrics_1.default(this.metrics);
56
- }
57
- getConfig() {
58
- return {
59
- topics: this.topicsConfig,
60
- rabbit: this.rabbitmqConfig,
61
- service: this.serviceConfig,
62
- portalEvents: this.portalEvents,
63
- queues: this.queuesConfig ?? {},
64
- };
65
- }
66
- getMessageBrokerServiceConfig() {
67
- if (!this.messageBrokerServiceConfig) {
68
- return {
69
- queuesOptions: [],
70
- exchangesOptions: [],
71
- };
72
- }
73
- return this.messageBrokerServiceConfig;
74
- }
75
- async init(config = interfaces_1.emptyMessageBrokerServiceConfig) {
76
- const { queuesOptions, exchangesOptions } = config;
77
- if (this.initializingLock) {
78
- return await this.initializingLock;
79
- }
80
- const tasks = [this.setPublisher(), this.setAsserter(queuesOptions, exchangesOptions)];
81
- if (this.rabbitmqConfig.consumerEnabled !== false && queuesOptions.length > 0) {
82
- tasks.push(this.setListener(queuesOptions));
83
- }
84
- this.initializingLock = Promise.all(tasks).then(() => this.logger.info(`RabbitMQ provider has been initialized by options`, { queuesOptions, exchangesOptions }));
85
- await this.initializingLock;
86
- this.emit('initialized');
87
- }
88
- async subscribe(queueName, messageHandler) {
89
- await this.listener?.listenQueue(queueName, messageHandler);
90
- return true;
91
- }
92
- async unsubscribe(queueName) {
93
- await this.listener?.cancelQueue(queueName);
94
- }
95
- async publish(message, exchangeName, routingKey = constants_1.default.DEFAULT_ROUTING_KEY, options) {
96
- const { publishTimeout = Infinity, throwOnPublishTimeout = true, delay } = options || {};
97
- const publishTask = async () => {
98
- const headers = this.preparePublisherHeaders(delay);
99
- if (!this.publisher) {
100
- throw new Error(this.publisherIsNotInitializedErrorMsg);
101
- }
102
- return await this.publisher?.publishToExchange(exchangeName, message, headers, routingKey);
103
- };
104
- const timeoutMsg = `Publishing message to ${exchangeName} exchange with ${routingKey} routing key timeout exceed`;
105
- if (throwOnPublishTimeout) {
106
- return await (0, p_timeout_1.default)(publishTask(), publishTimeout, timeoutMsg);
107
- }
108
- return await (0, p_timeout_1.default)(publishTask(), publishTimeout, () => {
109
- this.logger.error(timeoutMsg, { publishTimeout });
110
- throw new errors_1.InternalServerError(timeoutMsg);
111
- });
112
- }
113
- async publishExternalDirect(message, exchangeName, routingKey = constants_1.default.DEFAULT_ROUTING_KEY, options) {
114
- const headers = this.preparePublisherHeaders();
115
- if (!this.publisher) {
116
- throw new Error(this.publisherIsNotInitializedErrorMsg);
117
- }
118
- return await this.publisher?.publishToExchangeDirect(exchangeName, message, headers, routingKey, options?.timeout);
119
- }
120
- getStatus() {
121
- return {
122
- ...(this.listener ? { listener: this.listener.getStatus() } : {}),
123
- publisher: this.publisher?.getStatus() ?? interfaces_1.ConnectionStatus.Down,
124
- };
125
- }
126
- async makeAMQPConnection(client) {
127
- return new amqpConnection_1.AmqpConnection(this.rabbitmqConfig.connection, this.logger, this.rabbitmqConfig.reconnectOptions, (0, lodash_1.merge)({
128
- clientProperties: {
129
- connectionClientType: client,
130
- },
131
- }, this.rabbitmqConfig.socketOptions));
132
- }
133
- async makeAMQPListener(queuesOptions) {
134
- const connection = await this.getConnection(rabbitmq_1.ConnectionClientType.Listener);
135
- return new amqpListener_1.AmqpListener(connection, this.logger, this.rabbitMQMetricsService, queuesOptions, this.systemServiceName);
136
- }
137
- async makeAMQPAsserter() {
138
- const connection = await this.getConnection(rabbitmq_1.ConnectionClientType.Asserter);
139
- return new amqpAsserter_1.AmqpAsserter(connection, this.logger, this.rabbitmqConfig.declareOptions);
140
- }
141
- async makeAMQPPublisher() {
142
- const connection = await this.getConnection(rabbitmq_1.ConnectionClientType.Publisher);
143
- return new amqpPublisher_1.AmqpPublisher(connection, this.logger, this.rabbitMQMetricsService, this.systemServiceName);
144
- }
145
- async setListener(queuesOptions) {
146
- if (!this.listener) {
147
- this.listener = await this.makeAMQPListener(queuesOptions);
148
- await this.listener?.init();
149
- }
150
- return this.listener;
151
- }
152
- async setAsserter(queuesOptions, exchangesOptions) {
153
- if (!this.asserter) {
154
- this.asserter = await this.makeAMQPAsserter();
155
- await this.asserter.init(exchangesOptions, queuesOptions);
156
- }
157
- return this.asserter;
158
- }
159
- async setPublisher() {
160
- if (!this.publisher) {
161
- this.publisher = await this.makeAMQPPublisher();
162
- await this.publisher?.init();
163
- }
164
- return this.publisher;
165
- }
166
- async getConnection(client) {
167
- if (this.connectionList[client].lock) {
168
- return await this.connectionList[client].lock;
169
- }
170
- const connection = await this.makeAMQPConnection(client);
171
- this.connectionList[client].lock = new Promise((resolve) => connection.connect().then(() => resolve(connection)));
172
- return await this.connectionList[client].lock;
173
- }
174
- preparePublisherHeaders(delay) {
175
- const store = this.asyncLocalStorage?.getStore();
176
- const logData = store?.logData ?? {};
177
- const traceId = logData?.traceId ?? (0, node_crypto_1.randomUUID)();
178
- const serviceCode = logData?.serviceCode;
179
- return {
180
- traceId,
181
- serviceCode,
182
- ...(delay ? { 'x-delay': delay } : {}),
183
- };
184
- }
185
- }
186
- exports.RabbitMQProvider = RabbitMQProvider;
187
- //# sourceMappingURL=index.js.map
161
+ //#endregion
162
+ export { RabbitMQProvider };
@@ -0,0 +1,66 @@
1
+ import { ExchangeName, ExchangeOptions, MessageBrokerServiceConfig } from "../interfaces/messageBrokerServiceConfig.js";
2
+ import { PublishOptions } from "../interfaces/options.js";
3
+ import { EventName, QueueName } from "../interfaces/queueConfig/configs.js";
4
+ import { Message, MessageData, QueueMessageData, QueueMessageMetaData } from "../interfaces/providers/rabbitmq/index.js";
5
+ import { MessageHandler } from "../interfaces/messageHandler.js";
6
+ import { MessagePayload, PublishingResult } from "../interfaces/providers/rabbitmq/amqpPublisher.js";
7
+ import { MessageBrokerServiceEventsListener } from "../interfaces/index.js";
8
+ import { RabbitMQProvider } from "../providers/rabbitmq/index.js";
9
+ import { OptionsBuilder } from "./optionsBuilder.js";
10
+ import Logger from "@diia-inhouse/diia-logger";
11
+
12
+ //#region src/services/communicator.d.ts
13
+ declare abstract class Communicator {
14
+ protected readonly logger: Logger;
15
+ protected readonly queueProvider: RabbitMQProvider;
16
+ protected readonly hostName: string;
17
+ protected readonly systemServiceName: string;
18
+ protected readonly optionsBuilder: OptionsBuilder;
19
+ protected eventNameToExchangeNameMap: Map<EventName, ExchangeName>;
20
+ private queueBindToMap;
21
+ private exchangesMap;
22
+ private serviceConfig;
23
+ protected constructor(logger: Logger, queueProvider: RabbitMQProvider, hostName: string, systemServiceName: string);
24
+ onInit(): Promise<void>;
25
+ onDestroy(): Promise<void>;
26
+ subscribeToQueues(listeners: MessageBrokerServiceEventsListener[]): Promise<void>;
27
+ subscribe(queueName: QueueName, messageHandler: MessageHandler): Promise<boolean>;
28
+ unsubscribeFromQueues(queueNames: string[]): Promise<void>;
29
+ unsubscribe(queueName: QueueName): Promise<void>;
30
+ publishToQueue(queueName: QueueName, messageData: MessageData, options?: PublishOptions): Promise<PublishingResult>;
31
+ publishToExchange(exchangeName: ExchangeName, routingKey: string, messageData: MessageData | Message, options?: PublishOptions): Promise<PublishingResult>;
32
+ publishEventToExchange(eventName: EventName, payload: MessagePayload, options?: PublishOptions): Promise<PublishingResult>;
33
+ getPublishQueueMessageData(eventName: EventName, message: MessagePayload, partialMeta?: Partial<QueueMessageMetaData>): QueueMessageData;
34
+ protected init(): Promise<MessageBrokerServiceConfig>;
35
+ private buildExchangesMap;
36
+ private buildEventNameToExchangeNameMap;
37
+ private getServiceConfig;
38
+ private unifyServiceConfig;
39
+ private enrichQueueConsumerOptions;
40
+ /**
41
+ * Gets global exchanges options.
42
+ * This method must be overridden by subclasses to provide a more specific implementation.
43
+ * @virtual
44
+ */
45
+ protected abstract getProducerExchangesOptions(): ExchangeOptions[];
46
+ /**
47
+ * Gets unicast event listeners.
48
+ * This method must be overridden by subclasses to provide a more specific implementation.
49
+ * @virtual
50
+ */
51
+ protected abstract getUnicastListeners(): MessageBrokerServiceEventsListener[];
52
+ /**
53
+ * Gets multicast event listeners.
54
+ * This method must be overridden by subclasses to provide a more specific implementation.
55
+ * @virtual
56
+ */
57
+ protected abstract getMulticastListeners(): MessageBrokerServiceEventsListener[];
58
+ /**
59
+ * Gets an exchange name related to a service.
60
+ * This method must be overridden by subclasses to provide a more specific implementation.
61
+ * @virtual
62
+ */
63
+ protected abstract getExchangeNameWithSuffix(exchangeName: ExchangeName): string;
64
+ }
65
+ //#endregion
66
+ export { Communicator };