pp-command-bus 1.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 (105) hide show
  1. package/README.md +522 -0
  2. package/dist/command-bus/command-bus.spec.d.ts +1 -0
  3. package/dist/command-bus/command-bus.spec.js +398 -0
  4. package/dist/command-bus/command-bus.spec.js.map +1 -0
  5. package/dist/command-bus/command.d.ts +24 -0
  6. package/dist/command-bus/command.js +53 -0
  7. package/dist/command-bus/command.js.map +1 -0
  8. package/dist/command-bus/config/command-bus-config.d.ts +40 -0
  9. package/dist/command-bus/config/command-bus-config.js +59 -0
  10. package/dist/command-bus/config/command-bus-config.js.map +1 -0
  11. package/dist/command-bus/config/command-bus-config.spec.d.ts +1 -0
  12. package/dist/command-bus/config/command-bus-config.spec.js +162 -0
  13. package/dist/command-bus/config/command-bus-config.spec.js.map +1 -0
  14. package/dist/command-bus/config/index.d.ts +1 -0
  15. package/dist/command-bus/config/index.js +9 -0
  16. package/dist/command-bus/config/index.js.map +1 -0
  17. package/dist/command-bus/index.d.ts +79 -0
  18. package/dist/command-bus/index.js +169 -0
  19. package/dist/command-bus/index.js.map +1 -0
  20. package/dist/command-bus/job/index.d.ts +6 -0
  21. package/dist/command-bus/job/index.js +15 -0
  22. package/dist/command-bus/job/index.js.map +1 -0
  23. package/dist/command-bus/job/job-options-builder.d.ts +24 -0
  24. package/dist/command-bus/job/job-options-builder.js +68 -0
  25. package/dist/command-bus/job/job-options-builder.js.map +1 -0
  26. package/dist/command-bus/job/job-options-builder.spec.d.ts +1 -0
  27. package/dist/command-bus/job/job-options-builder.spec.js +163 -0
  28. package/dist/command-bus/job/job-options-builder.spec.js.map +1 -0
  29. package/dist/command-bus/job/job-processor.d.ts +33 -0
  30. package/dist/command-bus/job/job-processor.js +195 -0
  31. package/dist/command-bus/job/job-processor.js.map +1 -0
  32. package/dist/command-bus/job/job-processor.spec.d.ts +1 -0
  33. package/dist/command-bus/job/job-processor.spec.js +352 -0
  34. package/dist/command-bus/job/job-processor.spec.js.map +1 -0
  35. package/dist/command-bus/logging/command-logger.d.ts +21 -0
  36. package/dist/command-bus/logging/command-logger.js +79 -0
  37. package/dist/command-bus/logging/command-logger.js.map +1 -0
  38. package/dist/command-bus/logging/command-logger.spec.d.ts +1 -0
  39. package/dist/command-bus/logging/command-logger.spec.js +245 -0
  40. package/dist/command-bus/logging/command-logger.spec.js.map +1 -0
  41. package/dist/command-bus/logging/index.d.ts +5 -0
  42. package/dist/command-bus/logging/index.js +13 -0
  43. package/dist/command-bus/logging/index.js.map +1 -0
  44. package/dist/command-bus/queue/index.d.ts +5 -0
  45. package/dist/command-bus/queue/index.js +13 -0
  46. package/dist/command-bus/queue/index.js.map +1 -0
  47. package/dist/command-bus/queue/queue-manager.d.ts +24 -0
  48. package/dist/command-bus/queue/queue-manager.js +60 -0
  49. package/dist/command-bus/queue/queue-manager.js.map +1 -0
  50. package/dist/command-bus/queue/queue-manager.spec.d.ts +1 -0
  51. package/dist/command-bus/queue/queue-manager.spec.js +219 -0
  52. package/dist/command-bus/queue/queue-manager.spec.js.map +1 -0
  53. package/dist/command-bus/rpc/index.d.ts +5 -0
  54. package/dist/command-bus/rpc/index.js +13 -0
  55. package/dist/command-bus/rpc/index.js.map +1 -0
  56. package/dist/command-bus/rpc/rpc-coordinator.d.ts +45 -0
  57. package/dist/command-bus/rpc/rpc-coordinator.js +189 -0
  58. package/dist/command-bus/rpc/rpc-coordinator.js.map +1 -0
  59. package/dist/command-bus/rpc/rpc-coordinator.spec.d.ts +1 -0
  60. package/dist/command-bus/rpc/rpc-coordinator.spec.js +286 -0
  61. package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +1 -0
  62. package/dist/command-bus/types/index.d.ts +57 -0
  63. package/dist/command-bus/types/index.js +3 -0
  64. package/dist/command-bus/types/index.js.map +1 -0
  65. package/dist/command-bus/worker/index.d.ts +5 -0
  66. package/dist/command-bus/worker/index.js +13 -0
  67. package/dist/command-bus/worker/index.js.map +1 -0
  68. package/dist/command-bus/worker/worker-orchestrator.d.ts +46 -0
  69. package/dist/command-bus/worker/worker-orchestrator.js +160 -0
  70. package/dist/command-bus/worker/worker-orchestrator.js.map +1 -0
  71. package/dist/command-bus/worker/worker-orchestrator.spec.d.ts +1 -0
  72. package/dist/command-bus/worker/worker-orchestrator.spec.js +293 -0
  73. package/dist/command-bus/worker/worker-orchestrator.spec.js.map +1 -0
  74. package/dist/examples/rpc.demo.d.ts +2 -0
  75. package/dist/examples/rpc.demo.js +235 -0
  76. package/dist/examples/rpc.demo.js.map +1 -0
  77. package/dist/index.d.ts +11 -0
  78. package/dist/index.js +20 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/pp-command-bus-1.0.0.tgz +0 -0
  81. package/dist/shared/config/base-config.d.ts +43 -0
  82. package/dist/shared/config/base-config.js +100 -0
  83. package/dist/shared/config/base-config.js.map +1 -0
  84. package/dist/shared/config/base-config.spec.d.ts +1 -0
  85. package/dist/shared/config/base-config.spec.js +118 -0
  86. package/dist/shared/config/base-config.spec.js.map +1 -0
  87. package/dist/shared/config/index.d.ts +1 -0
  88. package/dist/shared/config/index.js +9 -0
  89. package/dist/shared/config/index.js.map +1 -0
  90. package/dist/shared/logging/index.d.ts +2 -0
  91. package/dist/shared/logging/index.js +8 -0
  92. package/dist/shared/logging/index.js.map +1 -0
  93. package/dist/shared/logging/log-level.d.ts +36 -0
  94. package/dist/shared/logging/log-level.js +53 -0
  95. package/dist/shared/logging/log-level.js.map +1 -0
  96. package/dist/shared/logging/logger.d.ts +42 -0
  97. package/dist/shared/logging/logger.js +63 -0
  98. package/dist/shared/logging/logger.js.map +1 -0
  99. package/dist/shared/logging/logger.spec.d.ts +1 -0
  100. package/dist/shared/logging/logger.spec.js +89 -0
  101. package/dist/shared/logging/logger.spec.js.map +1 -0
  102. package/dist/shared/types.d.ts +26 -0
  103. package/dist/shared/types.js +6 -0
  104. package/dist/shared/types.js.map +1 -0
  105. package/package.json +93 -0
@@ -0,0 +1,398 @@
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 bullmq_1 = require("bullmq");
16
+ const index_1 = __importDefault(require("./index"));
17
+ const command_bus_config_1 = __importDefault(require("./config/command-bus-config"));
18
+ const command_1 = __importDefault(require("./command"));
19
+ // Mock BullMQ
20
+ jest.mock('bullmq');
21
+ // Mock ioredis
22
+ jest.mock('ioredis', () => {
23
+ return {
24
+ Redis: jest.fn().mockImplementation(() => ({
25
+ quit: jest.fn().mockResolvedValue(undefined),
26
+ })),
27
+ };
28
+ });
29
+ // Przykładowa komenda testowa
30
+ class TestCommand extends command_1.default {
31
+ constructor(data) {
32
+ super();
33
+ this.data = data;
34
+ }
35
+ }
36
+ // Inna komenda do testowania
37
+ class AnotherTestCommand extends command_1.default {
38
+ constructor(value) {
39
+ super();
40
+ this.value = value;
41
+ }
42
+ }
43
+ // Komenda do testowania RPC
44
+ class CalculateCommand extends command_1.default {
45
+ constructor(a, b, operation) {
46
+ super();
47
+ this.a = a;
48
+ this.b = b;
49
+ this.operation = operation;
50
+ }
51
+ }
52
+ describe('CommandBus', () => {
53
+ let commandBus;
54
+ let config;
55
+ let mockQueue;
56
+ let mockWorker;
57
+ beforeEach(() => {
58
+ // Reset wszystkich mocków
59
+ jest.clearAllMocks();
60
+ // Konfiguracja testowa
61
+ config = new command_bus_config_1.default({
62
+ redisUrl: 'redis://localhost:6379',
63
+ concurrency: 5,
64
+ });
65
+ // Mock Queue
66
+ mockQueue = {
67
+ add: jest.fn().mockResolvedValue({ id: 'test-job-id' }),
68
+ close: jest.fn().mockResolvedValue(undefined),
69
+ obliterate: jest.fn().mockResolvedValue(undefined),
70
+ };
71
+ // Mock Worker
72
+ mockWorker = {
73
+ close: jest.fn().mockResolvedValue(undefined),
74
+ on: jest.fn().mockReturnThis(),
75
+ removeAllListeners: jest.fn().mockReturnThis(),
76
+ };
77
+ // Mock konstruktorów
78
+ bullmq_1.Queue.mockImplementation(() => mockQueue);
79
+ bullmq_1.Worker.mockImplementation(() => mockWorker);
80
+ commandBus = new index_1.default(config);
81
+ });
82
+ afterEach(() => __awaiter(void 0, void 0, void 0, function* () {
83
+ // Dodaj timeout aby uniknąć unhandled rejections podczas close()
84
+ try {
85
+ yield commandBus.close();
86
+ }
87
+ catch (error) {
88
+ // Ignoruj błędy związane z zamykaniem podczas testów RPC
89
+ if (!(error instanceof Error) || !error.message.includes('CommandBus is closing')) {
90
+ throw error;
91
+ }
92
+ }
93
+ }));
94
+ describe('dispatch', () => {
95
+ it('powinno dodać komendę do kolejki', () => __awaiter(void 0, void 0, void 0, function* () {
96
+ // Given
97
+ const command = new TestCommand('test data');
98
+ // When
99
+ yield commandBus.dispatch(command);
100
+ // Then - sprawdź że Queue został utworzony z Redis connection
101
+ expect(bullmq_1.Queue).toHaveBeenCalledWith('{TestCommand}', expect.objectContaining({
102
+ connection: expect.any(Object),
103
+ }));
104
+ expect(mockQueue.add).toHaveBeenCalledWith('TestCommand', command, expect.objectContaining({
105
+ attempts: 3,
106
+ backoff: expect.objectContaining({
107
+ type: 'exponential',
108
+ delay: 2000,
109
+ }),
110
+ }));
111
+ }));
112
+ it('powinno używać tej samej kolejki dla tego samego typu komendy', () => __awaiter(void 0, void 0, void 0, function* () {
113
+ // Given
114
+ const command1 = new TestCommand('data 1');
115
+ const command2 = new TestCommand('data 2');
116
+ // When
117
+ yield commandBus.dispatch(command1);
118
+ yield commandBus.dispatch(command2);
119
+ // Then
120
+ // Obie komendy powinny zostać dodane do tej samej kolejki
121
+ expect(mockQueue.add).toHaveBeenCalledTimes(2);
122
+ expect(mockQueue.add).toHaveBeenNthCalledWith(1, expect.any(String), expect.objectContaining({
123
+ __name: 'TestCommand',
124
+ data: 'data 1',
125
+ }), expect.any(Object));
126
+ expect(mockQueue.add).toHaveBeenNthCalledWith(2, expect.any(String), expect.objectContaining({
127
+ __name: 'TestCommand',
128
+ data: 'data 2',
129
+ }), expect.any(Object));
130
+ }));
131
+ it('powinno tworzyć osobne kolejki dla różnych typów komend', () => __awaiter(void 0, void 0, void 0, function* () {
132
+ // Given
133
+ const testCommand = new TestCommand('test');
134
+ const anotherCommand = new AnotherTestCommand(42);
135
+ // When
136
+ yield commandBus.dispatch(testCommand);
137
+ yield commandBus.dispatch(anotherCommand);
138
+ // Then
139
+ // Obie komendy powinny zostać dodane (każda do swojej kolejki)
140
+ expect(mockQueue.add).toHaveBeenCalledTimes(2);
141
+ expect(mockQueue.add).toHaveBeenNthCalledWith(1, expect.any(String), expect.objectContaining({
142
+ __name: 'TestCommand',
143
+ data: 'test',
144
+ }), expect.any(Object));
145
+ expect(mockQueue.add).toHaveBeenNthCalledWith(2, expect.any(String), expect.objectContaining({
146
+ __name: 'AnotherTestCommand',
147
+ value: 42,
148
+ }), expect.any(Object));
149
+ }));
150
+ });
151
+ describe('handle', () => {
152
+ it('powinno utworzyć workera dla komendy', () => __awaiter(void 0, void 0, void 0, function* () {
153
+ // Given
154
+ const handler = jest.fn();
155
+ // When
156
+ yield commandBus.handle(TestCommand, handler);
157
+ // Then
158
+ expect(bullmq_1.Worker).toHaveBeenCalledWith('{TestCommand}', expect.any(Function), expect.objectContaining({
159
+ connection: expect.any(Object),
160
+ concurrency: 5,
161
+ }));
162
+ }));
163
+ it('powinno przetworzyć komendę przez handler', () => __awaiter(void 0, void 0, void 0, function* () {
164
+ // Given
165
+ const handler = jest.fn().mockResolvedValue(undefined);
166
+ const command = new TestCommand('test data');
167
+ let workerProcessor;
168
+ bullmq_1.Worker.mockImplementation((_name, processor) => {
169
+ workerProcessor = processor;
170
+ return mockWorker;
171
+ });
172
+ // When
173
+ yield commandBus.handle(TestCommand, handler);
174
+ // Symulacja przetworzenia zadania
175
+ yield workerProcessor({
176
+ data: command,
177
+ id: 'job-id',
178
+ name: 'TestCommand',
179
+ });
180
+ // Then
181
+ expect(handler).toHaveBeenCalledWith(command);
182
+ }));
183
+ it('powinno zezwalać tylko na jeden handler per komenda', () => {
184
+ // Given
185
+ const handler1 = jest.fn();
186
+ const handler2 = jest.fn();
187
+ // When
188
+ commandBus.handle(TestCommand, handler1);
189
+ // Then - drugi handler powinien rzucić błąd
190
+ expect(() => commandBus.handle(TestCommand, handler2)).toThrow('Handler dla komendy TestCommand już istnieje');
191
+ });
192
+ it('powinno obsłużyć błąd gdy brak handlera dla komendy', () => __awaiter(void 0, void 0, void 0, function* () {
193
+ // Given
194
+ const command = new TestCommand('test');
195
+ const handler = jest.fn().mockResolvedValue(undefined);
196
+ let workerProcessor;
197
+ bullmq_1.Worker.mockImplementation((_name, processor) => {
198
+ workerProcessor = processor;
199
+ return mockWorker;
200
+ });
201
+ // Zarejestruj handler normalnie
202
+ yield commandBus.handle(TestCommand, handler);
203
+ // Następnie usuń handler z internal commandHandlers aby symulować brak handlera
204
+ const commandHandlers = commandBus.commandHandlers;
205
+ delete commandHandlers['TestCommand'];
206
+ // When & Then
207
+ yield expect(workerProcessor({
208
+ data: command,
209
+ id: 'job-id',
210
+ name: 'TestCommand',
211
+ })).rejects.toThrow('Brak handlera dla komendy TestCommand');
212
+ }));
213
+ });
214
+ describe('close', () => {
215
+ it('powinno zamknąć wszystkie kolejki i workery', () => __awaiter(void 0, void 0, void 0, function* () {
216
+ // Given
217
+ const command = new TestCommand('test');
218
+ yield commandBus.dispatch(command);
219
+ yield commandBus.handle(TestCommand, jest.fn());
220
+ // When
221
+ yield commandBus.close();
222
+ // Then
223
+ // CommandBus nie zarządza cyklem życia kolejek - tylko zamyka workery
224
+ expect(mockWorker.close).toHaveBeenCalled();
225
+ }));
226
+ });
227
+ describe('połączenie z Redis', () => {
228
+ it('powinno obsłużyć błąd połączenia', () => __awaiter(void 0, void 0, void 0, function* () {
229
+ // Given
230
+ mockQueue.add.mockRejectedValueOnce(new Error('Connection failed'));
231
+ const command = new TestCommand('test');
232
+ // When & Then
233
+ yield expect(commandBus.dispatch(command)).rejects.toThrow('Connection failed');
234
+ }));
235
+ });
236
+ describe('obsługa błędów workera', () => {
237
+ it('powinno logować błędy przetwarzania', () => __awaiter(void 0, void 0, void 0, function* () {
238
+ // Given
239
+ const consoleSpy = jest.spyOn(console, 'error').mockImplementation();
240
+ const handler = jest.fn().mockRejectedValue(new Error('Processing failed'));
241
+ let workerProcessor = null;
242
+ bullmq_1.Worker.mockImplementation((_name, processor) => {
243
+ workerProcessor = processor;
244
+ return mockWorker;
245
+ });
246
+ // When
247
+ yield commandBus.handle(TestCommand, handler);
248
+ const command = new TestCommand('test');
249
+ expect(workerProcessor).not.toBeNull();
250
+ const processor = workerProcessor;
251
+ yield expect(processor({
252
+ data: command,
253
+ id: 'job-id',
254
+ name: 'TestCommand',
255
+ })).rejects.toThrow('Processing failed');
256
+ // Then
257
+ expect(handler).toHaveBeenCalledWith(command);
258
+ // Cleanup
259
+ consoleSpy.mockRestore();
260
+ }));
261
+ });
262
+ describe('RPC - Unikalne kolejki per wywołanie', () => {
263
+ it('RpcCoordinator nie powinien mieć globalnej reply queue', () => {
264
+ // Given & When
265
+ const commandBus1 = new index_1.default(config);
266
+ // Then - RpcCoordinator nie ma już globalnej kolejki/workera
267
+ const rpcCoordinator = commandBus1
268
+ .rpcCoordinator;
269
+ expect(rpcCoordinator.replyQueue).toBeUndefined();
270
+ expect(rpcCoordinator.replyWorker).toBeUndefined();
271
+ // CommandBus nie ma już replyQueueName
272
+ expect(commandBus1.replyQueueName).toBeUndefined();
273
+ // Cleanup
274
+ commandBus1.close().catch(() => undefined);
275
+ });
276
+ it('RPC call() powinno dodać __rpcMetadata z unikalną replyQueue per wywołanie', () => __awaiter(void 0, void 0, void 0, function* () {
277
+ // Given
278
+ const handler = jest.fn().mockResolvedValue(42);
279
+ const command = new CalculateCommand(5, 3, 'add');
280
+ mockQueue.add.mockResolvedValue({
281
+ id: 'test-job-id-123',
282
+ opts: {},
283
+ });
284
+ yield commandBus.handle(CalculateCommand, handler);
285
+ // When
286
+ const callPromise = commandBus.call(command, 100);
287
+ // Then - replyQueue zawiera correlationId (unikalny per wywołanie)
288
+ expect(mockQueue.add).toHaveBeenCalledWith('CalculateCommand', expect.objectContaining({
289
+ __rpcMetadata: expect.objectContaining({
290
+ correlationId: command.__id,
291
+ replyQueue: `rpc-reply-${command.__id}`, // Unikalna kolejka per wywołanie
292
+ timestamp: expect.any(Number),
293
+ }),
294
+ }), expect.any(Object));
295
+ // Cleanup - czekaj na timeout
296
+ callPromise.catch(() => undefined);
297
+ }));
298
+ });
299
+ describe('RPC - call()', () => {
300
+ beforeEach(() => {
301
+ // Mock job z ID dla RPC
302
+ mockQueue.add.mockResolvedValue({
303
+ id: 'test-job-id-123',
304
+ opts: {},
305
+ });
306
+ });
307
+ it('powinno obsłużyć timeout RPC', () => __awaiter(void 0, void 0, void 0, function* () {
308
+ // Given
309
+ const handler = jest.fn().mockResolvedValue(42);
310
+ const command = new CalculateCommand(5, 3, 'add');
311
+ yield commandBus.handle(CalculateCommand, handler);
312
+ // When & Then
313
+ yield expect(commandBus.call(command, 100)) // 100ms timeout
314
+ .rejects.toThrow('RPC timeout for command CalculateCommand');
315
+ }));
316
+ it('powinno mieć metodę call() zaimplementowaną', () => {
317
+ // Given
318
+ const command = new CalculateCommand(1, 2, 'add');
319
+ // When & Then - metoda call() powinna istnieć
320
+ expect(typeof commandBus.call).toBe('function');
321
+ // Test że metoda zwraca Promise (ale nie czekamy na wynik)
322
+ const result = commandBus.call(command, 100);
323
+ expect(result).toBeInstanceOf(Promise);
324
+ // Anuluj Promise żeby nie zaburzyć afterEach
325
+ result.catch(() => undefined); // Ignoruj timeout error
326
+ });
327
+ });
328
+ describe('logLevel filtering', () => {
329
+ it('powinno filtrować logi zgodnie z logLevel=error', () => __awaiter(void 0, void 0, void 0, function* () {
330
+ // Given - spy na prawdziwy console
331
+ const logSpy = jest.spyOn(console, 'log');
332
+ const warnSpy = jest.spyOn(console, 'warn');
333
+ const debugSpy = jest.spyOn(console, 'debug');
334
+ // Wyczyść poprzednie wywołania
335
+ logSpy.mockClear();
336
+ warnSpy.mockClear();
337
+ debugSpy.mockClear();
338
+ try {
339
+ // When - utwórz konfigurację z logLevel='error'
340
+ const errorLevelConfig = new command_bus_config_1.default({
341
+ redisUrl: 'redis://localhost:6379',
342
+ concurrency: 1,
343
+ logLevel: 'error',
344
+ });
345
+ const busWithErrorLevel = new index_1.default(errorLevelConfig);
346
+ // Then - log(), warn(), debug() NIE powinny być wywołane
347
+ expect(logSpy).not.toHaveBeenCalled();
348
+ expect(warnSpy).not.toHaveBeenCalled();
349
+ expect(debugSpy).not.toHaveBeenCalled();
350
+ // Cleanup
351
+ yield busWithErrorLevel.close();
352
+ }
353
+ finally {
354
+ // Przywróć spy
355
+ logSpy.mockRestore();
356
+ warnSpy.mockRestore();
357
+ debugSpy.mockRestore();
358
+ }
359
+ }));
360
+ it('powinno logować wszystkie poziomy przy logLevel=debug', () => __awaiter(void 0, void 0, void 0, function* () {
361
+ // Given - spy na prawdziwy console.debug (konstruktor używa logger.debug)
362
+ const debugSpy = jest.spyOn(console, 'debug');
363
+ // Wyczyść poprzednie wywołania
364
+ debugSpy.mockClear();
365
+ try {
366
+ // When - utwórz konfigurację z logLevel='debug'
367
+ const debugLevelConfig = new command_bus_config_1.default({
368
+ redisUrl: 'redis://localhost:6379',
369
+ concurrency: 1,
370
+ logLevel: 'debug',
371
+ });
372
+ const busWithDebugLevel = new index_1.default(debugLevelConfig);
373
+ // Then - debug() powinno być wywołane (konstruktor loguje debug)
374
+ expect(debugSpy).toHaveBeenCalled();
375
+ // Cleanup
376
+ yield busWithDebugLevel.close();
377
+ }
378
+ finally {
379
+ // Przywróć spy
380
+ debugSpy.mockRestore();
381
+ }
382
+ }));
383
+ it('powinno używać Logger wrapper z BaseConfig', () => {
384
+ // Given - konfiguracja domyślna
385
+ const testConfig = new command_bus_config_1.default({
386
+ redisUrl: 'redis://localhost:6379',
387
+ logLevel: 'error',
388
+ });
389
+ // When - utwórz CommandBus
390
+ const testBus = new index_1.default(testConfig);
391
+ // Then - logger powinien pochodzić z konfiguracji (nie console)
392
+ expect(testBus['logger']).toBe(testConfig.logger);
393
+ // Cleanup - bez await żeby test był szybki
394
+ testBus.close().catch(() => undefined);
395
+ });
396
+ });
397
+ });
398
+ //# sourceMappingURL=command-bus.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-bus.spec.js","sourceRoot":"","sources":["../../src/command-bus/command-bus.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Bazowa klasa dla komend
3
+ * Komendy są przetwarzane przez dokładnie jeden handler (1:1)
4
+ */
5
+ export default abstract class Command {
6
+ /**
7
+ * Nazwa komendy (nazwa klasy)
8
+ */
9
+ readonly __name: string;
10
+ /**
11
+ * Unikalny identyfikator komendy
12
+ */
13
+ readonly __id: string;
14
+ /**
15
+ * Czas utworzenia komendy (timestamp)
16
+ */
17
+ readonly __time: number;
18
+ constructor();
19
+ /**
20
+ * Przywraca obiekty Date z serializowanych danych
21
+ * Reconstructs Date objects from serialized data
22
+ */
23
+ static reconstructDates(obj: unknown): unknown;
24
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const crypto_1 = require("crypto");
4
+ /**
5
+ * Bazowa klasa dla komend
6
+ * Komendy są przetwarzane przez dokładnie jeden handler (1:1)
7
+ */
8
+ class Command {
9
+ constructor() {
10
+ /**
11
+ * Czas utworzenia komendy (timestamp)
12
+ */
13
+ this.__time = Date.now();
14
+ this.__name = this.constructor.name;
15
+ this.__id = (0, crypto_1.randomUUID)();
16
+ }
17
+ /**
18
+ * Przywraca obiekty Date z serializowanych danych
19
+ * Reconstructs Date objects from serialized data
20
+ */
21
+ static reconstructDates(obj) {
22
+ if (obj === null || obj === undefined) {
23
+ return obj;
24
+ }
25
+ if (typeof obj === 'string') {
26
+ // Sprawdź czy string to data ISO
27
+ // Check if string is an ISO date
28
+ const isoDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/;
29
+ if (isoDateRegex.test(obj)) {
30
+ const date = new Date(obj);
31
+ if (!isNaN(date.getTime())) {
32
+ return date;
33
+ }
34
+ }
35
+ return obj;
36
+ }
37
+ if (Array.isArray(obj)) {
38
+ return obj.map((item) => Command.reconstructDates(item));
39
+ }
40
+ if (typeof obj === 'object') {
41
+ const result = {};
42
+ for (const key in obj) {
43
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
44
+ result[key] = Command.reconstructDates(obj[key]);
45
+ }
46
+ }
47
+ return result;
48
+ }
49
+ return obj;
50
+ }
51
+ }
52
+ exports.default = Command;
53
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/command-bus/command.ts"],"names":[],"mappings":";;AAAA,mCAAoC;AAEpC;;;GAGG;AACH,MAA8B,OAAO;IAgBnC;QALA;;WAEG;QACa,WAAM,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;QAG1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,gBAAgB,CAAC,GAAY;QACzC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,iCAAiC;YACjC,iCAAiC;YACjC,MAAM,YAAY,GAAG,mDAAmD,CAAC;YACzE,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC3B,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBACtB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;oBACnD,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA3DD,0BA2DC"}
@@ -0,0 +1,40 @@
1
+ import BaseConfig from '../../shared/config/base-config';
2
+ /**
3
+ * Konfiguracja dla CommandBus (BullMQ)
4
+ */
5
+ export default class CommandBusConfig extends BaseConfig {
6
+ /**
7
+ * Liczba równoległych workerów do przetwarzania komend
8
+ */
9
+ concurrency: number;
10
+ /**
11
+ * Concurrency dla Reply Worker (obsługa odpowiedzi RPC)
12
+ * Domyślnie 50 - wystarczająco wysokie dla szybkiej obsługi, ale nie prowadzi do eksplozji pamięci
13
+ */
14
+ replyWorkerConcurrency: number;
15
+ /**
16
+ * Maksymalna liczba prób przetworzenia zadania
17
+ */
18
+ maxAttempts: number;
19
+ /**
20
+ * Opóźnienie między próbami (ms)
21
+ */
22
+ backoffDelay: number;
23
+ /**
24
+ * Tryb przetwarzania zadań w kolejce (FIFO - First In First Out, LIFO - Last In First Out)
25
+ */
26
+ queueMode: 'fifo' | 'lifo';
27
+ /**
28
+ * Ścieżka do katalogu logów komend
29
+ */
30
+ commandLog: string;
31
+ /**
32
+ * TTL dla Reply Queue jobs w milisekundach (domyślnie: 60000 = 1 minuta)
33
+ */
34
+ rpcReplyTtl: number;
35
+ constructor(params?: Partial<CommandBusConfig>);
36
+ /**
37
+ * Waliduje konfigurację specyficzną dla CommandBus
38
+ */
39
+ private validateCommandBusConfig;
40
+ }
@@ -0,0 +1,59 @@
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
+ const base_config_1 = __importDefault(require("../../shared/config/base-config"));
7
+ /**
8
+ * Konfiguracja dla CommandBus (BullMQ)
9
+ */
10
+ class CommandBusConfig extends base_config_1.default {
11
+ constructor(params) {
12
+ var _a, _b, _c, _d, _e, _f;
13
+ super(params);
14
+ // Wczytaj konfigurację z nowym prefiksem COMMAND_BUS_ z fallbackiem do starych nazw
15
+ this.concurrency = this.parseIntWithDefault((_a = process.env.COMMAND_BUS_CONCURRENCY) !== null && _a !== void 0 ? _a : process.env.EVENT_BUS_CONCURRENCY, 1);
16
+ this.replyWorkerConcurrency = this.parseIntWithDefault(process.env.COMMAND_BUS_REPLY_WORKER_CONCURRENCY, 50);
17
+ this.maxAttempts = this.parseIntWithDefault((_b = process.env.COMMAND_BUS_MAX_ATTEMPTS) !== null && _b !== void 0 ? _b : process.env.EVENT_BUS_MAX_ATTEMPTS, 3);
18
+ this.backoffDelay = this.parseIntWithDefault((_c = process.env.COMMAND_BUS_BACKOFF_DELAY) !== null && _c !== void 0 ? _c : process.env.EVENT_BUS_BACKOFF_DELAY, 2000);
19
+ const queueModeValue = (_d = process.env.COMMAND_BUS_QUEUE_MODE) !== null && _d !== void 0 ? _d : process.env.EVENT_BUS_QUEUE_MODE;
20
+ this.queueMode = queueModeValue === 'lifo' ? 'lifo' : 'fifo';
21
+ this.commandLog = (_f = (_e = process.env.COMMAND_BUS_LOG) !== null && _e !== void 0 ? _e : process.env.EVENT_BUS_LOG) !== null && _f !== void 0 ? _f : '';
22
+ this.rpcReplyTtl = this.parseIntWithDefault(process.env.COMMAND_BUS_RPC_REPLY_TTL, 60000);
23
+ // Nadpisz wartościami z parametrów konstruktora
24
+ if (params) {
25
+ Object.keys(params).forEach((key) => {
26
+ if (key !== 'redisUrl' && key !== 'logger') {
27
+ this[key] = params[key];
28
+ }
29
+ });
30
+ }
31
+ // Dodatkowa walidacja specyficzna dla CommandBus
32
+ this.validateCommandBusConfig();
33
+ }
34
+ /**
35
+ * Waliduje konfigurację specyficzną dla CommandBus
36
+ */
37
+ validateCommandBusConfig() {
38
+ if (this.concurrency < 1) {
39
+ throw new Error('concurrency must be at least 1');
40
+ }
41
+ if (this.replyWorkerConcurrency < 1) {
42
+ throw new Error('replyWorkerConcurrency must be at least 1');
43
+ }
44
+ if (this.replyWorkerConcurrency > 1000) {
45
+ throw new Error('replyWorkerConcurrency should not exceed 1000 (memory safety)');
46
+ }
47
+ if (this.maxAttempts < 1) {
48
+ throw new Error('maxAttempts must be at least 1');
49
+ }
50
+ if (this.backoffDelay < 100) {
51
+ throw new Error('backoffDelay must be at least 100ms');
52
+ }
53
+ if (this.queueMode !== 'fifo' && this.queueMode !== 'lifo') {
54
+ throw new Error("queueMode must be either 'fifo' or 'lifo'");
55
+ }
56
+ }
57
+ }
58
+ exports.default = CommandBusConfig;
59
+ //# sourceMappingURL=command-bus-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-bus-config.js","sourceRoot":"","sources":["../../../src/command-bus/config/command-bus-config.ts"],"names":[],"mappings":"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"}