@diia-inhouse/diia-queue 13.3.3 → 14.0.10

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 +25 -0
  44. package/dist/services/eventMessageHandler.js +112 -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,69 +1,61 @@
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.ScheduledTask = void 0;
7
- const interfaces_1 = require("../interfaces");
8
- const communicator_1 = __importDefault(require("./communicator"));
9
- const eventCommunicator_1 = require("./eventCommunicator");
1
+ import "../interfaces/messageBrokerServiceConfig.js";
2
+ import "../interfaces/index.js";
3
+ import Communicator from "./communicator.js";
4
+ import { EventCommunicator } from "./eventCommunicator.js";
5
+ //#region src/services/scheduledTask.ts
10
6
  /**
11
- * @deprecated use pkg-workflow entities instead
12
- */
13
- class ScheduledTask extends communicator_1.default {
14
- serviceName;
15
- scheduledTaskList;
16
- queueName;
17
- eventCommunicator;
18
- eventRoutingPart = 'scheduled-task';
19
- constructor(serviceName, systemServiceName, queueProvider, scheduledTaskList, eventMessageHandler, logger, hostName, queueName) {
20
- super(logger, queueProvider, hostName, systemServiceName);
21
- this.serviceName = serviceName;
22
- this.scheduledTaskList = scheduledTaskList;
23
- this.queueName = queueName;
24
- this.eventCommunicator = new eventCommunicator_1.EventCommunicator(logger, queueProvider, eventMessageHandler, scheduledTaskList);
25
- }
26
- async publish(eventName, serviceName) {
27
- const routingKey = this.getRoutingKey(serviceName);
28
- return await this.publishEventToExchange(eventName, {}, { routingKey });
29
- }
30
- getExchangeNameWithSuffix(exchangeName) {
31
- return exchangeName;
32
- }
33
- getUnicastListeners() {
34
- return this.eventCommunicator.getUnicastListeners();
35
- }
36
- getMulticastListeners() {
37
- if (!this.queueName || this.scheduledTaskList.length === 0) {
38
- return [];
39
- }
40
- const routingKey = this.getRoutingKey(this.serviceName);
41
- const [queueOptions] = this.optionsBuilder.defineQueueOptionsBasedOnGlobalConfig(this.queueName, routingKey);
42
- if (!queueOptions) {
43
- return [];
44
- }
45
- const exchangesOptions = this.getProducerExchangesOptions();
46
- return this.eventCommunicator.getMulticastListeners([queueOptions], exchangesOptions);
47
- }
48
- getProducerExchangesOptions() {
49
- const exchangesOptions = [];
50
- const { topics = {}, rabbit: { declareOptions: { assertExchanges } = {} }, } = this.queueProvider.getConfig();
51
- const createExchangeOptions = (exchangeName) => ({
52
- name: exchangeName,
53
- type: interfaces_1.ExchangeType.Topic,
54
- declare: assertExchanges,
55
- });
56
- const exchangeNamesByQueueName = this.optionsBuilder.getExchangeNamesByQueueName(this.queueName);
57
- const exchangeNamesSet = new Set([...Object.keys(topics), ...exchangeNamesByQueueName]);
58
- for (const exchangeName of exchangeNamesSet) {
59
- const exchangeOptions = createExchangeOptions(exchangeName);
60
- exchangesOptions.push(exchangeOptions);
61
- }
62
- return exchangesOptions;
63
- }
64
- getRoutingKey(serviceName) {
65
- return `${serviceName}.${this.eventRoutingPart}`;
66
- }
67
- }
68
- exports.ScheduledTask = ScheduledTask;
69
- //# sourceMappingURL=scheduledTask.js.map
7
+ * @deprecated use pkg-workflow entities instead
8
+ */
9
+ var ScheduledTask = class extends Communicator {
10
+ serviceName;
11
+ scheduledTaskList;
12
+ queueName;
13
+ eventCommunicator;
14
+ eventRoutingPart = "scheduled-task";
15
+ constructor(serviceName, systemServiceName, queueProvider, scheduledTaskList, eventMessageHandler, logger, hostName, queueName = void 0) {
16
+ super(logger, queueProvider, hostName, systemServiceName);
17
+ this.serviceName = serviceName;
18
+ this.scheduledTaskList = scheduledTaskList;
19
+ this.queueName = queueName;
20
+ this.eventCommunicator = new EventCommunicator(logger, queueProvider, eventMessageHandler, scheduledTaskList);
21
+ }
22
+ async publish(eventName, serviceName) {
23
+ const routingKey = this.getRoutingKey(serviceName);
24
+ return await this.publishEventToExchange(eventName, {}, { routingKey });
25
+ }
26
+ getExchangeNameWithSuffix(exchangeName) {
27
+ return exchangeName;
28
+ }
29
+ getUnicastListeners() {
30
+ return this.eventCommunicator.getUnicastListeners();
31
+ }
32
+ getMulticastListeners() {
33
+ if (!this.queueName || this.scheduledTaskList.length === 0) return [];
34
+ const routingKey = this.getRoutingKey(this.serviceName);
35
+ const [queueOptions] = this.optionsBuilder.defineQueueOptionsBasedOnGlobalConfig(this.queueName, routingKey);
36
+ if (!queueOptions) return [];
37
+ const exchangesOptions = this.getProducerExchangesOptions();
38
+ return this.eventCommunicator.getMulticastListeners([queueOptions], exchangesOptions);
39
+ }
40
+ getProducerExchangesOptions() {
41
+ const exchangesOptions = [];
42
+ const { topics = {}, rabbit: { declareOptions: { assertExchanges } = {} } } = this.queueProvider.getConfig();
43
+ const createExchangeOptions = (exchangeName) => ({
44
+ name: exchangeName,
45
+ type: "topic",
46
+ declare: assertExchanges
47
+ });
48
+ const exchangeNamesByQueueName = this.optionsBuilder.getExchangeNamesByQueueName(this.queueName);
49
+ const exchangeNamesSet = new Set([...Object.keys(topics), ...exchangeNamesByQueueName]);
50
+ for (const exchangeName of exchangeNamesSet) {
51
+ const exchangeOptions = createExchangeOptions(exchangeName);
52
+ exchangesOptions.push(exchangeOptions);
53
+ }
54
+ return exchangesOptions;
55
+ }
56
+ getRoutingKey(serviceName) {
57
+ return `${serviceName}.${this.eventRoutingPart}`;
58
+ }
59
+ };
60
+ //#endregion
61
+ export { ScheduledTask };
@@ -0,0 +1,33 @@
1
+ import { ExchangeOptions } from "../interfaces/messageBrokerServiceConfig.js";
2
+ import { MessagePayload, PublishingResult } from "../interfaces/providers/rabbitmq/amqpPublisher.js";
3
+ import { MessageBrokerServiceListener, TaskListener, TaskQueue } from "../interfaces/index.js";
4
+ import { RabbitMQProvider } from "../providers/rabbitmq/index.js";
5
+ import { Communicator } from "./communicator.js";
6
+ import { EventMessageHandler } from "./eventMessageHandler.js";
7
+ import { OnInit } from "@diia-inhouse/types";
8
+ import Logger$1 from "@diia-inhouse/diia-logger";
9
+
10
+ //#region src/services/task.d.ts
11
+ declare class Task extends Communicator implements TaskQueue, OnInit {
12
+ private readonly serviceName;
13
+ private readonly taskList;
14
+ private readonly eventMessageHandler;
15
+ private queueNamePrefix;
16
+ private taskNameExchangesOptionsMap;
17
+ constructor(serviceName: string, systemServiceName: string, queueProvider: RabbitMQProvider, taskList: TaskListener[], eventMessageHandler: EventMessageHandler, logger: Logger$1, hostName: string);
18
+ onInit(): Promise<void>;
19
+ publish(taskName: string, payload: MessagePayload, delay?: number): Promise<PublishingResult>;
20
+ protected getProducerExchangesOptions(): ExchangeOptions[];
21
+ protected getMulticastListeners(): MessageBrokerServiceListener[];
22
+ protected getUnicastListeners(): MessageBrokerServiceListener[];
23
+ protected getExchangeNameWithSuffix(taskName: string): string;
24
+ private defineExchangesOptions;
25
+ private defineQueueOptionsBasedOnGlobalConfig;
26
+ private defineExchangesOptionsBasedOnGlobalConfig;
27
+ private defineConsumerOptionsBasedOnGlobalConfig;
28
+ private getQueueName;
29
+ private capitalizeFirstLetter;
30
+ private defineQueueNameByTaskName;
31
+ }
32
+ //#endregion
33
+ export { Task };
@@ -1,177 +1,161 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
1
+ import { QueueTypes } from "../interfaces/messageBrokerServiceConfig.js";
2
+ import "../interfaces/index.js";
3
+ import constants_default from "../constants.js";
4
+ import Communicator from "./communicator.js";
5
+ import lodash from "lodash";
6
+ //#region src/services/task.ts
7
+ var Task = class extends Communicator {
8
+ serviceName;
9
+ taskList;
10
+ eventMessageHandler;
11
+ queueNamePrefix = "TasksQueue";
12
+ taskNameExchangesOptionsMap = /* @__PURE__ */ new Map();
13
+ constructor(serviceName, systemServiceName, queueProvider, taskList, eventMessageHandler, logger, hostName) {
14
+ super(logger, queueProvider, hostName, systemServiceName);
15
+ this.serviceName = serviceName;
16
+ this.taskList = taskList;
17
+ this.eventMessageHandler = eventMessageHandler;
18
+ }
19
+ async onInit() {
20
+ const { queuesOptions, exchangesOptions } = await this.init();
21
+ const queuesOptionsMap = lodash.keyBy(queuesOptions, "name");
22
+ const exchangesOptionsMap = lodash.keyBy(exchangesOptions, "name");
23
+ for (const task of this.taskList) {
24
+ const { name: taskName, isDelayed = false, queueNames = [] } = task;
25
+ if (queueNames.length === 0) {
26
+ const queueName = this.defineQueueNameByTaskName(taskName, isDelayed, queuesOptionsMap, exchangesOptionsMap);
27
+ queueNames.push(queueName);
28
+ }
29
+ const taskExchangesOptions = [];
30
+ for (const queueName of queueNames) {
31
+ const queueOptions = queuesOptionsMap[queueName];
32
+ if (!queueOptions) {
33
+ this.logger.error(`Not found queue options by name (${queueName}) for task service`);
34
+ continue;
35
+ }
36
+ const { bindTo } = queueOptions;
37
+ const options = this.defineExchangesOptions(queueName, isDelayed, bindTo, exchangesOptionsMap);
38
+ taskExchangesOptions.push(...options);
39
+ }
40
+ this.taskNameExchangesOptionsMap.set(taskName, taskExchangesOptions);
41
+ }
42
+ }
43
+ async publish(taskName, payload, delay) {
44
+ const exchangesOptions = this.taskNameExchangesOptionsMap.get(taskName);
45
+ if (!exchangesOptions || exchangesOptions.length === 0) throw new Error(`Not found task [${taskName}] exchanges options`);
46
+ for (const exchangeOptions of exchangesOptions) {
47
+ const { name: exchangeName, delayed } = exchangeOptions;
48
+ if (delay && !delayed) {
49
+ const logMessage = "Delay option could be used only with delayed tasks";
50
+ this.logger.error(logMessage, {
51
+ exchangeName,
52
+ taskName
53
+ });
54
+ throw new Error(logMessage);
55
+ }
56
+ const message = {
57
+ payload,
58
+ event: this.getQueueName(taskName)
59
+ };
60
+ await this.publishToExchange(exchangeName, constants_default.DEFAULT_ROUTING_KEY, message, { delay });
61
+ }
62
+ }
63
+ getProducerExchangesOptions() {
64
+ return [];
65
+ }
66
+ getMulticastListeners() {
67
+ return [];
68
+ }
69
+ getUnicastListeners() {
70
+ const listeners = [];
71
+ const { queuesOptions, exchangesOptions } = this.queueProvider.getMessageBrokerServiceConfig();
72
+ const queuesOptionsMap = lodash.keyBy(queuesOptions, "name");
73
+ const exchangesOptionsMap = lodash.keyBy(exchangesOptions, "name");
74
+ for (const task of this.taskList) {
75
+ const { queueNames = [], name: taskName, isDelayed = false } = task;
76
+ if (queueNames.length === 0) {
77
+ const queueName = this.defineQueueNameByTaskName(taskName, isDelayed, queuesOptionsMap, exchangesOptionsMap);
78
+ queueNames.push(queueName);
79
+ }
80
+ for (const queueName of queueNames) {
81
+ const queueOptions = queuesOptionsMap[queueName];
82
+ if (!queueOptions) {
83
+ this.logger.error(`Not found queue options by name (${queueName}) for ${this.constructor.name} service`);
84
+ continue;
85
+ }
86
+ const listenerExchangesOptions = this.defineExchangesOptions(queueName, isDelayed, queueOptions.bindTo, exchangesOptionsMap);
87
+ const listener = {
88
+ handler: this.eventMessageHandler.eventListenerMessageHandler.bind(this.eventMessageHandler, task),
89
+ queueOptions,
90
+ exchangesOptions: listenerExchangesOptions
91
+ };
92
+ listeners.push(listener);
93
+ }
94
+ }
95
+ return listeners;
96
+ }
97
+ getExchangeNameWithSuffix(taskName) {
98
+ return this.getQueueName(taskName);
99
+ }
100
+ defineExchangesOptions(queueName, isExchangeDelayed = false, bindTo = [], exchangesMap = {}) {
101
+ const exchangesOptions = [];
102
+ for (const bindOptions of bindTo) {
103
+ const { exchangeName } = bindOptions;
104
+ const exchangeOptions = exchangesMap[exchangeName];
105
+ if (!exchangeOptions) {
106
+ this.logger.error(`Not found exchange options by name (${exchangeName}) for task service`);
107
+ continue;
108
+ }
109
+ exchangesOptions.push(exchangeOptions);
110
+ }
111
+ if (exchangesOptions.length === 0) {
112
+ const globalExchangesOptions = this.defineExchangesOptionsBasedOnGlobalConfig(queueName, isExchangeDelayed);
113
+ exchangesOptions.push(...globalExchangesOptions);
114
+ }
115
+ return exchangesOptions;
116
+ }
117
+ defineQueueOptionsBasedOnGlobalConfig(queueName) {
118
+ const { rabbit: { listenerOptions: { queueOptions } = {}, declareOptions: { assertQueues, queuesOptions: overrideQueueOptions = {} } = {} } } = this.queueProvider.getConfig();
119
+ return {
120
+ bindTo: [{
121
+ bind: assertQueues,
122
+ exchangeName: queueName,
123
+ routingKey: constants_default.DEFAULT_ROUTING_KEY
124
+ }],
125
+ name: queueName,
126
+ declare: assertQueues,
127
+ options: queueOptions,
128
+ type: QueueTypes.Quorum,
129
+ consumerOptions: this.defineConsumerOptionsBasedOnGlobalConfig(),
130
+ ...overrideQueueOptions
131
+ };
132
+ }
133
+ defineExchangesOptionsBasedOnGlobalConfig(exchangeName, isExchangeDelayed = false) {
134
+ const { rabbit: { declareOptions: { assertExchanges } = {} } } = this.queueProvider.getConfig();
135
+ return [{
136
+ name: exchangeName,
137
+ declare: assertExchanges,
138
+ delayed: isExchangeDelayed
139
+ }];
140
+ }
141
+ defineConsumerOptionsBasedOnGlobalConfig() {
142
+ const { rabbit: { listenerOptions: { prefetchCount } = {} } } = this.queueProvider.getConfig();
143
+ return { prefetchCount };
144
+ }
145
+ getQueueName(taskName) {
146
+ if (taskName.includes(this.queueNamePrefix)) return taskName;
147
+ return `${this.queueNamePrefix}${this.capitalizeFirstLetter(this.serviceName)}[${taskName}]`;
148
+ }
149
+ capitalizeFirstLetter(s) {
150
+ return s.split("-").map((str) => str.charAt(0).toUpperCase() + str.slice(1)).join("");
151
+ }
152
+ defineQueueNameByTaskName(taskName, isDelayed, queuesOptionsMap, exchangesOptionsMap) {
153
+ const queueName = this.getQueueName(taskName);
154
+ queuesOptionsMap[queueName] = this.defineQueueOptionsBasedOnGlobalConfig(queueName);
155
+ const [exchangeOptions] = this.defineExchangesOptionsBasedOnGlobalConfig(queueName, isDelayed);
156
+ exchangesOptionsMap[exchangeOptions.name] = exchangeOptions;
157
+ return queueName;
158
+ }
4
159
  };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Task = void 0;
7
- const lodash_1 = __importDefault(require("lodash"));
8
- const constants_1 = __importDefault(require("../constants"));
9
- const interfaces_1 = require("../interfaces");
10
- const communicator_1 = __importDefault(require("./communicator"));
11
- class Task extends communicator_1.default {
12
- serviceName;
13
- taskList;
14
- eventMessageHandler;
15
- queueNamePrefix = 'TasksQueue';
16
- taskNameExchangesOptionsMap = new Map();
17
- constructor(serviceName, systemServiceName, queueProvider, taskList, eventMessageHandler, logger, hostName) {
18
- super(logger, queueProvider, hostName, systemServiceName);
19
- this.serviceName = serviceName;
20
- this.taskList = taskList;
21
- this.eventMessageHandler = eventMessageHandler;
22
- }
23
- async onInit() {
24
- const { queuesOptions, exchangesOptions } = await this.init();
25
- const queuesOptionsMap = lodash_1.default.keyBy(queuesOptions, 'name');
26
- const exchangesOptionsMap = lodash_1.default.keyBy(exchangesOptions, 'name');
27
- for (const task of this.taskList) {
28
- const { name: taskName, isDelayed = false, queueNames = [] } = task;
29
- if (queueNames.length === 0) {
30
- const queueName = this.defineQueueNameByTaskName(taskName, isDelayed, queuesOptionsMap, exchangesOptionsMap);
31
- queueNames.push(queueName);
32
- }
33
- const exchangesOptions = [];
34
- for (const queueName of queueNames) {
35
- const queueOptions = queuesOptionsMap[queueName];
36
- if (!queueOptions) {
37
- this.logger.error(`Not found queue options by name (${queueName}) for task service`);
38
- continue;
39
- }
40
- const { bindTo } = queueOptions;
41
- const options = this.defineExchangesOptions(queueName, isDelayed, bindTo, exchangesOptionsMap);
42
- exchangesOptions.push(...options);
43
- }
44
- this.taskNameExchangesOptionsMap.set(taskName, exchangesOptions);
45
- }
46
- }
47
- async publish(taskName, payload, delay) {
48
- const exchangesOptions = this.taskNameExchangesOptionsMap.get(taskName);
49
- if (!exchangesOptions || exchangesOptions.length === 0) {
50
- throw new Error(`Not found task [${taskName}] exchanges options`);
51
- }
52
- for await (const exchangeOptions of exchangesOptions) {
53
- const { name: exchangeName, delayed } = exchangeOptions;
54
- if (delay && !delayed) {
55
- const logMessage = 'Delay option could be used only with delayed tasks';
56
- this.logger.error(logMessage, { exchangeName, taskName });
57
- throw new Error(logMessage);
58
- }
59
- const message = {
60
- payload,
61
- event: this.getQueueName(taskName),
62
- };
63
- await this.publishToExchange(exchangeName, constants_1.default.DEFAULT_ROUTING_KEY, message, { delay });
64
- }
65
- }
66
- getProducerExchangesOptions() {
67
- return [];
68
- }
69
- getMulticastListeners() {
70
- return [];
71
- }
72
- getUnicastListeners() {
73
- const listeners = [];
74
- const { queuesOptions, exchangesOptions } = this.queueProvider.getMessageBrokerServiceConfig();
75
- const queuesOptionsMap = lodash_1.default.keyBy(queuesOptions, 'name');
76
- const exchangesOptionsMap = lodash_1.default.keyBy(exchangesOptions, 'name');
77
- for (const task of this.taskList) {
78
- const { queueNames = [], name: taskName, isDelayed = false } = task;
79
- if (queueNames.length === 0) {
80
- const queueName = this.defineQueueNameByTaskName(taskName, isDelayed, queuesOptionsMap, exchangesOptionsMap);
81
- queueNames.push(queueName);
82
- }
83
- for (const queueName of queueNames) {
84
- const queueOptions = queuesOptionsMap[queueName];
85
- if (!queueOptions) {
86
- this.logger.error(`Not found queue options by name (${queueName}) for ${this.constructor.name} service`);
87
- continue;
88
- }
89
- const exchangesOptions = this.defineExchangesOptions(queueName, isDelayed, queueOptions.bindTo, exchangesOptionsMap);
90
- const handler = this.eventMessageHandler.eventListenerMessageHandler.bind(this.eventMessageHandler, task);
91
- const listener = {
92
- handler,
93
- queueOptions,
94
- exchangesOptions,
95
- };
96
- listeners.push(listener);
97
- }
98
- }
99
- return listeners;
100
- }
101
- getExchangeNameWithSuffix(taskName) {
102
- return this.getQueueName(taskName);
103
- }
104
- defineExchangesOptions(queueName, isExchangeDelayed = false, bindTo = [], exchangesMap = {}) {
105
- const exchangesOptions = [];
106
- for (const bindOptions of bindTo) {
107
- const { exchangeName } = bindOptions;
108
- const exchangeOptions = exchangesMap[exchangeName];
109
- if (!exchangeOptions) {
110
- this.logger.error(`Not found exchange options by name (${exchangeName}) for task service`);
111
- continue;
112
- }
113
- exchangesOptions.push(exchangeOptions);
114
- }
115
- if (exchangesOptions.length === 0) {
116
- const globalExchangesOptions = this.defineExchangesOptionsBasedOnGlobalConfig(queueName, isExchangeDelayed);
117
- exchangesOptions.push(...globalExchangesOptions);
118
- }
119
- return exchangesOptions;
120
- }
121
- defineQueueOptionsBasedOnGlobalConfig(queueName) {
122
- const { rabbit: { listenerOptions: { queueOptions } = {}, declareOptions: { assertQueues, queuesOptions: overrideQueueOptions = {} } = {}, }, } = this.queueProvider.getConfig();
123
- const bindTo = [
124
- {
125
- bind: assertQueues,
126
- exchangeName: queueName,
127
- routingKey: constants_1.default.DEFAULT_ROUTING_KEY,
128
- },
129
- ];
130
- return {
131
- bindTo,
132
- name: queueName,
133
- declare: assertQueues,
134
- options: queueOptions,
135
- type: interfaces_1.QueueTypes.Quorum,
136
- consumerOptions: this.defineConsumerOptionsBasedOnGlobalConfig(),
137
- ...overrideQueueOptions,
138
- };
139
- }
140
- defineExchangesOptionsBasedOnGlobalConfig(exchangeName, isExchangeDelayed = false) {
141
- const { rabbit: { declareOptions: { assertExchanges } = {} }, } = this.queueProvider.getConfig();
142
- return [
143
- {
144
- name: exchangeName,
145
- declare: assertExchanges,
146
- delayed: isExchangeDelayed,
147
- },
148
- ];
149
- }
150
- defineConsumerOptionsBasedOnGlobalConfig() {
151
- const { rabbit: { listenerOptions: { prefetchCount } = {} }, } = this.queueProvider.getConfig();
152
- return {
153
- prefetchCount,
154
- };
155
- }
156
- getQueueName(taskName) {
157
- if (taskName.includes(this.queueNamePrefix)) {
158
- return taskName;
159
- }
160
- return `${this.queueNamePrefix}${this.capitalizeFirstLetter(this.serviceName)}[${taskName}]`;
161
- }
162
- capitalizeFirstLetter(s) {
163
- return s
164
- .split('-')
165
- .map((str) => str.charAt(0).toUpperCase() + str.slice(1))
166
- .join('');
167
- }
168
- defineQueueNameByTaskName(taskName, isDelayed, queuesOptionsMap, exchangesOptionsMap) {
169
- const queueName = this.getQueueName(taskName);
170
- queuesOptionsMap[queueName] = this.defineQueueOptionsBasedOnGlobalConfig(queueName);
171
- const [exchangeOptions] = this.defineExchangesOptionsBasedOnGlobalConfig(queueName, isDelayed);
172
- exchangesOptionsMap[exchangeOptions.name] = exchangeOptions;
173
- return queueName;
174
- }
175
- }
176
- exports.Task = Task;
177
- //# sourceMappingURL=task.js.map
160
+ //#endregion
161
+ export { Task };
package/dist/utils.js CHANGED
@@ -1,15 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.collectEventBusListeners = collectEventBusListeners;
4
- exports.getConsumerTag = getConsumerTag;
1
+ //#region src/utils.ts
5
2
  function collectEventBusListeners(eventBusListeners) {
6
- const eventListeners = {};
7
- for (const listener of eventBusListeners) {
8
- eventListeners[listener.event] = listener;
9
- }
10
- return eventListeners;
3
+ const eventListeners = {};
4
+ for (const listener of eventBusListeners) eventListeners[listener.event] = listener;
5
+ return eventListeners;
11
6
  }
12
7
  function getConsumerTag(serviceName, hostname) {
13
- return `${serviceName}:${hostname}`;
8
+ return `${serviceName}:${hostname}`;
14
9
  }
15
- //# sourceMappingURL=utils.js.map
10
+ //#endregion
11
+ export { collectEventBusListeners, getConsumerTag };
package/package.json CHANGED
@@ -1,25 +1,33 @@
1
1
  {
2
2
  "name": "@diia-inhouse/diia-queue",
3
- "version": "13.3.3",
3
+ "version": "14.0.10",
4
+ "type": "module",
4
5
  "description": "Package provide queue functionality",
5
6
  "main": "dist/index.js",
6
- "types": "dist/types/index.d.ts",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./package.json": "./package.json"
14
+ },
7
15
  "repository": "https://github.com/diia-open-source/be-diia-queue",
8
16
  "author": "Diia",
9
17
  "license": "SEE LICENSE IN LICENSE.md",
10
18
  "engines": {
11
- "node": ">=22"
19
+ "node": ">=24"
12
20
  },
13
21
  "files": [
14
22
  "dist"
15
23
  ],
16
24
  "scripts": {
17
- "build": "rimraf dist/ && tsc",
18
- "build-watch": "tsc --watch",
19
- "lint": "eslint . && prettier --check .",
20
- "lint-fix": "eslint . --fix && prettier --write .",
25
+ "build": "rimraf dist/ && tsdown",
26
+ "build-watch": "tsdown --watch",
27
+ "lint": "oxlint && oxfmt --check .",
28
+ "lint-fix": "oxlint --fix && oxfmt .",
21
29
  "lint:lockfile": "lockfile-lint --path package-lock.json --allowed-hosts registry.npmjs.org --validate-https",
22
- "format": "prettier --write \"src/**/*.ts\"",
30
+ "format": "oxfmt \"src/**/*.ts\"",
23
31
  "prepare": "npm run build",
24
32
  "semantic-release": "semantic-release",
25
33
  "test": "vitest run",
@@ -33,39 +41,42 @@
33
41
  "p-timeout": "4.1.0"
34
42
  },
35
43
  "peerDependencies": {
36
- "@diia-inhouse/diia-logger": ">=3.1.0",
37
- "@diia-inhouse/diia-metrics": ">=5.0.0",
38
- "@diia-inhouse/env": ">=2.0.0",
39
- "@diia-inhouse/errors": ">=1.4.0",
40
- "@diia-inhouse/types": ">=6.30.0",
41
- "@diia-inhouse/utils": ">=2.21.0",
42
- "@diia-inhouse/validators": ">=1.5.0",
44
+ "@diia-inhouse/diia-logger": ">=4.0.0",
45
+ "@diia-inhouse/diia-metrics": ">=7.0.0",
46
+ "@diia-inhouse/env": ">=3.0.0",
47
+ "@diia-inhouse/errors": ">=2.0.0",
48
+ "@diia-inhouse/types": ">=13.1.0",
49
+ "@diia-inhouse/utils": ">=6.0.0",
50
+ "@diia-inhouse/validators": ">=2.0.0",
43
51
  "@opentelemetry/api": ">=1.7.0"
44
52
  },
45
53
  "devDependencies": {
46
- "@diia-inhouse/configs": "6.1.1",
47
- "@diia-inhouse/diia-logger": "3.20.12",
48
- "@diia-inhouse/diia-metrics": "6.5.38",
49
- "@diia-inhouse/errors": "1.18.23",
50
- "@diia-inhouse/eslint-config": "8.8.2",
51
- "@diia-inhouse/eslint-plugin": "1.9.6",
52
- "@diia-inhouse/test": "7.3.23",
53
- "@diia-inhouse/types": "12.0.4",
54
- "@diia-inhouse/utils": "5.3.28",
55
- "@diia-inhouse/validators": "1.28.34",
54
+ "@diia-inhouse/configs": "7.0.0",
55
+ "@diia-inhouse/diia-logger": "4.2.4",
56
+ "@diia-inhouse/diia-metrics": "7.1.5",
57
+ "@diia-inhouse/env": "3.3.1",
58
+ "@diia-inhouse/errors": "2.1.1",
59
+ "@diia-inhouse/oxc-config": "1.10.0",
60
+ "@diia-inhouse/test": "8.2.1",
61
+ "@diia-inhouse/types": "13.2.0",
62
+ "@diia-inhouse/utils": "6.0.11",
63
+ "@diia-inhouse/validators": "2.2.2",
56
64
  "@opentelemetry/api": "1.9.0",
57
65
  "@types/lodash": "4.17.24",
58
- "@types/node": "24.11.0",
59
- "@vitest/coverage-v8": "4.0.18",
60
- "@vitest/ui": "4.0.18",
61
- "lockfile-lint": "4.14.1",
66
+ "@types/node": "25.6.2",
67
+ "@vitest/coverage-v8": "4.1.5",
68
+ "@vitest/ui": "4.1.5",
69
+ "lockfile-lint": "5.0.0",
62
70
  "madge": "8.0.0",
63
- "prettier": "3.8.1",
71
+ "oxfmt": "0.48.0",
72
+ "oxlint": "1.63.0",
73
+ "oxlint-tsgolint": "0.22.1",
64
74
  "rimraf": "6.1.3",
65
- "type-fest": "4.41.0",
75
+ "tsdown": "0.22.0",
76
+ "type-fest": "5.6.0",
66
77
  "vite-tsconfig-paths": "6.1.1",
67
- "vitest": "4.0.18",
68
- "vitest-mock-extended": "3.1.0"
78
+ "vitest": "4.1.5",
79
+ "vitest-mock-extended": "4.0.0"
69
80
  },
70
81
  "release": {
71
82
  "extends": "@diia-inhouse/configs/dist/semantic-release/package"
@@ -73,23 +84,6 @@
73
84
  "commitlint": {
74
85
  "extends": "@diia-inhouse/configs/dist/commitlint"
75
86
  },
76
- "eslintConfig": {
77
- "extends": "@diia-inhouse/eslint-config",
78
- "overrides": [
79
- {
80
- "files": [
81
- "*.ts"
82
- ],
83
- "parserOptions": {
84
- "project": [
85
- "./tsconfig.json",
86
- "./tests/tsconfig.json"
87
- ]
88
- }
89
- }
90
- ]
91
- },
92
- "prettier": "@diia-inhouse/eslint-config/prettier",
93
87
  "madge": {
94
88
  "tsConfig": "./tsconfig.json"
95
89
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACX,mBAAmB,EAAE,GAAG;IACxB,MAAM,EAAE,UAAU;IAClB,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,QAAQ;IACrB,mBAAmB,EAAE,uBAAuB;CAC/C,CAAA"}