pp-command-bus 1.5.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) 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 +80 -21
  8. package/dist/command-bus/config/command-bus-config.js +104 -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 +41 -50
  13. package/dist/command-bus/index.js +143 -127
  14. package/dist/command-bus/index.js.map +1 -1
  15. package/dist/command-bus/interceptors/index.d.ts +5 -0
  16. package/dist/command-bus/interceptors/index.js +22 -0
  17. package/dist/command-bus/interceptors/index.js.map +1 -0
  18. package/dist/command-bus/interceptors/interceptor.interface.d.ts +35 -0
  19. package/dist/command-bus/interceptors/interceptor.interface.js +3 -0
  20. package/dist/command-bus/interceptors/interceptor.interface.js.map +1 -0
  21. package/dist/command-bus/interceptors/performance-interceptor.d.ts +24 -0
  22. package/dist/command-bus/interceptors/performance-interceptor.js +86 -0
  23. package/dist/command-bus/interceptors/performance-interceptor.js.map +1 -0
  24. package/dist/command-bus/interceptors/performance-interceptor.spec.js +124 -0
  25. package/dist/command-bus/interceptors/performance-interceptor.spec.js.map +1 -0
  26. package/dist/command-bus/logging/command-logger.d.ts +2 -0
  27. package/dist/command-bus/logging/command-logger.js +7 -0
  28. package/dist/command-bus/logging/command-logger.js.map +1 -1
  29. package/dist/command-bus/logging/command-logger.spec.js +36 -0
  30. package/dist/command-bus/logging/command-logger.spec.js.map +1 -1
  31. package/dist/command-bus/serialization/index.d.ts +6 -0
  32. package/dist/command-bus/serialization/index.js +9 -0
  33. package/dist/command-bus/serialization/index.js.map +1 -0
  34. package/dist/command-bus/serialization/msgpack-serializer.d.ts +26 -0
  35. package/dist/command-bus/serialization/msgpack-serializer.js +70 -0
  36. package/dist/command-bus/serialization/msgpack-serializer.js.map +1 -0
  37. package/dist/command-bus/serialization/msgpack-serializer.spec.js +223 -0
  38. package/dist/command-bus/serialization/msgpack-serializer.spec.js.map +1 -0
  39. package/dist/command-bus/serialization/serializer.interface.d.ts +21 -0
  40. package/dist/command-bus/serialization/serializer.interface.js +3 -0
  41. package/dist/command-bus/serialization/serializer.interface.js.map +1 -0
  42. package/dist/command-bus/transport/consumer-loop.d.ts +45 -0
  43. package/dist/command-bus/transport/consumer-loop.js +90 -0
  44. package/dist/command-bus/transport/consumer-loop.js.map +1 -0
  45. package/dist/command-bus/transport/consumer-loop.spec.js +216 -0
  46. package/dist/command-bus/transport/consumer-loop.spec.js.map +1 -0
  47. package/dist/command-bus/transport/index.d.ts +21 -0
  48. package/dist/command-bus/transport/index.js +23 -0
  49. package/dist/command-bus/transport/index.js.map +1 -0
  50. package/dist/command-bus/transport/message-processor.d.ts +70 -0
  51. package/dist/command-bus/transport/message-processor.js +158 -0
  52. package/dist/command-bus/transport/message-processor.js.map +1 -0
  53. package/dist/command-bus/transport/message-processor.spec.js +185 -0
  54. package/dist/command-bus/transport/message-processor.spec.js.map +1 -0
  55. package/dist/command-bus/transport/pending-recovery.d.ts +54 -0
  56. package/dist/command-bus/transport/pending-recovery.js +139 -0
  57. package/dist/command-bus/transport/pending-recovery.js.map +1 -0
  58. package/dist/command-bus/transport/pending-recovery.spec.js +176 -0
  59. package/dist/command-bus/transport/pending-recovery.spec.js.map +1 -0
  60. package/dist/command-bus/transport/redis-codec.d.ts +24 -0
  61. package/dist/command-bus/transport/redis-codec.js +33 -0
  62. package/dist/command-bus/transport/redis-codec.js.map +1 -0
  63. package/dist/command-bus/transport/redis-codec.spec.js +53 -0
  64. package/dist/command-bus/transport/redis-codec.spec.js.map +1 -0
  65. package/dist/command-bus/transport/redis-streams-transport.d.ts +94 -0
  66. package/dist/command-bus/transport/redis-streams-transport.js +143 -0
  67. package/dist/command-bus/transport/redis-streams-transport.js.map +1 -0
  68. package/dist/command-bus/transport/redis-streams-transport.spec.js +420 -0
  69. package/dist/command-bus/transport/redis-streams-transport.spec.js.map +1 -0
  70. package/dist/command-bus/transport/rpc-handler.d.ts +39 -0
  71. package/dist/command-bus/transport/rpc-handler.js +87 -0
  72. package/dist/command-bus/transport/rpc-handler.js.map +1 -0
  73. package/dist/command-bus/transport/rpc-handler.spec.js +157 -0
  74. package/dist/command-bus/transport/rpc-handler.spec.js.map +1 -0
  75. package/dist/command-bus/transport/stream-consumer.d.ts +91 -0
  76. package/dist/command-bus/transport/stream-consumer.js +182 -0
  77. package/dist/command-bus/transport/stream-consumer.js.map +1 -0
  78. package/dist/command-bus/transport/stream-consumer.spec.js +284 -0
  79. package/dist/command-bus/transport/stream-consumer.spec.js.map +1 -0
  80. package/dist/command-bus/transport/stream-producer.d.ts +23 -0
  81. package/dist/command-bus/transport/stream-producer.js +70 -0
  82. package/dist/command-bus/transport/stream-producer.js.map +1 -0
  83. package/dist/command-bus/transport/stream-producer.spec.js +125 -0
  84. package/dist/command-bus/transport/stream-producer.spec.js.map +1 -0
  85. package/dist/command-bus/transport/transport.interface.d.ts +87 -0
  86. package/dist/command-bus/transport/transport.interface.js +3 -0
  87. package/dist/command-bus/transport/transport.interface.js.map +1 -0
  88. package/dist/command-bus/types/index.d.ts +0 -84
  89. package/dist/examples/rpc.demo.js +1 -1
  90. package/dist/examples/rpc.demo.js.map +1 -1
  91. package/dist/index.d.ts +8 -5
  92. package/dist/index.js +6 -4
  93. package/dist/index.js.map +1 -1
  94. package/dist/pp-command-bus-2.0.1.tgz +0 -0
  95. package/dist/shared/redis/connection-pool.d.ts +54 -0
  96. package/dist/shared/redis/connection-pool.js +123 -0
  97. package/dist/shared/redis/connection-pool.js.map +1 -0
  98. package/dist/shared/redis/connection-pool.spec.d.ts +1 -0
  99. package/dist/shared/redis/connection-pool.spec.js +114 -0
  100. package/dist/shared/redis/connection-pool.spec.js.map +1 -0
  101. package/dist/shared/redis/index.d.ts +5 -3
  102. package/dist/shared/redis/index.js +6 -4
  103. package/dist/shared/redis/index.js.map +1 -1
  104. package/dist/shared/redis/rpc-connection-pool.d.ts +61 -0
  105. package/dist/shared/redis/rpc-connection-pool.js +154 -0
  106. package/dist/shared/redis/rpc-connection-pool.js.map +1 -0
  107. package/dist/shared/redis/rpc-connection-pool.spec.d.ts +1 -0
  108. package/dist/shared/redis/rpc-connection-pool.spec.js +173 -0
  109. package/dist/shared/redis/rpc-connection-pool.spec.js.map +1 -0
  110. package/dist/shared/types.d.ts +0 -4
  111. package/dist/shared/utils/error-utils.d.ts +8 -0
  112. package/dist/shared/utils/error-utils.js +14 -0
  113. package/dist/shared/utils/error-utils.js.map +1 -0
  114. package/package.json +12 -12
  115. package/dist/command-bus/config/auto-config-optimizer.d.ts +0 -35
  116. package/dist/command-bus/config/auto-config-optimizer.js +0 -52
  117. package/dist/command-bus/config/auto-config-optimizer.js.map +0 -1
  118. package/dist/command-bus/config/auto-config-optimizer.spec.js +0 -42
  119. package/dist/command-bus/config/auto-config-optimizer.spec.js.map +0 -1
  120. package/dist/command-bus/job/index.d.ts +0 -6
  121. package/dist/command-bus/job/index.js +0 -15
  122. package/dist/command-bus/job/index.js.map +0 -1
  123. package/dist/command-bus/job/job-options-builder.d.ts +0 -21
  124. package/dist/command-bus/job/job-options-builder.js +0 -58
  125. package/dist/command-bus/job/job-options-builder.js.map +0 -1
  126. package/dist/command-bus/job/job-options-builder.spec.js +0 -156
  127. package/dist/command-bus/job/job-options-builder.spec.js.map +0 -1
  128. package/dist/command-bus/job/job-processor.d.ts +0 -39
  129. package/dist/command-bus/job/job-processor.js +0 -203
  130. package/dist/command-bus/job/job-processor.js.map +0 -1
  131. package/dist/command-bus/job/job-processor.spec.js +0 -436
  132. package/dist/command-bus/job/job-processor.spec.js.map +0 -1
  133. package/dist/command-bus/queue/index.d.ts +0 -5
  134. package/dist/command-bus/queue/index.js +0 -13
  135. package/dist/command-bus/queue/index.js.map +0 -1
  136. package/dist/command-bus/queue/queue-manager.d.ts +0 -56
  137. package/dist/command-bus/queue/queue-manager.js +0 -163
  138. package/dist/command-bus/queue/queue-manager.js.map +0 -1
  139. package/dist/command-bus/queue/queue-manager.spec.js +0 -371
  140. package/dist/command-bus/queue/queue-manager.spec.js.map +0 -1
  141. package/dist/command-bus/rpc/index.d.ts +0 -11
  142. package/dist/command-bus/rpc/index.js +0 -19
  143. package/dist/command-bus/rpc/index.js.map +0 -1
  144. package/dist/command-bus/rpc/payload-compression.service.d.ts +0 -50
  145. package/dist/command-bus/rpc/payload-compression.service.js +0 -215
  146. package/dist/command-bus/rpc/payload-compression.service.js.map +0 -1
  147. package/dist/command-bus/rpc/payload-compression.service.spec.js +0 -376
  148. package/dist/command-bus/rpc/payload-compression.service.spec.js.map +0 -1
  149. package/dist/command-bus/rpc/rpc-coordinator.d.ts +0 -96
  150. package/dist/command-bus/rpc/rpc-coordinator.js +0 -500
  151. package/dist/command-bus/rpc/rpc-coordinator.js.map +0 -1
  152. package/dist/command-bus/rpc/rpc-coordinator.spec.js +0 -621
  153. package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +0 -1
  154. package/dist/command-bus/rpc/rpc-job-cancellation.service.d.ts +0 -82
  155. package/dist/command-bus/rpc/rpc-job-cancellation.service.js +0 -180
  156. package/dist/command-bus/rpc/rpc-job-cancellation.service.js.map +0 -1
  157. package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js +0 -286
  158. package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js.map +0 -1
  159. package/dist/command-bus/worker/index.d.ts +0 -10
  160. package/dist/command-bus/worker/index.js +0 -19
  161. package/dist/command-bus/worker/index.js.map +0 -1
  162. package/dist/command-bus/worker/worker-benchmark.d.ts +0 -71
  163. package/dist/command-bus/worker/worker-benchmark.js +0 -202
  164. package/dist/command-bus/worker/worker-benchmark.js.map +0 -1
  165. package/dist/command-bus/worker/worker-benchmark.spec.js +0 -310
  166. package/dist/command-bus/worker/worker-benchmark.spec.js.map +0 -1
  167. package/dist/command-bus/worker/worker-metrics-collector.d.ts +0 -98
  168. package/dist/command-bus/worker/worker-metrics-collector.js +0 -242
  169. package/dist/command-bus/worker/worker-metrics-collector.js.map +0 -1
  170. package/dist/command-bus/worker/worker-orchestrator.d.ts +0 -70
  171. package/dist/command-bus/worker/worker-orchestrator.js +0 -339
  172. package/dist/command-bus/worker/worker-orchestrator.js.map +0 -1
  173. package/dist/command-bus/worker/worker-orchestrator.spec.js +0 -712
  174. package/dist/command-bus/worker/worker-orchestrator.spec.js.map +0 -1
  175. package/dist/examples/auto-config.demo.d.ts +0 -9
  176. package/dist/examples/auto-config.demo.js +0 -106
  177. package/dist/examples/auto-config.demo.js.map +0 -1
  178. package/dist/examples/rpc-compression.demo.d.ts +0 -5
  179. package/dist/examples/rpc-compression.demo.js +0 -358
  180. package/dist/examples/rpc-compression.demo.js.map +0 -1
  181. package/dist/examples/rpc-resilience.demo.d.ts +0 -15
  182. package/dist/examples/rpc-resilience.demo.js +0 -233
  183. package/dist/examples/rpc-resilience.demo.js.map +0 -1
  184. package/dist/pp-command-bus-1.5.0.tgz +0 -0
  185. package/dist/shared/config/base-config.d.ts +0 -54
  186. package/dist/shared/config/base-config.js +0 -114
  187. package/dist/shared/config/base-config.js.map +0 -1
  188. package/dist/shared/config/base-config.spec.js +0 -204
  189. package/dist/shared/config/base-config.spec.js.map +0 -1
  190. package/dist/shared/config/index.d.ts +0 -1
  191. package/dist/shared/config/index.js +0 -9
  192. package/dist/shared/config/index.js.map +0 -1
  193. package/dist/shared/redis/redis-connection-factory.d.ts +0 -66
  194. package/dist/shared/redis/redis-connection-factory.js +0 -113
  195. package/dist/shared/redis/redis-connection-factory.js.map +0 -1
  196. /package/dist/command-bus/{config/auto-config-optimizer.spec.d.ts → interceptors/performance-interceptor.spec.d.ts} +0 -0
  197. /package/dist/command-bus/{job/job-options-builder.spec.d.ts → serialization/msgpack-serializer.spec.d.ts} +0 -0
  198. /package/dist/command-bus/{job/job-processor.spec.d.ts → transport/consumer-loop.spec.d.ts} +0 -0
  199. /package/dist/command-bus/{queue/queue-manager.spec.d.ts → transport/message-processor.spec.d.ts} +0 -0
  200. /package/dist/command-bus/{rpc/payload-compression.service.spec.d.ts → transport/pending-recovery.spec.d.ts} +0 -0
  201. /package/dist/command-bus/{rpc/rpc-coordinator.spec.d.ts → transport/redis-codec.spec.d.ts} +0 -0
  202. /package/dist/command-bus/{rpc/rpc-job-cancellation.service.spec.d.ts → transport/redis-streams-transport.spec.d.ts} +0 -0
  203. /package/dist/command-bus/{worker/worker-benchmark.spec.d.ts → transport/rpc-handler.spec.d.ts} +0 -0
  204. /package/dist/command-bus/{worker/worker-orchestrator.spec.d.ts → transport/stream-consumer.spec.d.ts} +0 -0
  205. /package/dist/{shared/config/base-config.spec.d.ts → command-bus/transport/stream-producer.spec.d.ts} +0 -0
@@ -3,12 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const os_1 = require("os");
6
7
  const command_bus_config_1 = __importDefault(require("./command-bus-config"));
7
8
  const logger_1 = require("../../shared/logging/logger");
9
+ /** Default concurrency — 60 × availableParallelism() (I/O-bound workload) */
10
+ const DEFAULT_CONCURRENCY = 60 * (0, os_1.availableParallelism)();
8
11
  describe('CommandBusConfig', () => {
9
12
  const originalEnv = process.env;
10
13
  beforeEach(() => {
11
- // Reset zmiennych środowiskowych
12
14
  process.env = Object.assign({}, originalEnv);
13
15
  });
14
16
  afterEach(() => {
@@ -22,61 +24,40 @@ describe('CommandBusConfig', () => {
22
24
  expect(config.redisUrl).toBe('redis://localhost:6379');
23
25
  expect(config.logger).toBeInstanceOf(logger_1.Logger);
24
26
  expect(config.logLevel).toBe('log');
25
- // autoOptimize jest domyślnie true, więc concurrency będzie auto-optymalizowane
26
- expect(config.autoOptimize).toBe(true);
27
- expect(config.concurrency).toBeGreaterThan(1); // Auto-optymalizacja
28
- expect(config.maxAttempts).toBe(1);
29
- expect(config.backoffDelay).toBe(2000);
30
- expect(config.queueMode).toBe('fifo');
27
+ expect(config.redisRetryDelay).toBe(5000);
28
+ expect(config.redisMaxRetries).toBe(0);
29
+ expect(config.concurrency).toBe(DEFAULT_CONCURRENCY);
30
+ expect(config.maxAttempts).toBe(3);
31
31
  expect(config.commandLog).toBe('');
32
+ expect(config.poolSize).toBe(2 * (0, os_1.availableParallelism)());
33
+ expect(config.maxConcurrentRpc).toBe(50);
34
+ expect(config.batchSize).toBe(100);
35
+ expect(config.claimTimeout).toBe(30000);
36
+ expect(config.maxRetained).toBe(10000);
32
37
  });
33
- it('powinno wczytać konfigurację ze zmiennych środowiskowych z nowym prefiksem', () => {
38
+ it('powinno wczytać konfigurację ze zmiennych środowiskowych', () => {
34
39
  // Given
35
40
  process.env.REDIS_URL = 'redis://dragonfly:6380';
36
41
  process.env.COMMAND_BUS_CONCURRENCY = '10';
37
42
  process.env.COMMAND_BUS_MAX_ATTEMPTS = '5';
38
- process.env.COMMAND_BUS_BACKOFF_DELAY = '5000';
39
- process.env.COMMAND_BUS_QUEUE_MODE = 'lifo';
40
43
  process.env.COMMAND_BUS_LOG = '/var/log/commands';
44
+ process.env.COMMAND_BUS_POOL_SIZE = '8';
45
+ process.env.COMMAND_BUS_MAX_CONCURRENT_RPC = '100';
46
+ process.env.COMMAND_BUS_BATCH_SIZE = '25';
47
+ process.env.COMMAND_BUS_CLAIM_TIMEOUT = '60000';
48
+ process.env.COMMAND_BUS_MAX_RETAINED = '50000';
41
49
  // When
42
50
  const config = new command_bus_config_1.default();
43
51
  // Then
44
52
  expect(config.redisUrl).toBe('redis://dragonfly:6380');
45
53
  expect(config.concurrency).toBe(10);
46
54
  expect(config.maxAttempts).toBe(5);
47
- expect(config.backoffDelay).toBe(5000);
48
- expect(config.queueMode).toBe('lifo');
49
55
  expect(config.commandLog).toBe('/var/log/commands');
50
- });
51
- it('powinno zachować kompatybilność wsteczną ze starymi nazwami zmiennych', () => {
52
- // Given
53
- process.env.EVENT_BUS_CONCURRENCY = '8';
54
- process.env.EVENT_BUS_MAX_ATTEMPTS = '4';
55
- process.env.EVENT_BUS_BACKOFF_DELAY = '3000';
56
- process.env.EVENT_BUS_QUEUE_MODE = 'lifo';
57
- process.env.EVENT_BUS_LOG = '/old/log/path';
58
- // When
59
- const config = new command_bus_config_1.default();
60
- // Then
61
- expect(config.concurrency).toBe(8);
62
- expect(config.maxAttempts).toBe(4);
63
- expect(config.backoffDelay).toBe(3000);
64
- expect(config.queueMode).toBe('lifo');
65
- expect(config.commandLog).toBe('/old/log/path');
66
- });
67
- it('powinno preferować nowe nazwy zmiennych nad starymi', () => {
68
- // Given
69
- // Stare nazwy
70
- process.env.EVENT_BUS_CONCURRENCY = '8';
71
- process.env.EVENT_BUS_MAX_ATTEMPTS = '4';
72
- // Nowe nazwy (powinny mieć priorytet)
73
- process.env.COMMAND_BUS_CONCURRENCY = '15';
74
- process.env.COMMAND_BUS_MAX_ATTEMPTS = '7';
75
- // When
76
- const config = new command_bus_config_1.default();
77
- // Then
78
- expect(config.concurrency).toBe(15);
79
- expect(config.maxAttempts).toBe(7);
56
+ expect(config.poolSize).toBe(8);
57
+ expect(config.maxConcurrentRpc).toBe(100);
58
+ expect(config.batchSize).toBe(25);
59
+ expect(config.claimTimeout).toBe(60000);
60
+ expect(config.maxRetained).toBe(50000);
80
61
  });
81
62
  it('powinno nadpisać wartości przez parametry konstruktora', () => {
82
63
  // Given
@@ -92,96 +73,178 @@ describe('CommandBusConfig', () => {
92
73
  logger: customLogger,
93
74
  concurrency: 20,
94
75
  maxAttempts: 10,
95
- backoffDelay: 10000,
96
- queueMode: 'lifo',
97
76
  commandLog: '/custom/log/path',
77
+ poolSize: 4,
78
+ maxConcurrentRpc: 25,
79
+ batchSize: 50,
80
+ claimTimeout: 15000,
81
+ maxRetained: 5000,
98
82
  });
99
83
  // Then
100
84
  expect(config.redisUrl).toBe('redis://custom:6379');
101
85
  expect(config.logger).toBe(customLogger);
102
86
  expect(config.concurrency).toBe(20);
103
87
  expect(config.maxAttempts).toBe(10);
104
- expect(config.backoffDelay).toBe(10000);
105
- expect(config.queueMode).toBe('lifo');
106
88
  expect(config.commandLog).toBe('/custom/log/path');
89
+ expect(config.poolSize).toBe(4);
90
+ expect(config.maxConcurrentRpc).toBe(25);
91
+ expect(config.batchSize).toBe(50);
92
+ expect(config.claimTimeout).toBe(15000);
93
+ expect(config.maxRetained).toBe(5000);
107
94
  });
108
- it('powinno prawidłowo parsować liczby', () => {
95
+ it('powinno używać domyślnej wartości przy nieprawidłowym parsowaniu', () => {
109
96
  // Given
110
97
  process.env.COMMAND_BUS_CONCURRENCY = 'invalid';
111
98
  process.env.COMMAND_BUS_MAX_ATTEMPTS = 'not-a-number';
112
- process.env.COMMAND_BUS_BACKOFF_DELAY = '';
113
99
  // When
114
100
  const config = new command_bus_config_1.default();
115
- // Then - powinno użyć domyślnych wartości przy błędnym parsowaniu
116
- // Gdy zmienna środowiskowa jest ustawiona (nawet nieprawidłowo), uznajemy ją za ręczne ustawienie
117
- // więc nie uruchamiamy auto-optymalizacji i używamy fallback wartości z parseIntWithDefault
118
- expect(config.concurrency).toBe(1); // Fallback value z parseIntWithDefault
119
- expect(config.maxAttempts).toBe(1);
120
- expect(config.backoffDelay).toBe(2000);
101
+ // Then parseIntWithDefault zwraca fallback
102
+ expect(config.concurrency).toBe(DEFAULT_CONCURRENCY);
103
+ expect(config.maxAttempts).toBe(3);
121
104
  });
122
- it('powinno prawidłowo parsować queue mode', () => {
105
+ it('powinno preferować params nad env', () => {
123
106
  // Given
124
- process.env.COMMAND_BUS_QUEUE_MODE = 'invalid-mode';
107
+ process.env.COMMAND_BUS_CONCURRENCY = '50';
125
108
  // When
126
- const config = new command_bus_config_1.default();
127
- // Then - powinno użyć domyślnej wartości przy nieprawidłowym trybie
128
- expect(config.queueMode).toBe('fifo');
109
+ const config = new command_bus_config_1.default({ concurrency: 200 });
110
+ // Then
111
+ expect(config.concurrency).toBe(200);
129
112
  });
130
- });
131
- describe('auto-optymalizacja', () => {
132
- it('powinno używać auto-optymalizacji domyślnie', () => {
113
+ it('powinno nadpisać logLevel przez parametry i utworzyć odpowiedni logger', () => {
133
114
  // When
134
- const config = new command_bus_config_1.default();
115
+ const config = new command_bus_config_1.default({ logLevel: 'error' });
135
116
  // Then
136
- expect(config.autoOptimize).toBe(true);
137
- expect(config.concurrency).toBeGreaterThan(1); // Auto-optymalizowane
117
+ expect(config.logLevel).toBe('error');
118
+ expect(config.logger).toBeInstanceOf(logger_1.Logger);
138
119
  });
139
- it('powinno wyłączyć auto-optymalizację gdy COMMAND_BUS_AUTO_OPTIMIZE=false', () => {
120
+ });
121
+ describe('getRedisOptions', () => {
122
+ it('powinno zwrócić opcje połączenia Redis z URL', () => {
140
123
  // Given
141
- process.env.COMMAND_BUS_AUTO_OPTIMIZE = 'false';
124
+ const config = new command_bus_config_1.default({
125
+ redisUrl: 'redis://user:pass@dragonfly.example.com:6380/0',
126
+ });
142
127
  // When
143
- const config = new command_bus_config_1.default();
128
+ const options = config.getRedisOptions();
144
129
  // Then
145
- expect(config.autoOptimize).toBe(false);
146
- expect(config.concurrency).toBe(1); // Domyślna wartość bez auto-optymalizacji
130
+ expect(options.host).toBe('dragonfly.example.com');
131
+ expect(options.port).toBe(6380);
132
+ expect(options.username).toBe('user');
133
+ expect(options.password).toBe('pass');
134
+ expect(options.db).toBe(0);
135
+ expect(options.retryStrategy).toBeInstanceOf(Function);
147
136
  });
148
- it('powinno używać ręcznego concurrency z env zamiast auto-optymalizacji', () => {
137
+ it('powinno obsłużyć URL bez autoryzacji', () => {
149
138
  // Given
150
- process.env.COMMAND_BUS_CONCURRENCY = '42';
139
+ const config = new command_bus_config_1.default({
140
+ redisUrl: 'redis://localhost:6379',
141
+ });
151
142
  // When
152
- const config = new command_bus_config_1.default();
143
+ const options = config.getRedisOptions();
153
144
  // Then
154
- expect(config.autoOptimize).toBe(true); // Auto-optymalizacja włączona
155
- expect(config.concurrency).toBe(42); // Ale ręczna wartość ma priorytet
145
+ expect(options.host).toBe('localhost');
146
+ expect(options.port).toBe(6379);
147
+ expect(options.username).toBeUndefined();
148
+ expect(options.password).toBeUndefined();
149
+ expect(options.retryStrategy).toBeInstanceOf(Function);
156
150
  });
157
- it('powinno używać ręcznego concurrency z params zamiast auto-optymalizacji', () => {
151
+ it('powinno obsłużyć URL z bazą danych', () => {
152
+ // Given
153
+ const config = new command_bus_config_1.default({
154
+ redisUrl: 'redis://localhost:6379/2',
155
+ });
158
156
  // When
159
- const config = new command_bus_config_1.default({ concurrency: 123 });
157
+ const options = config.getRedisOptions();
160
158
  // Then
161
- expect(config.autoOptimize).toBe(true); // Auto-optymalizacja włączona
162
- expect(config.concurrency).toBe(123); // Ale ręczna wartość ma priorytet
159
+ expect(options.host).toBe('localhost');
160
+ expect(options.port).toBe(6379);
161
+ expect(options.db).toBe(2);
162
+ expect(options.retryStrategy).toBeInstanceOf(Function);
163
163
  });
164
- it('powinno preferować params nad env dla ręcznego concurrency', () => {
164
+ });
165
+ describe('retryStrategy', () => {
166
+ it('powinno używać domyślnego opóźnienia 5000ms', () => {
165
167
  // Given
166
- process.env.COMMAND_BUS_CONCURRENCY = '50';
168
+ const config = new command_bus_config_1.default();
169
+ const options = config.getRedisOptions();
170
+ const retryStrategy = options.retryStrategy;
167
171
  // When
168
- const config = new command_bus_config_1.default({ concurrency: 200 });
172
+ const delay = retryStrategy(1);
169
173
  // Then
170
- expect(config.concurrency).toBe(200); // params ma priorytet
174
+ expect(delay).toBe(5000);
171
175
  });
172
- it('powinno używać autoOptimize z params', () => {
176
+ it('powinno używać konfigurowalnego opóźnienia z env', () => {
177
+ // Given
178
+ process.env.REDIS_RETRY_DELAY = '10000';
179
+ const config = new command_bus_config_1.default();
180
+ const options = config.getRedisOptions();
181
+ const retryStrategy = options.retryStrategy;
173
182
  // When
174
- const config = new command_bus_config_1.default({ autoOptimize: false });
183
+ const delay = retryStrategy(1);
175
184
  // Then
176
- expect(config.autoOptimize).toBe(false);
177
- expect(config.concurrency).toBe(1); // Domyślna wartość
185
+ expect(delay).toBe(10000);
178
186
  });
179
- it('powinno używać auto-optymalizacji gdy params.concurrency jest undefined', () => {
187
+ it('powinno używać konfigurowalnego opóźnienia z parametrów', () => {
188
+ // Given
189
+ const config = new command_bus_config_1.default({
190
+ redisRetryDelay: 3000,
191
+ });
192
+ const options = config.getRedisOptions();
193
+ const retryStrategy = options.retryStrategy;
180
194
  // When
181
- const config = new command_bus_config_1.default({ autoOptimize: true });
195
+ const delay = retryStrategy(1);
182
196
  // Then
183
- expect(config.autoOptimize).toBe(true);
184
- expect(config.concurrency).toBeGreaterThan(1); // Auto-optymalizowane
197
+ expect(delay).toBe(3000);
198
+ });
199
+ it('powinno zwracać stałe opóźnienie niezależnie od liczby prób', () => {
200
+ // Given
201
+ const config = new command_bus_config_1.default({
202
+ redisRetryDelay: 5000,
203
+ });
204
+ const options = config.getRedisOptions();
205
+ const retryStrategy = options.retryStrategy;
206
+ // When & Then
207
+ expect(retryStrategy(1)).toBe(5000);
208
+ expect(retryStrategy(5)).toBe(5000);
209
+ expect(retryStrategy(10)).toBe(5000);
210
+ expect(retryStrategy(100)).toBe(5000);
211
+ });
212
+ it('powinno zatrzymać reconnect po przekroczeniu max retries', () => {
213
+ // Given
214
+ const config = new command_bus_config_1.default({
215
+ redisRetryDelay: 5000,
216
+ redisMaxRetries: 3,
217
+ });
218
+ const options = config.getRedisOptions();
219
+ const retryStrategy = options.retryStrategy;
220
+ // When & Then
221
+ expect(retryStrategy(1)).toBe(5000);
222
+ expect(retryStrategy(2)).toBe(5000);
223
+ expect(retryStrategy(3)).toBe(5000);
224
+ expect(retryStrategy(4)).toBeNull();
225
+ });
226
+ it('powinno używać konfigurowalnego max retries z env', () => {
227
+ // Given
228
+ process.env.REDIS_MAX_RETRIES = '5';
229
+ const config = new command_bus_config_1.default();
230
+ const options = config.getRedisOptions();
231
+ const retryStrategy = options.retryStrategy;
232
+ // When & Then
233
+ expect(retryStrategy(5)).toBe(5000);
234
+ expect(retryStrategy(6)).toBeNull();
235
+ });
236
+ it('powinno kontynuować reconnect w nieskończoność gdy max retries = 0', () => {
237
+ // Given
238
+ const config = new command_bus_config_1.default({
239
+ redisRetryDelay: 5000,
240
+ redisMaxRetries: 0,
241
+ });
242
+ const options = config.getRedisOptions();
243
+ const retryStrategy = options.retryStrategy;
244
+ // When & Then
245
+ expect(retryStrategy(1)).toBe(5000);
246
+ expect(retryStrategy(100)).toBe(5000);
247
+ expect(retryStrategy(1000)).toBe(5000);
185
248
  });
186
249
  });
187
250
  describe('walidacja', () => {
@@ -192,6 +255,10 @@ describe('CommandBusConfig', () => {
192
255
  // When & Then
193
256
  expect(() => new command_bus_config_1.default()).not.toThrow();
194
257
  });
258
+ it('powinno rzucić błąd przy nieprawidłowym URL Redis', () => {
259
+ // When & Then
260
+ expect(() => new command_bus_config_1.default({ redisUrl: 'invalid-url' })).toThrow('Invalid Redis URL');
261
+ });
195
262
  it('powinno rzucić błąd przy nieprawidłowej liczbie workerów', () => {
196
263
  // Given
197
264
  process.env.COMMAND_BUS_CONCURRENCY = '0';
@@ -204,18 +271,25 @@ describe('CommandBusConfig', () => {
204
271
  // When & Then
205
272
  expect(() => new command_bus_config_1.default()).toThrow('maxAttempts must be at least 1');
206
273
  });
207
- it('powinno rzucić błąd przy zbyt małym backoff delay', () => {
208
- // Given
209
- process.env.COMMAND_BUS_BACKOFF_DELAY = '99';
274
+ it('powinno rzucić błąd przy zbyt małym poolSize', () => {
210
275
  // When & Then
211
- expect(() => new command_bus_config_1.default()).toThrow('backoffDelay must be at least 100ms');
276
+ expect(() => new command_bus_config_1.default({ poolSize: 0 })).toThrow('poolSize must be at least 1');
212
277
  });
213
- it('powinno rzucić błąd przy nieprawidłowym queue mode', () => {
214
- // Given
215
- const config = new command_bus_config_1.default();
216
- config.queueMode = 'invalid';
278
+ it('powinno rzucić błąd przy zbyt małym maxConcurrentRpc', () => {
279
+ // When & Then
280
+ expect(() => new command_bus_config_1.default({ maxConcurrentRpc: 0 })).toThrow('maxConcurrentRpc must be at least 1');
281
+ });
282
+ it('powinno rzucić błąd przy zbyt małym batchSize', () => {
283
+ // When & Then
284
+ expect(() => new command_bus_config_1.default({ batchSize: 0 })).toThrow('batchSize must be at least 1');
285
+ });
286
+ it('powinno rzucić błąd przy zbyt małym claimTimeout', () => {
287
+ // When & Then
288
+ expect(() => new command_bus_config_1.default({ claimTimeout: 500 })).toThrow('claimTimeout must be at least 1000ms');
289
+ });
290
+ it('powinno rzucić błąd przy zbyt małym maxRetained', () => {
217
291
  // When & Then
218
- expect(() => config.validateCommandBusConfig()).toThrow("queueMode must be either 'fifo' or 'lifo'");
292
+ expect(() => new command_bus_config_1.default({ maxRetained: 50 })).toThrow('maxRetained must be at least 100');
219
293
  });
220
294
  });
221
295
  });
@@ -1 +1 @@
1
- {"version":3,"file":"command-bus-config.spec.js","sourceRoot":"","sources":["../../../src/command-bus/config/command-bus-config.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-bus-config.spec.js","sourceRoot":"","sources":["../../../src/command-bus/config/command-bus-config.spec.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,21 @@
1
1
  import type Command from './command';
2
2
  import type CommandBusConfig from './config/command-bus-config';
3
3
  /**
4
- * Command Bus wykorzystujący BullMQ
4
+ * Command Bus oparty na Redis Streams + DragonflyDB
5
+ *
5
6
  * Obsługuje komendy w relacji 1:1 (jedna komenda = jeden handler)
7
+ * API: dispatch(), dispatchBatch(), call(), handle(), close()
8
+ *
9
+ * Technologie:
10
+ * - Redis Streams (XADD/XREADGROUP) — natywny transport
11
+ * - MessagePack — binarna serializacja z obsługą Date
12
+ * - LPUSH/BRPOP — point-to-point RPC
13
+ * - Connection pool z round-robin — wielowątkowy DragonflyDB
6
14
  */
7
15
  export default class CommandBus {
8
16
  private config;
9
17
  /**
10
- * Handlery komend - tylko jeden per typ komendy
18
+ * Handlery komend tylko jeden per typ komendy
11
19
  */
12
20
  private commandHandlers;
13
21
  /**
@@ -15,88 +23,71 @@ export default class CommandBus {
15
23
  */
16
24
  private logger;
17
25
  /**
18
- * QueueManager - zarządza kolejkami i cache
26
+ * Serializer (MessagePack z obsługą Date)
19
27
  */
20
- private queueManager;
28
+ private serializer;
21
29
  /**
22
- * WorkerOrchestrator - zarządza workerami
30
+ * Transport (Redis Streams)
23
31
  */
24
- private workerOrchestrator;
32
+ private transport;
25
33
  /**
26
- * JobProcessor - przetwarza joby
34
+ * Pula połączeń Redis (round-robin, non-blocking)
27
35
  */
28
- private jobProcessor;
36
+ private connectionPool;
29
37
  /**
30
- * RpcCoordinator - zarządza pending RPC calls
38
+ * Pula połączeń RPC (bounded, lazy, blocking BRPOP)
31
39
  */
32
- private rpcCoordinator;
40
+ private rpcConnectionPool;
33
41
  /**
34
- * JobOptionsBuilder - buduje opcje dla jobów BullMQ
35
- */
36
- private jobOptionsBuilder;
37
- /**
38
- * CommandLogger - opcjonalny logger komend do plików
42
+ * CommandLogger opcjonalny logger komend do plików
39
43
  */
40
44
  private commandLogger?;
41
45
  /**
42
- * Połączenie Redis dla QueueManager
43
- */
44
- private queueRedisConnection;
45
- /**
46
- * Połączenie Redis dla WorkerOrchestrator
47
- */
48
- private workerRedisConnection;
49
- /**
50
- * Połączenie Redis dla RpcCoordinator
51
- */
52
- private rpcRedisConnection;
53
- /**
54
- * PayloadCompressionService - współdzielony serwis kompresji
46
+ * Interceptor wydajności - mierzy czas wykonania handlerów
55
47
  */
56
- private compressionService;
48
+ private readonly performanceInterceptor;
57
49
  /**
58
- * RpcJobCancellationService - serwis zarządzający anulowaniem jobów RPC
50
+ * Promises z transport.consume() do graceful shutdown
59
51
  */
60
- private cancellationService;
52
+ private readonly consumePromises;
61
53
  constructor(config: CommandBusConfig);
62
54
  /**
63
- * Wysyła komendę do kolejki
64
- * Automatycznie kompresuje dane jeśli przekraczają threshold
65
- * Używa cache kolejek dla optymalizacji pamięci
55
+ * Wysyła komendę do strumienia (fire-and-forget)
56
+ * XADD = 1 natywne polecenie Redis
57
+ *
66
58
  * @param command - Komenda do wysłania
67
59
  */
68
60
  dispatch(command: Command): Promise<void>;
61
+ /**
62
+ * Wysyła wiele komend naraz z użyciem pipelining
63
+ * DragonflyDB przetwarza pipeline równolegle na wielu wątkach
64
+ *
65
+ * @param commands - Tablica komend do wysłania
66
+ */
67
+ dispatchBatch(commands: Command[]): Promise<void>;
69
68
  /**
70
69
  * Rejestruje handler dla komendy
71
- * Uruchamia benchmark aby ustalić optymalne concurrency
70
+ *
72
71
  * @param commandDefinition - Definicja komendy (klasa)
73
72
  * @param handler - Handler do obsługi komendy
74
73
  */
75
- handle<T extends Command>(commandDefinition: new (...args: any[]) => T, handler: (command: T) => unknown | Promise<unknown>): void;
74
+ handle<T extends Command>(commandDefinition: new (...args: never[]) => T, handler: (command: T) => unknown | Promise<unknown>): void;
76
75
  /**
77
76
  * Synchroniczne wywołanie komendy z oczekiwaniem na wynik (RPC)
78
- * Request przez BullMQ, odpowiedź przez Redis Pub/Sub
79
- * Automatycznie kompresuje dane jeśli przekraczają threshold
77
+ * Request przez Redis Streams, odpowiedź przez LPUSH/BRPOP
80
78
  *
81
- * Flow RPC:
82
- * 1. Rejestruj pending call (dostaje responsePromise)
83
- * 2. Skompresuj komendę jeśli przekracza threshold
84
- * 3. Dodaj job do kolejki BullMQ
85
- * 4. Zwróć responsePromise (worker wyśle odpowiedź przez Pub/Sub)
79
+ * Flow (4 komendy Redis):
80
+ * 1. XADD komenda z metadanymi RPC do strumienia
81
+ * 2. BRPOP czekaj na odpowiedź na dedykowanym połączeniu
82
+ * 3. Worker: LPUSH odpowiedź na klucz
83
+ * 4. DEL cleanup klucza (TTL safety net)
86
84
  *
87
85
  * @param command - Komenda do wykonania
88
86
  * @param timeout - Timeout w milisekundach (domyślnie 30s)
89
87
  */
90
88
  call<T = unknown>(command: Command, timeout?: number): Promise<T>;
91
- /**
92
- * Tworzy callback do usuwania jobów z kolejki
93
- * Callback jest przekazywany do RpcCoordinator dla możliwości usunięcia joba przy timeout
94
- * Nie rzuca wyjątków - zwraca boolean sukcesu
95
- */
96
- private createRemoveJobCallback;
97
89
  /**
98
90
  * Zamyka wszystkie połączenia
99
- * Czyści cache kolejek dla optymalizacji pamięci
100
91
  */
101
92
  close(): Promise<void>;
102
93
  }