pp-command-bus 1.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/README.md +400 -1219
  2. package/dist/command-bus/command-bus.spec.js +138 -359
  3. package/dist/command-bus/command-bus.spec.js.map +1 -1
  4. package/dist/command-bus/command.d.ts +3 -4
  5. package/dist/command-bus/command.js +3 -32
  6. package/dist/command-bus/command.js.map +1 -1
  7. package/dist/command-bus/config/command-bus-config.d.ts +75 -21
  8. package/dist/command-bus/config/command-bus-config.js +99 -58
  9. package/dist/command-bus/config/command-bus-config.js.map +1 -1
  10. package/dist/command-bus/config/command-bus-config.spec.js +174 -100
  11. package/dist/command-bus/config/command-bus-config.spec.js.map +1 -1
  12. package/dist/command-bus/index.d.ts +39 -52
  13. package/dist/command-bus/index.js +133 -126
  14. package/dist/command-bus/index.js.map +1 -1
  15. package/dist/command-bus/logging/command-logger.d.ts +2 -0
  16. package/dist/command-bus/logging/command-logger.js +7 -0
  17. package/dist/command-bus/logging/command-logger.js.map +1 -1
  18. package/dist/command-bus/logging/command-logger.spec.js +36 -0
  19. package/dist/command-bus/logging/command-logger.spec.js.map +1 -1
  20. package/dist/command-bus/serialization/index.d.ts +6 -0
  21. package/dist/command-bus/serialization/index.js +9 -0
  22. package/dist/command-bus/serialization/index.js.map +1 -0
  23. package/dist/command-bus/serialization/msgpack-serializer.d.ts +26 -0
  24. package/dist/command-bus/serialization/msgpack-serializer.js +70 -0
  25. package/dist/command-bus/serialization/msgpack-serializer.js.map +1 -0
  26. package/dist/command-bus/serialization/msgpack-serializer.spec.js +223 -0
  27. package/dist/command-bus/serialization/msgpack-serializer.spec.js.map +1 -0
  28. package/dist/command-bus/serialization/serializer.interface.d.ts +21 -0
  29. package/dist/command-bus/serialization/serializer.interface.js +3 -0
  30. package/dist/command-bus/serialization/serializer.interface.js.map +1 -0
  31. package/dist/command-bus/transport/consumer-loop.d.ts +45 -0
  32. package/dist/command-bus/transport/consumer-loop.js +90 -0
  33. package/dist/command-bus/transport/consumer-loop.js.map +1 -0
  34. package/dist/command-bus/transport/consumer-loop.spec.js +216 -0
  35. package/dist/command-bus/transport/consumer-loop.spec.js.map +1 -0
  36. package/dist/command-bus/transport/index.d.ts +21 -0
  37. package/dist/command-bus/transport/index.js +23 -0
  38. package/dist/command-bus/transport/index.js.map +1 -0
  39. package/dist/command-bus/transport/message-processor.d.ts +59 -0
  40. package/dist/command-bus/transport/message-processor.js +111 -0
  41. package/dist/command-bus/transport/message-processor.js.map +1 -0
  42. package/dist/command-bus/transport/message-processor.spec.js +185 -0
  43. package/dist/command-bus/transport/message-processor.spec.js.map +1 -0
  44. package/dist/command-bus/transport/pending-recovery.d.ts +54 -0
  45. package/dist/command-bus/transport/pending-recovery.js +139 -0
  46. package/dist/command-bus/transport/pending-recovery.js.map +1 -0
  47. package/dist/command-bus/transport/pending-recovery.spec.js +176 -0
  48. package/dist/command-bus/transport/pending-recovery.spec.js.map +1 -0
  49. package/dist/command-bus/transport/redis-codec.d.ts +24 -0
  50. package/dist/command-bus/transport/redis-codec.js +33 -0
  51. package/dist/command-bus/transport/redis-codec.js.map +1 -0
  52. package/dist/command-bus/transport/redis-codec.spec.js +53 -0
  53. package/dist/command-bus/transport/redis-codec.spec.js.map +1 -0
  54. package/dist/command-bus/transport/redis-streams-transport.d.ts +91 -0
  55. package/dist/command-bus/transport/redis-streams-transport.js +134 -0
  56. package/dist/command-bus/transport/redis-streams-transport.js.map +1 -0
  57. package/dist/command-bus/transport/redis-streams-transport.spec.js +420 -0
  58. package/dist/command-bus/transport/redis-streams-transport.spec.js.map +1 -0
  59. package/dist/command-bus/transport/rpc-handler.d.ts +39 -0
  60. package/dist/command-bus/transport/rpc-handler.js +87 -0
  61. package/dist/command-bus/transport/rpc-handler.js.map +1 -0
  62. package/dist/command-bus/transport/rpc-handler.spec.js +157 -0
  63. package/dist/command-bus/transport/rpc-handler.spec.js.map +1 -0
  64. package/dist/command-bus/transport/stream-consumer.d.ts +89 -0
  65. package/dist/command-bus/transport/stream-consumer.js +181 -0
  66. package/dist/command-bus/transport/stream-consumer.js.map +1 -0
  67. package/dist/command-bus/transport/stream-consumer.spec.js +284 -0
  68. package/dist/command-bus/transport/stream-consumer.spec.js.map +1 -0
  69. package/dist/command-bus/transport/stream-producer.d.ts +23 -0
  70. package/dist/command-bus/transport/stream-producer.js +70 -0
  71. package/dist/command-bus/transport/stream-producer.js.map +1 -0
  72. package/dist/command-bus/transport/stream-producer.spec.js +125 -0
  73. package/dist/command-bus/transport/stream-producer.spec.js.map +1 -0
  74. package/dist/command-bus/transport/transport.interface.d.ts +87 -0
  75. package/dist/command-bus/transport/transport.interface.js +3 -0
  76. package/dist/command-bus/transport/transport.interface.js.map +1 -0
  77. package/dist/command-bus/types/index.d.ts +0 -84
  78. package/dist/examples/rpc.demo.js +1 -1
  79. package/dist/examples/rpc.demo.js.map +1 -1
  80. package/dist/index.d.ts +8 -5
  81. package/dist/index.js +6 -4
  82. package/dist/index.js.map +1 -1
  83. package/dist/pp-command-bus-2.0.0.tgz +0 -0
  84. package/dist/shared/redis/connection-pool.d.ts +54 -0
  85. package/dist/shared/redis/connection-pool.js +117 -0
  86. package/dist/shared/redis/connection-pool.js.map +1 -0
  87. package/dist/shared/redis/connection-pool.spec.js +114 -0
  88. package/dist/shared/redis/connection-pool.spec.js.map +1 -0
  89. package/dist/shared/redis/index.d.ts +5 -3
  90. package/dist/shared/redis/index.js +6 -4
  91. package/dist/shared/redis/index.js.map +1 -1
  92. package/dist/shared/redis/rpc-connection-pool.d.ts +61 -0
  93. package/dist/shared/redis/rpc-connection-pool.js +154 -0
  94. package/dist/shared/redis/rpc-connection-pool.js.map +1 -0
  95. package/dist/shared/redis/rpc-connection-pool.spec.d.ts +1 -0
  96. package/dist/shared/redis/rpc-connection-pool.spec.js +173 -0
  97. package/dist/shared/redis/rpc-connection-pool.spec.js.map +1 -0
  98. package/dist/shared/types.d.ts +0 -4
  99. package/dist/shared/utils/error-utils.d.ts +8 -0
  100. package/dist/shared/utils/error-utils.js +14 -0
  101. package/dist/shared/utils/error-utils.js.map +1 -0
  102. package/package.json +12 -12
  103. package/dist/command-bus/config/auto-config-optimizer.d.ts +0 -35
  104. package/dist/command-bus/config/auto-config-optimizer.js +0 -52
  105. package/dist/command-bus/config/auto-config-optimizer.js.map +0 -1
  106. package/dist/command-bus/config/auto-config-optimizer.spec.js +0 -42
  107. package/dist/command-bus/config/auto-config-optimizer.spec.js.map +0 -1
  108. package/dist/command-bus/job/index.d.ts +0 -6
  109. package/dist/command-bus/job/index.js +0 -15
  110. package/dist/command-bus/job/index.js.map +0 -1
  111. package/dist/command-bus/job/job-options-builder.d.ts +0 -21
  112. package/dist/command-bus/job/job-options-builder.js +0 -58
  113. package/dist/command-bus/job/job-options-builder.js.map +0 -1
  114. package/dist/command-bus/job/job-options-builder.spec.js +0 -156
  115. package/dist/command-bus/job/job-options-builder.spec.js.map +0 -1
  116. package/dist/command-bus/job/job-processor.d.ts +0 -39
  117. package/dist/command-bus/job/job-processor.js +0 -203
  118. package/dist/command-bus/job/job-processor.js.map +0 -1
  119. package/dist/command-bus/job/job-processor.spec.js +0 -436
  120. package/dist/command-bus/job/job-processor.spec.js.map +0 -1
  121. package/dist/command-bus/queue/index.d.ts +0 -5
  122. package/dist/command-bus/queue/index.js +0 -13
  123. package/dist/command-bus/queue/index.js.map +0 -1
  124. package/dist/command-bus/queue/queue-manager.d.ts +0 -56
  125. package/dist/command-bus/queue/queue-manager.js +0 -163
  126. package/dist/command-bus/queue/queue-manager.js.map +0 -1
  127. package/dist/command-bus/queue/queue-manager.spec.js +0 -371
  128. package/dist/command-bus/queue/queue-manager.spec.js.map +0 -1
  129. package/dist/command-bus/rpc/index.d.ts +0 -11
  130. package/dist/command-bus/rpc/index.js +0 -19
  131. package/dist/command-bus/rpc/index.js.map +0 -1
  132. package/dist/command-bus/rpc/payload-compression.service.d.ts +0 -50
  133. package/dist/command-bus/rpc/payload-compression.service.js +0 -215
  134. package/dist/command-bus/rpc/payload-compression.service.js.map +0 -1
  135. package/dist/command-bus/rpc/payload-compression.service.spec.js +0 -376
  136. package/dist/command-bus/rpc/payload-compression.service.spec.js.map +0 -1
  137. package/dist/command-bus/rpc/rpc-coordinator.d.ts +0 -96
  138. package/dist/command-bus/rpc/rpc-coordinator.js +0 -500
  139. package/dist/command-bus/rpc/rpc-coordinator.js.map +0 -1
  140. package/dist/command-bus/rpc/rpc-coordinator.spec.js +0 -621
  141. package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +0 -1
  142. package/dist/command-bus/rpc/rpc-job-cancellation.service.d.ts +0 -82
  143. package/dist/command-bus/rpc/rpc-job-cancellation.service.js +0 -180
  144. package/dist/command-bus/rpc/rpc-job-cancellation.service.js.map +0 -1
  145. package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js +0 -286
  146. package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js.map +0 -1
  147. package/dist/command-bus/worker/index.d.ts +0 -10
  148. package/dist/command-bus/worker/index.js +0 -19
  149. package/dist/command-bus/worker/index.js.map +0 -1
  150. package/dist/command-bus/worker/worker-benchmark.d.ts +0 -71
  151. package/dist/command-bus/worker/worker-benchmark.js +0 -202
  152. package/dist/command-bus/worker/worker-benchmark.js.map +0 -1
  153. package/dist/command-bus/worker/worker-benchmark.spec.js +0 -310
  154. package/dist/command-bus/worker/worker-benchmark.spec.js.map +0 -1
  155. package/dist/command-bus/worker/worker-metrics-collector.d.ts +0 -98
  156. package/dist/command-bus/worker/worker-metrics-collector.js +0 -242
  157. package/dist/command-bus/worker/worker-metrics-collector.js.map +0 -1
  158. package/dist/command-bus/worker/worker-orchestrator.d.ts +0 -70
  159. package/dist/command-bus/worker/worker-orchestrator.js +0 -339
  160. package/dist/command-bus/worker/worker-orchestrator.js.map +0 -1
  161. package/dist/command-bus/worker/worker-orchestrator.spec.js +0 -712
  162. package/dist/command-bus/worker/worker-orchestrator.spec.js.map +0 -1
  163. package/dist/examples/auto-config.demo.d.ts +0 -9
  164. package/dist/examples/auto-config.demo.js +0 -106
  165. package/dist/examples/auto-config.demo.js.map +0 -1
  166. package/dist/examples/rpc-compression.demo.d.ts +0 -5
  167. package/dist/examples/rpc-compression.demo.js +0 -358
  168. package/dist/examples/rpc-compression.demo.js.map +0 -1
  169. package/dist/examples/rpc-resilience.demo.d.ts +0 -15
  170. package/dist/examples/rpc-resilience.demo.js +0 -233
  171. package/dist/examples/rpc-resilience.demo.js.map +0 -1
  172. package/dist/pp-command-bus-1.5.0.tgz +0 -0
  173. package/dist/shared/config/base-config.d.ts +0 -54
  174. package/dist/shared/config/base-config.js +0 -114
  175. package/dist/shared/config/base-config.js.map +0 -1
  176. package/dist/shared/config/base-config.spec.js +0 -204
  177. package/dist/shared/config/base-config.spec.js.map +0 -1
  178. package/dist/shared/config/index.d.ts +0 -1
  179. package/dist/shared/config/index.js +0 -9
  180. package/dist/shared/config/index.js.map +0 -1
  181. package/dist/shared/redis/redis-connection-factory.d.ts +0 -66
  182. package/dist/shared/redis/redis-connection-factory.js +0 -113
  183. package/dist/shared/redis/redis-connection-factory.js.map +0 -1
  184. /package/dist/command-bus/{config/auto-config-optimizer.spec.d.ts → serialization/msgpack-serializer.spec.d.ts} +0 -0
  185. /package/dist/command-bus/{job/job-options-builder.spec.d.ts → transport/consumer-loop.spec.d.ts} +0 -0
  186. /package/dist/command-bus/{job/job-processor.spec.d.ts → transport/message-processor.spec.d.ts} +0 -0
  187. /package/dist/command-bus/{queue/queue-manager.spec.d.ts → transport/pending-recovery.spec.d.ts} +0 -0
  188. /package/dist/command-bus/{rpc/payload-compression.service.spec.d.ts → transport/redis-codec.spec.d.ts} +0 -0
  189. /package/dist/command-bus/{rpc/rpc-coordinator.spec.d.ts → transport/redis-streams-transport.spec.d.ts} +0 -0
  190. /package/dist/command-bus/{rpc/rpc-job-cancellation.service.spec.d.ts → transport/rpc-handler.spec.d.ts} +0 -0
  191. /package/dist/command-bus/{worker/worker-benchmark.spec.d.ts → transport/stream-consumer.spec.d.ts} +0 -0
  192. /package/dist/command-bus/{worker/worker-orchestrator.spec.d.ts → transport/stream-producer.spec.d.ts} +0 -0
  193. /package/dist/shared/{config/base-config.spec.d.ts → redis/connection-pool.spec.d.ts} +0 -0
@@ -1,215 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const zlib_1 = require("zlib");
13
- const util_1 = require("util");
14
- /**
15
- * Async wersje funkcji zlib (nie blokują event loop)
16
- */
17
- const gzipAsync = (0, util_1.promisify)(zlib_1.gzip);
18
- const gunzipAsync = (0, util_1.promisify)(zlib_1.gunzip);
19
- /**
20
- * Serwis kompresji payloadów RPC
21
- * Automatycznie kompresuje payloady większe niż threshold za pomocą gzip (async)
22
- * Używa async gzip aby nie blokować event loop Node.js
23
- */
24
- class PayloadCompressionService {
25
- constructor(threshold, logger) {
26
- this.threshold = threshold;
27
- this.logger = logger;
28
- this.logger.debug('PayloadCompressionService utworzony', {
29
- threshold: `${threshold} bytes`,
30
- timestamp: new Date().toISOString(),
31
- });
32
- }
33
- /**
34
- * Kompresuje payload jeśli przekracza threshold (async - nie blokuje event loop)
35
- * @param payload - Dane do kompresji
36
- * @returns Promise z obiektem zawierającym data (JSON lub base64 gzip) i flagą compressed
37
- */
38
- compress(payload) {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- // Serializuj do JSON
41
- const json = JSON.stringify(payload);
42
- const originalSize = Buffer.byteLength(json, 'utf8');
43
- // Sprawdź czy przekracza threshold
44
- if (originalSize <= this.threshold) {
45
- this.logger.debug('Payload NIE skompresowany (poniżej threshold)', {
46
- originalSize,
47
- threshold: this.threshold,
48
- timestamp: new Date().toISOString(),
49
- });
50
- return {
51
- data: json,
52
- compressed: false,
53
- };
54
- }
55
- // Kompresuj gzip (async - nie blokuje event loop)
56
- const compressed = yield gzipAsync(Buffer.from(json, 'utf8'));
57
- const compressedBase64 = compressed.toString('base64');
58
- const compressedSize = Buffer.byteLength(compressedBase64, 'utf8');
59
- const compressionRatio = Math.round(((originalSize - compressedSize) / originalSize) * 100);
60
- this.logger.debug('Payload skompresowany gzip', {
61
- originalSize,
62
- compressedSize,
63
- compressionRatio: `${compressionRatio}%`,
64
- timestamp: new Date().toISOString(),
65
- });
66
- return {
67
- data: compressedBase64,
68
- compressed: true,
69
- };
70
- });
71
- }
72
- /**
73
- * Dekompresuje payload na podstawie flagi compressed (async - nie blokuje event loop)
74
- * @param data - Dane do dekompresji (JSON string lub base64 gzip)
75
- * @param compressed - Czy dane są skompresowane
76
- * @returns Promise ze zdeserializowanym obiektem
77
- * @throws Error jeśli dekompresja lub parsowanie się nie powiedzie
78
- */
79
- decompress(data, compressed) {
80
- return __awaiter(this, void 0, void 0, function* () {
81
- if (!compressed) {
82
- // Proste parsowanie JSON
83
- return JSON.parse(data);
84
- }
85
- // Dekompresja gzip (async - nie blokuje event loop)
86
- try {
87
- const compressedBuffer = Buffer.from(data, 'base64');
88
- const decompressed = yield gunzipAsync(compressedBuffer);
89
- const json = decompressed.toString('utf8');
90
- this.logger.debug('Payload zdekompresowany', {
91
- compressedSize: data.length,
92
- decompressedSize: json.length,
93
- timestamp: new Date().toISOString(),
94
- });
95
- return JSON.parse(json);
96
- }
97
- catch (error) {
98
- this.logger.error('Błąd dekompresji payloadu', {
99
- error: error instanceof Error ? error.message : String(error),
100
- dataLength: data.length,
101
- timestamp: new Date().toISOString(),
102
- });
103
- throw new Error('Failed to decompress payload');
104
- }
105
- });
106
- }
107
- /**
108
- * Kompresuje Command obiekt jeśli przekracza threshold
109
- * Zachowuje metadane Command (__name, __id, __time) i kompresuje __payload
110
- *
111
- * @param command - Command do kompresji
112
- * @returns Promise z CompressibleCommand (może być skompresowany lub nie)
113
- */
114
- compressCommand(command) {
115
- return __awaiter(this, void 0, void 0, function* () {
116
- // Wyodrębnij metadane i payload Command
117
- const { __name, __id, __time, __payload } = command;
118
- // Serializuj payload do JSON
119
- const json = JSON.stringify(__payload);
120
- const originalSize = Buffer.byteLength(json, 'utf8');
121
- // Sprawdź czy przekracza threshold
122
- if (originalSize <= this.threshold) {
123
- this.logger.debug('Command NIE skompresowany (poniżej threshold)', {
124
- commandName: __name,
125
- commandId: __id,
126
- originalSize,
127
- threshold: this.threshold,
128
- timestamp: new Date().toISOString(),
129
- });
130
- // Zwróć command bez kompresji (z flagą __compressed=false)
131
- return Object.assign(Object.assign({}, command), { __compressed: false });
132
- }
133
- // Kompresuj gzip (async - nie blokuje event loop)
134
- const compressed = yield gzipAsync(Buffer.from(json, 'utf8'));
135
- const compressedBase64 = compressed.toString('base64');
136
- const compressedSize = Buffer.byteLength(compressedBase64, 'utf8');
137
- const compressionRatio = Math.round(((originalSize - compressedSize) / originalSize) * 100);
138
- this.logger.debug('Command skompresowany gzip', {
139
- commandName: __name,
140
- commandId: __id,
141
- originalSize,
142
- compressedSize,
143
- compressionRatio: `${compressionRatio}%`,
144
- timestamp: new Date().toISOString(),
145
- });
146
- // Zwróć command z metadanymi, pustym payload i skompresowanymi danymi
147
- return {
148
- __name,
149
- __id,
150
- __time,
151
- __payload: undefined, // Payload jest skompresowany w __compressedData
152
- __compressed: true,
153
- __compressedData: compressedBase64,
154
- };
155
- });
156
- }
157
- /**
158
- * Dekompresuje Command obiekt na podstawie flagi __compressed
159
- *
160
- * @param command - CompressibleCommand do dekompresji
161
- * @returns Promise ze zdekompresowanym Command
162
- * @throws Error jeśli dekompresja się nie powiedzie lub brakuje danych
163
- */
164
- decompressCommand(command) {
165
- return __awaiter(this, void 0, void 0, function* () {
166
- // Jeśli nie jest skompresowany, zwróć bez zmian
167
- if (!command.__compressed) {
168
- return command;
169
- }
170
- // Sprawdź czy są skompresowane dane
171
- if (!command.__compressedData) {
172
- this.logger.error('Brak skompresowanych danych w Command', {
173
- commandName: command.__name,
174
- commandId: command.__id,
175
- timestamp: new Date().toISOString(),
176
- });
177
- throw new Error('Missing compressed data');
178
- }
179
- try {
180
- // Dekompresuj dane
181
- const compressedBuffer = Buffer.from(command.__compressedData, 'base64');
182
- const decompressed = yield gunzipAsync(compressedBuffer);
183
- const json = decompressed.toString('utf8');
184
- this.logger.debug('Command zdekompresowany', {
185
- commandName: command.__name,
186
- commandId: command.__id,
187
- compressedSize: command.__compressedData.length,
188
- decompressedSize: json.length,
189
- timestamp: new Date().toISOString(),
190
- });
191
- // Parsuj JSON do payloadu
192
- const payload = JSON.parse(json);
193
- // Rekonstruuj Command z metadanymi i zdekompresowanym payloadem
194
- return {
195
- __name: command.__name,
196
- __id: command.__id,
197
- __time: command.__time,
198
- __payload: payload,
199
- __compressed: false,
200
- };
201
- }
202
- catch (error) {
203
- this.logger.error('Błąd dekompresji Command', {
204
- commandName: command.__name,
205
- commandId: command.__id,
206
- error: error instanceof Error ? error.message : String(error),
207
- timestamp: new Date().toISOString(),
208
- });
209
- throw new Error('Failed to decompress payload');
210
- }
211
- });
212
- }
213
- }
214
- exports.default = PayloadCompressionService;
215
- //# sourceMappingURL=payload-compression.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payload-compression.service.js","sourceRoot":"","sources":["../../../src/command-bus/rpc/payload-compression.service.ts"],"names":[],"mappings":"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"}
@@ -1,376 +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 payload_compression_service_1 = __importDefault(require("./payload-compression.service"));
16
- const command_1 = __importDefault(require("../command"));
17
- /**
18
- * Test command class
19
- */
20
- class TestCommand extends command_1.default {
21
- constructor(payload) {
22
- super(payload);
23
- }
24
- }
25
- /**
26
- * Testy dla PayloadCompressionService
27
- * Testuje kompresję gzip dla payloadów RPC >threshold oraz Command obiektów
28
- */
29
- describe('PayloadCompressionService', () => {
30
- let service;
31
- let mockLogger;
32
- beforeEach(() => {
33
- mockLogger = {
34
- debug: jest.fn(),
35
- log: jest.fn(),
36
- warn: jest.fn(),
37
- error: jest.fn(),
38
- };
39
- });
40
- describe('compress()', () => {
41
- it('nie kompresuje payloadu mniejszego niż threshold (1KB)', () => __awaiter(void 0, void 0, void 0, function* () {
42
- // Arrange
43
- service = new payload_compression_service_1.default(1024, mockLogger);
44
- const smallPayload = { correlationId: 'test-123', result: 'ok', error: null };
45
- // Act
46
- const { data, compressed } = yield service.compress(smallPayload);
47
- // Assert
48
- expect(compressed).toBe(false);
49
- expect(data).toBe(JSON.stringify(smallPayload));
50
- expect(mockLogger.debug).toHaveBeenCalledWith(expect.stringContaining('Payload NIE skompresowany'), expect.objectContaining({
51
- originalSize: expect.any(Number),
52
- threshold: 1024,
53
- }));
54
- }));
55
- it('kompresuje payload większy niż threshold (1KB)', () => __awaiter(void 0, void 0, void 0, function* () {
56
- // Arrange
57
- service = new payload_compression_service_1.default(1024, mockLogger);
58
- // Utwórz duży payload >1KB
59
- const largePayload = {
60
- correlationId: 'test-456',
61
- result: Array.from({ length: 100 }, (_, i) => ({
62
- id: i,
63
- name: `Item ${i}`,
64
- description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit',
65
- })),
66
- error: null,
67
- };
68
- // Act
69
- const { data, compressed } = yield service.compress(largePayload);
70
- // Assert
71
- expect(compressed).toBe(true);
72
- expect(data).not.toBe(JSON.stringify(largePayload)); // Skompresowane
73
- expect(typeof data).toBe('string'); // Base64 string
74
- expect(mockLogger.debug).toHaveBeenCalledWith(expect.stringContaining('Payload skompresowany'), expect.objectContaining({
75
- originalSize: expect.any(Number),
76
- compressedSize: expect.any(Number),
77
- compressionRatio: expect.any(String),
78
- }));
79
- }));
80
- it('używa niestandardowego threshold (512 bytes)', () => __awaiter(void 0, void 0, void 0, function* () {
81
- // Arrange
82
- service = new payload_compression_service_1.default(512, mockLogger);
83
- const mediumPayload = {
84
- correlationId: 'test-789',
85
- result: Array.from({ length: 30 }, (_, i) => ({
86
- id: i,
87
- data: 'test data item with more content to exceed 512 bytes threshold',
88
- })),
89
- error: null,
90
- };
91
- // Act
92
- const { compressed } = yield service.compress(mediumPayload);
93
- // Assert - ten payload jest >512B więc powinien być skompresowany
94
- expect(compressed).toBe(true);
95
- }));
96
- it('zawsze kompresuje gdy threshold=0', () => __awaiter(void 0, void 0, void 0, function* () {
97
- // Arrange
98
- service = new payload_compression_service_1.default(0, mockLogger);
99
- const tinyPayload = { result: 'ok' };
100
- // Act
101
- const { compressed } = yield service.compress(tinyPayload);
102
- // Assert
103
- expect(compressed).toBe(true);
104
- }));
105
- it('oblicza compression ratio poprawnie', () => __awaiter(void 0, void 0, void 0, function* () {
106
- // Arrange
107
- service = new payload_compression_service_1.default(100, mockLogger);
108
- const payload = {
109
- data: Array.from({ length: 50 }, () => 'repeated text for compression test '),
110
- };
111
- // Act
112
- yield service.compress(payload);
113
- // Assert
114
- expect(mockLogger.debug).toHaveBeenCalledWith(expect.stringContaining('Payload skompresowany'), expect.objectContaining({
115
- compressionRatio: expect.stringMatching(/\d+%/), // Format: "XX%"
116
- }));
117
- }));
118
- });
119
- describe('decompress()', () => {
120
- it('dekompresuje payload gdy compressed=true', () => __awaiter(void 0, void 0, void 0, function* () {
121
- // Arrange
122
- service = new payload_compression_service_1.default(100, mockLogger);
123
- const originalPayload = {
124
- correlationId: 'test-999',
125
- result: {
126
- status: 'success',
127
- data: Array.from({ length: 20 }, (_, i) => ({
128
- id: i,
129
- value: `item-${i}`,
130
- description: 'some longer text to make payload bigger',
131
- })),
132
- },
133
- error: null,
134
- };
135
- // Najpierw skompresuj
136
- const { data: compressedData, compressed } = yield service.compress(originalPayload);
137
- expect(compressed).toBe(true);
138
- // Act - dekompresuj
139
- const decompressed = yield service.decompress(compressedData, true);
140
- // Assert
141
- expect(decompressed).toEqual(originalPayload);
142
- }));
143
- it('parsuje JSON gdy compressed=false', () => __awaiter(void 0, void 0, void 0, function* () {
144
- // Arrange
145
- service = new payload_compression_service_1.default(10000, mockLogger); // Bardzo wysoki threshold
146
- const originalPayload = {
147
- correlationId: 'test-111',
148
- result: 'simple result',
149
- error: null,
150
- };
151
- // Kompresuj (ale nie zostanie skompresowany bo <10KB)
152
- const { data, compressed } = yield service.compress(originalPayload);
153
- expect(compressed).toBe(false);
154
- // Act - dekompresuj
155
- const decompressed = yield service.decompress(data, false);
156
- // Assert
157
- expect(decompressed).toEqual(originalPayload);
158
- }));
159
- it('rzuca błąd gdy corrupted gzip data', () => __awaiter(void 0, void 0, void 0, function* () {
160
- // Arrange
161
- service = new payload_compression_service_1.default(1024, mockLogger);
162
- const corruptedData = 'invalid-base64-gzip-data!!!';
163
- // Act & Assert
164
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
165
- yield service.decompress(corruptedData, true);
166
- })).rejects.toThrow('Failed to decompress payload');
167
- expect(mockLogger.error).toHaveBeenCalledWith(expect.stringContaining('Błąd dekompresji'), expect.any(Object));
168
- }));
169
- it('rzuca błąd gdy invalid JSON (compressed=false)', () => __awaiter(void 0, void 0, void 0, function* () {
170
- // Arrange
171
- service = new payload_compression_service_1.default(1024, mockLogger);
172
- const invalidJson = '{invalid json}';
173
- // Act & Assert
174
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
175
- yield service.decompress(invalidJson, false);
176
- })).rejects.toThrow();
177
- }));
178
- });
179
- describe('edge cases', () => {
180
- it('obsługuje pusty payload', () => __awaiter(void 0, void 0, void 0, function* () {
181
- // Arrange
182
- service = new payload_compression_service_1.default(1024, mockLogger);
183
- const emptyPayload = {};
184
- // Act
185
- const { data, compressed } = yield service.compress(emptyPayload);
186
- const decompressed = yield service.decompress(data, compressed);
187
- // Assert
188
- expect(decompressed).toEqual(emptyPayload);
189
- }));
190
- it('obsługuje payload z null i undefined', () => __awaiter(void 0, void 0, void 0, function* () {
191
- // Arrange
192
- service = new payload_compression_service_1.default(1024, mockLogger);
193
- const payload = { result: null, error: undefined };
194
- // Act
195
- const { data, compressed } = yield service.compress(payload);
196
- const decompressed = yield service.decompress(data, compressed);
197
- // Assert
198
- expect(decompressed).toEqual({ result: null, error: undefined });
199
- }));
200
- it('obsługuje payload z obiektami zagnieżdżonymi', () => __awaiter(void 0, void 0, void 0, function* () {
201
- // Arrange
202
- service = new payload_compression_service_1.default(100, mockLogger);
203
- const nestedPayload = {
204
- level1: {
205
- level2: {
206
- level3: {
207
- data: [1, 2, 3],
208
- },
209
- },
210
- },
211
- };
212
- // Act
213
- const { data, compressed } = yield service.compress(nestedPayload);
214
- const decompressed = yield service.decompress(data, compressed);
215
- // Assert
216
- expect(decompressed).toEqual(nestedPayload);
217
- }));
218
- it('osiąga compression ratio >50% dla typowego JSON', () => __awaiter(void 0, void 0, void 0, function* () {
219
- // Arrange
220
- service = new payload_compression_service_1.default(100, mockLogger);
221
- const typicalPayload = {
222
- correlationId: 'abc-123',
223
- result: Array.from({ length: 50 }, (_, i) => ({
224
- id: i,
225
- name: `User ${i}`,
226
- email: `user${i}@example.com`,
227
- active: true,
228
- })),
229
- error: null,
230
- };
231
- // Act
232
- const { data, compressed } = yield service.compress(typicalPayload);
233
- // Assert
234
- expect(compressed).toBe(true);
235
- const originalSize = Buffer.byteLength(JSON.stringify(typicalPayload), 'utf8');
236
- const compressedSize = Buffer.byteLength(data, 'utf8');
237
- const ratio = ((originalSize - compressedSize) / originalSize) * 100;
238
- expect(ratio).toBeGreaterThan(50); // >50% redukcja
239
- }));
240
- });
241
- describe('compressCommand()', () => {
242
- it('nie kompresuje małego Command (poniżej threshold)', () => __awaiter(void 0, void 0, void 0, function* () {
243
- // Arrange
244
- service = new payload_compression_service_1.default(1024, mockLogger);
245
- const command = new TestCommand({ data: 'small data' });
246
- // Act
247
- const result = yield service.compressCommand(command);
248
- // Assert
249
- expect(result.__compressed).toBe(false);
250
- expect(result.__compressedData).toBeUndefined();
251
- expect(result.__payload.data).toBe('small data');
252
- expect(result.__name).toBe('TestCommand');
253
- expect(result.__id).toBe(command.__id);
254
- }));
255
- it('kompresuje duży Command (powyżej threshold)', () => __awaiter(void 0, void 0, void 0, function* () {
256
- // Arrange
257
- service = new payload_compression_service_1.default(100, mockLogger);
258
- const largeItems = Array.from({ length: 50 }, (_, i) => `item-${i}-with-long-description`);
259
- const command = new TestCommand({ data: 'large data', items: largeItems });
260
- // Act
261
- const result = yield service.compressCommand(command);
262
- // Assert
263
- expect(result.__compressed).toBe(true);
264
- expect(result.__compressedData).toBeDefined();
265
- expect(typeof result.__compressedData).toBe('string');
266
- // Payload powinien być undefined (skompresowany w __compressedData)
267
- expect(result.__payload).toBeUndefined();
268
- // Metadane powinny być zachowane
269
- expect(result.__name).toBe('TestCommand');
270
- expect(result.__id).toBe(command.__id);
271
- expect(result.__time).toBe(command.__time);
272
- }));
273
- it('zachowuje wszystkie metadane Command przy kompresji', () => __awaiter(void 0, void 0, void 0, function* () {
274
- // Arrange
275
- service = new payload_compression_service_1.default(100, mockLogger);
276
- const largeItems = Array.from({ length: 50 }, (_, i) => `item-${i}`);
277
- const command = new TestCommand({ data: 'test', items: largeItems });
278
- const originalId = command.__id;
279
- const originalName = command.__name;
280
- const originalTime = command.__time;
281
- // Act
282
- const result = yield service.compressCommand(command);
283
- // Assert
284
- expect(result.__id).toBe(originalId);
285
- expect(result.__name).toBe(originalName);
286
- expect(result.__time).toBe(originalTime);
287
- expect(result.__compressed).toBe(true);
288
- }));
289
- });
290
- describe('decompressCommand()', () => {
291
- it('dekompresuje skompresowany Command poprawnie', () => __awaiter(void 0, void 0, void 0, function* () {
292
- // Arrange
293
- service = new payload_compression_service_1.default(100, mockLogger);
294
- const largeItems = Array.from({ length: 50 }, (_, i) => `item-${i}-long-description-text`);
295
- const originalCommand = new TestCommand({ data: 'original data', items: largeItems });
296
- const originalId = originalCommand.__id;
297
- // Skompresuj
298
- const compressed = yield service.compressCommand(originalCommand);
299
- expect(compressed.__compressed).toBe(true);
300
- // Act - dekompresuj
301
- const decompressed = yield service.decompressCommand(compressed);
302
- // Assert
303
- expect(decompressed.__compressed).toBe(false);
304
- expect(decompressed.__compressedData).toBeUndefined();
305
- expect(decompressed.__payload.data).toBe('original data');
306
- expect(decompressed.__payload.items).toEqual(largeItems);
307
- expect(decompressed.__id).toBe(originalId);
308
- expect(decompressed.__name).toBe('TestCommand');
309
- }));
310
- it('zwraca command bez zmian gdy nie jest skompresowany', () => __awaiter(void 0, void 0, void 0, function* () {
311
- // Arrange
312
- service = new payload_compression_service_1.default(10000, mockLogger); // Wysoki threshold
313
- const command = new TestCommand({ data: 'not compressed' });
314
- // Skompresuj (ale nie zostanie skompresowany)
315
- const notCompressed = yield service.compressCommand(command);
316
- expect(notCompressed.__compressed).toBe(false);
317
- // Act - dekompresuj
318
- const result = yield service.decompressCommand(notCompressed);
319
- // Assert
320
- expect(result).toBe(notCompressed); // Ten sam obiekt
321
- expect(result.__payload.data).toBe('not compressed');
322
- }));
323
- it('rzuca błąd gdy brak __compressedData przy __compressed=true', () => __awaiter(void 0, void 0, void 0, function* () {
324
- // Arrange
325
- service = new payload_compression_service_1.default(1024, mockLogger);
326
- const invalidCommand = new TestCommand({ data: 'test' });
327
- invalidCommand.__compressed = true;
328
- // Brak __compressedData - błąd
329
- // Act & Assert
330
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
331
- yield service.decompressCommand(invalidCommand);
332
- })).rejects.toThrow('Missing compressed data');
333
- }));
334
- it('rzuca błąd gdy corrupted compressed data', () => __awaiter(void 0, void 0, void 0, function* () {
335
- // Arrange
336
- service = new payload_compression_service_1.default(1024, mockLogger);
337
- const corruptedCommand = new TestCommand({ data: 'test' });
338
- corruptedCommand.__compressed = true;
339
- corruptedCommand.__compressedData = 'invalid-corrupted-base64-data!!!';
340
- // Act & Assert
341
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
342
- yield service.decompressCommand(corruptedCommand);
343
- })).rejects.toThrow('Failed to decompress payload');
344
- }));
345
- });
346
- describe('compressCommand/decompressCommand - round-trip', () => {
347
- it('compress → decompress zachowuje dane Command', () => __awaiter(void 0, void 0, void 0, function* () {
348
- // Arrange
349
- service = new payload_compression_service_1.default(100, mockLogger);
350
- const items = Array.from({ length: 100 }, (_, i) => `test-item-${i}-with-description`);
351
- const original = new TestCommand({ data: 'test data', items });
352
- // Act
353
- const compressed = yield service.compressCommand(original);
354
- const decompressed = yield service.decompressCommand(compressed);
355
- // Assert
356
- expect(decompressed.__payload.data).toBe('test data');
357
- expect(decompressed.__payload.items).toEqual(items);
358
- expect(decompressed.__id).toBe(original.__id);
359
- expect(decompressed.__name).toBe(original.__name);
360
- expect(decompressed.__time).toBe(original.__time);
361
- }));
362
- it('działa poprawnie dla małych Command (bez kompresji)', () => __awaiter(void 0, void 0, void 0, function* () {
363
- // Arrange
364
- service = new payload_compression_service_1.default(10000, mockLogger);
365
- const original = new TestCommand({ data: 'small' });
366
- // Act
367
- const compressed = yield service.compressCommand(original);
368
- const decompressed = yield service.decompressCommand(compressed);
369
- // Assert
370
- expect(compressed.__compressed).toBe(false);
371
- expect(decompressed.__payload.data).toBe('small');
372
- expect(decompressed.__id).toBe(original.__id);
373
- }));
374
- });
375
- });
376
- //# sourceMappingURL=payload-compression.service.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payload-compression.service.spec.js","sourceRoot":"","sources":["../../../src/command-bus/rpc/payload-compression.service.spec.ts"],"names":[],"mappings":"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"}