pp-command-bus 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +522 -0
  2. package/dist/command-bus/command-bus.spec.d.ts +1 -0
  3. package/dist/command-bus/command-bus.spec.js +398 -0
  4. package/dist/command-bus/command-bus.spec.js.map +1 -0
  5. package/dist/command-bus/command.d.ts +24 -0
  6. package/dist/command-bus/command.js +53 -0
  7. package/dist/command-bus/command.js.map +1 -0
  8. package/dist/command-bus/config/command-bus-config.d.ts +40 -0
  9. package/dist/command-bus/config/command-bus-config.js +59 -0
  10. package/dist/command-bus/config/command-bus-config.js.map +1 -0
  11. package/dist/command-bus/config/command-bus-config.spec.d.ts +1 -0
  12. package/dist/command-bus/config/command-bus-config.spec.js +162 -0
  13. package/dist/command-bus/config/command-bus-config.spec.js.map +1 -0
  14. package/dist/command-bus/config/index.d.ts +1 -0
  15. package/dist/command-bus/config/index.js +9 -0
  16. package/dist/command-bus/config/index.js.map +1 -0
  17. package/dist/command-bus/index.d.ts +79 -0
  18. package/dist/command-bus/index.js +169 -0
  19. package/dist/command-bus/index.js.map +1 -0
  20. package/dist/command-bus/job/index.d.ts +6 -0
  21. package/dist/command-bus/job/index.js +15 -0
  22. package/dist/command-bus/job/index.js.map +1 -0
  23. package/dist/command-bus/job/job-options-builder.d.ts +24 -0
  24. package/dist/command-bus/job/job-options-builder.js +68 -0
  25. package/dist/command-bus/job/job-options-builder.js.map +1 -0
  26. package/dist/command-bus/job/job-options-builder.spec.d.ts +1 -0
  27. package/dist/command-bus/job/job-options-builder.spec.js +163 -0
  28. package/dist/command-bus/job/job-options-builder.spec.js.map +1 -0
  29. package/dist/command-bus/job/job-processor.d.ts +33 -0
  30. package/dist/command-bus/job/job-processor.js +195 -0
  31. package/dist/command-bus/job/job-processor.js.map +1 -0
  32. package/dist/command-bus/job/job-processor.spec.d.ts +1 -0
  33. package/dist/command-bus/job/job-processor.spec.js +352 -0
  34. package/dist/command-bus/job/job-processor.spec.js.map +1 -0
  35. package/dist/command-bus/logging/command-logger.d.ts +21 -0
  36. package/dist/command-bus/logging/command-logger.js +79 -0
  37. package/dist/command-bus/logging/command-logger.js.map +1 -0
  38. package/dist/command-bus/logging/command-logger.spec.d.ts +1 -0
  39. package/dist/command-bus/logging/command-logger.spec.js +245 -0
  40. package/dist/command-bus/logging/command-logger.spec.js.map +1 -0
  41. package/dist/command-bus/logging/index.d.ts +5 -0
  42. package/dist/command-bus/logging/index.js +13 -0
  43. package/dist/command-bus/logging/index.js.map +1 -0
  44. package/dist/command-bus/queue/index.d.ts +5 -0
  45. package/dist/command-bus/queue/index.js +13 -0
  46. package/dist/command-bus/queue/index.js.map +1 -0
  47. package/dist/command-bus/queue/queue-manager.d.ts +24 -0
  48. package/dist/command-bus/queue/queue-manager.js +60 -0
  49. package/dist/command-bus/queue/queue-manager.js.map +1 -0
  50. package/dist/command-bus/queue/queue-manager.spec.d.ts +1 -0
  51. package/dist/command-bus/queue/queue-manager.spec.js +219 -0
  52. package/dist/command-bus/queue/queue-manager.spec.js.map +1 -0
  53. package/dist/command-bus/rpc/index.d.ts +5 -0
  54. package/dist/command-bus/rpc/index.js +13 -0
  55. package/dist/command-bus/rpc/index.js.map +1 -0
  56. package/dist/command-bus/rpc/rpc-coordinator.d.ts +45 -0
  57. package/dist/command-bus/rpc/rpc-coordinator.js +189 -0
  58. package/dist/command-bus/rpc/rpc-coordinator.js.map +1 -0
  59. package/dist/command-bus/rpc/rpc-coordinator.spec.d.ts +1 -0
  60. package/dist/command-bus/rpc/rpc-coordinator.spec.js +286 -0
  61. package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +1 -0
  62. package/dist/command-bus/types/index.d.ts +57 -0
  63. package/dist/command-bus/types/index.js +3 -0
  64. package/dist/command-bus/types/index.js.map +1 -0
  65. package/dist/command-bus/worker/index.d.ts +5 -0
  66. package/dist/command-bus/worker/index.js +13 -0
  67. package/dist/command-bus/worker/index.js.map +1 -0
  68. package/dist/command-bus/worker/worker-orchestrator.d.ts +46 -0
  69. package/dist/command-bus/worker/worker-orchestrator.js +160 -0
  70. package/dist/command-bus/worker/worker-orchestrator.js.map +1 -0
  71. package/dist/command-bus/worker/worker-orchestrator.spec.d.ts +1 -0
  72. package/dist/command-bus/worker/worker-orchestrator.spec.js +293 -0
  73. package/dist/command-bus/worker/worker-orchestrator.spec.js.map +1 -0
  74. package/dist/examples/rpc.demo.d.ts +2 -0
  75. package/dist/examples/rpc.demo.js +235 -0
  76. package/dist/examples/rpc.demo.js.map +1 -0
  77. package/dist/index.d.ts +11 -0
  78. package/dist/index.js +20 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/pp-command-bus-1.0.0.tgz +0 -0
  81. package/dist/shared/config/base-config.d.ts +43 -0
  82. package/dist/shared/config/base-config.js +100 -0
  83. package/dist/shared/config/base-config.js.map +1 -0
  84. package/dist/shared/config/base-config.spec.d.ts +1 -0
  85. package/dist/shared/config/base-config.spec.js +118 -0
  86. package/dist/shared/config/base-config.spec.js.map +1 -0
  87. package/dist/shared/config/index.d.ts +1 -0
  88. package/dist/shared/config/index.js +9 -0
  89. package/dist/shared/config/index.js.map +1 -0
  90. package/dist/shared/logging/index.d.ts +2 -0
  91. package/dist/shared/logging/index.js +8 -0
  92. package/dist/shared/logging/index.js.map +1 -0
  93. package/dist/shared/logging/log-level.d.ts +36 -0
  94. package/dist/shared/logging/log-level.js +53 -0
  95. package/dist/shared/logging/log-level.js.map +1 -0
  96. package/dist/shared/logging/logger.d.ts +42 -0
  97. package/dist/shared/logging/logger.js +63 -0
  98. package/dist/shared/logging/logger.js.map +1 -0
  99. package/dist/shared/logging/logger.spec.d.ts +1 -0
  100. package/dist/shared/logging/logger.spec.js +89 -0
  101. package/dist/shared/logging/logger.spec.js.map +1 -0
  102. package/dist/shared/types.d.ts +26 -0
  103. package/dist/shared/types.js +6 -0
  104. package/dist/shared/types.js.map +1 -0
  105. package/package.json +93 -0
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const command_bus_config_1 = __importDefault(require("./command-bus-config"));
7
+ const logger_1 = require("../../shared/logging/logger");
8
+ describe('CommandBusConfig', () => {
9
+ const originalEnv = process.env;
10
+ beforeEach(() => {
11
+ // Reset zmiennych środowiskowych
12
+ process.env = Object.assign({}, originalEnv);
13
+ });
14
+ afterEach(() => {
15
+ process.env = originalEnv;
16
+ });
17
+ describe('konstruktor', () => {
18
+ it('powinno używać domyślnych wartości', () => {
19
+ // When
20
+ const config = new command_bus_config_1.default();
21
+ // Then
22
+ expect(config.redisUrl).toBe('redis://localhost:6379');
23
+ expect(config.logger).toBeInstanceOf(logger_1.Logger);
24
+ expect(config.logLevel).toBe('log');
25
+ expect(config.concurrency).toBe(1);
26
+ expect(config.maxAttempts).toBe(3);
27
+ expect(config.backoffDelay).toBe(2000);
28
+ expect(config.queueMode).toBe('fifo');
29
+ expect(config.commandLog).toBe('');
30
+ });
31
+ it('powinno wczytać konfigurację ze zmiennych środowiskowych z nowym prefiksem', () => {
32
+ // Given
33
+ process.env.REDIS_URL = 'redis://dragonfly:6380';
34
+ process.env.COMMAND_BUS_CONCURRENCY = '10';
35
+ process.env.COMMAND_BUS_MAX_ATTEMPTS = '5';
36
+ process.env.COMMAND_BUS_BACKOFF_DELAY = '5000';
37
+ process.env.COMMAND_BUS_QUEUE_MODE = 'lifo';
38
+ process.env.COMMAND_BUS_LOG = '/var/log/commands';
39
+ // When
40
+ const config = new command_bus_config_1.default();
41
+ // Then
42
+ expect(config.redisUrl).toBe('redis://dragonfly:6380');
43
+ expect(config.concurrency).toBe(10);
44
+ expect(config.maxAttempts).toBe(5);
45
+ expect(config.backoffDelay).toBe(5000);
46
+ expect(config.queueMode).toBe('lifo');
47
+ expect(config.commandLog).toBe('/var/log/commands');
48
+ });
49
+ it('powinno zachować kompatybilność wsteczną ze starymi nazwami zmiennych', () => {
50
+ // Given
51
+ process.env.EVENT_BUS_CONCURRENCY = '8';
52
+ process.env.EVENT_BUS_MAX_ATTEMPTS = '4';
53
+ process.env.EVENT_BUS_BACKOFF_DELAY = '3000';
54
+ process.env.EVENT_BUS_QUEUE_MODE = 'lifo';
55
+ process.env.EVENT_BUS_LOG = '/old/log/path';
56
+ // When
57
+ const config = new command_bus_config_1.default();
58
+ // Then
59
+ expect(config.concurrency).toBe(8);
60
+ expect(config.maxAttempts).toBe(4);
61
+ expect(config.backoffDelay).toBe(3000);
62
+ expect(config.queueMode).toBe('lifo');
63
+ expect(config.commandLog).toBe('/old/log/path');
64
+ });
65
+ it('powinno preferować nowe nazwy zmiennych nad starymi', () => {
66
+ // Given
67
+ // Stare nazwy
68
+ process.env.EVENT_BUS_CONCURRENCY = '8';
69
+ process.env.EVENT_BUS_MAX_ATTEMPTS = '4';
70
+ // Nowe nazwy (powinny mieć priorytet)
71
+ process.env.COMMAND_BUS_CONCURRENCY = '15';
72
+ process.env.COMMAND_BUS_MAX_ATTEMPTS = '7';
73
+ // When
74
+ const config = new command_bus_config_1.default();
75
+ // Then
76
+ expect(config.concurrency).toBe(15);
77
+ expect(config.maxAttempts).toBe(7);
78
+ });
79
+ it('powinno nadpisać wartości przez parametry konstruktora', () => {
80
+ // Given
81
+ const customLogger = {
82
+ log: jest.fn(),
83
+ error: jest.fn(),
84
+ warn: jest.fn(),
85
+ debug: jest.fn(),
86
+ };
87
+ // When
88
+ const config = new command_bus_config_1.default({
89
+ redisUrl: 'redis://custom:6379',
90
+ logger: customLogger,
91
+ concurrency: 20,
92
+ maxAttempts: 10,
93
+ backoffDelay: 10000,
94
+ queueMode: 'lifo',
95
+ commandLog: '/custom/log/path',
96
+ });
97
+ // Then
98
+ expect(config.redisUrl).toBe('redis://custom:6379');
99
+ expect(config.logger).toBe(customLogger);
100
+ expect(config.concurrency).toBe(20);
101
+ expect(config.maxAttempts).toBe(10);
102
+ expect(config.backoffDelay).toBe(10000);
103
+ expect(config.queueMode).toBe('lifo');
104
+ expect(config.commandLog).toBe('/custom/log/path');
105
+ });
106
+ it('powinno prawidłowo parsować liczby', () => {
107
+ // Given
108
+ process.env.COMMAND_BUS_CONCURRENCY = 'invalid';
109
+ process.env.COMMAND_BUS_MAX_ATTEMPTS = 'not-a-number';
110
+ process.env.COMMAND_BUS_BACKOFF_DELAY = '';
111
+ // When
112
+ const config = new command_bus_config_1.default();
113
+ // Then - powinno użyć domyślnych wartości przy błędnym parsowaniu
114
+ expect(config.concurrency).toBe(1);
115
+ expect(config.maxAttempts).toBe(3);
116
+ expect(config.backoffDelay).toBe(2000);
117
+ });
118
+ it('powinno prawidłowo parsować queue mode', () => {
119
+ // Given
120
+ process.env.COMMAND_BUS_QUEUE_MODE = 'invalid-mode';
121
+ // When
122
+ const config = new command_bus_config_1.default();
123
+ // Then - powinno użyć domyślnej wartości przy nieprawidłowym trybie
124
+ expect(config.queueMode).toBe('fifo');
125
+ });
126
+ });
127
+ describe('walidacja', () => {
128
+ it('powinno zwalidować konfigurację przy tworzeniu', () => {
129
+ // Given
130
+ process.env.REDIS_URL = 'redis://valid:6379';
131
+ process.env.COMMAND_BUS_CONCURRENCY = '5';
132
+ // When & Then
133
+ expect(() => new command_bus_config_1.default()).not.toThrow();
134
+ });
135
+ it('powinno rzucić błąd przy nieprawidłowej liczbie workerów', () => {
136
+ // Given
137
+ process.env.COMMAND_BUS_CONCURRENCY = '0';
138
+ // When & Then
139
+ expect(() => new command_bus_config_1.default()).toThrow('concurrency must be at least 1');
140
+ });
141
+ it('powinno rzucić błąd przy nieprawidłowej liczbie prób', () => {
142
+ // Given
143
+ process.env.COMMAND_BUS_MAX_ATTEMPTS = '0';
144
+ // When & Then
145
+ expect(() => new command_bus_config_1.default()).toThrow('maxAttempts must be at least 1');
146
+ });
147
+ it('powinno rzucić błąd przy zbyt małym backoff delay', () => {
148
+ // Given
149
+ process.env.COMMAND_BUS_BACKOFF_DELAY = '99';
150
+ // When & Then
151
+ expect(() => new command_bus_config_1.default()).toThrow('backoffDelay must be at least 100ms');
152
+ });
153
+ it('powinno rzucić błąd przy nieprawidłowym queue mode', () => {
154
+ // Given
155
+ const config = new command_bus_config_1.default();
156
+ config.queueMode = 'invalid';
157
+ // When & Then
158
+ expect(() => config.validateCommandBusConfig()).toThrow("queueMode must be either 'fifo' or 'lifo'");
159
+ });
160
+ });
161
+ });
162
+ //# sourceMappingURL=command-bus-config.spec.js.map
@@ -0,0 +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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"}
@@ -0,0 +1 @@
1
+ export { default as CommandBusConfig } from './command-bus-config';
@@ -0,0 +1,9 @@
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.CommandBusConfig = void 0;
7
+ var command_bus_config_1 = require("./command-bus-config");
8
+ Object.defineProperty(exports, "CommandBusConfig", { enumerable: true, get: function () { return __importDefault(command_bus_config_1).default; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/command-bus/config/index.ts"],"names":[],"mappings":";;;;;;AAAA,2DAAmE;AAA1D,uIAAA,OAAO,OAAoB"}
@@ -0,0 +1,79 @@
1
+ import type Command from './command';
2
+ import type CommandBusConfig from './config/command-bus-config';
3
+ /**
4
+ * Command Bus wykorzystujący BullMQ
5
+ * Obsługuje komendy w relacji 1:1 (jedna komenda = jeden handler)
6
+ */
7
+ export default class CommandBus {
8
+ private config;
9
+ /**
10
+ * Handlery komend - tylko jeden per typ komendy
11
+ */
12
+ private commandHandlers;
13
+ /**
14
+ * Logger
15
+ */
16
+ private logger;
17
+ /**
18
+ * QueueManager - zarządza kolejkami i cache
19
+ */
20
+ private queueManager;
21
+ /**
22
+ * WorkerOrchestrator - zarządza workerami
23
+ */
24
+ private workerOrchestrator;
25
+ /**
26
+ * JobProcessor - przetwarza joby
27
+ */
28
+ private jobProcessor;
29
+ /**
30
+ * RpcCoordinator - zarządza pending RPC calls
31
+ */
32
+ private rpcCoordinator;
33
+ /**
34
+ * JobOptionsBuilder - buduje opcje dla jobów BullMQ
35
+ */
36
+ private jobOptionsBuilder;
37
+ /**
38
+ * CommandLogger - opcjonalny logger komend do plików
39
+ */
40
+ private commandLogger?;
41
+ /**
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
+ constructor(config: CommandBusConfig);
54
+ /**
55
+ * Wysyła komendę do kolejki
56
+ * @param command - Komenda do wysłania
57
+ */
58
+ dispatch(command: Command): Promise<void>;
59
+ /**
60
+ * Rejestruje handler dla komendy
61
+ * @param commandDefinition - Definicja komendy (klasa)
62
+ * @param handler - Handler do obsługi komendy
63
+ */
64
+ handle<T extends Command>(commandDefinition: new (...args: any[]) => T, handler: (command: T) => unknown | Promise<unknown>): void;
65
+ /**
66
+ * Synchroniczne wywołanie komendy z oczekiwaniem na wynik (RPC)
67
+ * Każde wywołanie tworzy unikalną kolejkę odpowiedzi która jest automatycznie kasowana
68
+ * @param command - Komenda do wykonania
69
+ * @param timeout - Timeout w milisekundach (domyślnie 30s)
70
+ */
71
+ call<T = unknown>(command: Command, timeout?: number): Promise<T>;
72
+ /**
73
+ * Zamyka wszystkie połączenia
74
+ */
75
+ close(): Promise<void>;
76
+ }
77
+ export { default as CommandBus } from './index';
78
+ export { default as Command } from './command';
79
+ export { default as CommandBusConfig } from './config/command-bus-config';
@@ -0,0 +1,169 @@
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
+ exports.CommandBusConfig = exports.Command = exports.CommandBus = void 0;
16
+ const ioredis_1 = require("ioredis");
17
+ const queue_1 = require("./queue");
18
+ const worker_1 = require("./worker");
19
+ const job_1 = require("./job");
20
+ const rpc_1 = require("./rpc");
21
+ const logging_1 = require("./logging");
22
+ /**
23
+ * Command Bus wykorzystujący BullMQ
24
+ * Obsługuje komendy w relacji 1:1 (jedna komenda = jeden handler)
25
+ */
26
+ class CommandBus {
27
+ constructor(config) {
28
+ this.config = config;
29
+ /**
30
+ * Handlery komend - tylko jeden per typ komendy
31
+ */
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ this.commandHandlers = {};
34
+ // Używaj loggera z konfiguracji (już zawiera filtrowanie według logLevel)
35
+ this.logger = config.logger;
36
+ this.logger.debug('Konstruktor CommandBus', {
37
+ config: this.config,
38
+ timestamp: new Date().toISOString(),
39
+ });
40
+ // Utwórz Redis connections
41
+ // QueueManager - standardowe opcje Redis (bez maxRetriesPerRequest: null)
42
+ this.queueRedisConnection = new ioredis_1.Redis(this.config.getRedisOptions());
43
+ // WorkerOrchestrator - opcje z maxRetriesPerRequest: null dla Worker compatibility
44
+ this.workerRedisConnection = new ioredis_1.Redis(this.config.getRedisOptionsForWorker());
45
+ // RpcCoordinator - opcje z maxRetriesPerRequest: null dla Worker compatibility
46
+ this.rpcRedisConnection = new ioredis_1.Redis(this.config.getRedisOptionsForWorker());
47
+ // Utwórz QueueManager z własnym Redis connection
48
+ this.queueManager = new queue_1.QueueManager(this.queueRedisConnection, this.logger);
49
+ // Utwórz RpcCoordinator z własnym Redis connection
50
+ this.rpcCoordinator = new rpc_1.RpcCoordinator(this.logger, this.rpcRedisConnection, this.queueManager);
51
+ // Utwórz JobOptionsBuilder
52
+ this.jobOptionsBuilder = new job_1.JobOptionsBuilder(this.config);
53
+ // Utwórz CommandLogger jeśli commandLog jest skonfigurowane
54
+ if (this.config.commandLog) {
55
+ this.commandLogger = new logging_1.CommandLogger(this.config.commandLog, this.logger);
56
+ }
57
+ // Utwórz JobProcessor
58
+ this.jobProcessor = new job_1.JobProcessor(this.commandHandlers, this.queueManager, this.logger, this.jobOptionsBuilder, this.commandLogger);
59
+ // Utwórz WorkerOrchestrator z własnym Redis connection
60
+ this.workerOrchestrator = new worker_1.WorkerOrchestrator(this.workerRedisConnection, this.jobProcessor, this.config.concurrency, this.config.maxAttempts, this.logger);
61
+ this.logger.debug('CommandBus gotowy do użycia', {
62
+ timestamp: new Date().toISOString(),
63
+ });
64
+ }
65
+ /**
66
+ * Wysyła komendę do kolejki
67
+ * @param command - Komenda do wysłania
68
+ */
69
+ dispatch(command) {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ var _a;
72
+ const commandName = command.__name;
73
+ const commandId = command.__id;
74
+ const timestamp = new Date().toISOString();
75
+ this.logger.debug('Otrzymano komendę do wysłania', {
76
+ commandName,
77
+ commandId,
78
+ timestamp,
79
+ });
80
+ const queue = this.queueManager.createQueue(commandName);
81
+ const job = yield queue.add(commandName, command, this.jobOptionsBuilder.buildStandardOptions());
82
+ this.logger.debug('Komenda dodana do kolejki', {
83
+ commandName,
84
+ commandId,
85
+ jobId: job.id,
86
+ queuePosition: ((_a = job.opts) === null || _a === void 0 ? void 0 : _a.delay) ? 'delayed' : 'active',
87
+ timestamp,
88
+ });
89
+ });
90
+ }
91
+ /**
92
+ * Rejestruje handler dla komendy
93
+ * @param commandDefinition - Definicja komendy (klasa)
94
+ * @param handler - Handler do obsługi komendy
95
+ */
96
+ handle(
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ commandDefinition, handler) {
99
+ const commandName = commandDefinition.name;
100
+ if (this.commandHandlers[commandName]) {
101
+ throw new Error(`Handler dla komendy ${commandName} już istnieje`);
102
+ }
103
+ this.commandHandlers[commandName] = handler;
104
+ this.workerOrchestrator.registerWorker(commandName);
105
+ this.logger.debug(`Zarejestrowano handler dla komendy ${commandName}`);
106
+ }
107
+ /**
108
+ * Synchroniczne wywołanie komendy z oczekiwaniem na wynik (RPC)
109
+ * Każde wywołanie tworzy unikalną kolejkę odpowiedzi która jest automatycznie kasowana
110
+ * @param command - Komenda do wykonania
111
+ * @param timeout - Timeout w milisekundach (domyślnie 30s)
112
+ */
113
+ call(command_2) {
114
+ return __awaiter(this, arguments, void 0, function* (command, timeout = 30000) {
115
+ var _a;
116
+ const commandName = command.__name;
117
+ const correlationId = command.__id;
118
+ const timestamp = new Date().toISOString();
119
+ const replyQueueName = `rpc-reply-${correlationId}`;
120
+ this.logger.debug('Rozpoczynam wywołanie RPC', {
121
+ commandName,
122
+ commandId: correlationId,
123
+ replyQueue: replyQueueName,
124
+ timeout: `${timeout}ms`,
125
+ timestamp,
126
+ });
127
+ // Zarejestruj pending call (tworzy unikalną kolejkę i worker)
128
+ const promise = this.rpcCoordinator.registerCall(correlationId, commandName, timeout);
129
+ // Wyślij komendę do kolejki z metadanymi RPC
130
+ const queue = this.queueManager.createQueue(commandName);
131
+ const commandWithMetadata = this.rpcCoordinator.prepareRpcCommand(command, replyQueueName);
132
+ const job = yield queue.add(commandName, commandWithMetadata, this.jobOptionsBuilder.buildStandardOptions());
133
+ this.logger.debug('Komenda RPC dodana do kolejki', {
134
+ commandName,
135
+ commandId: correlationId,
136
+ jobId: job.id,
137
+ replyQueue: replyQueueName,
138
+ queuePosition: ((_a = job.opts) === null || _a === void 0 ? void 0 : _a.delay) ? 'delayed' : 'active',
139
+ timestamp,
140
+ });
141
+ return promise;
142
+ });
143
+ }
144
+ /**
145
+ * Zamyka wszystkie połączenia
146
+ */
147
+ close() {
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ this.logger.debug('Zamykanie połączeń CommandBus', {
150
+ timestamp: new Date().toISOString(),
151
+ });
152
+ // Zamknij wszystkie workery
153
+ yield this.workerOrchestrator.closeAll();
154
+ // Zamknij pozostałe Redis connections
155
+ yield this.queueRedisConnection.quit();
156
+ yield this.workerRedisConnection.quit();
157
+ yield this.rpcRedisConnection.quit();
158
+ });
159
+ }
160
+ }
161
+ exports.default = CommandBus;
162
+ // Re-eksporty dla spójności z pattern config
163
+ var index_1 = require("./index");
164
+ Object.defineProperty(exports, "CommandBus", { enumerable: true, get: function () { return __importDefault(index_1).default; } });
165
+ var command_1 = require("./command");
166
+ Object.defineProperty(exports, "Command", { enumerable: true, get: function () { return __importDefault(command_1).default; } });
167
+ var command_bus_config_1 = require("./config/command-bus-config");
168
+ Object.defineProperty(exports, "CommandBusConfig", { enumerable: true, get: function () { return __importDefault(command_bus_config_1).default; } });
169
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/command-bus/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Moduł przetwarzania jobów BullMQ
3
+ * Eksportuje JobProcessor i JobOptionsBuilder
4
+ */
5
+ export { default as JobProcessor } from './job-processor';
6
+ export { default as JobOptionsBuilder } from './job-options-builder';
@@ -0,0 +1,15 @@
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.JobOptionsBuilder = exports.JobProcessor = void 0;
7
+ /**
8
+ * Moduł przetwarzania jobów BullMQ
9
+ * Eksportuje JobProcessor i JobOptionsBuilder
10
+ */
11
+ var job_processor_1 = require("./job-processor");
12
+ Object.defineProperty(exports, "JobProcessor", { enumerable: true, get: function () { return __importDefault(job_processor_1).default; } });
13
+ var job_options_builder_1 = require("./job-options-builder");
14
+ Object.defineProperty(exports, "JobOptionsBuilder", { enumerable: true, get: function () { return __importDefault(job_options_builder_1).default; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/command-bus/job/index.ts"],"names":[],"mappings":";;;;;;AAAA;;;GAGG;AACH,iDAA0D;AAAjD,8HAAA,OAAO,OAAgB;AAChC,6DAAqE;AAA5D,yIAAA,OAAO,OAAqB"}
@@ -0,0 +1,24 @@
1
+ import type CommandBusConfig from '../config/command-bus-config';
2
+ import type { JobOptions } from '../types';
3
+ /**
4
+ * JobOptionsBuilder - buduje opcje dla jobów BullMQ
5
+ *
6
+ * Odpowiedzialność: Enkapsulacja konfiguracji job options
7
+ * Wydzielone z CommandBus zgodnie z SRP (Single Responsibility Principle)
8
+ */
9
+ export default class JobOptionsBuilder {
10
+ private readonly config;
11
+ constructor(config: CommandBusConfig);
12
+ /**
13
+ * Buduje standardowe opcje dla jobów BullMQ
14
+ * Memory optimization: agresywniejsze usuwanie completed/failed jobs z Redis
15
+ * @returns Opcje dla standardowych jobów komend
16
+ */
17
+ buildStandardOptions(): JobOptions;
18
+ /**
19
+ * Buduje opcje dla RPC reply jobs
20
+ * Memory optimization: bardzo agresywne usuwanie - reply jobs są natychmiast przetwarzane
21
+ * @returns Opcje dla jobów odpowiedzi RPC
22
+ */
23
+ buildRpcReplyOptions(): JobOptions;
24
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * JobOptionsBuilder - buduje opcje dla jobów BullMQ
5
+ *
6
+ * Odpowiedzialność: Enkapsulacja konfiguracji job options
7
+ * Wydzielone z CommandBus zgodnie z SRP (Single Responsibility Principle)
8
+ */
9
+ class JobOptionsBuilder {
10
+ constructor(config) {
11
+ this.config = config;
12
+ }
13
+ /**
14
+ * Buduje standardowe opcje dla jobów BullMQ
15
+ * Memory optimization: agresywniejsze usuwanie completed/failed jobs z Redis
16
+ * @returns Opcje dla standardowych jobów komend
17
+ */
18
+ buildStandardOptions() {
19
+ return {
20
+ // Memory optimization: zachowaj tylko ostatnie 100 completed jobs
21
+ // usuń starsze niż 60s (było: true - usuwaj natychmiast)
22
+ removeOnComplete: {
23
+ count: 100,
24
+ age: 60, // sekundy
25
+ },
26
+ // Memory optimization: zachowaj więcej failed jobs (debugging)
27
+ // ale usuń starsze niż 1h (było: 24h)
28
+ removeOnFail: {
29
+ count: 500, // było 100
30
+ age: 3600, // 1h (było 24h)
31
+ },
32
+ attempts: this.config.maxAttempts,
33
+ backoff: {
34
+ type: 'exponential',
35
+ delay: this.config.backoffDelay,
36
+ },
37
+ lifo: this.config.queueMode === 'lifo',
38
+ };
39
+ }
40
+ /**
41
+ * Buduje opcje dla RPC reply jobs
42
+ * Memory optimization: bardzo agresywne usuwanie - reply jobs są natychmiast przetwarzane
43
+ * @returns Opcje dla jobów odpowiedzi RPC
44
+ */
45
+ buildRpcReplyOptions() {
46
+ return {
47
+ // Memory optimization: RPC replies są natychmiast przetwarzane
48
+ // Usuń completed reply jobs bardzo szybko (30s zamiast rpcReplyTtl)
49
+ removeOnComplete: {
50
+ age: 30, // sekundy (było: rpcReplyTtl / 1000 = 300s)
51
+ count: 10, // było 100 - tylko ostatnie 10 dla debugowania
52
+ },
53
+ // Memory optimization: failed reply jobs też usuń szybciej
54
+ removeOnFail: {
55
+ age: 300, // 5 minut (było 3600 = 1h)
56
+ count: 50, // było 100
57
+ },
58
+ attempts: this.config.maxAttempts,
59
+ backoff: {
60
+ type: 'exponential',
61
+ delay: this.config.backoffDelay,
62
+ },
63
+ lifo: false, // RPC reply zawsze używa FIFO
64
+ };
65
+ }
66
+ }
67
+ exports.default = JobOptionsBuilder;
68
+ //# sourceMappingURL=job-options-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-options-builder.js","sourceRoot":"","sources":["../../../src/command-bus/job/job-options-builder.ts"],"names":[],"mappings":";;AAGA;;;;;GAKG;AACH,MAAqB,iBAAiB;IACpC,YAA6B,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;IAAG,CAAC;IAEzD;;;;OAIG;IACI,oBAAoB;QACzB,OAAO;YACL,kEAAkE;YAClE,yDAAyD;YACzD,gBAAgB,EAAE;gBAChB,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,EAAE,EAAE,UAAU;aACpB;YACD,+DAA+D;YAC/D,sCAAsC;YACtC,YAAY,EAAE;gBACZ,KAAK,EAAE,GAAG,EAAE,WAAW;gBACvB,GAAG,EAAE,IAAI,EAAE,gBAAgB;aAC5B;YACD,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACjC,OAAO,EAAE;gBACP,IAAI,EAAE,aAAsB;gBAC5B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;aAChC;YACD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,MAAM;SACvC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,oBAAoB;QACzB,OAAO;YACL,+DAA+D;YAC/D,oEAAoE;YACpE,gBAAgB,EAAE;gBAChB,GAAG,EAAE,EAAE,EAAE,4CAA4C;gBACrD,KAAK,EAAE,EAAE,EAAE,+CAA+C;aAC3D;YACD,2DAA2D;YAC3D,YAAY,EAAE;gBACZ,GAAG,EAAE,GAAG,EAAE,2BAA2B;gBACrC,KAAK,EAAE,EAAE,EAAE,WAAW;aACvB;YACD,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACjC,OAAO,EAAE;gBACP,IAAI,EAAE,aAAsB;gBAC5B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;aAChC;YACD,IAAI,EAAE,KAAK,EAAE,8BAA8B;SAC5C,CAAC;IACJ,CAAC;CACF;AAzDD,oCAyDC"}
@@ -0,0 +1 @@
1
+ export {};