@diia-inhouse/diia-queue 8.0.0 → 13.2.1

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 (104) 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 +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/interfaces/index.js +6 -4
  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/metrics/index.js +14 -0
  11. package/dist/interfaces/metrics/index.js.map +1 -1
  12. package/dist/interfaces/providers/rabbitmq/amqpConnection.js +4 -1
  13. package/dist/interfaces/providers/rabbitmq/amqpConnection.js.map +1 -1
  14. package/dist/interfaces/providers/rabbitmq/amqpPublisher.js +1 -9
  15. package/dist/interfaces/providers/rabbitmq/amqpPublisher.js.map +1 -1
  16. package/dist/interfaces/providers/rabbitmq/index.js +41 -17
  17. package/dist/interfaces/providers/rabbitmq/index.js.map +1 -1
  18. package/dist/interfaces/queueStatus.js.map +1 -1
  19. package/dist/interfaces/{eventBus.js → services/eventMessageHandler.js} +1 -1
  20. package/dist/interfaces/services/eventMessageHandler.js.map +1 -0
  21. package/dist/metrics/index.js +1 -2
  22. package/dist/metrics/index.js.map +1 -1
  23. package/dist/providers/index.js +22 -0
  24. package/dist/providers/index.js.map +1 -0
  25. package/dist/providers/rabbitmq/amqpAsserter.js +417 -0
  26. package/dist/providers/rabbitmq/amqpAsserter.js.map +1 -0
  27. package/dist/providers/rabbitmq/amqpConnection.js +47 -25
  28. package/dist/providers/rabbitmq/amqpConnection.js.map +1 -1
  29. package/dist/providers/rabbitmq/amqpListener.js +167 -113
  30. package/dist/providers/rabbitmq/amqpListener.js.map +1 -1
  31. package/dist/providers/rabbitmq/amqpPublisher.js +145 -96
  32. package/dist/providers/rabbitmq/amqpPublisher.js.map +1 -1
  33. package/dist/providers/rabbitmq/index.js +104 -285
  34. package/dist/providers/rabbitmq/index.js.map +1 -1
  35. package/dist/services/communicator.js +187 -0
  36. package/dist/services/communicator.js.map +1 -0
  37. package/dist/services/eventBus.js +41 -46
  38. package/dist/services/eventBus.js.map +1 -1
  39. package/dist/services/eventCommunicator.js +125 -0
  40. package/dist/services/eventCommunicator.js.map +1 -0
  41. package/dist/services/eventMessageHandler.js +73 -89
  42. package/dist/services/eventMessageHandler.js.map +1 -1
  43. package/dist/services/externalCommunicator.js +10 -103
  44. package/dist/services/externalCommunicator.js.map +1 -1
  45. package/dist/services/externalEventBus.js +147 -55
  46. package/dist/services/externalEventBus.js.map +1 -1
  47. package/dist/services/index.js +1 -1
  48. package/dist/services/index.js.map +1 -1
  49. package/dist/services/metrics.js +49 -0
  50. package/dist/services/metrics.js.map +1 -0
  51. package/dist/services/optionsBuilder.js +59 -0
  52. package/dist/services/optionsBuilder.js.map +1 -0
  53. package/dist/services/queue.js +63 -26
  54. package/dist/services/queue.js.map +1 -1
  55. package/dist/services/scheduledTask.js +52 -48
  56. package/dist/services/scheduledTask.js.map +1 -1
  57. package/dist/services/task.js +149 -28
  58. package/dist/services/task.js.map +1 -1
  59. package/dist/types/constants.d.ts +3 -0
  60. package/dist/types/index.d.ts +1 -1
  61. package/dist/types/interfaces/deps.d.ts +3 -2
  62. package/dist/types/interfaces/externalCommunicator.d.ts +5 -12
  63. package/dist/types/interfaces/index.d.ts +70 -20
  64. package/dist/types/interfaces/messageBrokerServiceConfig.d.ts +79 -0
  65. package/dist/types/interfaces/messageHandler.d.ts +1 -1
  66. package/dist/types/interfaces/metrics/index.d.ts +13 -0
  67. package/dist/types/interfaces/options.d.ts +29 -4
  68. package/dist/types/interfaces/providers/rabbitmq/amqpConnection.d.ts +3 -0
  69. package/dist/types/interfaces/providers/rabbitmq/amqpPublisher.d.ts +9 -17
  70. package/dist/types/interfaces/providers/rabbitmq/index.d.ts +71 -7
  71. package/dist/types/interfaces/queueConfig/configs.d.ts +19 -11
  72. package/dist/types/interfaces/queueStatus.d.ts +3 -1
  73. package/dist/types/interfaces/services/eventMessageHandler.d.ts +5 -0
  74. package/dist/types/metrics/index.d.ts +1 -2
  75. package/dist/types/providers/index.d.ts +5 -0
  76. package/dist/types/providers/rabbitmq/amqpAsserter.d.ts +49 -0
  77. package/dist/types/providers/rabbitmq/amqpConnection.d.ts +3 -7
  78. package/dist/types/providers/rabbitmq/amqpListener.d.ts +26 -11
  79. package/dist/types/providers/rabbitmq/amqpPublisher.d.ts +25 -16
  80. package/dist/types/providers/rabbitmq/index.d.ts +33 -40
  81. package/dist/types/services/communicator.d.ts +57 -0
  82. package/dist/types/services/eventBus.d.ts +15 -14
  83. package/dist/types/services/eventCommunicator.d.ts +15 -0
  84. package/dist/types/services/eventMessageHandler.d.ts +9 -11
  85. package/dist/types/services/externalCommunicator.d.ts +6 -19
  86. package/dist/types/services/externalEventBus.d.ts +28 -13
  87. package/dist/types/services/index.d.ts +1 -1
  88. package/dist/types/services/metrics.d.ts +11 -0
  89. package/dist/types/services/optionsBuilder.d.ts +10 -0
  90. package/dist/types/services/queue.d.ts +14 -9
  91. package/dist/types/services/scheduledTask.d.ts +22 -14
  92. package/dist/types/services/task.d.ts +21 -11
  93. package/dist/types/utils.d.ts +2 -2
  94. package/dist/utils.js +5 -2
  95. package/dist/utils.js.map +1 -1
  96. package/package.json +34 -41
  97. package/dist/interfaces/eventBus.js.map +0 -1
  98. package/dist/interfaces/providers/rabbitmq/amqpListener.js +0 -3
  99. package/dist/interfaces/providers/rabbitmq/amqpListener.js.map +0 -1
  100. package/dist/services/externalCommunicatorChannel.js +0 -31
  101. package/dist/services/externalCommunicatorChannel.js.map +0 -1
  102. package/dist/types/interfaces/eventBus.d.ts +0 -19
  103. package/dist/types/interfaces/providers/rabbitmq/amqpListener.d.ts +0 -7
  104. package/dist/types/services/externalCommunicatorChannel.d.ts +0 -11
@@ -1,49 +1,163 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Task = void 0;
4
- class Task {
5
- queueProvider;
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;
6
13
  taskList;
7
14
  eventMessageHandler;
8
- logger;
9
- constructor(queueProvider, taskList, eventMessageHandler, logger) {
10
- this.queueProvider = queueProvider;
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;
11
20
  this.taskList = taskList;
12
21
  this.eventMessageHandler = eventMessageHandler;
13
- this.logger = logger;
14
22
  }
15
- tasksMap = new Map();
16
23
  async onInit() {
17
- await this.queueProvider.init?.();
18
- if (this.taskList.length === 0) {
19
- return;
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`);
20
51
  }
21
- this.logger.info('Start Tasks listener initialization');
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');
22
77
  for (const task of this.taskList) {
23
- await this.subscribeTask(task);
24
- this.tasksMap.set(task.name, task);
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
+ }
25
98
  }
99
+ return listeners;
26
100
  }
27
- subscribe(taskName, messageHandler, options) {
28
- return this.queueProvider.subscribeTask(this.getTaskQueueName(taskName), messageHandler, options);
101
+ getExchangeNameWithSuffix(taskName) {
102
+ return this.getQueueName(taskName);
29
103
  }
30
- publish(taskName, payload, delay) {
31
- if (delay) {
32
- const task = this.tasksMap.get(taskName);
33
- if (task && !task.isDelayed) {
34
- throw new Error('Delay option could be used only with delayed tasks');
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;
35
112
  }
113
+ exchangesOptions.push(exchangeOptions);
114
+ }
115
+ if (exchangesOptions.length === 0) {
116
+ const globalExchangesOptions = this.defineExchangesOptionsBasedOnGlobalConfig(queueName, isExchangeDelayed);
117
+ exchangesOptions.push(...globalExchangesOptions);
36
118
  }
37
- const queueName = this.getTaskQueueName(taskName);
38
- return this.queueProvider.publishTask(queueName, payload, delay);
119
+ return exchangesOptions;
39
120
  }
40
- async subscribeTask(task) {
41
- await this.subscribe(task.name, this.eventMessageHandler.eventListenerMessageHandler.bind(this.eventMessageHandler, task), {
42
- delayed: task.isDelayed || false,
43
- });
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
+ };
44
139
  }
45
- getTaskQueueName(taskName) {
46
- return `TasksQueue${this.capitalizeFirstLetter(this.queueProvider.getServiceName())}[${taskName}]`;
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}]`;
47
161
  }
48
162
  capitalizeFirstLetter(s) {
49
163
  return s
@@ -51,6 +165,13 @@ class Task {
51
165
  .map((str) => str.charAt(0).toUpperCase() + str.slice(1))
52
166
  .join('');
53
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
+ }
54
175
  }
55
176
  exports.Task = Task;
56
177
  //# sourceMappingURL=task.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/services/task.ts"],"names":[],"mappings":";;;AAOA,MAAa,IAAI;IAEQ;IACA;IACA;IACA;IAJrB,YACqB,aAA+B,EAC/B,QAAwB,EACxB,mBAAwC,EACxC,MAAc;QAHd,kBAAa,GAAb,aAAa,CAAkB;QAC/B,aAAQ,GAAR,QAAQ,CAAgB;QACxB,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,WAAM,GAAN,MAAM,CAAQ;IAChC,CAAC;IAEa,QAAQ,GAA8B,IAAI,GAAG,EAAE,CAAA;IAEhE,KAAK,CAAC,MAAM;QACR,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAA;QACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAM;QACV,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;QAEvD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YAE9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACtC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,QAAgB,EAAE,cAA8B,EAAE,OAA0B;QAClF,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;IACrG,CAAC;IAED,OAAO,CAAC,QAAgB,EAAE,OAAuB,EAAE,KAAc;QAC7D,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACxC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;YACzE,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAEjD,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IACpE,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,IAAkB;QAC1C,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE;YACvH,OAAO,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK;SACnC,CAAC,CAAA;IACN,CAAC;IAEO,gBAAgB,CAAC,QAAgB;QACrC,OAAO,aAAa,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,IAAI,QAAQ,GAAG,CAAA;IACtG,CAAC;IAEO,qBAAqB,CAAC,CAAS;QACnC,OAAO,CAAC;aACH,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAChE,IAAI,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;CACJ;AA1DD,oBA0DC"}
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/services/task.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  declare const _default: {
2
2
  DEFAULT_ROUTING_KEY: string;
3
3
  APP_ID: string;
4
+ PROJECT_NAME: string;
5
+ PORTAL_NAME: string;
6
+ REPLY_TO_QUEUE_NAME: string;
4
7
  };
5
8
  export default _default;
@@ -1,4 +1,4 @@
1
1
  export * from './interfaces';
2
2
  export * from './interfaces/deps';
3
- export { EventName, QueueName } from './interfaces/queueConfig';
4
3
  export * from './services';
4
+ export * from './providers';
@@ -2,7 +2,6 @@ import { EventBus } from '../services/eventBus';
2
2
  import { EventMessageHandler } from '../services/eventMessageHandler';
3
3
  import { EventMessageValidator } from '../services/eventMessageValidator';
4
4
  import { ExternalCommunicator } from '../services/externalCommunicator';
5
- import { ExternalCommunicatorChannel } from '../services/externalCommunicatorChannel';
6
5
  import { ExternalEventBus } from '../services/externalEventBus';
7
6
  import { Queue } from '../services/queue';
8
7
  import { ScheduledTask } from '../services/scheduledTask';
@@ -11,11 +10,13 @@ export type CommonQueueDeps = {
11
10
  queue: Queue;
12
11
  eventMessageHandler: EventMessageHandler;
13
12
  eventMessageValidator: EventMessageValidator;
14
- externalChannel: ExternalCommunicatorChannel;
15
13
  };
16
14
  export type InternalQueueDeps = {
17
15
  eventBus?: EventBus;
18
16
  task?: Task;
17
+ /**
18
+ * @deprecated use pkg-workflow entities instead
19
+ */
19
20
  scheduledTask?: ScheduledTask;
20
21
  };
21
22
  export type ExternalQueueDeps = {
@@ -1,21 +1,14 @@
1
1
  import { HttpStatusCode } from '@diia-inhouse/types';
2
2
  import { ValidationSchema } from '@diia-inhouse/validators';
3
- import { EventBusListener } from './eventBus';
4
- import { EventName, Topic } from './queueConfig';
5
- export type EventListeners = Partial<Record<EventName, EventBusListener>>;
6
- export interface ReceiveOps {
7
- timeout?: number;
8
- async?: boolean;
9
- requestUuid?: string;
10
- ignoreCache?: boolean;
11
- retry?: boolean;
12
- }
3
+ import { ExchangeName } from './messageBrokerServiceConfig';
13
4
  export interface ReceiveDirectOps {
14
- topic?: Topic;
15
- validationRules?: ValidationSchema;
5
+ registryApiVersion?: string;
6
+ exchangeName?: ExchangeName;
7
+ validationRules: ValidationSchema | null;
16
8
  ignoreCache?: boolean;
17
9
  retry?: boolean;
18
10
  timeout?: number;
11
+ requestUuid?: string;
19
12
  }
20
13
  export interface ExternalCommunicatorResponseError {
21
14
  http_code: HttpStatusCode;
@@ -1,40 +1,87 @@
1
+ import { ValidationError } from '@diia-inhouse/errors';
1
2
  import { ValidationSchema } from '@diia-inhouse/validators';
3
+ import { ExchangeName, ExchangeOptions, QueueOptions } from './messageBrokerServiceConfig';
2
4
  import { MessageHandler } from './messageHandler';
3
- import { PublishDirectOptions, PublishExternalEventOptions, SubscribeOptions } from './options';
4
- import { MessagePayload, QueueMessageMetaData, RabbitMQConfig } from './providers/rabbitmq';
5
- import { EventName, QueueConfigByQueueName, QueueName, ServiceConfigByConfigType, ServiceRulesConfig, Topic, TopicConfigByConfigType } from './queueConfig';
5
+ import { PublishDirectOptions, PublishExternalEventOptions, PublishOptions, SubscribeOptions } from './options';
6
+ import { MessageData, NackOptions, QueueMessageMetaData, RabbitMQConfig } from './providers/rabbitmq';
7
+ import { MessagePayload, PublishingResult } from './providers/rabbitmq/amqpPublisher';
8
+ import { EventName, QueueName, ServiceRulesConfig } from './queueConfig';
6
9
  import { QueueConnectionType } from './queueStatus';
7
10
  export * from './providers/rabbitmq';
11
+ export * from './providers/rabbitmq/amqpConnection';
12
+ export * from './providers/rabbitmq/amqpPublisher';
8
13
  export * from './queueStatus';
9
- export * from './eventBus';
10
14
  export * from './options';
11
15
  export * from './messageHandler';
12
16
  export * from './options';
13
17
  export * from './queueContext';
14
- export { QueueConfigType } from './queueConfig';
18
+ export * from './messageBrokerServiceConfig';
19
+ export * from './metrics';
20
+ export * from './queueConfig';
21
+ export * from './externalCommunicator';
22
+ export type EventListeners = Partial<Record<EventName, EventBusListener>>;
15
23
  export interface TaskQueue {
16
- subscribe(taskName: string, messageHandler: MessageHandler, options?: SubscribeOptions): Promise<boolean>;
17
- publish(taskName: string, message: MessagePayload, delay?: number): Promise<boolean>;
24
+ subscribe(queueName: QueueName, messageHandler: MessageHandler, options?: SubscribeOptions): Promise<boolean>;
25
+ publish(taskName: string, message: MessagePayload, delay?: number): Promise<PublishingResult>;
18
26
  }
19
27
  export interface ScheduledTasksQueue {
20
- subscribe(subscriptionName: QueueName, messageHandler: MessageHandler, options?: SubscribeOptions): Promise<boolean>;
21
- publish(scheduledTaskName: EventName, serviceName: string): Promise<boolean>;
28
+ subscribe(queueName: QueueName, messageHandler: MessageHandler): Promise<boolean>;
29
+ publishToQueue(queueName: QueueName, payload: MessageData): Promise<PublishingResult>;
30
+ /** @deprecated
31
+ * - use the publishToExchange method for pushing a message by a routing key
32
+ * - use the publishToQueue method for pushing a message to a queue
33
+ * */
34
+ publish(eventName: EventName, serviceName: string): Promise<PublishingResult>;
35
+ publishToExchange(exchangeName: ExchangeName, routingKey: string, payload: MessageData): Promise<PublishingResult>;
36
+ }
37
+ export interface EventBusQueue {
38
+ subscribe(queueName: QueueName, messageHandler: MessageHandler, options?: SubscribeOptions): Promise<boolean>;
39
+ /** @deprecated
40
+ * - use the publishToExchange method for pushing a message by a routing key
41
+ * - use the publishToQueue method for pushing a message to a queue
42
+ * */
43
+ publish(publicationName: EventName, message: MessagePayload, options?: PublishOptions): Promise<PublishingResult>;
44
+ publishToQueue(queueName: QueueName, payload: MessageData): Promise<PublishingResult>;
45
+ publishToExchange(exchangeName: ExchangeName, routingKey: string, payload: MessageData): Promise<PublishingResult>;
22
46
  }
23
47
  export interface ExternalEventBusQueue {
24
- subscribe(messageHandler: MessageHandler, options?: SubscribeOptions): Promise<boolean>;
25
- publish(eventName: EventName, message: MessagePayload, options?: PublishExternalEventOptions): Promise<boolean>;
26
- publishDirect<T>(eventName: string, message: MessagePayload, topic?: Topic, options?: PublishDirectOptions): Promise<T>;
48
+ subscribe(queueName: QueueName, messageHandler: MessageHandler): Promise<boolean>;
49
+ /** @deprecated
50
+ * - use the publishToExchange method for pushing a message by a routing key
51
+ * - use the publishToQueue method for pushing a message to a queue
52
+ * */
53
+ publish(eventName: EventName, message: MessagePayload, options?: PublishExternalEventOptions): Promise<PublishingResult>;
54
+ publishDirect<T>(eventName: string, message: MessagePayload, options?: PublishDirectOptions): Promise<T>;
55
+ publishToExchange(exchangeName: ExchangeName, routingKey: string, messageData: MessageData, options?: PublishOptions): Promise<PublishingResult>;
56
+ publishToQueue(queueName: QueueName, messageData: MessageData): Promise<PublishingResult>;
57
+ }
58
+ export interface Listener {
59
+ queueNames?: string[];
60
+ nackOptions?: NackOptions;
61
+ validationRules?: ValidationSchema;
62
+ getServiceCode?(payload: unknown): string;
27
63
  }
28
- export interface TaskListener {
64
+ export interface EventBusListener extends Listener {
65
+ event: EventName;
66
+ /** @deprecated use receive direct mechanism */
67
+ isSync?: boolean;
68
+ validationErrorHandler?(error: ValidationError, uuid: string): Promise<void>;
69
+ handler?(payload: unknown, meta: QueueMessageMetaData): Promise<unknown | void | NackOptions>;
70
+ }
71
+ export interface TaskListener extends Listener {
29
72
  name: string;
73
+ /**
74
+ * @deprecated the RabbitMQ plugin that supports delayed messages is deprecated and should be removed in the future
75
+ */
30
76
  isDelayed?: boolean;
31
- validationRules: ValidationSchema;
32
- getServiceCode?(payload: unknown): string;
33
- handler(payload: unknown, meta: QueueMessageMetaData): Promise<void>;
77
+ handler(payload: unknown, meta: QueueMessageMetaData): Promise<void | NackOptions>;
34
78
  }
35
79
  export type QueueConfig = RabbitMQConfig;
36
80
  export interface InternalQueueConfig extends QueueConfig {
37
81
  queueName?: string;
82
+ /**
83
+ * @deprecated use pkg-workflow entities instead
84
+ */
38
85
  scheduledTaskQueueName?: string;
39
86
  }
40
87
  export type QueueConnectionConfig = {
@@ -42,8 +89,11 @@ export type QueueConnectionConfig = {
42
89
  [QueueConnectionType.Internal]?: InternalQueueConfig;
43
90
  [QueueConnectionType.External]?: QueueConfig;
44
91
  };
45
- export interface AggregatedQueueConfigs {
46
- serviceConfig: ServiceConfigByConfigType;
47
- queueConfig: QueueConfigByQueueName;
48
- topicConfig: TopicConfigByConfigType;
92
+ export interface MessageBrokerServiceListener {
93
+ handler: MessageHandler;
94
+ queueOptions: QueueOptions;
95
+ exchangesOptions: ExchangeOptions[];
96
+ }
97
+ export interface MessageBrokerServiceEventsListener extends MessageBrokerServiceListener {
98
+ eventNames?: string[];
49
99
  }
@@ -0,0 +1,79 @@
1
+ import { Options } from 'amqplib';
2
+ interface BaseBindOptions {
3
+ exchangeName: string;
4
+ routingKey?: string;
5
+ }
6
+ export interface BindOptions extends BaseBindOptions {
7
+ bind?: boolean;
8
+ }
9
+ export interface UnbindOptions extends BaseBindOptions {
10
+ unbind?: boolean;
11
+ }
12
+ export interface RecreateChannelOptions {
13
+ timeout?: number;
14
+ maxTries?: number;
15
+ backoffCoefficient?: number;
16
+ }
17
+ export interface ConsumerOptions {
18
+ consumerTag?: string;
19
+ prefetchCount?: number;
20
+ recreateChannelOptions?: RecreateChannelOptions;
21
+ }
22
+ export type ExchangeName = string;
23
+ export declare enum ExchangeType {
24
+ Direct = "direct",
25
+ Fanout = "fanout",
26
+ Topic = "topic",
27
+ Headers = "headers",
28
+ /**
29
+ * @deprecated the RabbitMQ plugin that supports delayed messages is deprecated and should be removed in the future
30
+ */
31
+ XDelayedMessage = "x-delayed-message"
32
+ }
33
+ export interface ExchangeOptions {
34
+ name: ExchangeName;
35
+ type?: ExchangeType;
36
+ declare?: boolean;
37
+ /**
38
+ * @deprecated the RabbitMQ plugin that supports delayed messages is deprecated and should be removed in the future
39
+ */
40
+ delayed?: boolean;
41
+ options?: Options.AssertExchange;
42
+ bindTo?: BindOptions[];
43
+ }
44
+ export declare const MessageBrokerExternalServiceTypes: readonly ["externalEventBus"];
45
+ export type MessageBrokerExternalServiceType = (typeof MessageBrokerExternalServiceTypes)[number];
46
+ export declare const MessageBrokerInternalServiceTypes: readonly ["task", "eventBus", "scheduledTask"];
47
+ export type MessageBrokerInternalServiceType = (typeof MessageBrokerInternalServiceTypes)[number];
48
+ export declare const MessageBrokerGeneralServiceTypes: readonly ["general"];
49
+ export type MessageBrokerGeneralServiceType = (typeof MessageBrokerGeneralServiceTypes)[number];
50
+ export type MessageBrokerServiceType = MessageBrokerExternalServiceType | MessageBrokerInternalServiceType | MessageBrokerGeneralServiceType;
51
+ export interface MessageBrokerServiceConfig {
52
+ queuesOptions: QueueOptions[];
53
+ exchangesOptions: ExchangeOptions[];
54
+ }
55
+ export declare const emptyMessageBrokerServiceConfig: MessageBrokerServiceConfig;
56
+ export type MessageBrokerServicesConfig = {
57
+ [k in MessageBrokerServiceType]?: MessageBrokerServiceConfig;
58
+ };
59
+ export declare const QueueTypes: {
60
+ readonly Quorum: "quorum";
61
+ readonly Classic: "classic";
62
+ };
63
+ type QueueType = (typeof QueueTypes)[keyof typeof QueueTypes];
64
+ export interface BaseQueueOptions {
65
+ type?: QueueType;
66
+ options?: Options.AssertQueue;
67
+ }
68
+ export interface RedeclareQueueOptions extends BaseQueueOptions {
69
+ redeclare?: boolean;
70
+ }
71
+ export interface QueueOptions extends BaseQueueOptions {
72
+ name: string;
73
+ declare?: boolean;
74
+ bindTo: BindOptions[];
75
+ unbindFrom?: UnbindOptions[];
76
+ consumerOptions?: ConsumerOptions;
77
+ redeclareOptions?: RedeclareQueueOptions;
78
+ }
79
+ export {};
@@ -1,2 +1,2 @@
1
1
  import { QueueMessage } from './providers/rabbitmq';
2
- export type MessageHandler = (msg: QueueMessage | null) => Promise<void>;
2
+ export type MessageHandler = (msg: QueueMessage) => Promise<void>;
@@ -5,3 +5,16 @@ export interface TotalMessageHandlerErrorsLabelsMap {
5
5
  event: string;
6
6
  serviceName: string;
7
7
  }
8
+ export declare const LabelUnknown = "unknown";
9
+ export type CommunicationDirection = ['inbound', 'outbound'][number];
10
+ export declare class CommunicationsTotalLabelsMap {
11
+ event: string;
12
+ source: string;
13
+ queue?: string;
14
+ destination?: string;
15
+ direction: CommunicationDirection;
16
+ }
17
+ export declare const communicationsTotalLabelsMap: (keyof CommunicationsTotalLabelsMap)[];
18
+ export declare const Metrics: {
19
+ readonly CommunicationsTotal: "diia_rabbitmq_communications_total";
20
+ };
@@ -1,24 +1,49 @@
1
1
  import { Options } from 'amqplib';
2
+ import { RecreateChannelOptions } from './messageBrokerServiceConfig';
3
+ export interface PublisherOptions {
4
+ timeout?: number;
5
+ replyToQueueName?: string;
6
+ }
2
7
  export interface ListenerOptions {
3
8
  queueOptions?: Options.AssertQueue;
4
9
  prefetchCount?: number;
10
+ recreateChannelOptions?: RecreateChannelOptions;
5
11
  }
6
12
  export interface PublishDirectOptions {
13
+ exchangeName?: string;
7
14
  timeout?: number;
8
15
  ignoreCache?: boolean;
9
16
  retry?: boolean;
17
+ registryApiVersion?: string;
10
18
  }
11
19
  export interface PublishOptions {
20
+ /**
21
+ * Delay (ms) before message delivery
22
+ * @default undefined
23
+ */
24
+ delay?: number;
25
+ /**
26
+ * Routing key for message routing
27
+ * @default undefined
28
+ */
29
+ routingKey?: string;
30
+ /**
31
+ * Timeout (ms) for publish operation
32
+ * @default Infinity
33
+ */
12
34
  publishTimeout?: number;
35
+ /**
36
+ * Whether to throw error on timeout (true) or return false (false)
37
+ * @default true
38
+ */
13
39
  throwOnPublishTimeout?: boolean;
14
40
  }
15
- export interface PublishInternalEventOptions extends PublishOptions {
16
- routingKey?: string;
17
- }
18
41
  export interface SubscribeOptions {
19
42
  routingKey?: string;
20
- queueSuffix?: string;
21
43
  listener?: ListenerOptions;
44
+ /**
45
+ * @deprecated the RabbitMQ plugin that supports delayed messages is deprecated and should be removed in the future
46
+ */
22
47
  delayed?: boolean;
23
48
  }
24
49
  export interface PublishExternalEventOptions extends PublishOptions, PublishDirectOptions {
@@ -24,3 +24,6 @@ export declare enum ConnectionStatus {
24
24
  Closed = "closed",
25
25
  Down = "down"
26
26
  }
27
+ export declare const AmqpConnectionEventNames: {
28
+ readonly Ready: "ready";
29
+ };
@@ -1,24 +1,16 @@
1
- import { PublishDirectOptions } from '../../options';
2
- import { EventName } from '../../queueConfig';
3
- export declare enum ExchangeType {
4
- Direct = "direct",
5
- Fanout = "fanout",
6
- Topic = "topic",
7
- Headers = "headers",
8
- XDelayedMessage = "x-delayed-message"
9
- }
1
+ import { MessagePropertyHeaders } from 'amqplib/properties';
2
+ import { Headers } from './index';
10
3
  export type MessagePayload = unknown;
11
4
  export interface MessageHeaders {
12
5
  traceId: string;
13
6
  serviceCode?: string;
14
7
  'x-delay'?: number;
15
8
  }
16
- export interface PublishToExchangeParams {
17
- eventName: EventName | string;
18
- message: MessagePayload;
19
- exchangeName: string;
20
- routingKey?: string;
21
- responseRoutingKey?: string;
22
- headers: MessageHeaders;
23
- options?: PublishDirectOptions;
9
+ export interface DirectResponseHeaders extends MessagePropertyHeaders {
10
+ [Headers.handledBy]?: string;
11
+ }
12
+ export interface DirectResponse<T = unknown> extends MessagePropertyHeaders {
13
+ body: T;
14
+ headers: DirectResponseHeaders;
24
15
  }
16
+ export type PublishingResult = void | never;