pp-command-bus 1.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/README.md +400 -1219
  2. package/dist/command-bus/command-bus.spec.js +138 -359
  3. package/dist/command-bus/command-bus.spec.js.map +1 -1
  4. package/dist/command-bus/command.d.ts +3 -4
  5. package/dist/command-bus/command.js +3 -32
  6. package/dist/command-bus/command.js.map +1 -1
  7. package/dist/command-bus/config/command-bus-config.d.ts +75 -21
  8. package/dist/command-bus/config/command-bus-config.js +99 -58
  9. package/dist/command-bus/config/command-bus-config.js.map +1 -1
  10. package/dist/command-bus/config/command-bus-config.spec.js +174 -100
  11. package/dist/command-bus/config/command-bus-config.spec.js.map +1 -1
  12. package/dist/command-bus/index.d.ts +39 -52
  13. package/dist/command-bus/index.js +133 -126
  14. package/dist/command-bus/index.js.map +1 -1
  15. package/dist/command-bus/logging/command-logger.d.ts +2 -0
  16. package/dist/command-bus/logging/command-logger.js +7 -0
  17. package/dist/command-bus/logging/command-logger.js.map +1 -1
  18. package/dist/command-bus/logging/command-logger.spec.js +36 -0
  19. package/dist/command-bus/logging/command-logger.spec.js.map +1 -1
  20. package/dist/command-bus/serialization/index.d.ts +6 -0
  21. package/dist/command-bus/serialization/index.js +9 -0
  22. package/dist/command-bus/serialization/index.js.map +1 -0
  23. package/dist/command-bus/serialization/msgpack-serializer.d.ts +26 -0
  24. package/dist/command-bus/serialization/msgpack-serializer.js +70 -0
  25. package/dist/command-bus/serialization/msgpack-serializer.js.map +1 -0
  26. package/dist/command-bus/serialization/msgpack-serializer.spec.js +223 -0
  27. package/dist/command-bus/serialization/msgpack-serializer.spec.js.map +1 -0
  28. package/dist/command-bus/serialization/serializer.interface.d.ts +21 -0
  29. package/dist/command-bus/serialization/serializer.interface.js +3 -0
  30. package/dist/command-bus/serialization/serializer.interface.js.map +1 -0
  31. package/dist/command-bus/transport/consumer-loop.d.ts +45 -0
  32. package/dist/command-bus/transport/consumer-loop.js +90 -0
  33. package/dist/command-bus/transport/consumer-loop.js.map +1 -0
  34. package/dist/command-bus/transport/consumer-loop.spec.js +216 -0
  35. package/dist/command-bus/transport/consumer-loop.spec.js.map +1 -0
  36. package/dist/command-bus/transport/index.d.ts +21 -0
  37. package/dist/command-bus/transport/index.js +23 -0
  38. package/dist/command-bus/transport/index.js.map +1 -0
  39. package/dist/command-bus/transport/message-processor.d.ts +59 -0
  40. package/dist/command-bus/transport/message-processor.js +111 -0
  41. package/dist/command-bus/transport/message-processor.js.map +1 -0
  42. package/dist/command-bus/transport/message-processor.spec.js +185 -0
  43. package/dist/command-bus/transport/message-processor.spec.js.map +1 -0
  44. package/dist/command-bus/transport/pending-recovery.d.ts +54 -0
  45. package/dist/command-bus/transport/pending-recovery.js +139 -0
  46. package/dist/command-bus/transport/pending-recovery.js.map +1 -0
  47. package/dist/command-bus/transport/pending-recovery.spec.js +176 -0
  48. package/dist/command-bus/transport/pending-recovery.spec.js.map +1 -0
  49. package/dist/command-bus/transport/redis-codec.d.ts +24 -0
  50. package/dist/command-bus/transport/redis-codec.js +33 -0
  51. package/dist/command-bus/transport/redis-codec.js.map +1 -0
  52. package/dist/command-bus/transport/redis-codec.spec.js +53 -0
  53. package/dist/command-bus/transport/redis-codec.spec.js.map +1 -0
  54. package/dist/command-bus/transport/redis-streams-transport.d.ts +91 -0
  55. package/dist/command-bus/transport/redis-streams-transport.js +134 -0
  56. package/dist/command-bus/transport/redis-streams-transport.js.map +1 -0
  57. package/dist/command-bus/transport/redis-streams-transport.spec.js +420 -0
  58. package/dist/command-bus/transport/redis-streams-transport.spec.js.map +1 -0
  59. package/dist/command-bus/transport/rpc-handler.d.ts +39 -0
  60. package/dist/command-bus/transport/rpc-handler.js +87 -0
  61. package/dist/command-bus/transport/rpc-handler.js.map +1 -0
  62. package/dist/command-bus/transport/rpc-handler.spec.js +157 -0
  63. package/dist/command-bus/transport/rpc-handler.spec.js.map +1 -0
  64. package/dist/command-bus/transport/stream-consumer.d.ts +89 -0
  65. package/dist/command-bus/transport/stream-consumer.js +181 -0
  66. package/dist/command-bus/transport/stream-consumer.js.map +1 -0
  67. package/dist/command-bus/transport/stream-consumer.spec.js +284 -0
  68. package/dist/command-bus/transport/stream-consumer.spec.js.map +1 -0
  69. package/dist/command-bus/transport/stream-producer.d.ts +23 -0
  70. package/dist/command-bus/transport/stream-producer.js +70 -0
  71. package/dist/command-bus/transport/stream-producer.js.map +1 -0
  72. package/dist/command-bus/transport/stream-producer.spec.js +125 -0
  73. package/dist/command-bus/transport/stream-producer.spec.js.map +1 -0
  74. package/dist/command-bus/transport/transport.interface.d.ts +87 -0
  75. package/dist/command-bus/transport/transport.interface.js +3 -0
  76. package/dist/command-bus/transport/transport.interface.js.map +1 -0
  77. package/dist/command-bus/types/index.d.ts +0 -84
  78. package/dist/examples/rpc.demo.js +1 -1
  79. package/dist/examples/rpc.demo.js.map +1 -1
  80. package/dist/index.d.ts +8 -5
  81. package/dist/index.js +6 -4
  82. package/dist/index.js.map +1 -1
  83. package/dist/pp-command-bus-2.0.0.tgz +0 -0
  84. package/dist/shared/redis/connection-pool.d.ts +54 -0
  85. package/dist/shared/redis/connection-pool.js +117 -0
  86. package/dist/shared/redis/connection-pool.js.map +1 -0
  87. package/dist/shared/redis/connection-pool.spec.js +114 -0
  88. package/dist/shared/redis/connection-pool.spec.js.map +1 -0
  89. package/dist/shared/redis/index.d.ts +5 -3
  90. package/dist/shared/redis/index.js +6 -4
  91. package/dist/shared/redis/index.js.map +1 -1
  92. package/dist/shared/redis/rpc-connection-pool.d.ts +61 -0
  93. package/dist/shared/redis/rpc-connection-pool.js +154 -0
  94. package/dist/shared/redis/rpc-connection-pool.js.map +1 -0
  95. package/dist/shared/redis/rpc-connection-pool.spec.d.ts +1 -0
  96. package/dist/shared/redis/rpc-connection-pool.spec.js +173 -0
  97. package/dist/shared/redis/rpc-connection-pool.spec.js.map +1 -0
  98. package/dist/shared/types.d.ts +0 -4
  99. package/dist/shared/utils/error-utils.d.ts +8 -0
  100. package/dist/shared/utils/error-utils.js +14 -0
  101. package/dist/shared/utils/error-utils.js.map +1 -0
  102. package/package.json +12 -12
  103. package/dist/command-bus/config/auto-config-optimizer.d.ts +0 -35
  104. package/dist/command-bus/config/auto-config-optimizer.js +0 -52
  105. package/dist/command-bus/config/auto-config-optimizer.js.map +0 -1
  106. package/dist/command-bus/config/auto-config-optimizer.spec.js +0 -42
  107. package/dist/command-bus/config/auto-config-optimizer.spec.js.map +0 -1
  108. package/dist/command-bus/job/index.d.ts +0 -6
  109. package/dist/command-bus/job/index.js +0 -15
  110. package/dist/command-bus/job/index.js.map +0 -1
  111. package/dist/command-bus/job/job-options-builder.d.ts +0 -21
  112. package/dist/command-bus/job/job-options-builder.js +0 -58
  113. package/dist/command-bus/job/job-options-builder.js.map +0 -1
  114. package/dist/command-bus/job/job-options-builder.spec.js +0 -156
  115. package/dist/command-bus/job/job-options-builder.spec.js.map +0 -1
  116. package/dist/command-bus/job/job-processor.d.ts +0 -39
  117. package/dist/command-bus/job/job-processor.js +0 -203
  118. package/dist/command-bus/job/job-processor.js.map +0 -1
  119. package/dist/command-bus/job/job-processor.spec.js +0 -436
  120. package/dist/command-bus/job/job-processor.spec.js.map +0 -1
  121. package/dist/command-bus/queue/index.d.ts +0 -5
  122. package/dist/command-bus/queue/index.js +0 -13
  123. package/dist/command-bus/queue/index.js.map +0 -1
  124. package/dist/command-bus/queue/queue-manager.d.ts +0 -56
  125. package/dist/command-bus/queue/queue-manager.js +0 -163
  126. package/dist/command-bus/queue/queue-manager.js.map +0 -1
  127. package/dist/command-bus/queue/queue-manager.spec.js +0 -371
  128. package/dist/command-bus/queue/queue-manager.spec.js.map +0 -1
  129. package/dist/command-bus/rpc/index.d.ts +0 -11
  130. package/dist/command-bus/rpc/index.js +0 -19
  131. package/dist/command-bus/rpc/index.js.map +0 -1
  132. package/dist/command-bus/rpc/payload-compression.service.d.ts +0 -50
  133. package/dist/command-bus/rpc/payload-compression.service.js +0 -215
  134. package/dist/command-bus/rpc/payload-compression.service.js.map +0 -1
  135. package/dist/command-bus/rpc/payload-compression.service.spec.js +0 -376
  136. package/dist/command-bus/rpc/payload-compression.service.spec.js.map +0 -1
  137. package/dist/command-bus/rpc/rpc-coordinator.d.ts +0 -96
  138. package/dist/command-bus/rpc/rpc-coordinator.js +0 -500
  139. package/dist/command-bus/rpc/rpc-coordinator.js.map +0 -1
  140. package/dist/command-bus/rpc/rpc-coordinator.spec.js +0 -621
  141. package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +0 -1
  142. package/dist/command-bus/rpc/rpc-job-cancellation.service.d.ts +0 -82
  143. package/dist/command-bus/rpc/rpc-job-cancellation.service.js +0 -180
  144. package/dist/command-bus/rpc/rpc-job-cancellation.service.js.map +0 -1
  145. package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js +0 -286
  146. package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js.map +0 -1
  147. package/dist/command-bus/worker/index.d.ts +0 -10
  148. package/dist/command-bus/worker/index.js +0 -19
  149. package/dist/command-bus/worker/index.js.map +0 -1
  150. package/dist/command-bus/worker/worker-benchmark.d.ts +0 -71
  151. package/dist/command-bus/worker/worker-benchmark.js +0 -202
  152. package/dist/command-bus/worker/worker-benchmark.js.map +0 -1
  153. package/dist/command-bus/worker/worker-benchmark.spec.js +0 -310
  154. package/dist/command-bus/worker/worker-benchmark.spec.js.map +0 -1
  155. package/dist/command-bus/worker/worker-metrics-collector.d.ts +0 -98
  156. package/dist/command-bus/worker/worker-metrics-collector.js +0 -242
  157. package/dist/command-bus/worker/worker-metrics-collector.js.map +0 -1
  158. package/dist/command-bus/worker/worker-orchestrator.d.ts +0 -70
  159. package/dist/command-bus/worker/worker-orchestrator.js +0 -339
  160. package/dist/command-bus/worker/worker-orchestrator.js.map +0 -1
  161. package/dist/command-bus/worker/worker-orchestrator.spec.js +0 -712
  162. package/dist/command-bus/worker/worker-orchestrator.spec.js.map +0 -1
  163. package/dist/examples/auto-config.demo.d.ts +0 -9
  164. package/dist/examples/auto-config.demo.js +0 -106
  165. package/dist/examples/auto-config.demo.js.map +0 -1
  166. package/dist/examples/rpc-compression.demo.d.ts +0 -5
  167. package/dist/examples/rpc-compression.demo.js +0 -358
  168. package/dist/examples/rpc-compression.demo.js.map +0 -1
  169. package/dist/examples/rpc-resilience.demo.d.ts +0 -15
  170. package/dist/examples/rpc-resilience.demo.js +0 -233
  171. package/dist/examples/rpc-resilience.demo.js.map +0 -1
  172. package/dist/pp-command-bus-1.5.0.tgz +0 -0
  173. package/dist/shared/config/base-config.d.ts +0 -54
  174. package/dist/shared/config/base-config.js +0 -114
  175. package/dist/shared/config/base-config.js.map +0 -1
  176. package/dist/shared/config/base-config.spec.js +0 -204
  177. package/dist/shared/config/base-config.spec.js.map +0 -1
  178. package/dist/shared/config/index.d.ts +0 -1
  179. package/dist/shared/config/index.js +0 -9
  180. package/dist/shared/config/index.js.map +0 -1
  181. package/dist/shared/redis/redis-connection-factory.d.ts +0 -66
  182. package/dist/shared/redis/redis-connection-factory.js +0 -113
  183. package/dist/shared/redis/redis-connection-factory.js.map +0 -1
  184. /package/dist/command-bus/{config/auto-config-optimizer.spec.d.ts → serialization/msgpack-serializer.spec.d.ts} +0 -0
  185. /package/dist/command-bus/{job/job-options-builder.spec.d.ts → transport/consumer-loop.spec.d.ts} +0 -0
  186. /package/dist/command-bus/{job/job-processor.spec.d.ts → transport/message-processor.spec.d.ts} +0 -0
  187. /package/dist/command-bus/{queue/queue-manager.spec.d.ts → transport/pending-recovery.spec.d.ts} +0 -0
  188. /package/dist/command-bus/{rpc/payload-compression.service.spec.d.ts → transport/redis-codec.spec.d.ts} +0 -0
  189. /package/dist/command-bus/{rpc/rpc-coordinator.spec.d.ts → transport/redis-streams-transport.spec.d.ts} +0 -0
  190. /package/dist/command-bus/{rpc/rpc-job-cancellation.service.spec.d.ts → transport/rpc-handler.spec.d.ts} +0 -0
  191. /package/dist/command-bus/{worker/worker-benchmark.spec.d.ts → transport/stream-consumer.spec.d.ts} +0 -0
  192. /package/dist/command-bus/{worker/worker-orchestrator.spec.d.ts → transport/stream-producer.spec.d.ts} +0 -0
  193. /package/dist/shared/{config/base-config.spec.d.ts → redis/connection-pool.spec.d.ts} +0 -0
@@ -1,163 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const bullmq_1 = require("bullmq");
13
- /**
14
- * Zarządza cyklem życia kolejek BullMQ i cache'em kolejek
15
- * Cache zapobiega tworzeniu wielu instancji Queue dla tej samej komendy
16
- */
17
- class QueueManager {
18
- constructor(redisConnection, logger) {
19
- this.redisConnection = redisConnection;
20
- this.logger = logger;
21
- /**
22
- * Cache kolejek - Map<queueName, Queue>
23
- * Pozwala na reużycie tej samej instancji Queue dla danej komendy
24
- */
25
- this.queueCache = new Map();
26
- }
27
- /**
28
- * Pobiera lub tworzy kolejkę dla danego typu komendy
29
- * Używa cache dla optymalizacji pamięci - reużywa instancje Queue
30
- * @param commandName - Nazwa komendy
31
- * @param connection - Połączenie Redis (opcjonalne)
32
- * @returns Instancja Queue (z cache lub nowo utworzona)
33
- */
34
- getOrCreateQueue(commandName, connection) {
35
- const cacheKey = commandName;
36
- // Sprawdź cache
37
- if (this.queueCache.has(cacheKey)) {
38
- this.logger.debug('Kolejka pobrana z cache', {
39
- commandName,
40
- timestamp: new Date().toISOString(),
41
- });
42
- return this.queueCache.get(cacheKey);
43
- }
44
- // Utwórz nową kolejkę
45
- this.logger.debug('Tworzenie nowej kolejki', {
46
- commandName,
47
- timestamp: new Date().toISOString(),
48
- });
49
- const queue = new bullmq_1.Queue(`{${commandName}}`, {
50
- connection: connection !== null && connection !== void 0 ? connection : this.redisConnection,
51
- });
52
- // Dodaj do cache
53
- this.queueCache.set(cacheKey, queue);
54
- return queue;
55
- }
56
- /**
57
- * Tworzy kolejkę dla danego typu komendy (bez cache)
58
- * Używane dla tymczasowych kolejek (np. RPC reply queues)
59
- * @param commandName - Nazwa komendy
60
- * @param connection - Połączenie Redis (opcjonalne)
61
- */
62
- createQueue(commandName, connection) {
63
- this.logger.debug('Tworzenie tymczasowej kolejki (bez cache)', {
64
- commandName,
65
- timestamp: new Date().toISOString(),
66
- });
67
- return new bullmq_1.Queue(`{${commandName}}`, {
68
- connection: connection !== null && connection !== void 0 ? connection : this.redisConnection,
69
- });
70
- }
71
- /**
72
- * Sprawdza czy kolejka BullMQ istnieje w Redis
73
- * @param queueName - Nazwa kolejki do sprawdzenia
74
- * @returns true jeśli kolejka istnieje, false w przeciwnym razie
75
- */
76
- queueExists(queueName) {
77
- return __awaiter(this, void 0, void 0, function* () {
78
- try {
79
- const metaKey = `bull:{${queueName}}:meta`;
80
- const exists = yield this.redisConnection.exists(metaKey);
81
- return exists === 1;
82
- }
83
- catch (error) {
84
- this.logger.warn('Błąd podczas sprawdzania istnienia kolejki', {
85
- queueName,
86
- error: error instanceof Error ? error.message : String(error),
87
- timestamp: new Date().toISOString(),
88
- });
89
- return false;
90
- }
91
- });
92
- }
93
- /**
94
- * Zamyka kolejkę i usuwa ją z cache
95
- * Używane do explicite zamykania kolejek dla optymalizacji pamięci
96
- * @param commandName - Nazwa komendy
97
- */
98
- closeQueue(commandName) {
99
- return __awaiter(this, void 0, void 0, function* () {
100
- const queue = this.queueCache.get(commandName);
101
- if (!queue) {
102
- this.logger.debug('Kolejka nie istnieje w cache - pomijam zamykanie', {
103
- commandName,
104
- timestamp: new Date().toISOString(),
105
- });
106
- return;
107
- }
108
- try {
109
- yield queue.close();
110
- this.queueCache.delete(commandName);
111
- this.logger.debug('Kolejka zamknięta i usunięta z cache', {
112
- commandName,
113
- timestamp: new Date().toISOString(),
114
- });
115
- }
116
- catch (error) {
117
- this.logger.warn('Błąd podczas zamykania kolejki', {
118
- commandName,
119
- error: error instanceof Error ? error.message : String(error),
120
- timestamp: new Date().toISOString(),
121
- });
122
- }
123
- });
124
- }
125
- /**
126
- * Zamyka wszystkie kolejki w cache
127
- * Używane podczas shutdown CommandBus
128
- */
129
- closeAllQueues() {
130
- return __awaiter(this, void 0, void 0, function* () {
131
- this.logger.debug('Zamykanie wszystkich kolejek z cache', {
132
- count: this.queueCache.size,
133
- timestamp: new Date().toISOString(),
134
- });
135
- const closePromises = [];
136
- for (const [commandName, queue] of this.queueCache.entries()) {
137
- closePromises.push(queue.close().catch((error) => {
138
- this.logger.warn('Błąd podczas zamykania kolejki', {
139
- commandName,
140
- error: error instanceof Error ? error.message : String(error),
141
- timestamp: new Date().toISOString(),
142
- });
143
- }));
144
- }
145
- yield Promise.all(closePromises);
146
- this.queueCache.clear();
147
- this.logger.debug('Wszystkie kolejki zamknięte', {
148
- timestamp: new Date().toISOString(),
149
- });
150
- });
151
- }
152
- /**
153
- * Zwraca statystyki cache kolejek (dla diagnostyki)
154
- */
155
- getCacheStats() {
156
- return {
157
- cachedQueuesCount: this.queueCache.size,
158
- queueNames: Array.from(this.queueCache.keys()),
159
- };
160
- }
161
- }
162
- exports.default = QueueManager;
163
- //# sourceMappingURL=queue-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue-manager.js","sourceRoot":"","sources":["../../../src/command-bus/queue/queue-manager.ts"],"names":[],"mappings":"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"}
@@ -1,371 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const queue_manager_1 = __importDefault(require("./queue-manager"));
16
- const bullmq_1 = require("bullmq");
17
- // Mock BullMQ Queue
18
- jest.mock('bullmq');
19
- describe('QueueManager', () => {
20
- let queueManager;
21
- let mockRedisConnection;
22
- let mockLogger;
23
- beforeEach(() => {
24
- jest.clearAllMocks();
25
- // Mock Redis connection
26
- mockRedisConnection = {};
27
- // Mock logger
28
- mockLogger = {
29
- log: jest.fn(),
30
- error: jest.fn(),
31
- warn: jest.fn(),
32
- debug: jest.fn(),
33
- };
34
- queueManager = new queue_manager_1.default(mockRedisConnection, mockLogger);
35
- });
36
- describe('konstruktor', () => {
37
- it('powinno utworzyć instancję z poprawnymi parametrami', () => {
38
- // When
39
- const manager = new queue_manager_1.default(mockRedisConnection, mockLogger);
40
- // Then
41
- expect(manager).toBeDefined();
42
- expect(manager).toBeInstanceOf(queue_manager_1.default);
43
- });
44
- it('powinno zachować przekazane zależności', () => {
45
- // Given
46
- const customRedis = {};
47
- const customLogger = {
48
- log: jest.fn(),
49
- error: jest.fn(),
50
- warn: jest.fn(),
51
- debug: jest.fn(),
52
- };
53
- // When
54
- const manager = new queue_manager_1.default(customRedis, customLogger);
55
- // Then
56
- expect(manager).toBeDefined();
57
- // Tworzymy kolejkę aby sprawdzić czy używa przekazanych parametrów
58
- manager.createQueue('test-command');
59
- expect(bullmq_1.Queue).toHaveBeenCalledWith('{test-command}', {
60
- connection: customRedis,
61
- });
62
- });
63
- });
64
- describe('createQueue', () => {
65
- it('powinno utworzyć kolejkę BullMQ z poprawną nazwą', () => {
66
- // Given
67
- const commandName = 'TestCommand';
68
- // When
69
- queueManager.createQueue(commandName);
70
- // Then
71
- expect(bullmq_1.Queue).toHaveBeenCalledWith(`{${commandName}}`, expect.any(Object));
72
- });
73
- it('powinno użyć przekazanego Redis connection', () => {
74
- // Given
75
- const commandName = 'TestCommand';
76
- // When
77
- queueManager.createQueue(commandName);
78
- // Then
79
- expect(bullmq_1.Queue).toHaveBeenCalledWith(`{${commandName}}`, {
80
- connection: mockRedisConnection,
81
- });
82
- });
83
- it('powinno zalogować informację o tworzeniu tymczasowej kolejki', () => {
84
- // Given
85
- const commandName = 'TestCommand';
86
- const mockDate = new Date('2025-01-27T10:00:00.000Z');
87
- const originalDate = global.Date;
88
- const DateMock = jest.fn(() => mockDate);
89
- DateMock.now = jest.fn(() => mockDate.getTime());
90
- Object.setPrototypeOf(DateMock, originalDate);
91
- global.Date = DateMock;
92
- // When
93
- queueManager.createQueue(commandName);
94
- // Then
95
- expect(mockLogger.debug).toHaveBeenCalledWith('Tworzenie tymczasowej kolejki (bez cache)', {
96
- commandName,
97
- timestamp: mockDate.toISOString(),
98
- });
99
- // Cleanup
100
- global.Date = originalDate;
101
- });
102
- it('powinno zwrócić instancję Queue', () => {
103
- // Given
104
- const commandName = 'TestCommand';
105
- const mockQueueInstance = { name: commandName };
106
- bullmq_1.Queue.mockReturnValue(mockQueueInstance);
107
- // When
108
- const result = queueManager.createQueue(commandName);
109
- // Then
110
- expect(result).toBe(mockQueueInstance);
111
- });
112
- it('powinno tworzyć różne kolejki dla różnych nazw komend', () => {
113
- // Given
114
- const commandName1 = 'FirstCommand';
115
- const commandName2 = 'SecondCommand';
116
- // When
117
- queueManager.createQueue(commandName1);
118
- queueManager.createQueue(commandName2);
119
- // Then
120
- expect(bullmq_1.Queue).toHaveBeenCalledTimes(2);
121
- expect(bullmq_1.Queue).toHaveBeenNthCalledWith(1, `{${commandName1}}`, expect.any(Object));
122
- expect(bullmq_1.Queue).toHaveBeenNthCalledWith(2, `{${commandName2}}`, expect.any(Object));
123
- });
124
- it('powinno reużywać to samo Redis connection dla wielu kolejek', () => {
125
- // Given
126
- const commandName1 = 'FirstCommand';
127
- const commandName2 = 'SecondCommand';
128
- const commandName3 = 'ThirdCommand';
129
- // When
130
- queueManager.createQueue(commandName1);
131
- queueManager.createQueue(commandName2);
132
- queueManager.createQueue(commandName3);
133
- // Then
134
- expect(bullmq_1.Queue).toHaveBeenCalledTimes(3);
135
- // Wszystkie powinny używać tego samego Redis connection
136
- expect(bullmq_1.Queue).toHaveBeenNthCalledWith(1, `{${commandName1}}`, {
137
- connection: mockRedisConnection,
138
- });
139
- expect(bullmq_1.Queue).toHaveBeenNthCalledWith(2, `{${commandName2}}`, {
140
- connection: mockRedisConnection,
141
- });
142
- expect(bullmq_1.Queue).toHaveBeenNthCalledWith(3, `{${commandName3}}`, {
143
- connection: mockRedisConnection,
144
- });
145
- });
146
- it('powinno zawierać metadata w logach (commandName, timestamp)', () => {
147
- // Given
148
- const commandName = 'MetadataTestCommand';
149
- const mockDate = new Date('2025-01-27T15:30:45.123Z');
150
- const originalDate = global.Date;
151
- const DateMock = jest.fn(() => mockDate);
152
- DateMock.now = jest.fn(() => mockDate.getTime());
153
- Object.setPrototypeOf(DateMock, originalDate);
154
- global.Date = DateMock;
155
- // When
156
- queueManager.createQueue(commandName);
157
- // Then
158
- expect(mockLogger.debug).toHaveBeenCalledWith('Tworzenie tymczasowej kolejki (bez cache)', {
159
- commandName: commandName,
160
- timestamp: mockDate.toISOString(),
161
- });
162
- // Weryfikacja że wszystkie wymagane pola są obecne
163
- const logCall = mockLogger.debug.mock.calls[0];
164
- const metadata = logCall[1];
165
- expect(metadata).toHaveProperty('commandName');
166
- expect(metadata).toHaveProperty('timestamp');
167
- expect(metadata.commandName).toBe(`${commandName}`);
168
- expect(metadata.timestamp).toBe('2025-01-27T15:30:45.123Z');
169
- // Cleanup
170
- global.Date = originalDate;
171
- });
172
- });
173
- describe('getOrCreateQueue', () => {
174
- it('powinno utworzyć nową kolejkę przy pierwszym wywołaniu', () => {
175
- // Given
176
- const commandName = 'TestCommand';
177
- // When
178
- queueManager.getOrCreateQueue(commandName);
179
- // Then
180
- expect(bullmq_1.Queue).toHaveBeenCalledWith(`{${commandName}}`, expect.any(Object));
181
- expect(mockLogger.debug).toHaveBeenCalledWith('Tworzenie nowej kolejki', expect.objectContaining({ commandName }));
182
- });
183
- it('powinno zwrócić kolejkę z cache przy drugim wywołaniu', () => {
184
- // Given
185
- const commandName = 'CachedCommand';
186
- const mockQueueInstance = { name: commandName };
187
- bullmq_1.Queue.mockReturnValue(mockQueueInstance);
188
- // When
189
- const firstCall = queueManager.getOrCreateQueue(commandName);
190
- const secondCall = queueManager.getOrCreateQueue(commandName);
191
- // Then
192
- expect(firstCall).toBe(secondCall);
193
- expect(bullmq_1.Queue).toHaveBeenCalledTimes(1); // Tylko raz utworzone
194
- expect(mockLogger.debug).toHaveBeenCalledWith('Kolejka pobrana z cache', expect.objectContaining({ commandName }));
195
- });
196
- it('powinno używać cache dla wielu wywołań tej samej komendy', () => {
197
- // Given
198
- const commandName = 'ReusedCommand';
199
- const mockQueueInstance = { name: commandName };
200
- bullmq_1.Queue.mockReturnValue(mockQueueInstance);
201
- // When
202
- queueManager.getOrCreateQueue(commandName);
203
- queueManager.getOrCreateQueue(commandName);
204
- queueManager.getOrCreateQueue(commandName);
205
- // Then
206
- expect(bullmq_1.Queue).toHaveBeenCalledTimes(1);
207
- });
208
- it('powinno tworzyć osobne kolejki dla różnych komend', () => {
209
- // Given
210
- const command1 = 'FirstCommand';
211
- const command2 = 'SecondCommand';
212
- // When
213
- queueManager.getOrCreateQueue(command1);
214
- queueManager.getOrCreateQueue(command2);
215
- // Then
216
- expect(bullmq_1.Queue).toHaveBeenCalledTimes(2);
217
- expect(bullmq_1.Queue).toHaveBeenNthCalledWith(1, `{${command1}}`, expect.any(Object));
218
- expect(bullmq_1.Queue).toHaveBeenNthCalledWith(2, `{${command2}}`, expect.any(Object));
219
- });
220
- });
221
- describe('closeQueue', () => {
222
- it('powinno zamknąć kolejkę i usunąć z cache', () => __awaiter(void 0, void 0, void 0, function* () {
223
- // Given
224
- const commandName = 'TestCommand';
225
- const mockClose = jest.fn().mockResolvedValue(undefined);
226
- const mockQueueInstance = { close: mockClose };
227
- bullmq_1.Queue.mockReturnValue(mockQueueInstance);
228
- queueManager.getOrCreateQueue(commandName);
229
- // When
230
- yield queueManager.closeQueue(commandName);
231
- // Then
232
- expect(mockClose).toHaveBeenCalled();
233
- expect(mockLogger.debug).toHaveBeenCalledWith('Kolejka zamknięta i usunięta z cache', expect.objectContaining({ commandName }));
234
- }));
235
- it('powinno pominąć zamykanie jeśli kolejka nie istnieje w cache', () => __awaiter(void 0, void 0, void 0, function* () {
236
- // Given
237
- const commandName = 'NonExistentCommand';
238
- // When
239
- yield queueManager.closeQueue(commandName);
240
- // Then
241
- expect(mockLogger.debug).toHaveBeenCalledWith('Kolejka nie istnieje w cache - pomijam zamykanie', expect.objectContaining({ commandName }));
242
- }));
243
- it('powinno zalogować warning przy błędzie zamykania', () => __awaiter(void 0, void 0, void 0, function* () {
244
- // Given
245
- const commandName = 'ErrorCommand';
246
- const mockClose = jest.fn().mockRejectedValue(new Error('Close error'));
247
- const mockQueueInstance = { close: mockClose };
248
- bullmq_1.Queue.mockReturnValue(mockQueueInstance);
249
- queueManager.getOrCreateQueue(commandName);
250
- // When
251
- yield queueManager.closeQueue(commandName);
252
- // Then
253
- expect(mockLogger.warn).toHaveBeenCalledWith('Błąd podczas zamykania kolejki', expect.objectContaining({
254
- commandName,
255
- error: 'Close error',
256
- }));
257
- }));
258
- });
259
- describe('closeAllQueues', () => {
260
- it('powinno zamknąć wszystkie kolejki z cache', () => __awaiter(void 0, void 0, void 0, function* () {
261
- // Given
262
- const mockClose = jest.fn().mockResolvedValue(undefined);
263
- const mockQueueInstance = { close: mockClose };
264
- bullmq_1.Queue.mockReturnValue(mockQueueInstance);
265
- queueManager.getOrCreateQueue('Command1');
266
- queueManager.getOrCreateQueue('Command2');
267
- queueManager.getOrCreateQueue('Command3');
268
- // When
269
- yield queueManager.closeAllQueues();
270
- // Then
271
- expect(mockClose).toHaveBeenCalledTimes(3);
272
- expect(mockLogger.debug).toHaveBeenCalledWith('Zamykanie wszystkich kolejek z cache', expect.objectContaining({ count: 3 }));
273
- }));
274
- it('powinno wyczyścić cache po zamknięciu', () => __awaiter(void 0, void 0, void 0, function* () {
275
- // Given
276
- const mockClose = jest.fn().mockResolvedValue(undefined);
277
- const mockQueueInstance = { close: mockClose };
278
- bullmq_1.Queue.mockReturnValue(mockQueueInstance);
279
- queueManager.getOrCreateQueue('Command1');
280
- queueManager.getOrCreateQueue('Command2');
281
- // When
282
- yield queueManager.closeAllQueues();
283
- const stats = queueManager.getCacheStats();
284
- // Then
285
- expect(stats.cachedQueuesCount).toBe(0);
286
- expect(stats.queueNames).toEqual([]);
287
- }));
288
- it('powinno zalogować warning dla błędów zamykania', () => __awaiter(void 0, void 0, void 0, function* () {
289
- // Given
290
- const mockCloseError = jest.fn().mockRejectedValue(new Error('Close error'));
291
- const mockQueueError = { close: mockCloseError };
292
- bullmq_1.Queue.mockReturnValue(mockQueueError);
293
- queueManager.getOrCreateQueue('ErrorCommand');
294
- // When
295
- yield queueManager.closeAllQueues();
296
- // Then
297
- expect(mockLogger.warn).toHaveBeenCalledWith('Błąd podczas zamykania kolejki', expect.objectContaining({
298
- commandName: 'ErrorCommand',
299
- error: 'Close error',
300
- }));
301
- }));
302
- });
303
- describe('getCacheStats', () => {
304
- it('powinno zwrócić statystyki pustego cache', () => {
305
- // When
306
- const stats = queueManager.getCacheStats();
307
- // Then
308
- expect(stats.cachedQueuesCount).toBe(0);
309
- expect(stats.queueNames).toEqual([]);
310
- });
311
- it('powinno zwrócić statystyki z danymi kolejek', () => {
312
- // Given
313
- queueManager.getOrCreateQueue('Command1');
314
- queueManager.getOrCreateQueue('Command2');
315
- queueManager.getOrCreateQueue('Command3');
316
- // When
317
- const stats = queueManager.getCacheStats();
318
- // Then
319
- expect(stats.cachedQueuesCount).toBe(3);
320
- expect(stats.queueNames).toContain('Command1');
321
- expect(stats.queueNames).toContain('Command2');
322
- expect(stats.queueNames).toContain('Command3');
323
- });
324
- });
325
- describe('queueExists', () => {
326
- it('powinno zwrócić true gdy kolejka istnieje w Redis', () => __awaiter(void 0, void 0, void 0, function* () {
327
- // Given
328
- const queueName = 'ExistingQueue';
329
- mockRedisConnection.exists = jest.fn().mockResolvedValue(1);
330
- // When
331
- const result = yield queueManager.queueExists(queueName);
332
- // Then
333
- expect(result).toBe(true);
334
- expect(mockRedisConnection.exists).toHaveBeenCalledWith(`bull:{${queueName}}:meta`);
335
- }));
336
- it('powinno zwrócić false gdy kolejka nie istnieje w Redis', () => __awaiter(void 0, void 0, void 0, function* () {
337
- // Given
338
- const queueName = 'NonExistingQueue';
339
- mockRedisConnection.exists = jest.fn().mockResolvedValue(0);
340
- // When
341
- const result = yield queueManager.queueExists(queueName);
342
- // Then
343
- expect(result).toBe(false);
344
- expect(mockRedisConnection.exists).toHaveBeenCalledWith(`bull:{${queueName}}:meta`);
345
- }));
346
- it('powinno sprawdzać klucz meta kolejki BullMQ', () => __awaiter(void 0, void 0, void 0, function* () {
347
- // Given
348
- const queueName = 'TestQueue';
349
- mockRedisConnection.exists = jest.fn().mockResolvedValue(1);
350
- // When
351
- yield queueManager.queueExists(queueName);
352
- // Then
353
- // Sprawdzamy dokładny format klucza BullMQ
354
- expect(mockRedisConnection.exists).toHaveBeenCalledWith('bull:{TestQueue}:meta');
355
- }));
356
- it('powinno zwrócić false gdy Redis zwróci błąd', () => __awaiter(void 0, void 0, void 0, function* () {
357
- // Given
358
- const queueName = 'ErrorQueue';
359
- mockRedisConnection.exists = jest.fn().mockRejectedValue(new Error('Redis error'));
360
- // When
361
- const result = yield queueManager.queueExists(queueName);
362
- // Then
363
- expect(result).toBe(false);
364
- expect(mockLogger.warn).toHaveBeenCalledWith('Błąd podczas sprawdzania istnienia kolejki', expect.objectContaining({
365
- queueName,
366
- error: 'Redis error',
367
- }));
368
- }));
369
- });
370
- });
371
- //# sourceMappingURL=queue-manager.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue-manager.spec.js","sourceRoot":"","sources":["../../../src/command-bus/queue/queue-manager.spec.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Moduł RPC (Request-Response Pattern)
3
- * Eksportuje RpcCoordinator do zarządzania wywołaniami RPC
4
- * Eksportuje PayloadCompressionService do kompresji payloadów
5
- * Eksportuje RpcJobCancellationService do zarządzania anulowaniem jobów RPC
6
- */
7
- export { default as RpcCoordinator } from './rpc-coordinator';
8
- export { default as PayloadCompressionService } from './payload-compression.service';
9
- export { default as RpcJobCancellationService } from './rpc-job-cancellation.service';
10
- export type { CompressionResult } from './payload-compression.service';
11
- export type { RemoveJobCallback } from './rpc-job-cancellation.service';
@@ -1,19 +0,0 @@
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.RpcJobCancellationService = exports.PayloadCompressionService = exports.RpcCoordinator = void 0;
7
- /**
8
- * Moduł RPC (Request-Response Pattern)
9
- * Eksportuje RpcCoordinator do zarządzania wywołaniami RPC
10
- * Eksportuje PayloadCompressionService do kompresji payloadów
11
- * Eksportuje RpcJobCancellationService do zarządzania anulowaniem jobów RPC
12
- */
13
- var rpc_coordinator_1 = require("./rpc-coordinator");
14
- Object.defineProperty(exports, "RpcCoordinator", { enumerable: true, get: function () { return __importDefault(rpc_coordinator_1).default; } });
15
- var payload_compression_service_1 = require("./payload-compression.service");
16
- Object.defineProperty(exports, "PayloadCompressionService", { enumerable: true, get: function () { return __importDefault(payload_compression_service_1).default; } });
17
- var rpc_job_cancellation_service_1 = require("./rpc-job-cancellation.service");
18
- Object.defineProperty(exports, "RpcJobCancellationService", { enumerable: true, get: function () { return __importDefault(rpc_job_cancellation_service_1).default; } });
19
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/command-bus/rpc/index.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;GAKG;AACH,qDAA8D;AAArD,kIAAA,OAAO,OAAkB;AAClC,6EAAqF;AAA5E,yJAAA,OAAO,OAA6B;AAC7C,+EAAsF;AAA7E,0JAAA,OAAO,OAA6B"}
@@ -1,50 +0,0 @@
1
- import type { ILogger } from '../../shared/types';
2
- import type Command from '../command';
3
- import type { CompressibleCommand } from '../types';
4
- /**
5
- * Wynik kompresji payloadu
6
- */
7
- export interface CompressionResult {
8
- data: string;
9
- compressed: boolean;
10
- }
11
- /**
12
- * Serwis kompresji payloadów RPC
13
- * Automatycznie kompresuje payloady większe niż threshold za pomocą gzip (async)
14
- * Używa async gzip aby nie blokować event loop Node.js
15
- */
16
- export default class PayloadCompressionService {
17
- private readonly threshold;
18
- private readonly logger;
19
- constructor(threshold: number, logger: ILogger);
20
- /**
21
- * Kompresuje payload jeśli przekracza threshold (async - nie blokuje event loop)
22
- * @param payload - Dane do kompresji
23
- * @returns Promise z obiektem zawierającym data (JSON lub base64 gzip) i flagą compressed
24
- */
25
- compress(payload: unknown): Promise<CompressionResult>;
26
- /**
27
- * Dekompresuje payload na podstawie flagi compressed (async - nie blokuje event loop)
28
- * @param data - Dane do dekompresji (JSON string lub base64 gzip)
29
- * @param compressed - Czy dane są skompresowane
30
- * @returns Promise ze zdeserializowanym obiektem
31
- * @throws Error jeśli dekompresja lub parsowanie się nie powiedzie
32
- */
33
- decompress(data: string, compressed: boolean): Promise<unknown>;
34
- /**
35
- * Kompresuje Command obiekt jeśli przekracza threshold
36
- * Zachowuje metadane Command (__name, __id, __time) i kompresuje __payload
37
- *
38
- * @param command - Command do kompresji
39
- * @returns Promise z CompressibleCommand (może być skompresowany lub nie)
40
- */
41
- compressCommand<T>(command: Command<T>): Promise<CompressibleCommand<T>>;
42
- /**
43
- * Dekompresuje Command obiekt na podstawie flagi __compressed
44
- *
45
- * @param command - CompressibleCommand do dekompresji
46
- * @returns Promise ze zdekompresowanym Command
47
- * @throws Error jeśli dekompresja się nie powiedzie lub brakuje danych
48
- */
49
- decompressCommand<T>(command: CompressibleCommand<T>): Promise<Command<T>>;
50
- }