pp-command-bus 1.4.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 (195) hide show
  1. package/README.md +402 -1113
  2. package/dist/command-bus/command-bus.spec.js +144 -370
  3. package/dist/command-bus/command-bus.spec.js.map +1 -1
  4. package/dist/command-bus/command.d.ts +23 -5
  5. package/dist/command-bus/command.js +20 -34
  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 +49 -14
  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 +9 -80
  78. package/dist/examples/rpc-throughput.demo.js +24 -22
  79. package/dist/examples/rpc-throughput.demo.js.map +1 -1
  80. package/dist/examples/rpc.demo.js +47 -53
  81. package/dist/examples/rpc.demo.js.map +1 -1
  82. package/dist/index.d.ts +8 -5
  83. package/dist/index.js +6 -4
  84. package/dist/index.js.map +1 -1
  85. package/dist/pp-command-bus-2.0.0.tgz +0 -0
  86. package/dist/shared/redis/connection-pool.d.ts +54 -0
  87. package/dist/shared/redis/connection-pool.js +117 -0
  88. package/dist/shared/redis/connection-pool.js.map +1 -0
  89. package/dist/shared/redis/connection-pool.spec.js +114 -0
  90. package/dist/shared/redis/connection-pool.spec.js.map +1 -0
  91. package/dist/shared/redis/index.d.ts +5 -3
  92. package/dist/shared/redis/index.js +6 -4
  93. package/dist/shared/redis/index.js.map +1 -1
  94. package/dist/shared/redis/rpc-connection-pool.d.ts +61 -0
  95. package/dist/shared/redis/rpc-connection-pool.js +154 -0
  96. package/dist/shared/redis/rpc-connection-pool.js.map +1 -0
  97. package/dist/shared/redis/rpc-connection-pool.spec.d.ts +1 -0
  98. package/dist/shared/redis/rpc-connection-pool.spec.js +173 -0
  99. package/dist/shared/redis/rpc-connection-pool.spec.js.map +1 -0
  100. package/dist/shared/types.d.ts +0 -4
  101. package/dist/shared/utils/error-utils.d.ts +8 -0
  102. package/dist/shared/utils/error-utils.js +14 -0
  103. package/dist/shared/utils/error-utils.js.map +1 -0
  104. package/package.json +12 -12
  105. package/dist/command-bus/config/auto-config-optimizer.d.ts +0 -35
  106. package/dist/command-bus/config/auto-config-optimizer.js +0 -52
  107. package/dist/command-bus/config/auto-config-optimizer.js.map +0 -1
  108. package/dist/command-bus/config/auto-config-optimizer.spec.js +0 -42
  109. package/dist/command-bus/config/auto-config-optimizer.spec.js.map +0 -1
  110. package/dist/command-bus/job/index.d.ts +0 -6
  111. package/dist/command-bus/job/index.js +0 -15
  112. package/dist/command-bus/job/index.js.map +0 -1
  113. package/dist/command-bus/job/job-options-builder.d.ts +0 -21
  114. package/dist/command-bus/job/job-options-builder.js +0 -58
  115. package/dist/command-bus/job/job-options-builder.js.map +0 -1
  116. package/dist/command-bus/job/job-options-builder.spec.js +0 -156
  117. package/dist/command-bus/job/job-options-builder.spec.js.map +0 -1
  118. package/dist/command-bus/job/job-processor.d.ts +0 -39
  119. package/dist/command-bus/job/job-processor.js +0 -203
  120. package/dist/command-bus/job/job-processor.js.map +0 -1
  121. package/dist/command-bus/job/job-processor.spec.js +0 -437
  122. package/dist/command-bus/job/job-processor.spec.js.map +0 -1
  123. package/dist/command-bus/queue/index.d.ts +0 -5
  124. package/dist/command-bus/queue/index.js +0 -13
  125. package/dist/command-bus/queue/index.js.map +0 -1
  126. package/dist/command-bus/queue/queue-manager.d.ts +0 -56
  127. package/dist/command-bus/queue/queue-manager.js +0 -163
  128. package/dist/command-bus/queue/queue-manager.js.map +0 -1
  129. package/dist/command-bus/queue/queue-manager.spec.js +0 -371
  130. package/dist/command-bus/queue/queue-manager.spec.js.map +0 -1
  131. package/dist/command-bus/rpc/index.d.ts +0 -11
  132. package/dist/command-bus/rpc/index.js +0 -19
  133. package/dist/command-bus/rpc/index.js.map +0 -1
  134. package/dist/command-bus/rpc/payload-compression.service.d.ts +0 -51
  135. package/dist/command-bus/rpc/payload-compression.service.js +0 -218
  136. package/dist/command-bus/rpc/payload-compression.service.js.map +0 -1
  137. package/dist/command-bus/rpc/payload-compression.service.spec.js +0 -379
  138. package/dist/command-bus/rpc/payload-compression.service.spec.js.map +0 -1
  139. package/dist/command-bus/rpc/rpc-coordinator.d.ts +0 -96
  140. package/dist/command-bus/rpc/rpc-coordinator.js +0 -500
  141. package/dist/command-bus/rpc/rpc-coordinator.js.map +0 -1
  142. package/dist/command-bus/rpc/rpc-coordinator.spec.js +0 -622
  143. package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +0 -1
  144. package/dist/command-bus/rpc/rpc-job-cancellation.service.d.ts +0 -82
  145. package/dist/command-bus/rpc/rpc-job-cancellation.service.js +0 -180
  146. package/dist/command-bus/rpc/rpc-job-cancellation.service.js.map +0 -1
  147. package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js +0 -286
  148. package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js.map +0 -1
  149. package/dist/command-bus/worker/index.d.ts +0 -10
  150. package/dist/command-bus/worker/index.js +0 -19
  151. package/dist/command-bus/worker/index.js.map +0 -1
  152. package/dist/command-bus/worker/worker-benchmark.d.ts +0 -71
  153. package/dist/command-bus/worker/worker-benchmark.js +0 -203
  154. package/dist/command-bus/worker/worker-benchmark.js.map +0 -1
  155. package/dist/command-bus/worker/worker-benchmark.spec.js +0 -310
  156. package/dist/command-bus/worker/worker-benchmark.spec.js.map +0 -1
  157. package/dist/command-bus/worker/worker-metrics-collector.d.ts +0 -98
  158. package/dist/command-bus/worker/worker-metrics-collector.js +0 -242
  159. package/dist/command-bus/worker/worker-metrics-collector.js.map +0 -1
  160. package/dist/command-bus/worker/worker-orchestrator.d.ts +0 -70
  161. package/dist/command-bus/worker/worker-orchestrator.js +0 -339
  162. package/dist/command-bus/worker/worker-orchestrator.js.map +0 -1
  163. package/dist/command-bus/worker/worker-orchestrator.spec.js +0 -712
  164. package/dist/command-bus/worker/worker-orchestrator.spec.js.map +0 -1
  165. package/dist/examples/auto-config.demo.d.ts +0 -9
  166. package/dist/examples/auto-config.demo.js +0 -106
  167. package/dist/examples/auto-config.demo.js.map +0 -1
  168. package/dist/examples/rpc-compression.demo.d.ts +0 -5
  169. package/dist/examples/rpc-compression.demo.js +0 -363
  170. package/dist/examples/rpc-compression.demo.js.map +0 -1
  171. package/dist/examples/rpc-resilience.demo.d.ts +0 -11
  172. package/dist/examples/rpc-resilience.demo.js +0 -235
  173. package/dist/examples/rpc-resilience.demo.js.map +0 -1
  174. package/dist/pp-command-bus-1.4.0.tgz +0 -0
  175. package/dist/shared/config/base-config.d.ts +0 -54
  176. package/dist/shared/config/base-config.js +0 -114
  177. package/dist/shared/config/base-config.js.map +0 -1
  178. package/dist/shared/config/base-config.spec.js +0 -204
  179. package/dist/shared/config/base-config.spec.js.map +0 -1
  180. package/dist/shared/config/index.d.ts +0 -1
  181. package/dist/shared/config/index.js +0 -9
  182. package/dist/shared/config/index.js.map +0 -1
  183. package/dist/shared/redis/redis-connection-factory.d.ts +0 -66
  184. package/dist/shared/redis/redis-connection-factory.js +0 -113
  185. package/dist/shared/redis/redis-connection-factory.js.map +0 -1
  186. /package/dist/command-bus/{config/auto-config-optimizer.spec.d.ts → serialization/msgpack-serializer.spec.d.ts} +0 -0
  187. /package/dist/command-bus/{job/job-options-builder.spec.d.ts → transport/consumer-loop.spec.d.ts} +0 -0
  188. /package/dist/command-bus/{job/job-processor.spec.d.ts → transport/message-processor.spec.d.ts} +0 -0
  189. /package/dist/command-bus/{queue/queue-manager.spec.d.ts → transport/pending-recovery.spec.d.ts} +0 -0
  190. /package/dist/command-bus/{rpc/payload-compression.service.spec.d.ts → transport/redis-codec.spec.d.ts} +0 -0
  191. /package/dist/command-bus/{rpc/rpc-coordinator.spec.d.ts → transport/redis-streams-transport.spec.d.ts} +0 -0
  192. /package/dist/command-bus/{rpc/rpc-job-cancellation.service.spec.d.ts → transport/rpc-handler.spec.d.ts} +0 -0
  193. /package/dist/command-bus/{worker/worker-benchmark.spec.d.ts → transport/stream-consumer.spec.d.ts} +0 -0
  194. /package/dist/command-bus/{worker/worker-orchestrator.spec.d.ts → transport/stream-producer.spec.d.ts} +0 -0
  195. /package/dist/shared/{config/base-config.spec.d.ts → redis/connection-pool.spec.d.ts} +0 -0
@@ -1,437 +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 job_processor_1 = __importDefault(require("./job-processor"));
16
- const command_1 = __importDefault(require("../command"));
17
- // Przykładowa komenda testowa
18
- class TestCommand extends command_1.default {
19
- constructor(data) {
20
- super();
21
- this.data = data;
22
- }
23
- }
24
- describe('JobProcessor', () => {
25
- let jobProcessor;
26
- let mockCommandHandlers;
27
- let mockRedisConnection;
28
- let mockLogger;
29
- let mockJobOptionsBuilder;
30
- let mockCompressionService;
31
- let mockCommandLogger;
32
- let mockCancellationService;
33
- beforeEach(() => {
34
- jest.clearAllMocks();
35
- mockLogger = {
36
- log: jest.fn(),
37
- error: jest.fn(),
38
- warn: jest.fn(),
39
- debug: jest.fn(),
40
- };
41
- mockRedisConnection = {
42
- publish: jest.fn().mockResolvedValue(1), // Redis publish zwraca liczbę subscribers
43
- };
44
- mockJobOptionsBuilder = {
45
- buildRpcReplyOptions: jest.fn().mockReturnValue({}),
46
- };
47
- mockCompressionService = {
48
- compress: jest.fn().mockImplementation((payload) => Promise.resolve({
49
- data: JSON.stringify(payload),
50
- compressed: false,
51
- })),
52
- decompress: jest.fn().mockResolvedValue({}),
53
- };
54
- mockCommandLogger = {
55
- logCommand: jest.fn().mockResolvedValue(undefined),
56
- };
57
- mockCancellationService = {
58
- markAsCancelled: jest.fn().mockResolvedValue(undefined),
59
- isCancelled: jest.fn().mockResolvedValue(false),
60
- clearCancellation: jest.fn().mockResolvedValue(undefined),
61
- tryRemoveJob: jest.fn().mockResolvedValue(false),
62
- };
63
- mockCommandHandlers = {};
64
- jobProcessor = new job_processor_1.default(mockCommandHandlers, mockRedisConnection, mockLogger, mockJobOptionsBuilder, mockCompressionService, mockCommandLogger, mockCancellationService);
65
- });
66
- describe('process - standardowy job', () => {
67
- it('powinno przetworzyć komendę i wywołać handler', () => __awaiter(void 0, void 0, void 0, function* () {
68
- // Given
69
- const command = new TestCommand('test data');
70
- const commandName = 'TestCommand';
71
- const mockHandler = jest.fn().mockResolvedValue({ success: true });
72
- mockCommandHandlers[commandName] = mockHandler;
73
- const job = {
74
- id: 'job-123',
75
- data: command,
76
- attemptsMade: 0,
77
- opts: { attempts: 1 },
78
- };
79
- // When
80
- const result = yield jobProcessor.process(job, commandName);
81
- // Then
82
- expect(result).toEqual({ success: true });
83
- expect(mockHandler).toHaveBeenCalledWith(command);
84
- expect(mockLogger.debug).toHaveBeenCalledWith('Rozpoczynam przetwarzanie komendy', expect.objectContaining({
85
- commandName,
86
- commandId: command.__id,
87
- jobId: 'job-123',
88
- }));
89
- expect(mockLogger.log).toHaveBeenCalledWith('Handler komendy wykonany pomyślnie', expect.objectContaining({
90
- commandName,
91
- commandId: command.__id,
92
- jobId: 'job-123',
93
- }));
94
- }));
95
- it('powinno zalogować komendę gdy commandLogger jest dostępny', () => __awaiter(void 0, void 0, void 0, function* () {
96
- // Given
97
- const command = new TestCommand('test data');
98
- const commandName = 'TestCommand';
99
- const mockHandler = jest.fn().mockResolvedValue(undefined);
100
- mockCommandHandlers[commandName] = mockHandler;
101
- const job = {
102
- id: 'job-123',
103
- data: command,
104
- attemptsMade: 0,
105
- };
106
- // When
107
- yield jobProcessor.process(job, commandName);
108
- // Then
109
- expect(mockCommandLogger.logCommand).toHaveBeenCalledWith(command);
110
- }));
111
- it('powinno rzucić błąd gdy brak handlera dla komendy', () => __awaiter(void 0, void 0, void 0, function* () {
112
- // Given
113
- const command = new TestCommand('test data');
114
- const commandName = 'TestCommand';
115
- const job = {
116
- id: 'job-123',
117
- data: command,
118
- attemptsMade: 0,
119
- };
120
- // When & Then
121
- yield expect(jobProcessor.process(job, commandName)).rejects.toThrow(`Brak handlera dla komendy ${commandName}`);
122
- expect(mockLogger.error).toHaveBeenCalledWith('Brak handlera dla komendy', expect.objectContaining({
123
- commandName,
124
- commandId: command.__id,
125
- }));
126
- }));
127
- it('powinno obsłużyć błąd z handlera', () => __awaiter(void 0, void 0, void 0, function* () {
128
- // Given
129
- const command = new TestCommand('test data');
130
- const commandName = 'TestCommand';
131
- const handlerError = new Error('Handler error');
132
- const mockHandler = jest.fn().mockRejectedValue(handlerError);
133
- mockCommandHandlers[commandName] = mockHandler;
134
- const job = {
135
- id: 'job-123',
136
- data: command,
137
- attemptsMade: 1,
138
- opts: { attempts: 1 },
139
- };
140
- // When & Then
141
- yield expect(jobProcessor.process(job, commandName)).rejects.toThrow('Handler error');
142
- expect(mockLogger.error).toHaveBeenCalledWith('Błąd podczas wykonywania handlera komendy', expect.objectContaining({
143
- commandName,
144
- commandId: command.__id,
145
- error: 'Handler error',
146
- attempt: 2,
147
- }));
148
- }));
149
- });
150
- describe('process - RPC job', () => {
151
- it('powinno wysłać odpowiedź RPC po pomyślnym wykonaniu', () => __awaiter(void 0, void 0, void 0, function* () {
152
- // Given
153
- const command = new TestCommand('test data');
154
- const commandName = 'TestCommand';
155
- const result = { success: true, data: 42 };
156
- const mockHandler = jest.fn().mockResolvedValue(result);
157
- mockCommandHandlers[commandName] = mockHandler;
158
- const testProcessInstanceId = '00000000-0000-0000-0000-000000000000'; // UUID dla testów
159
- const rpcMetadata = {
160
- correlationId: 'correlation-123',
161
- responseChannel: `rpc:response:${testProcessInstanceId}:correlation-123`,
162
- timestamp: Date.now(),
163
- compressed: true,
164
- };
165
- const job = {
166
- id: 'job-123',
167
- data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
168
- attemptsMade: 0,
169
- };
170
- // When
171
- const actualResult = yield jobProcessor.process(job, commandName);
172
- // Then
173
- expect(actualResult).toEqual(result);
174
- expect(mockRedisConnection.publish).toHaveBeenCalledWith(`rpc:response:${testProcessInstanceId}:correlation-123`, JSON.stringify({
175
- data: JSON.stringify({
176
- correlationId: 'correlation-123',
177
- result,
178
- error: null,
179
- }),
180
- compressed: false,
181
- }));
182
- expect(mockLogger.debug).toHaveBeenCalledWith('Odpowiedź RPC opublikowana przez Pub/Sub', expect.objectContaining({
183
- commandName,
184
- correlationId: 'correlation-123',
185
- responseChannel: `rpc:response:${testProcessInstanceId}:correlation-123`,
186
- compressed: false,
187
- }));
188
- }));
189
- it('powinno wysłać błąd RPC gdy handler rzuci błąd', () => __awaiter(void 0, void 0, void 0, function* () {
190
- // Given
191
- const command = new TestCommand('test data');
192
- const commandName = 'TestCommand';
193
- const handlerError = new Error('Handler failed');
194
- const mockHandler = jest.fn().mockRejectedValue(handlerError);
195
- mockCommandHandlers[commandName] = mockHandler;
196
- const testProcessInstanceId = '00000000-0000-0000-0000-000000000000'; // UUID dla testów
197
- const rpcMetadata = {
198
- correlationId: 'correlation-123',
199
- responseChannel: `rpc:response:${testProcessInstanceId}:correlation-123`,
200
- timestamp: Date.now(),
201
- compressed: true,
202
- };
203
- const job = {
204
- id: 'job-123',
205
- data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
206
- attemptsMade: 0,
207
- };
208
- // When & Then
209
- yield expect(jobProcessor.process(job, commandName)).rejects.toThrow('Handler failed');
210
- expect(mockRedisConnection.publish).toHaveBeenCalledWith(`rpc:response:${testProcessInstanceId}:correlation-123`, JSON.stringify({
211
- data: JSON.stringify({
212
- correlationId: 'correlation-123',
213
- result: null,
214
- error: 'Handler failed',
215
- }),
216
- compressed: false,
217
- }));
218
- }));
219
- it('powinno zalogować błąd gdy nie udało się wysłać odpowiedzi RPC', () => __awaiter(void 0, void 0, void 0, function* () {
220
- // Given
221
- const command = new TestCommand('test data');
222
- const commandName = 'TestCommand';
223
- const result = { success: true };
224
- const mockHandler = jest.fn().mockResolvedValue(result);
225
- mockCommandHandlers[commandName] = mockHandler;
226
- const publishError = new Error('Redis publish error');
227
- mockRedisConnection.publish.mockRejectedValueOnce(publishError);
228
- const testProcessInstanceId = '00000000-0000-0000-0000-000000000000'; // UUID dla testów
229
- const rpcMetadata = {
230
- correlationId: 'correlation-123',
231
- responseChannel: `rpc:response:${testProcessInstanceId}:correlation-123`,
232
- timestamp: Date.now(),
233
- compressed: true,
234
- };
235
- const job = {
236
- id: 'job-123',
237
- data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
238
- attemptsMade: 0,
239
- };
240
- // When
241
- yield jobProcessor.process(job, commandName);
242
- // Then
243
- expect(mockLogger.error).toHaveBeenCalledWith('Nie udało się opublikować odpowiedzi RPC', expect.objectContaining({
244
- commandName,
245
- correlationId: 'correlation-123',
246
- error: 'Redis publish error',
247
- }));
248
- }));
249
- // Testy dla queueExists zostały usunięte - Pub/Sub nie wymaga sprawdzania istnienia kolejki
250
- });
251
- describe('rekonstrukcja dat', () => {
252
- it('powinno zrekonstruować daty w komendzie', () => __awaiter(void 0, void 0, void 0, function* () {
253
- // Given
254
- const commandName = 'TestCommand';
255
- const serializedDate = new Date('2025-01-01').toISOString();
256
- const mockHandler = jest.fn().mockResolvedValue(undefined);
257
- mockCommandHandlers[commandName] = mockHandler;
258
- // Spy na Command.reconstructDates
259
- const reconstructDatesSpy = jest.spyOn(command_1.default, 'reconstructDates');
260
- const job = {
261
- id: 'job-123',
262
- data: {
263
- __name: 'TestCommand',
264
- __id: 'cmd-123',
265
- __time: Date.now(),
266
- data: 'test',
267
- someDate: serializedDate,
268
- },
269
- attemptsMade: 0,
270
- };
271
- // When
272
- yield jobProcessor.process(job, commandName);
273
- // Then
274
- expect(reconstructDatesSpy).toHaveBeenCalledWith(job.data);
275
- // Sprawdź że handler został wywołany z przekonwertowanymi datami
276
- expect(mockHandler).toHaveBeenCalled();
277
- const calledCommand = mockHandler.mock.calls[0][0];
278
- expect(calledCommand.someDate).toBeInstanceOf(Date);
279
- reconstructDatesSpy.mockRestore();
280
- }));
281
- });
282
- describe('process bez commandLogger', () => {
283
- it('powinno działać gdy commandLogger nie jest dostępny', () => __awaiter(void 0, void 0, void 0, function* () {
284
- // Given
285
- const jobProcessorWithoutLogger = new job_processor_1.default(mockCommandHandlers, mockRedisConnection, mockLogger, mockJobOptionsBuilder, mockCompressionService);
286
- const command = new TestCommand('test data');
287
- const commandName = 'TestCommand';
288
- const mockHandler = jest.fn().mockResolvedValue({ success: true });
289
- mockCommandHandlers[commandName] = mockHandler;
290
- const job = {
291
- id: 'job-123',
292
- data: command,
293
- attemptsMade: 0,
294
- };
295
- // When
296
- const result = yield jobProcessorWithoutLogger.process(job, commandName);
297
- // Then
298
- expect(result).toEqual({ success: true });
299
- expect(mockHandler).toHaveBeenCalled();
300
- }));
301
- });
302
- describe('process - RPC cancellation', () => {
303
- it('powinno pominąć przetwarzanie gdy RPC zostało anulowane (timeout)', () => __awaiter(void 0, void 0, void 0, function* () {
304
- // Given
305
- const command = new TestCommand('test data');
306
- const commandName = 'TestCommand';
307
- const mockHandler = jest.fn().mockResolvedValue({ success: true });
308
- mockCommandHandlers[commandName] = mockHandler;
309
- const rpcMetadata = {
310
- correlationId: 'cancelled-correlation-123',
311
- responseChannel: 'rpc:response:test:cancelled-correlation-123',
312
- timestamp: Date.now(),
313
- compressed: false,
314
- };
315
- const job = {
316
- id: 'job-cancelled',
317
- data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
318
- attemptsMade: 0,
319
- };
320
- // Symuluj że RPC zostało anulowane
321
- mockCancellationService.isCancelled.mockResolvedValue(true);
322
- // When
323
- const result = yield jobProcessor.process(job, commandName);
324
- // Then
325
- expect(result).toBeUndefined(); // Brak wyniku - przetwarzanie pominięte
326
- expect(mockHandler).not.toHaveBeenCalled(); // Handler NIE wywołany
327
- expect(mockRedisConnection.publish).not.toHaveBeenCalled(); // Odpowiedź NIE wysłana
328
- expect(mockCancellationService.isCancelled).toHaveBeenCalledWith('cancelled-correlation-123');
329
- expect(mockCancellationService.clearCancellation).toHaveBeenCalledWith('cancelled-correlation-123');
330
- expect(mockLogger.warn).toHaveBeenCalledWith(expect.stringContaining('Pomijam przetwarzanie - RPC zostało anulowane'), expect.objectContaining({
331
- commandName,
332
- correlationId: 'cancelled-correlation-123',
333
- jobId: 'job-cancelled',
334
- }));
335
- }));
336
- it('powinno przetworzyć normalnie gdy RPC nie jest anulowane', () => __awaiter(void 0, void 0, void 0, function* () {
337
- // Given
338
- const command = new TestCommand('test data');
339
- const commandName = 'TestCommand';
340
- const result = { success: true };
341
- const mockHandler = jest.fn().mockResolvedValue(result);
342
- mockCommandHandlers[commandName] = mockHandler;
343
- const rpcMetadata = {
344
- correlationId: 'active-correlation-456',
345
- responseChannel: 'rpc:response:test:active-correlation-456',
346
- timestamp: Date.now(),
347
- compressed: false,
348
- };
349
- const job = {
350
- id: 'job-active',
351
- data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
352
- attemptsMade: 0,
353
- };
354
- // Symuluj że RPC NIE zostało anulowane
355
- mockCancellationService.isCancelled.mockResolvedValue(false);
356
- // When
357
- const actualResult = yield jobProcessor.process(job, commandName);
358
- // Then
359
- expect(actualResult).toEqual(result);
360
- expect(mockHandler).toHaveBeenCalled(); // Handler wywołany
361
- expect(mockRedisConnection.publish).toHaveBeenCalled(); // Odpowiedź wysłana
362
- expect(mockCancellationService.isCancelled).toHaveBeenCalledWith('active-correlation-456');
363
- expect(mockCancellationService.clearCancellation).not.toHaveBeenCalled(); // NIE wywołane dla aktywnych
364
- }));
365
- it('powinno NIE sprawdzać cancellation dla jobów bez RPC metadata', () => __awaiter(void 0, void 0, void 0, function* () {
366
- // Given
367
- const command = new TestCommand('test data');
368
- const commandName = 'TestCommand';
369
- const mockHandler = jest.fn().mockResolvedValue({ success: true });
370
- mockCommandHandlers[commandName] = mockHandler;
371
- const job = {
372
- id: 'job-no-rpc',
373
- data: command, // Brak __rpcMetadata
374
- attemptsMade: 0,
375
- };
376
- // When
377
- yield jobProcessor.process(job, commandName);
378
- // Then
379
- expect(mockCancellationService.isCancelled).not.toHaveBeenCalled(); // NIE sprawdzano
380
- expect(mockHandler).toHaveBeenCalled(); // Handler wywołany normalnie
381
- }));
382
- it('powinno kontynuować przetwarzanie gdy cancellation service zwraca błąd (graceful degradation)', () => __awaiter(void 0, void 0, void 0, function* () {
383
- // Given
384
- const command = new TestCommand('test data');
385
- const commandName = 'TestCommand';
386
- const result = { success: true };
387
- const mockHandler = jest.fn().mockResolvedValue(result);
388
- mockCommandHandlers[commandName] = mockHandler;
389
- const rpcMetadata = {
390
- correlationId: 'error-correlation-789',
391
- responseChannel: 'rpc:response:test:error-correlation-789',
392
- timestamp: Date.now(),
393
- compressed: false,
394
- };
395
- const job = {
396
- id: 'job-error',
397
- data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
398
- attemptsMade: 0,
399
- };
400
- // Symuluj błąd Redis w cancellation service
401
- // (serwis zwraca false przy błędzie - graceful degradation)
402
- mockCancellationService.isCancelled.mockResolvedValue(false);
403
- // When
404
- const actualResult = yield jobProcessor.process(job, commandName);
405
- // Then - przetworzono normalnie (graceful degradation)
406
- expect(actualResult).toEqual(result);
407
- expect(mockHandler).toHaveBeenCalled();
408
- }));
409
- it('powinno działać bez cancellation service (backwards compatibility)', () => __awaiter(void 0, void 0, void 0, function* () {
410
- // Given
411
- const jobProcessorWithoutCancellation = new job_processor_1.default(mockCommandHandlers, mockRedisConnection, mockLogger, mockJobOptionsBuilder, mockCompressionService, mockCommandLogger);
412
- const command = new TestCommand('test data');
413
- const commandName = 'TestCommand';
414
- const result = { success: true };
415
- const mockHandler = jest.fn().mockResolvedValue(result);
416
- mockCommandHandlers[commandName] = mockHandler;
417
- const rpcMetadata = {
418
- correlationId: 'no-service-correlation',
419
- responseChannel: 'rpc:response:test:no-service-correlation',
420
- timestamp: Date.now(),
421
- compressed: false,
422
- };
423
- const job = {
424
- id: 'job-no-service',
425
- data: Object.assign(Object.assign({}, command), { __rpcMetadata: rpcMetadata }),
426
- attemptsMade: 0,
427
- };
428
- // When
429
- const actualResult = yield jobProcessorWithoutCancellation.process(job, commandName);
430
- // Then - przetworzono normalnie
431
- expect(actualResult).toEqual(result);
432
- expect(mockHandler).toHaveBeenCalled();
433
- expect(mockRedisConnection.publish).toHaveBeenCalled();
434
- }));
435
- });
436
- });
437
- //# sourceMappingURL=job-processor.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"job-processor.spec.js","sourceRoot":"","sources":["../../../src/command-bus/job/job-processor.spec.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Moduł zarządzania kolejkami BullMQ
3
- * Eksportuje QueueManager odpowiedzialny za lifecycle kolejek
4
- */
5
- export { default as QueueManager } from './queue-manager';
@@ -1,13 +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.QueueManager = void 0;
7
- /**
8
- * Moduł zarządzania kolejkami BullMQ
9
- * Eksportuje QueueManager odpowiedzialny za lifecycle kolejek
10
- */
11
- var queue_manager_1 = require("./queue-manager");
12
- Object.defineProperty(exports, "QueueManager", { enumerable: true, get: function () { return __importDefault(queue_manager_1).default; } });
13
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/command-bus/queue/index.ts"],"names":[],"mappings":";;;;;;AAAA;;;GAGG;AACH,iDAA0D;AAAjD,8HAAA,OAAO,OAAgB"}
@@ -1,56 +0,0 @@
1
- import { Queue } from 'bullmq';
2
- import type { Redis } from 'ioredis';
3
- import type { ILogger } from '../../shared/types';
4
- /**
5
- * Zarządza cyklem życia kolejek BullMQ i cache'em kolejek
6
- * Cache zapobiega tworzeniu wielu instancji Queue dla tej samej komendy
7
- */
8
- export default class QueueManager {
9
- private readonly redisConnection;
10
- private readonly logger;
11
- /**
12
- * Cache kolejek - Map<queueName, Queue>
13
- * Pozwala na reużycie tej samej instancji Queue dla danej komendy
14
- */
15
- private queueCache;
16
- constructor(redisConnection: Redis, logger: ILogger);
17
- /**
18
- * Pobiera lub tworzy kolejkę dla danego typu komendy
19
- * Używa cache dla optymalizacji pamięci - reużywa instancje Queue
20
- * @param commandName - Nazwa komendy
21
- * @param connection - Połączenie Redis (opcjonalne)
22
- * @returns Instancja Queue (z cache lub nowo utworzona)
23
- */
24
- getOrCreateQueue(commandName: string, connection?: Redis): Queue;
25
- /**
26
- * Tworzy kolejkę dla danego typu komendy (bez cache)
27
- * Używane dla tymczasowych kolejek (np. RPC reply queues)
28
- * @param commandName - Nazwa komendy
29
- * @param connection - Połączenie Redis (opcjonalne)
30
- */
31
- createQueue(commandName: string, connection?: Redis): Queue;
32
- /**
33
- * Sprawdza czy kolejka BullMQ istnieje w Redis
34
- * @param queueName - Nazwa kolejki do sprawdzenia
35
- * @returns true jeśli kolejka istnieje, false w przeciwnym razie
36
- */
37
- queueExists(queueName: string): Promise<boolean>;
38
- /**
39
- * Zamyka kolejkę i usuwa ją z cache
40
- * Używane do explicite zamykania kolejek dla optymalizacji pamięci
41
- * @param commandName - Nazwa komendy
42
- */
43
- closeQueue(commandName: string): Promise<void>;
44
- /**
45
- * Zamyka wszystkie kolejki w cache
46
- * Używane podczas shutdown CommandBus
47
- */
48
- closeAllQueues(): Promise<void>;
49
- /**
50
- * Zwraca statystyki cache kolejek (dla diagnostyki)
51
- */
52
- getCacheStats(): {
53
- cachedQueuesCount: number;
54
- queueNames: string[];
55
- };
56
- }